我有两列布局,其中一个是左浮动,另一个不是:
<div id="left">
LEFT
</div>
<div id="right">
RIGHT
</div>
CSS是:
#left {
float: left;
width: 200px;
background: yellow;
}
#right {
margin-left: 200px;
background: orange;
}
在没有浮动的right
元素中,我有一个这样的标记:
<div id="nav">
<div class="item">LINK</div>
<div class="item">LINK</div>
<div class="item">LINK</div>
<div class="item">LINK</div>
<div class="item">LINK</div>
<div class="clear"></div>
</div>
<h1>Welcome World</h1>
nav
和item
的CSS(如您所见,item
已浮动):
#nav {
background: blue;
}
.item {
background: green;
float: left;
margin-right: 10px;
}
我的clear
元素是:
.clear {
clear: both;
}
最后,我得到了这个结果:
我认为问题在于我的clear
元素清除浮动元素(#left
)。
但我希望得到这个结果:
答案 0 :(得分:1)
将#nav
元素设为inline-block
并将width
设置为100%
:
#nav {
background: blue;
display: inline-block;
width: 100%;
}
答案 1 :(得分:1)
您可以将overflow: hidden;
添加到#nav
,而不是在HTML中添加不需要的标记。这将为#nav
中的列表项创建一个新的块格式化上下文,因为浮动元素从normal flow中取出(其流入容器不会尊重它们的高度,请注意{ {1}}在我的小提琴中没有延伸到<body>
来自Visual Formatting Model, 9.4.1:
浮动,绝对定位的元素,阻止不是块框的容器(例如内联块,表格单元格和表格标题),阻止“溢出”除“可见”之外的框(当该值传播到视口时除外)为其内容建立新的块格式化上下文。
#left
答案 2 :(得分:0)
我以不同的方式做到了这一点。您可以将清除移动到两个不同的位置之一(这会得到不同的结果),但整体问题已解决。选择哪一个更合适。
(http://jsfiddle.net/bJFUj/4/或http://jsfiddle.net/bJFUj/6/)
在这两种情况下,我基本上都会更改导航的CSS(因为没有背景会显示)
#nav {
background: blue;
overflow: hidden;
}
我只是将clear清除到包含div#left
和div#right
的元素。把它放在div#right
里面似乎会产生一些关于div#right
高度的有趣效果。
答案 3 :(得分:0)
答案 4 :(得分:0)
清除浮动与浮动元素有关但你已经清除了你没有向左或向右浮动的元素,即
#nav
。因此,将float: left;
添加到#nav
,然后只有<div class="clear"></div>
可以按照您的意愿运作。
<强> demo 强>