我有不同数量的内联块div,我想集体占用其父母的100%。这可以在没有JavaScript 的情况下完成吗?我能想到的唯一方法是使用表格,但使用表格仅用于布局目的当然是不好的做法。
|----------------------|
|{ div 1 }{ div 2 }|
or
|{div 1}{div 2}{div 3}|
|----------------------|
我也试过{ display:block; float:left; }
,但似乎没有什么区别。
答案 0 :(得分:27)
您可以在内部div上使用display:table-cell
来执行此操作。对于浏览器来说,内部div的行为类似于表格单元格,它还需要两层包含元素:一个用作表格,另一个用作表格行。
对于这样的结构:
<div class="outer">
<div class="middle">
<div class="inner">Item 1</div>
<div class="inner">Item 2</div>
<div class="inner">Item 3</div>
<div class="inner">Item 4</div>
</div>
</div>
使用此CSS:
div.inner {display:table-cell;}
div.outer {display:table;}
div.middle {display:table-row;}
一个好用的结构是包含在DIV中的UL:DIV用作表,UL用作行,LI用作表格单元。
这种技术在旧版浏览器中得不到很好的支持 - 对于任何比IE8更早的版本,你完全没有运气。
如果您需要更多示例代码,请告诉我们!
答案 1 :(得分:9)
接受的答案错过了一个重要的CSS属性,这是必要的工作:
table-layout:fixed;
这是正确答案:
HTML:
<div class="outer"><div class="middle">
<div class="inner">Item 1</div>
<div class="inner">Item 2</div>
<div class="inner">Item 3</div>
<div class="inner">Item 4</div>
</div>
</div>
CSS:
div.outer {display:table; table-layout: fixed;}
div.middle {display:table-row;}
div.inner {display:table-cell;}
答案 2 :(得分:6)
您可以在此处使用css3优惠。我现在也面临这个问题,我已经使用下面的示例代码
修复了这个问题
.parent-container {
padding: 0;
margin: 0;
list-style: none;
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-webkit-flex-flow: row wrap;
justify-content: space-around;
-webkit-justify-content: space-around;
flex-wrap: nowrap;
-webkit-flex-wrap: nowrap;
}
.child-item {
margin: 5px;
text-align: center;
padding: 10px;
background-color: red;
color: #fff;
}
&#13;
<ul class="parent-container">
<li class="child-item">1</li>
<li class="child-item">2</li>
<li class="child-item">3</li>
<li class="child-item">4</li>
<li class="child-item">5</li>
<li class="child-item">6</li>
<li class="child-item">7</li>
</ul>
&#13;
谢谢&amp;问候, Lingeshram
答案 3 :(得分:1)
我想详细说明@lingeshram的答案。 Flexbox的发展如此之快,我认为这确实是现在的方法。如果您必须支持旧版浏览器,请务必先检查caniuse。
.container {
display: flex; /* or inline-flex */
}
.col {
flex-grow: 1;
border: 1px solid #000;
}
.col2x {
flex-grow: 2;
border: 1px solid #000;
}
Evenly split three children
<div class='container'>
<span class='col'>Inner 1</span>
<span class='col'>Inner 2</span>
<span class='col'>Inner 3</span>
</div>
<br>
Evenly split two children
<div class='container'>
<span class='col'>Inner 1</span>
<span class='col'>Inner 2</span>
</div>
<br>
Split three children, but the middle is twice the size of the others
<div class='container'>
<span class='col'>Inner 1</span>
<span class='col2x'>Inner 2</span>
<span class='col'>Inner 3</span>
</div>
对于使用flexbox的不同方式,guide非常好。