Разделить ширину элемента между дочерними divs с CSS
У меня есть различное количество встроенных блоков div, которые я хочу коллективно взять на себя 100% от своего родителя. Можно ли это сделать без JavaScript? Единственный способ, о котором я могу думать, - это стол, но, конечно, плохая практика использовать таблицу исключительно для целей макета.
|----------------------|
|{ div 1 }{ div 2 }|
or
|{div 1}{div 2}{div 3}|
|----------------------|
Я также пробовал { display:block; float:left; }
, но, похоже, это не имеет значения.
Ответы
Ответ 1
Вы можете использовать display:table-cell
для своих внутренних divs для этого. Для того, чтобы браузер делал внутренние divs как ячейки таблицы, ему также нужны два слоя содержащихся элементов: один для действий в качестве таблицы, а другой - как таблица-строка.
Для такой структуры:
<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, вам совершенно не повезло.
Сообщите мне, нужен ли вам более примерный код!
Ответ 2
В принятом ответе пропустили важное свойство 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;}
Ответ 3
Вы можете использовать преимущества 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>