编辑:自从我回答这个问题以来已经过去了 3 年,我想需要一个更现代的解决方案,尽管目前的解决方案可以做到这一点:)
1.弹性盒
它是迄今为止最短和最灵活的。应用display: flex;
到父容器并调整其子容器的位置,justify-content: space-between;
如下所示:
.header {
display: flex;
justify-content: space-between;
}
可以在这里在线看到 - http://jsfiddle.net/skip405/NfeVh/1073/
但请注意,flexbox 支持是 IE10 和更新版本。如果您需要支持 IE 9 或更早版本,请使用以下解决方案:
2.你可以使用text-align: justify
这里的技术。
.header {
background: #ccc;
text-align: justify;
/* ie 7*/
*width: 100%;
*-ms-text-justify: distribute-all-lines;
*text-justify: distribute-all-lines;
}
.header:after{
content: '';
display: inline-block;
width: 100%;
height: 0;
font-size:0;
line-height:0;
}
h1 {
display: inline-block;
margin-top: 0.321em;
/* ie 7*/
*display: inline;
*zoom: 1;
*text-align: left;
}
.nav {
display: inline-block;
vertical-align: baseline;
/* ie 7*/
*display: inline;
*zoom:1;
*text-align: right;
}
工作示例可以在这里看到:http: //jsfiddle.net/skip405/NfeVh/4/。此代码适用于 IE7 及更高版本
如果 HTML 中的 inline-block 元素没有用空格分隔,则此解决方案将不起作用 - 请参见示例http://jsfiddle.net/NfeVh/1408/。当您使用 Javascript 插入内容时,可能会出现这种情况。
如果我们不关心 IE7,只需忽略 star-hack 属性。使用您的标记的工作示例在这里 - http://jsfiddle.net/skip405/NfeVh/5/。我只是添加了header:after
部分并证明了内容。
为了解决使用after
伪元素插入的额外空间的问题,可以font-size
将父元素设置为 0 并将子元素重置为 14px。这个技巧的工作示例可以在这里看到:http: //jsfiddle.net/skip405/NfeVh/326/