Разделите ширину элемента между дочерними элементами с помощью CSS - PullRequest
22 голосов
/ 09 июля 2011

У меня есть различное количество встроенных блоков, которые я хочу, чтобы все вместе занимать 100% от их родителя.Можно ли это сделать без JavaScript ?Единственный способ, о котором я могу подумать, - это использовать таблицу, но, конечно, плохая практика - использовать таблицу исключительно для макета.

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

Я также пробовал { display:block; float:left; }, но, похоже, это неразница.

Ответы [ 3 ]

27 голосов
/ 09 июля 2011

Вы можете использовать display:table-cell на своих внутренних элементах div, чтобы сделать это. Чтобы браузер заставлял внутренние 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;}

Хорошей структурой для использования является UL, заключенный в DIV: DIV действует как таблица, UL - как строка, а LI - как ячейки таблицы.

Этот метод не очень хорошо поддерживается в старых браузерах - для всего, что старше IE8, вам не повезло полностью.

Дайте мне знать, если вам нужно больше примеров кода, чем это!

9 голосов
/ 03 ноября 2015

В принятом ответе отсутствует важное свойство CSS, которое необходимо для работы:

макет таблицы: исправлено;

Это правильный ответ:

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;}
6 голосов
/ 26 ноября 2015

Вы можете воспользоваться преимуществами 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;
}
<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>

С уважением, Лингешрам

...