:target {
border: 2px solid #D4D4D4;
background-color: #e5eecc;
}
.navigation li {
list-style-type: none;
float: left;
padding: 1em;
}

<ul class="navigation">
<li> <a href="#help"> Help </a>
</li>
<li> <a href="#about"> About us </a>
</li>
</ul>
<p>lorem ipsum</p>
<br/>
<p id="help"><b> Help yourself man </b>
</p>
<p id="about"><b> We're free software lovers </b>
</p>
&#13;
如果我们检查,则用户代理样式表下的上述代码段(使用dev tool)ul
和p
元素均为display:block
。 element.style
中未应用任何内容,且没有float:left
是的,float
已应用于li
而不是ul
,从float:left
课程中删除.navigation li
将解决问题
p
和ul
都是阻止元素,那么他们为什么会表现为内嵌元素?没有添加新的换行符。
我没有寻找解决方案,我需要了解这背后的概念。
答案 0 :(得分:4)
将clear: left
添加到p
标记。这将导致它落在它前面的左浮动元素之下。
在ul
标记上使用Nicolas Gallagher's micro clearfix:
.cf:before,
.cf:after {
content: " "; /* 1 */
display: table; /* 2 */
}
.cf:after {
clear: both;
}
/**
* For IE 6/7 only
* Include this rule to trigger hasLayout and contain floats.
*/
.cf {
*zoom: 1;
}
这会使ul
标记扩展到其中包含的li
元素的大小。
浮动元素不会占用文档流中的空间,因此在这种情况下,它们被包裹的元素ul
不会增长占用空间,所以它是0 px high。
p
标记位于ul
之后,不占用空间,因此它显示在顶部。
li
标签浮动到左侧,这意味着它们向左滑动并将所有内容推到右侧,可以将其推到左侧。在这种情况下,p
代码。
答案 1 :(得分:1)
烨
从Float:left
类
.navigation li
嗨,学生,
li
表现不像内联元素,它本身就是Block
元素。如果Float:left
的Block元素始终背靠背对齐。
http://www.impressivewebs.com/difference-block-inline-css/
从中可以清楚地了解到什么是内联和块元素
答案 2 :(得分:1)
问题是ul
内的所有元素都是浮动的,因此ul
的行为就像它没有内容一样。
如果您希望li
保留在一行,一种解决方案是使用display: inline
代替float: left
。
:target {
border: 2px solid #D4D4D4;
background-color: #e5eecc;
}
.navigation li {
list-style-type: none;
display: inline;
padding: 1em;
}
&#13;
<ul class="navigation">
<li> <a href="#help"> Help </a>
</li>
<li> <a href="#about"> About us </a>
</li>
</ul>
<p>lorem ipsum</p>
<br/>
<p id="help"><b> Help yourself man </b></p>
<p id="about"><b> We're free software lovers </b></p>
&#13;
答案 3 :(得分:1)
您还可以在Floated li之后添加一个clear:left样式来解决问题。