【问题标题】:Padding has unexpected effect on drop down menu with absolute postioning填充对具有绝对定位的下拉菜单有意想不到的影响
【发布时间】:2013-01-14 15:19:55
【问题描述】:

我有 #header 具有以下 css 属性的 div:

#header{
    background-image:url('img/header-bkg-tile.png');
    background-repeat:repeat-x;
}

#header-container 里面有这个属性:

#header-container{
    height:63px;
    width: 1120px;
    position: relative;
    left : 50%;
    margin-left: -560px;
    padding-top:19px;
}

结构是这样的,以防万一:

<div id="header">
    <div id="header">
    </div>
</div>

#header 中,您有一个图像和一个&lt;ul&gt;,一切都按预期工作。

我的问题是在创建这个 simple dropdow 时。

问题本身是我无法到达.sub_menu 的下部,在您进入倒数第二个元素后,下拉菜单会回到“静止位置”。

你可以看到live example here

我已经隔离了这个问题,它与我用来垂直居中图像的填充有关:padding-top:19px;

下拉菜单的相关代码如下:

/* 
    LEVEL ONE
*/
ul.dropdown                         { position: relative; }
ul.dropdown li                      { float: left; zoom: 1; }
ul.dropdown a:hover                 { color: #000; }
ul.dropdown a:active                { color: #ffa500; }
ul.dropdown li a                    { display: block; padding: 4px 8px;}
ul.dropdown li:last-child a         { border-right: none; } /* Doesn't work in IE */
ul.dropdown li.hover,
ul.dropdown li:hover                { position: relative; }
ul.dropdown li.hover a              { color: black; }

/* 
    LEVEL TWO
*/
ul.dropdown ul                      { width: 220px; visibility: hidden; position: absolute; top: 100%; left: 0;}
ul.dropdown ul li                   { font-weight: normal; background: #C8E4ED; color: #000; 
                                      border-bottom: 1px solid #ccc; float: none; }

                                    /* IE 6 & 7 Needs Inline Block */
ul.dropdown ul li a                 { border-right: none; width: 100%; display: inline-block; } 

我尝试过各种各样的事情,但老实说,我或多或少都在猜测,我想了解问题所在。

虽然向 LEVEL TWO 元素添加负填充可以解决问题,但它并没有因此任何指针都可以提供帮助。

编辑:标题标记如下:

 <div id="header">
     <div id="header-container">
         <div id="header-all">
             <a href="#"><img id="logo" src="<?php bloginfo('template_url'); ?>/img/logo.png" alt="logo uruware"/></a>
             <ul id="header-elements" class="dropdown">
                 <li><a href="#" class="active-selection">Inicio</a>
                  <ul class="sub_menu">
                        <li><a href="#1">UCFE</a></li>
                        <li><a href="#2">Trx Server</a></li>
                        <li><a href="#3">Trx Framework</a></li>
                    </ul>
                 </li>
                 <li><a href="#">Quiénes somos</a></li>
                 <li><a href="#">Productos</a>

                 </li>
                 <li><a href="#">Servicios</a></li>
                 <li><a href="#">Novedades</a></li>
                 <li><a href="#">Contacto</a></li>
             </ul>
        </div>
     </div>
 </div>

【问题讨论】:

  • 如果将您的示例转换为 jsfiddle 不太麻烦,或者发布您的标题标记。
  • @Nix 添加了标题标记,我正在开发一个 jsfiddle。
  • @Nix 现在我真的迷路了,因为我无法重现错误! jsfiddle.net/E4gRB/1/embedded/result
  • @Nix 感谢您的帮助,这是一个 z-index 问题!请参阅 bbxdesigns 的答案。

标签: jquery html css drop-down-menu padding


【解决方案1】:

这是一个z-indexissue。

规则是HTML代码中之后的所有内容都在之上。因此,您的 div #container您的 ul 下拉列表高于您的 ul 下拉列表。

要解决此问题,请将其添加到您的下拉列表中:

ul.dropdown ul {
  z-index: 2000;
}

或者只是z-index: 1;,只要你设置你的z-index。

【讨论】:

  • 我发誓我不能给你足够的投票!你已经做了五月天!非常感谢!
猜你喜欢
  • 2018-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-06
  • 2021-08-28
  • 2014-12-04
  • 1970-01-01
  • 2011-02-09
相关资源
最近更新 更多