编辑:自我回答这个问题已经过去3年了,我猜可能需要更现代的解决方案,尽管当前的解决方案也可以胜任 :)
1. Flexbox
这是目前最短、最灵活的方案。将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;
*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;
*display: inline;
*zoom: 1;
*text-align: left;
}
.nav {
display: inline-block;
vertical-align: baseline;
*display: inline;
*zoom:1;
*text-align: right;
}
这里可以看到工作示例: http://jsfiddle.net/skip405/NfeVh/4/。 这段代码可以在IE7及以上版本中使用。
如果HTML中的内联块元素没有用空格分隔,此解决方案将无法正常工作 - 可以查看示例http://jsfiddle.net/NfeVh/1408/。 这可能是在JavaScript中插入内容的情况。
如果我们不关心IE7,则可以省略星号hack属性。使用您的标记的工作示例在这里 - http://jsfiddle.net/skip405/NfeVh/5/。 我只添加了header:after
部分并对齐了内容。
为了解决由after
伪元素插入的额外空间问题,可以通过将父元素的font-size
设置为0,并将其重置为子元素的14px来进行技巧操作。 这个技巧的有效示例可以在这里看到:http://jsfiddle.net/skip405/NfeVh/326/
position: absolute
和inline-block
。 - elclanrs