jQuery 解决方案
我从一个 jQuery 辅助解决方案开始。
CSS看起来像:
div {
width: 100%;
overflow: auto;
}
a {
border: 1px solid gray;
margin: 3px;
height: 50px;
float: left;
}
.c {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.d {
float: right;
}
和 jQuery 函数:
$("div").each(function(){
var innerWidth = 0;
$(this).find("a").not(".flex").each(function(){
innerWidth += $(this).outerWidth(true);
});
var flexWidth = $(this).width() - innerWidth - 9; /* padding + border + 1 */
$(this).find(".flex").width(flexWidth);
});
有一个硬编码的常量表示左/右填充和带有 div 的柔性边框(a.c
在您的示例中),并且出于某种原因,有一个 1px 调整以将浮动保持在单行上。(不太确定起源......)。
小提琴:http: //jsfiddle.net/audetwebdesign/HmvsN/
固定宽度与浮动的混合
我对 HTML 做了如下微调(移到a.d
前面a.c
):
<div class="ex2">
<a href="a" class="a">First column</a>
<a href="b" class="b">Second column</a>
<a href="d" class="d">Last column</a>
<a href="c" class="c flex">Very long text...</a>
</div>
并使用以下 CSS:
.ex2 a {
border: 1px solid gray;
margin: 3px;
height: 50px;
}
.ex2 .a {
width: 90px;
float: left;
}
.ex2 .b {
width: 90px;
float: left;
}
.ex2 .c {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
display: block;
margin: 3px 100px 3px 199px;
}
.ex2 .d {
width: 90px;
float: right;
}
本质上,浮动左边的两个元素和右边的一个,这样它就可以环绕更宽的元素。较宽元素的宽度具有左右边距以容纳浮动元素。
总的来说,这两种方法都有优点,但对于我们得到的东西来说,这似乎需要做很多工作......