一个"理论"的css问题。
我想对在这种情况下应该发生的事情进行某种澄清......
这是我的 HTML 的总结版本...
<div id="some_navbar">
<ul>
<li id="plain_li"><a href="#">HELLO</a></li>
<li id="dropdown_li"><a href="#">GOODBYE</a>
<ul>
<li><a href="#">FOR NOW</a></li>
<li><a href="#">FOR GOOD</a></li>
</ul>
</li>
</ul>
</div>
这是我的样式表
#some_navbar {
position: absolute; /* A positioned ancestor does exist. */
top: 0.75em;
right: 1.5em;
}
#some_navbar li,
#some_navbar a {
display: block;
}
#some_navbar ul {
list-style-type: none;
}
#some_navbar > ul {
margin: 0;
padding: 0;
border: 0;
overflow: hidden;
}
#some_navbar > ul > li {
float: right;
margin: 0;
padding: 0.75em 1.5em;
border: 1px solid grey;
}
#dropdown_li > ul {
display: none;
}
#dropdown_li:hover > ul {
display: block;
position: absolute;
top: 1em;
}
我读到绝对意味着"元素相对于其第一个定位(非静态(祖先元素定位"。
那么这是否意味着我的最后一个选择器元素(#dropdown_li:hover > ul
(相对于其浮动父li
(换句话说,浮动是否有资格作为定位(或相对于其绝对定位的曾祖父元素(#some_navbar
(?
我在这个JSFIDDLE中为您解构了代码
它将向您显示所讨论的元素与其浮动父元素不是"相对的"。为此,您必须将父元素设置为 position: relative
。
#some_navbar {
position: absolute; /* A positioned ancestor does exist. */
border: 1px solid red;
left: 5em;
width: 300px;
height: 300px;
}
#some_navbar li,
#some_navbar a {
display: block;
}
#some_navbar ul {
list-style-type: none;
}
#some_navbar > ul {
margin: 0;
padding: 0;
border: 0;
overflow: hidden;
}
#some_navbar > ul > li {
float: right;
margin: 0;
border: 1px solid grey;
}
#dropdown_li > ul {
display: none;
}
#dropdown_li:hover > ul {
display: block;
position: absolute;
border: 1px solid green;
left: 0;
bottom: 0;
}
浮动不算作定位。"定位"是指position
属性的static
以外的值。因此,#dropdown_li:hover > ul
将相对于#some_navbar
定位,因为它是最接近的祖先,其position
不static