参见:http://jsfiddle.net/thirtydot/EDp8R/
这适用于IE6+和所有现代浏览器!
我把你要求的尺寸减半了,这样更容易处理。
Text-align: justify与.stretch的组合是处理定位的方法。
显示:inline-block;*显示:内联;zoom:1修复了IE6/7的内联块,见这里。
字体大小:0;line-height: 0修复了IE6中的一个小问题。
#container {
border: 2px dashed #444;
height: 125px;
text-align: justify;
-ms-text-justify: distribute-all-lines;
text-justify: distribute-all-lines;
/* just for demo */
min-width: 612px;
}
.box1,
.box2,
.box3,
.box4 {
width: 150px;
height: 125px;
vertical-align: top;
display: inline-block;
*display: inline;
zoom: 1
}
.stretch {
width: 100%;
display: inline-block;
font-size: 0;
line-height: 0
}
.box1,
.box3 {
background: #ccc
}
.box2,
.box4 {
background: #0ff
}
<div id="container">
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
<div class="box4"></div>
<span class="stretch"></span>
</div>
额外的span (.stretch)可以替换为:after。
这与上面的解决方案一样,在所有相同的浏览器中仍然有效。after在IE6/7中不起作用,但他们无论如何都在使用distribute-all-lines,所以没关系。
参见:http://jsfiddle.net/thirtydot/EDp8R/3/
有一个小缺点:after:为了使最后一行在Safari中完美工作,你必须小心处理HTML中的空白。
具体来说,这是行不通的:
<div id="container">
..
<div class="box3"></div>
<div class="box4"></div>
</div>
这就是:
<div id="container">
..
<div class="box3"></div>
<div class="box4"></div></div>
您可以将此用于任意数量的子div,而无需通过更改为每个子div添加boxN类
.box1, .box2, .box3, .box4 { ...
to
#container > div { ...
这将选择#container div的第一个子div,而不是它下面的其他div。为了泛化背景颜色,你可以使用CSS3 n阶选择器,尽管它只在IE9+和其他现代浏览器中支持:
.box1, .box3 { ...
就变成:
#container > div:nth-child(odd) { ...
请参阅这里的jsfiddle示例。