【问题标题】:Absolute Positioning Trouble with Dropdown Submenu下拉子菜单的绝对定位问题
【发布时间】:2019-04-16 06:10:23
【问题描述】:

我无法正确定位绝对定位的子菜单。此外,填充似乎有问题,我无法弄清楚。

代码在这里:

https://codepen.io/CusterMonroe/pen/WWZZEV

.med-max-show li:not(.dropdown){
list-style-type: none;
background:#222F37;
padding: 3px 5px 3px 5px;
border-top: 1px solid black;
}

.med-max-show li a{
text-decoration: none;
color: white;
display: block;
white-space: nowrap;
}

.med-max-show{
text-align: center;
padding: 0 0 1px;
background-repeat:repeat-x;
background-image:-webkit-linear-gradient(to bottom,#3c3c3c 0,#222 100%);
background-image:-o-linear-gradient(to bottom,#3c3c3c 0,#222 100%);
background-image:-webkit-gradient(linear,left top, left bottom,color-stop(0, #3c3c3c),to(#222));
background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);
background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);
background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);
border-top: 2px solid gold;
border-bottom: 2px solid gold;
}

.med-max-show > ul{
margin: 0 auto;
width: 70%;
}

.med-max-show .dropdown{
display: inline-block;
width: 30%;
background-repeat:repeat-x;
background-image:-webkit-linear-gradient(to bottom,#3c3c3c 0,#222 100%);
background-image:-o-linear-gradient(to bottom,#3c3c3c 0,#222 100%);
background-image:-webkit-gradient(linear,left top, left bottom,color-stop(0, #3c3c3c),to(#222));
background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);
background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);
background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);
text-align: center;
padding: 6px 0 6px;
margin-top: 1px;
position: relative;
}

.med-max-show .dropdown:hover > a{
color: gold;
}

.med-max-show .dropdown-menu{
border-top: 1px solid black;
position: absolute;
top: 30px;
background: #222F37;
padding: 0px 0px 1px;
color: #fff;
font-size: 10pt;
width: 100%;
visibility: hidden;
-webkit-transition-property: visibility;
-o-transition-property: visibility;
transition-property: visibility;
-webkit-transition-duration: 1s;
     -o-transition-duration: 1s;
        transition-duration: 1s;
-webkit-transition-timing-function: ease-in-out;
     -o-transition-timing-function: ease-in-out;
        transition-timing-function: ease-in-out;
z-index: 99999999999999999 !important;
opacity: .95;
-webkit-box-shadow: 4px 3px 5px rgba(0,0,0,0.6);
        box-shadow: 4px 3px 5px rgba(0,0,0,0.6)
}

.med-max-show .dropdown:hover > ul{
visibility: visible;
}

.med-max-show .dropdown-menu a{
padding: 4px 50px 4px 50px;
margin: 1px 0 1px;
}

.med-max-show .dropdown-menu a:hover{
background-repeat:repeat-x;
background-image:-webkit-linear-gradient(to bottom,#f1ecec 0,#fffbfb 100%);
background-image:-o-linear-gradient(to bottom,#f1ecec 0,#fffbfb 100%);
background-image:-webkit-gradient(linear,left top, left bottom,color-stop(0, #f1ecec),to(#fffbfb));
background-image:-webkit-linear-gradient(top,#f1ecec 0,#fffbfb 100%);
background-image:-o-linear-gradient(top,#f1ecec 0,#fffbfb 100%);
background-image:linear-gradient(to bottom,#f1ecec 0,#fffbfb 100%);
color: black;
}

.submenu-left{
position: relative;
display: block;
}

.submenu-right{
position: relative;
display: block;
}

.submenu-left ul{
position: absolute;
width: 100%;
right: 100%;
top: -1px;
visibility: hidden;
-webkit-transition-property: visibility;
-o-transition-property: visibility;
transition-property: visibility;
-webkit-transition-duration: 1s;
     -o-transition-duration: 1s;
        transition-duration: 1s;
display: inline-block;
}

.submenu-right ul{
position: absolute;
left: 100%;
top: -1px;
width: 108%;
margin-left: -23px;
visibility: hidden;
-webkit-transition-property: visibility;
-o-transition-property: visibility;
transition-property: visibility;
-webkit-transition-duration: 1s;
     -o-transition-duration: 1s;
        transition-duration: 1s;
display: block;
}

.submenu-right ul li a{
width: 100%:
}

.submenu-left > ul::after {
  content: "";
  position: absolute;
  height: 15px;
  width: 70%;
  left: 15%;
  -webkit-box-shadow: 0 15px 30px black;
          box-shadow: 0 15px 30px black;
  bottom: 10px;
  z-index: -1;
}

.submenu-right > ul::after {
  content: "";
  position: absolute;
  height: 15px;
  width: 70%;
  left: 15%;
  -webkit-box-shadow: 0 15px 30px black;
          box-shadow: 0 15px 30px black;
  bottom: 10px;
  z-index: -1;
}

.submenu-left ul li{
border-top: 2px solid black;
padding-bottom: 3px;
}

.submenu-right ul li{
border-top: 2px solid black;
padding-bottom: 3px;
}

.submenu-left:hover > ul{
visibility: visible;
}

.submenu-right:hover > ul{
visibility: visible;
}
        <li class="dropdown"><a href="javascript:void(0);">Custerism</a>
            <ul class="dropdown-menu">
                <li class="submenu-right"><a 
       href="javascript:void(0);">PHILOSOPHY</a>
                    <ul>
                        <li><a href="javascript:void(0);">CUSTERISM</a></li>
                    </ul>
                </li>
                <li><a href="javascript:void(0);">BEEKIN</a></li>
                <li class="submenu-right"><a href="javascript:void(0);">HELP 
         TOPICS</a>
                    <ul>
                        <li><a href="javascript:void(0);">DRAGONSPEAK</a></li>
                        <li><a href="javascript:void(0);">PATCHES</a></li>
                        <li><a href="javascript:void(0);">GENERAL 
        KNOWLEDGE</a></li>
                    </ul>
                </li>
                <li><a href="javascript:void(0);">NEWS</a></li>

我很确定这与我的 CSS 有关。我就是不知道是什么。

【问题讨论】:

    标签: html css drop-down-menu position absolute


    【解决方案1】:

    评论了margin-left: -23px;并添加了padding: 0;.submenu-right ul

    .med-max-show li:not(.dropdown) {
      list-style-type: none;
      background: #222F37;
      padding: 3px 5px 3px 5px;
      border-top: 1px solid black;
    }
    
    .med-max-show li a {
      text-decoration: none;
      color: white;
      display: block;
      white-space: nowrap;
    }
    
    .med-max-show {
      text-align: center;
      padding: 0 0 1px;
      background-repeat: repeat-x;
      background-image: -webkit-linear-gradient(to bottom, #3c3c3c 0, #222 100%);
      background-image: -o-linear-gradient(to bottom, #3c3c3c 0, #222 100%);
      background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #3c3c3c), to(#222));
      background-image: -webkit-linear-gradient(top, #3c3c3c 0, #222 100%);
      background-image: -o-linear-gradient(top, #3c3c3c 0, #222 100%);
      background-image: linear-gradient(to bottom, #3c3c3c 0, #222 100%);
      border-top: 2px solid gold;
      border-bottom: 2px solid gold;
    }
    
    .med-max-show>ul {
      margin: 0 auto;
      width: 70%;
    }
    
    .med-max-show .dropdown {
      display: inline-block;
      width: 30%;
      background-repeat: repeat-x;
      background-image: -webkit-linear-gradient(to bottom, #3c3c3c 0, #222 100%);
      background-image: -o-linear-gradient(to bottom, #3c3c3c 0, #222 100%);
      background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #3c3c3c), to(#222));
      background-image: -webkit-linear-gradient(top, #3c3c3c 0, #222 100%);
      background-image: -o-linear-gradient(top, #3c3c3c 0, #222 100%);
      background-image: linear-gradient(to bottom, #3c3c3c 0, #222 100%);
      text-align: center;
      padding: 6px 0 6px;
      margin-top: 1px;
      position: relative;
    }
    
    .med-max-show .dropdown:hover>a {
      color: gold;
    }
    
    .med-max-show .dropdown-menu {
      border-top: 1px solid black;
      position: absolute;
      top: 30px;
      background: #222F37;
      padding: 0px 0px 1px;
      color: #fff;
      font-size: 10pt;
      width: 100%;
      visibility: hidden;
      -webkit-transition-property: visibility;
      -o-transition-property: visibility;
      transition-property: visibility;
      -webkit-transition-duration: 1s;
      -o-transition-duration: 1s;
      transition-duration: 1s;
      -webkit-transition-timing-function: ease-in-out;
      -o-transition-timing-function: ease-in-out;
      transition-timing-function: ease-in-out;
      z-index: 99999999999999999 !important;
      opacity: .95;
      -webkit-box-shadow: 4px 3px 5px rgba(0, 0, 0, 0.6);
      box-shadow: 4px 3px 5px rgba(0, 0, 0, 0.6)
    }
    
    .med-max-show .dropdown:hover>ul {
      visibility: visible;
    }
    
    .med-max-show .dropdown-menu a {
      padding: 4px 50px 4px 50px;
      margin: 1px 0 1px;
    }
    
    .med-max-show .dropdown-menu a:hover {
      background-repeat: repeat-x;
      background-image: -webkit-linear-gradient(to bottom, #f1ecec 0, #fffbfb 100%);
      background-image: -o-linear-gradient(to bottom, #f1ecec 0, #fffbfb 100%);
      background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #f1ecec), to(#fffbfb));
      background-image: -webkit-linear-gradient(top, #f1ecec 0, #fffbfb 100%);
      background-image: -o-linear-gradient(top, #f1ecec 0, #fffbfb 100%);
      background-image: linear-gradient(to bottom, #f1ecec 0, #fffbfb 100%);
      color: black;
    }
    
    .submenu-left {
      position: relative;
      display: block;
    }
    
    .submenu-right {
      position: relative;
      display: block;
    }
    
    .submenu-left ul {
      position: absolute;
      width: 100%;
      right: 100%;
      top: -1px;
      visibility: hidden;
      -webkit-transition-property: visibility;
      -o-transition-property: visibility;
      transition-property: visibility;
      -webkit-transition-duration: 1s;
      -o-transition-duration: 1s;
      transition-duration: 1s;
      display: inline-block;
    }
    
    .submenu-right ul {
      position: absolute;
      left: 100%;
      top: -1px;
      width: 108%;
      /* margin-left: -23px; */
      visibility: hidden;
      -webkit-transition-property: visibility;
      -o-transition-property: visibility;
      transition-property: visibility;
      -webkit-transition-duration: 1s;
      -o-transition-duration: 1s;
      transition-duration: 1s;
      display: block;
      padding: 0;
    }
    
    .submenu-right ul li a {
      width: 100%:
    }
    
    .submenu-left>ul::after {
      content: "";
      position: absolute;
      height: 15px;
      width: 70%;
      left: 15%;
      -webkit-box-shadow: 0 15px 30px black;
      box-shadow: 0 15px 30px black;
      bottom: 10px;
      z-index: -1;
    }
    
    .submenu-right>ul::after {
      content: "";
      position: absolute;
      height: 15px;
      width: 70%;
      left: 15%;
      -webkit-box-shadow: 0 15px 30px black;
      box-shadow: 0 15px 30px black;
      bottom: 10px;
      z-index: -1;
    }
    
    .submenu-left ul li {
      border-top: 2px solid black;
      padding-bottom: 3px;
    }
    
    .submenu-right ul li {
      border-top: 2px solid black;
      padding-bottom: 3px;
    }
    
    .submenu-left:hover>ul {
      visibility: visible;
    }
    
    .submenu-right:hover>ul {
      visibility: visible;
    }
    <nav class="med-max-show">
      <ul>
        <li class="dropdown"><a href="javascript:void(0);">In Character</a>
          <ul class="dropdown-menu">
            <li><a href="javascript:void(0);">PROFILE</a></li>
            <li><a href="javascript:void(0);">JOURNAL</a></li>
            <li class="submenu-left"><a href="javascript:void(0);">JOIN ME</a>
              <ul>
                <li><a href="javascript:void(0);">RP FORUM</a></li>
              </ul>
            </li>
          </ul>
        </li>
        <li class="dropdown"><a href="">Out of Character</a>
          <ul class="dropdown-menu">
            <li><a href="javascript:void(0);">HANGOUTS</a></li>
            <li><a href="javascript:void(0);">GUESTBOOK</a></li>
          </ul>
        </li>
        <li class="dropdown"><a href="javascript:void(0);">Custerism</a>
          <ul class="dropdown-menu">
            <li class="submenu-right"><a href="javascript:void(0);">PHILOSOPHY</a>
              <ul>
                <li><a href="javascript:void(0);">CUSTERISM</a></li>
              </ul>
            </li>
            <li><a href="javascript:void(0);">BEEKIN</a></li>
            <li class="submenu-right"><a href="javascript:void(0);">HELP TOPICS</a>
              <ul>
                <li><a href="javascript:void(0);">DRAGONSPEAK</a></li>
                <li><a href="javascript:void(0);">PATCHES</a></li>
                <li><a href="javascript:void(0);">GENERAL KNOWLEDGE</a></li>
              </ul>
            </li>
            <li><a href="javascript:void(0);">NEWS</a></li>
          </ul>
        </li>
      </ul>
    </nav>

    【讨论】:

    • 我想我爱你,但我害怕什么!?!?!??!?!谢谢!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (=
    • 我有一个问题。为什么要填充问题?为什么保证金不是问题?是不是因为相对标签里面的绝对标签变成了相对标签的盒子模型中的内容的一部分?
    • padding-inline-start: 40px; css 被应用到 ul 标签以覆盖它,我使用了 padding
    【解决方案2】:

    João Lucas 的回答差不多

    .submenu-right ul {
      padding-inline-start: 0;
    }
    

    .med-max-show > ul{
      padding-inline-start: 0;
    }
    

    【讨论】:

    • 这些在 Chrome 中工作得很好,谢谢!但是当我检查 Internet Explorer 和 Edge 时,它​​们不起作用。这就是为什么我必须添加诸如 108% 宽度和 -23 边距之类的技巧。
    • 再次感谢,我的伙计,花时间回答我的问题,这冒犯了足够多的人投反对票。 ;p
    【解决方案3】:

    我没有时间搜索并告诉你“为什么”会发生这种情况,但与用户代理有关。

    此外,只需将此 CSS 代码添加到您的文件中:

    .submenu-right ul {
      padding-inline-start: 0;
    }

    这将重置用户代理(可能)创作的样式。这样,您将拥有所需的样式。

    除此之外,我建议您学习和使用浏览器开发工具,因为有了这些知识,我能够轻松找到并消除错误。

    【讨论】:

    • 这确实有帮助,但 100% 向左,子菜单位于相对父元素上方。
    • 您使用哪个浏览器来查找错误?我正在使用 Chrome。
    • 我也是。我正在使用 chrome。
    • 我将观看一段 Youtube 视频,以更好地了解 Chrome 控制台。有什么好的参考吗?谢谢! (=
    • @Custer 这个官方频道似乎很完美,他们提供了很多关于此事的视频:youtube.com/watch?time_continue=6&v=H0XScE08hy8。在此之前,请确保您知道什么是盒子模型、DOM、BOM 等。
    猜你喜欢
    • 2012-09-06
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多