CSS3的flex和grid可以解决这些问题,但截至2013年,标准支持仍然不稳定。回到现实世界,如果没有像素hacks,我认为纯CSS2.1(IE8+)无法实现这一点。问题在于文本对齐由父元素控制,而由于两个锚点共享其父级,它们要么都靠左对齐,要么都靠右对齐,而justity并不能用在最后一行。如果您可以忍受一些额外的HTML,则有两种方法:1)添加另一个内联元素来保证换行,然后尝试隐藏空行。这样可以在父级上使用text-align justify。
<p>
<a href="#" class="link">link</a>
<a href="#" class="link link-alt">link alt</a>
<span class="boom"></span>
</p>
<style type="text/css">
p {
padding: 20px;
background: #eee;
text-align: justify
}
.link {
display: inline-block;
padding: 10px;
background: #ddd;
}
.link-alt {
padding: 20px;
}
span {
display: inline-block;
height: 0;
width: 100%
}
</style>
优点:适用于任意数量的内联块,而不仅仅是两个。只需要一点额外的HTML。
缺点:需要额外的努力来隐藏最后(空)文本行(将内联块设置为0高度不会帮助您),而且您将不得不调整边距或其他内容才能使其真正起作用。更多讨论:如何在HTML+CSS中*真正*对齐水平菜单?
2) 在锚标记上方添加另一层内联块,并将它们大小调整为50%。然后,您可以应用单独的文本对齐以获得所请求的最终布局。重要的是,不允许两个大小为50%的内联块之间存在空格,否则您将换行。
<p>
<span class="left">
<a href="#" class="link">link</a>
</span><span class="right">
<a href="#" class="link link-alt">link alt</a>
</span>
</p>
<style type="text/css">
p {
padding: 20px;
background: #eee;
}
.link {
display: inline-block;
padding: 10px;
background: #ddd;
}
.link-alt {
padding: 20px;
}
span {
display: inline-block;
width: 50%
}
.left {
text-align: left
}
.right {
text-align: right
}
</style>
优点:可以按照你所请求的确切布局而不会污染外部盒模型。
缺点:只适用于两个内联块(你可以尝试扩展它,但很快就变得非常复杂)。依赖于没有额外的空格,这可能会危及你精美格式化的标记。