【发布时间】:2020-11-20 15:00:17
【问题描述】:
我正在尝试分析 w3schools 中作为示例给出的这段代码。
ul {
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
background-color: #333;
}
li {
float: left;
}
li a, .dropbtn {
display: inline-block;
color: white;
text-align: center;
padding: 14px 16px;
text-decoration: none;
}
li a:hover, .dropdown:hover .dropbtn {
background-color: red;
}
li.dropdown {
display: inline-block;
}
.dropdown-content {
display: none;
position: absolute;
background-color: #f9f9f9;
min-width: 160px;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
z-index: 1;
}
.dropdown-content a {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
text-align: left;
}
.dropdown-content a:hover {background-color: #f1f1f1;}
.dropdown:hover .dropdown-content {
display: block;
}
<ul>
<li><a href="#home">Home</a></li>
<li><a href="#news">News</a></li>
<li class="dropdown">
<a href="javascript:void(0)" class="dropbtn">Dropdown</a>
<div class="dropdown-content">
<a href="#">Link 1</a>
<a href="#">Link 2</a>
<a href="#">Link 3</a>
</div>
</li>
</ul>
这是我正在分析的代码。
这段代码中有 3 件事我无法理解。
1 - 为什么 'li.dropdown' 是内联块?将浮动的列表项(因此已经是内联块)变成内联块的目的到底是什么?我不知道那有什么用。
2 - 为什么当我将“li.dropdown”变成显示块时,它不会变成块?下拉菜单是浮动的,所以当我让它阻塞时,它不应该覆盖浮动,而是将其宽度扩展到 100%?显然它不会覆盖浮动,那为什么呢?如果它不覆盖浮动,那么为什么首先将其设为 inline-block 呢?
3 - 为什么“li a”和“.dropbtn”要分开定义? .dropbtn 类是“li a”的一部分,那么为什么需要使用一个类来单独定义呢?
【问题讨论】:
-
1.删除它似乎不会改变任何东西,所以它可能只是多余的。 (我们不能总是说出作者的意图是什么……尤其是当您从 w3schools 这样的垃圾网站获取示例时。) 2. 惊喜,计算 i> 之前的值是
block- w3.org/TR/CSS21/visuren.html#dis-pos-flo 3. 作者的选择?我们应该怎么知道?总是有多种方法可以达到相同的最终结果。 -
我不明白第二个问题的答案。该元素是浮动的,但是当我后来让它显示块时,它仍然是浮动的。那么,为什么浮动没有被覆盖?我知道列表项本身是块,但它是浮动的,并且浮动不会被覆盖。
标签: css css-selectors css-float