CSS 使最后 child 动态获取 parent 中剩余的宽度
CSS Make last child to dynamically take width which left in parent
在我的例子中,childs 号码是从服务器端返回的。如果少于 6 个 child,我需要添加虚拟 child 来代替 parent.
例如:
1 种情况有两个 child
2 三个 child 的情况
<div id="container">
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="big-child"></div>
</div>
#container{
width: 100%;
height: 200px;
background-color: gray;
}
#container > div {
float: left;
background-color: black;
width: 100px;
height: 100px;
margin-right: 20px;
}
.big-child {
width: 59%!important;
margin-right: 0px!important;
}
我如何仅使用 CSS 并且不使用 javascript 动态改变 child 宽度来实现此目的?
更新
找到了好的 website,它根据您的盒子需要生成 CSS 代码。
如果要使用浮点数,可以在最后一个child上使用overflow:hidden;
强制占用剩余的space。
替代解决方案可能是使用 flexbox
(取决于您所需的浏览器支持)或 CSS 表。
#container {
width: 100%;
height: 200px;
background-color: gray;
}
#container > div {
box-sizing: border-box;
margin-right: 0;
height: 100px;
}
#container > div:not(:last-child) {
margin-right: 10px;
}
.child {
float: left;
background-color: black;
width: 100px;
}
.big-child {
overflow: hidden;
background-color: black;
margin: 0 20px;
}
<h4>Three Blocks</h4>
<div id="container">
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="big-child"></div>
</div>
<h4>Two Blocks</h4>
<div id="container">
<div class="child"></div>
<div class="child"></div>
<div class="big-child"></div>
</div>
在现代浏览器上你可以使用 flexbox
http://codepen.io/anon/pen/yyMgQL
CSS:
#container {
display: -ms-flexbox; /* IE 10 syntax */
display: flex;
width: 100%;
height: 200px;
background-color: gray;
}
#container > div {
background-color: black;
width: 100px;
height: 100px;
margin-right: 20px;
}
#container > div.big-child {
-ms-flex-grow: 1; /* IE 10 syntax */
flex-grow: 1;
margin-right: 0;
}
更多信息:
- http://css-tricks.com/snippets/css/a-guide-to-flexbox/
- http://css-tricks.com/old-flexbox-and-new-flexbox/
浏览器支持:http://caniuse.com/#feat=flexbox
(请注意 IE10
受支持,但它实现了较旧的语法)
在我的例子中,childs 号码是从服务器端返回的。如果少于 6 个 child,我需要添加虚拟 child 来代替 parent.
例如:
1 种情况有两个 child
<div id="container">
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="big-child"></div>
</div>
#container{
width: 100%;
height: 200px;
background-color: gray;
}
#container > div {
float: left;
background-color: black;
width: 100px;
height: 100px;
margin-right: 20px;
}
.big-child {
width: 59%!important;
margin-right: 0px!important;
}
我如何仅使用 CSS 并且不使用 javascript 动态改变 child 宽度来实现此目的?
更新
找到了好的 website,它根据您的盒子需要生成 CSS 代码。
如果要使用浮点数,可以在最后一个child上使用overflow:hidden;
强制占用剩余的space。
替代解决方案可能是使用 flexbox
(取决于您所需的浏览器支持)或 CSS 表。
#container {
width: 100%;
height: 200px;
background-color: gray;
}
#container > div {
box-sizing: border-box;
margin-right: 0;
height: 100px;
}
#container > div:not(:last-child) {
margin-right: 10px;
}
.child {
float: left;
background-color: black;
width: 100px;
}
.big-child {
overflow: hidden;
background-color: black;
margin: 0 20px;
}
<h4>Three Blocks</h4>
<div id="container">
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="big-child"></div>
</div>
<h4>Two Blocks</h4>
<div id="container">
<div class="child"></div>
<div class="child"></div>
<div class="big-child"></div>
</div>
在现代浏览器上你可以使用 flexbox
http://codepen.io/anon/pen/yyMgQL
CSS:
#container {
display: -ms-flexbox; /* IE 10 syntax */
display: flex;
width: 100%;
height: 200px;
background-color: gray;
}
#container > div {
background-color: black;
width: 100px;
height: 100px;
margin-right: 20px;
}
#container > div.big-child {
-ms-flex-grow: 1; /* IE 10 syntax */
flex-grow: 1;
margin-right: 0;
}
更多信息:
- http://css-tricks.com/snippets/css/a-guide-to-flexbox/
- http://css-tricks.com/old-flexbox-and-new-flexbox/
浏览器支持:http://caniuse.com/#feat=flexbox
(请注意 IE10
受支持,但它实现了较旧的语法)