我在容器中有两个块元素:
<div class="container">
<div class="element element_a">Element_A</div>
<div class="element element_b">Element_B</div>
</div>
容器占用所有可用宽度。宽度未知/动态。
元素B的宽度应该由它的内容决定(就像float
或display: table
一样)。内容的宽度未知/动态。
元素A应占据容器的所有剩余宽度。
以下是所需结果的屏幕截图:
以下是实验的样板:http://jsbin.com/xalazi/3/edit?html,css,output
应该有不止一种方法,我建议每个答案发布一种方法。
PS No JS!
答案 0 :(得分:2)
float
和overflow: hidden
利用overflow: hidden
(或overflow: auto
)填充剩余的水平空间。
( NB :为此,右侧浮动元素B必须首先出现在您的标记中)
<div class="wpr">
<div class="b">element B</div>
<div class="a">element A</div>
</div>
.wpr {
height:80px;
}
.b {
background: aqua;
float:right;
}
.a {
background: maroon;
overflow: hidden;
}
答案 1 :(得分:2)
<div class="container">
<div class="element element_a">Element_A</div>
<div class="element element_b">Element_B</div>
</div>
*, *:before, *:after {
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
.container {
border: 1px solid black;
display: table;
width: 100%;
}
.element {
display: table-cell;
height: 200px;
}
.element_a {
background-color: deeppink;
width: 100%;
}
.element_b {
background-color: deepskyblue;
}
http://jsbin.com/xalazi/4/edit?html,css,output
答案 2 :(得分:1)
<强> Flexbox的强>
使用flexbox很容易实现非常。
.container {
display:flex;
}
.element_a {
flex-grow: 1;
flex-shrink: 0;
/* optional shorthand = flex: 1 0 auto; */
}
.element_b {
/* no special css needed */
}
注意:您可能需要根据要定位的浏览器添加供应商前缀。
将容器设置为flex,元素会自动调整为内容。
设置.element_a&#39; flex-grow为1将确保它填满剩余空间。 Flex-shrink将确保.element_b的内容不会重叠。