我没有玩过很长时间的CSS,而且目前还没有引用。我的问题应该相当容易,但谷歌搜索没有提出足够的答案。所以,增加集体知识......
|#header---------------------------------------------------------------|
| TITLE |
|#sub-title------------------------------------------------------------|
|bread > crumb | username logout |
|#sub-left | #sub-right|
|---------------------------------|------------------------------------|
这就是我想要的布局。标题反正。我希望子标题包含子左和右子。我使用什么css规则来确保div受另一个div的属性约束。在这种情况下,我如何确保子左和右子留在子标题内?
答案 0 :(得分:65)
当你真的没有时,你需要在底部有一个clear:both
div,这是一种常见的误解。虽然foxy的答案是正确的,但您不需要那种非语义,无用的清算div。您需要做的就是将overflow:hidden
粘贴到容器上:
#sub-title { overflow:hidden; }
答案 1 :(得分:36)
当您浮动sub-left
和sub-right
时,他们不再占用sub-title
内的任何空格。您需要在其下方添加另一个带有style = "clear: both"
的div,以展开包含div或它们位于其下方。
HTML:
<div id="sub-title">
<div id="sub-left">
sub-left
</div>
<div id="sub-right">
sub-right
</div>
<div class="clear-both"></div>
</div>
CSS:
#sub-left {
float: left;
}
#sub-right {
float: right;
}
.clear-both {
clear: both;
}
答案 2 :(得分:9)
这应该可以满足您的需求:
<html>
<head>
<style type="text/css">
#header {
text-align: center;
}
#wrapper {
margin:0 auto;
width:600px;
}
#submain {
margin:0 auto;
width:600px;
}
#sub-left {
float:left;
width:300px;
}
#sub-right {
float:right;
width:240px;
text-align: right;
}
</style>
</head>
<body>
<div id="wrapper">
<div id="header"><h1>Head</h1></div>
<div id="sub-main">
<div id="sub-left">
Right
</div>
<div id="sub-right">
Left
</div>
</div>
</div>
</body>
</html>
您可以使用包装器类控制整个文档,或者只使用子主类控制两列。
答案 3 :(得分:9)
我同意Darko Z将“overflow:hidden”应用于#sub-title。但是,应该提到的是,除非你有指定的宽度或高度,否则清除浮动的overflow:hidden方法对IE6不起作用。或者,如果您不想指定宽度或高度,可以使用“zoom:1”:
#sub-title { overflow:hidden; zoom: 1; }
答案 4 :(得分:5)
这个答案增加了上述解决方案,以解决您的上一句话:
如何确保左下和右下留在子标题
问题在于,随着左下或右下的内容扩展,它们将扩展到副标题以下。此行为是针对CSS设计的,但确实会给我们大多数人带来问题。最简单的解决方案是使用CSS Clear声明设置div。
要做到这一点,请使用CSS语句来定义结束div(可以是Clear Left或RIght而不是两者,具体取决于使用的Float声明:
#sub_close {clear:both;}
HTML变为:
<div id="sub-title">
<div id="sub-left">Right</div>
<div id="sub-right">Left</div>
<div id="sub-close"></div>
</div>
抱歉,刚刚意识到这是之前发布的,在输入我的回复时不应该喝那杯咖啡!
@Darko Z:你是对的,我发现的溢出:auto(或overflow:hidden)解决方案的最佳描述是在SitePoint上发布的帖子Simple Clearing of FLoats并且还有一个好处456bereastreet文章CSS Tips and Tricks Part-2中的描述。不得不承认自己懒得自己实施这些解决方案,因为关闭的div cludge工作正常,虽然它当然非常不优雅。因此,从现在开始努力清理我的行为。
答案 5 :(得分:3)
认真尝试其中的一些,你可以选择固定宽度或更流畅的布局,选择是你的!真的很容易实现。
答案 6 :(得分:0)
您还可以使用CSS Grids框架实现此目的,例如YUI Grids或Blue Print CSS。它们可以解决很多交叉浏览器问题,并且可以使用更复杂的列布局来使用它们。
答案 7 :(得分:0)
使用css3的最佳和简单的方法
#subtitle{
/*for webkit browsers*/
display:-webkit-box;
-webkit-box-align:center;
-webkit-box-pack: center;
width:100%;
}
#subleft,#subright{
width:50%;
}
答案 8 :(得分:-1)
这样的事可能......
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<style>
#container
{
width:600px;
}
#head, #sub-title
{
width:100%;
}
#sub-left, #sub-right
{
width:50%;
float:left;
}
</style>
</head>
<body>
<div id="container">
<div id="head">
#head
</div>
<div id="sub-title">
#sub-title
<div id="sub-left">
#sub-left
</div>
<div id="sub-right">
#sub-right
</div>
</div>
</div>
</body>
</html>
答案 9 :(得分:-1)
为什么不简单地设置一个固定的高度,而不是使用overflow:hidden
,这是一种黑客攻击,例如height:500px
,到父母部门?
答案 10 :(得分:-1)
#sub-left, #sub-right
{
display: inline-block;
}
答案 11 :(得分:-1)
通过Bootstrap Grid,您可以轻松获得跨浏览器兼容的解决方案。
<div class="container">
<div class="row">
<div class="col-sm-6" style="background-color:lavender;">
Div1
</div>
<div class="col-sm-6" style="background-color:lavenderblush;">
Div2
</div>
</div>
</div>
jsfiddle:http://jsfiddle.net/DTcHh/4197/
答案 12 :(得分:-6)
你这样做:
<table>
<tr>
<td colspan="2">TITLE</td>
</tr>
<tr>
<td>subleft</td><td>subright</td>
</tr>
</table>
很容易 - 我花了1分钟打字。 记住需要将CSS文件下载到客户端,所以不要担心有关额外标签的问题,在这种情况下它是无关紧要的。