首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >悬停显示subMenu

悬停显示subMenu
EN

Stack Overflow用户
提问于 2014-02-17 07:15:40
回答 2查看 67关注 0票数 1

我有一个菜单,除了子菜单外,每样东西都能用。当带有子菜单的<li>hover时,它应该显示子菜单,而它确实显示了子菜单。但是问题在于子菜单的位置,它没有在<li>下面显示它,而是显示它left: 0%

http://jsfiddle.net/2fDQz/1/ -试着把你的鼠标放在“管理员”和“家”上。

下面是css(尽管您可以在jsfiddle中看到它):

CSS

代码语言:javascript
复制
body {
}
/* Base Styles */
 #personalbar ul, #personalbar li, #personalbar a {
    list-style: none;
    margin: 0;
    padding: 0;
    border: 0;
    line-height: 1;
    font-family:'Lato', sans-serif;
}
#personalbar {
    border: 1px solid #123e3f;
    width: auto;
}
#personalbar ul {
    zoom: 1;
    background: #33b3b7;
    background: -moz-linear-gradient(top, #33b3b7 0%, #288c8f 100%);
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #33b3b7), color-stop(100%, #288c8f));
    background: -webkit-linear-gradient(top, #33b3b7 0%, #288c8f 100%);
    background: -o-linear-gradient(top, #33b3b7 0%, #288c8f 100%);
    background: -ms-linear-gradient(top, #33b3b7 0%, #288c8f 100%);
    background: linear-gradient(top, #33b3b7 0%, #288c8f 100%);
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='@top-color', endColorstr='@bottom-color', GradientType=0);
    padding: 5px 10px;
}
#personalbar ul:before {
    content:'';
    display: block;
}
#personalbar ul:after {
    content:'';
    display: table;
    clear: both;
}
#personalbar li {
    float: left;
    margin: 0 5px 0 0;
    border: 1px solid transparent;
}
#personalbar li a {
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    -ms-border-radius: 5px;
    -o-border-radius: 5px;
    border-radius: 5px;
    padding: 8px 15px 9px 15px;
    display: block;
    text-decoration: none;
    color: #ffffff;
    border: 1px solid transparent;
    font-size: 16px;
}
#personalbar li.active {
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    -ms-border-radius: 5px;
    -o-border-radius: 5px;
    border-radius: 5px;
    border: 1px solid #33b3b7;
}
#personalbar li.active a {
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    -ms-border-radius: 5px;
    -o-border-radius: 5px;
    border-radius: 5px;
    display: block;
    background: #1d6567;
    border: 1px solid #123e3f;
    -moz-box-shadow: inset 0 5px 10px #123e3f;
    -webkit-box-shadow: inset 0 5px 10px #123e3f;
    box-shadow: inset 0 5px 10px #123e3f;
}
#personalbar li:hover {
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    -ms-border-radius: 5px;
    -o-border-radius: 5px;
    border-radius: 5px;
    border: 1px solid #33b3b7;
}
#personalbar li:hover a {
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    -ms-border-radius: 5px;
    -o-border-radius: 5px;
    border-radius: 5px;
    display: block;
    background: #1d6567;
    border: 1px solid #123e3f;
    -moz-box-shadow: inset 0 5px 10px #123e3f;
    -webkit-box-shadow: inset 0 5px 10px #123e3f;
    box-shadow: inset 0 5px 10px #123e3f;
}
#personalbar ul ul li:hover a, #personalbar li:hover li a {
    background: none;
    border: none;
    color: #666;
    -webkit-box-shadow: none;
    -moz-box-shadow: none;
}
#personalbar ul ul a:hover {
    background: #7d7d7d;
    color: #fff !important;
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    border-radius: 5px;
    text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
}
#personalbar li:hover > ul {
    display: block;
}
#personalbar ul ul {
    position:absolute;
    z-index: 1000;
    display: none;
    margin: 0;
    padding: 0;
    width: 185px;
    top: 40px;
    left: 0;
    background: #ffffff;
    border: solid 1px #b4b4b4;
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    border-radius: 5px;
    -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
    -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
}
#personalbar ul ul li {
    position: relative;
    float: none;
    margin: 0;
    padding: 3px;
}

HTML:

代码语言:javascript
复制
<div id='personalbar' style="position:absolute; top:0%;left:0%; width:100%;">
    <ul>
        <li><a href='# '><span>Home</span></a>

            <ul>
                <li id="Li2" runat="server"><a id="A5" href="#" runat="server"><span>bla</span></a>
                </li>
                <li id="Li3" runat="server"><a id="A6" href="#" runat="server"><span>bli</span></a>
                </li>
            </ul>
        </li>
        <li id="L1" runat="server"><a id="A1" href="../ClientSide/newsFeed/allEr.aspx" runat="server"><span>My Wall</span></a>
        </li>
        <li id="L2" runat="server"><a id="A2" href="../ClientSide/employee/eeSettings.aspx" runat="server"><span>Setting</span></a>
        </li>
        <li id="Li1" runat="server"><a id="A4" href="../ClientSide/employee/eeSettings.aspx" runat="server"><span>Admin</span></a>

            <ul>
                <li runat="server"><a href="#" runat="server"><span>bla</span></a>
                </li>
                <li runat="server"><a href="#" runat="server"><span>bli</span></a>
                </li>
            </ul>
        </li>
        <li id="L3" runat="server" style="position:absolute; right:1%;"><a id="A3" href="../ClientSide/Registration/registration.aspx" runat="server"><span>Sign Up</span></a>
        </li>
    </ul>
</div>

我尝试过将#personalbar ul ulposition改为relative,下面是所做的:http://jsfiddle.net/2fDQz/2/

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-17 07:18:36

您需要将absolute定位元素包装在position: relative;容器中.

Demo

代码语言:javascript
复制
#personalbar li {
   float: left;
   margin: 0 5px 0 0;
   position: relative;
   border: 1px solid transparent;
}

注意,正如@Amarnath所指出的,在上面的演示中,当您悬停子元素时,菜单就会崩溃,这是因为您使用的是top: 40px;,所以不要使用- Demo

代码语言:javascript
复制
#personalbar ul ul {
    position:absolute;
    z-index: 1000;
    display: none;
    margin: 0;
    padding: 0;
    width: 185px;
    top: 40px; /* Take this out from here */
    left: 0;
    background: #ffffff;
    border: solid 1px #b4b4b4;
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    border-radius: 5px;
    -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
    -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
}

另外,我想建议您,当您处理这样的标记时,最好使用>选择器,以便您通过CSS选择的元素是精确的。如果您不知道选择器是做什么的,它会选择元素的直接子元素。例如,使用类似于

代码语言:javascript
复制
ul li ul {
   /* Selects all ul element nested under li */
}

而使用类似的东西

代码语言:javascript
复制
ul > li > ul {
   /* Selects direct ul element nested under li - First Level */
}
票数 3
EN

Stack Overflow用户

发布于 2014-02-17 07:34:09

您需要将li的所有位置设置为relative才能正常工作。“做某事”可以重置任何子元素的定位值。当在相对定位的父元素内使用绝对定位时,子元素(例如,设置为left: 0; top: 0; )会将自己定位到父元素的左上角,而不是文档的左上角。另外,还要注意的一点是,z索引属性也会相对于父元素重置。

试试这个:

代码语言:javascript
复制
body {}
/* Base Styles */

#personalbar ul,
#personalbar li,
#personalbar a {
  list-style: none;
  margin: 0;
  padding: 0;
  border: 0;
  line-height: 1;
  font-family: 'Lato', sans-serif;
}
#personalbar {
  border: 1px solid #123e3f;
  width: auto;
}
#personalbar ul {
  zoom: 1;
  background: #33b3b7;
  background: -moz-linear-gradient(top, #33b3b7 0%, #288c8f 100%);
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #33b3b7), color-stop(100%, #288c8f));
  background: -webkit-linear-gradient(top, #33b3b7 0%, #288c8f 100%);
  background: -o-linear-gradient(top, #33b3b7 0%, #288c8f 100%);
  background: -ms-linear-gradient(top, #33b3b7 0%, #288c8f 100%);
  background: linear-gradient(top, #33b3b7 0%, #288c8f 100%);
  filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='@top-color', endColorstr='@bottom-color', GradientType=0);
  padding: 5px 10px;
}
#personalbar ul:before {
  content: '';
  display: block;
}
#personalbar ul:after {
  content: '';
  display: table;
  clear: both;
}
#personalbar li {
  float: left;
  margin: 0 5px 0 0;
  border: 1px solid transparent;
  position: relative;     /* This is the important bit */
}
#personalbar li a {
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  -ms-border-radius: 5px;
  -o-border-radius: 5px;
  border-radius: 5px;
  padding: 8px 15px 9px 15px;
  display: block;
  text-decoration: none;
  color: #ffffff;
  border: 1px solid transparent;
  font-size: 16px;
}
#personalbar li.active {
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  -ms-border-radius: 5px;
  -o-border-radius: 5px;
  border-radius: 5px;
  border: 1px solid #33b3b7;
}
#personalbar li.active a {
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  -ms-border-radius: 5px;
  -o-border-radius: 5px;
  border-radius: 5px;
  display: block;
  background: #1d6567;
  border: 1px solid #123e3f;
  -moz-box-shadow: inset 0 5px 10px #123e3f;
  -webkit-box-shadow: inset 0 5px 10px #123e3f;
  box-shadow: inset 0 5px 10px #123e3f;
}
#personalbar li:hover {
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  -ms-border-radius: 5px;
  -o-border-radius: 5px;
  border-radius: 5px;
  border: 1px solid #33b3b7;
}
#personalbar li:hover a {
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  -ms-border-radius: 5px;
  -o-border-radius: 5px;
  border-radius: 5px;
  display: block;
  background: #1d6567;
  border: 1px solid #123e3f;
  -moz-box-shadow: inset 0 5px 10px #123e3f;
  -webkit-box-shadow: inset 0 5px 10px #123e3f;
  box-shadow: inset 0 5px 10px #123e3f;
}
#personalbar ul ul li:hover a,
#personalbar li:hover li a {
  background: none;
  border: none;
  color: #666;
  -webkit-box-shadow: none;
  -moz-box-shadow: none;
}
#personalbar ul ul a:hover {
  background: #7d7d7d;
  color: #fff !important;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  border-radius: 5px;
  text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
}
#personalbar li:hover > ul {
  display: block;
}
#personalbar ul ul {
  position: absolute;
  z-index: 1000;
  display: none;
  margin: 0;
  padding: 0;
  top: 40px;
  left: 0;
  background: #ffffff;
  border: solid 1px #b4b4b4;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  border-radius: 5px;
  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
}
#personalbar ul ul li {
  position: relative;
  float: none;
  margin: 0;
  padding: 3px;
}
代码语言:javascript
复制
<div id='personalbar' style="position:absolute; top:0%;left:0%; width:100%;">
  <ul>
    <li><a href='# '><span>Home</span></a>
      <ul>
        <li id="Li2" runat="server"><a id="A5" href="#" runat="server"><span>bla</span></a>
        </li>
        <li id="Li3" runat="server"><a id="A6" href="#" runat="server"><span>bli</span></a>
        </li>
      </ul>
    </li>
    <li id="L1" runat="server"><a id="A1" href="../ClientSide/newsFeed/allEr.aspx" runat="server"><span>My Wall</span></a>
    </li>
    <li id="L2" runat="server"><a id="A2" href="../ClientSide/employee/eeSettings.aspx" runat="server"><span>Setting</span></a>
    </li>
    <li id="Li1" runat="server"><a id="A4" href="../ClientSide/employee/eeSettings.aspx" runat="server"><span>Admin</span></a>
      <ul>
        <li runat="server"><a href="#" runat="server"><span>bla</span></a>
        </li>
        <li runat="server"><a href="#" runat="server"><span>bli</span></a>
        </li>
      </ul>
    </li>
    <li id="L3" runat="server" style="position:absolute; right:1%;"><a id="A3" href="../ClientSide/Registration/registration.aspx" runat="server"><span>Sign Up</span></a>
    </li>
  </ul>
</div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21822893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档