用CSS划分Child Divs之间的元素宽度

时间:2011-07-08 20:10:51

标签: css layout semantic-markup

我有不同数量的内联块div,我想集体占用其父母的100%。这可以在没有JavaScript 的情况下完成吗?我能想到的唯一方法是使用表格,但使用表格仅用于布局目的当然是不好的做法。

|----------------------|
|{  div 1  }{  div 2  }|
           or
|{div 1}{div  2}{div 3}|
|----------------------|

我也试过{ display:block; float:left; },但似乎没有什么区别。

4 个答案:

答案 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优惠。我现在也面临这个问题,我已经使用下面的示例代码

修复了这个问题

&#13;
&#13;
.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;
&#13;
&#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非常好。