Answers
water_junket 的解决办法比我的多,第一种和第三种比我的简单。
我自己的答案:
这个与
float
的定位方式有关系。
float
的定位方式的摘录如下:
How floats are positioned
As mentioned above, when an element is floated it is taken out of the normal flow of the document. It is shifted to the left or right until it touches the edge of it's containing box or another floated element.
原文全文地址在 这里 。
翻译:浮动是如何定位的
正如上面所提到的那样,当一个元素浮动的时候,它会被取出在正常的元素流之外 (译注:document flow 应该翻译为 文本流 ,但是 文本 两字在汉语中有 text 的含义,消歧义,翻译为 元素流 ) 。它会被向左或向右漂移,直到它贴到容器的边缘或者另外一个浮动元素的边缘。
图片解释如下:
(
注意
float
使得
li
脱离了元素流,使得
ul
高度不再被撑起
)
第二次修改:
/*
* 解决办法 1
* 不修改 a 的样式
* 同时添加多个标签,用来清除 a 的浮动
*/
<style>
.clear {
width:100%;
height:0;
line-height:0;
clear:both;
}
</style>
<ul>
<li>
<a href="#">#</a>
<div class="clear">
</li>
<li>
<a href="#">#</a>
<div class="clear">
</li>
<li>
<a href="#">#</a>
<div class="clear">
</li>
</ul>
/*
* 解决办法 2
* 修改 a 的样式,将 float 属性添加在 li 标签上
* 同时添加一个标签,用来清除 li 的浮动
*/
<style>
li {
float:left;
}
li > a {
float:none;
}
.clear {
width:100%;
height:0;
line-height:0;
clear:both;
}
</style>
<ul>
<li>
<a href="#">#</a>
</li>
<li>
<a href="#">#</a>
</li>
<li>
<a href="#">#</a>
</li>
<div class="clear"></div>
</ul>
你的代码的问题在于
ul
,
li
都没有高度,而且应该是被
reset
过的;同时,你对
li > a
使用了
float
,所以
a
浮动在
li
之上 ->
li
高度为 0 ->
ul
高度为 0 。
桃子味气球
answered 9 years, 6 months ago