Создание элементов автоматически соответствует ширине родительских таблиц/javascript
Можно ли создать div, содержащий несколько ящиков, которые автоматически соответствуют размеру родителя (распределяются равномерно) без использования таблицы или Javascript? Я понимаю, что это возможно с table-layout:fixed;
, но я попытался оживить это, и он, похоже, не очень хорошо работает. Следующая картина - пример того, что я имею в виду:
![A gif showing autosizing boxes A gif showing autosizing boxes]()
Я пытаюсь увеличить ширину одного поля внутри div, который затем будет обрабатывать все остальные поля автоматически, чтобы все поля вписывались в div равномерно. Мне нужно, чтобы он был анимированным, а не только мгновенным, и в этом случае я бы просто использовал таблицу. Я также экспериментировал с ним, используя Javascript, анимируя его с помощью -webkit-transition
, но это не оказалось очень оживленным. Вместо того, чтобы увеличивать/уменьшать размер, окно, казалось, начинало его ширину при 0px, а затем растягивалось до заданного им размера. (это использовало таблицу с table-layout:fixed
. Есть ли чистый способ CSS/HTML для этого, или он требует использования Javascript и/или таблицы?
Ответы
Ответ 1
Используя фиксированное число детей, это возможно без таблиц (хотя вам нужны табличные дисплеи), вот CSS, который я использовал:
.parent{width:400px;height:100px;display:table}
.parent div{display:table-cell;border:1px solid #000;
-webkit-transition:width 1s;width:20%}
.parent:hover div{width:10%}
.parent div:hover{width:60%}
Вам нужно вручную рассчитать проценты за лучшие результаты в анимации. Демо-ролик:
http://jsbin.com/ubucod/1
Ответ 2
Если вы хотите, чтобы ящики отображались по клику/касанию, вам нужен Javascript.
Если вы хотите, чтобы ящики отображались только при опрокидывании, вы можете применить css к родительскому элементу, чтобы по умолчанию установить все поля в один процент и изменить их при опрокидывании.
Это решение работает только для фиксированного количества ящиков.
#Container .box{
width: 20%;
transition: width 0.2s;
}
#Container:hover .box{
width: 10%;
}
.box:hover{
width: 60%;
}
Я не тестировал его, но он должен работать.
Ответ 3
HTML:
<div class="pushercolumn"></div>
<div class="pushedcolumn">
<div class="unit"></div>
<div class="unit"></div>
<div class="unit"></div>
<div class="unit"></div>
</div>
CSS
.pushercolumn {
float: left;
width: 30%; /*or whichever you want*/
}
.pushedcolumn {
overflow: hidden; /* guarantees the .pushedcolumn is pushed horizontally by the floats */
font-size: 0; /* removes white-space. choose your preferred method*/
}
.unit {
display: inline-block;
width: 25%; /* assuming there are 4 boxes in the right column. this is the only variable you have to update based on the circumstances */
}
http://jsfiddle.net/joplomacedo/xYAdR/