Как равномерно распределять пункты меню с помощью CSS, когда ширина и количество не известны?
Я читал много о равномерном распространении элементов с использованием css, но каждое найденное решение требует, чтобы вы знали и определяли ширину и/или количество распределяемых элементов.
У меня есть контейнер с фиксированной шириной - внутри здесь может быть любое количество элементов li автоматической ширины, которые должны распределяться равномерно по родительскому элементу слева направо.
Вот моя разметка - за исключением того, что в них может быть любое количество вкладок с текстом любой длины.
<ul class="tabs">
<li class="tab active" id="tab-1"><span class="tab-title">Tab 1</span></li>
<li class="tab " id="tab-2"><span class="tab-title">Tab 2</span></li>
<li class="tab " id="tab-3"><span class="tab-title">Tab 3</span></li>
<li class="tab " id="tab-4"><span class="tab-title">Tab 4</span></li>
</ul>
So Even Distribution with css, когда количество элементов и ширина динамические - это можно сделать?
Похоже на такую очевидную вещь, которую нужно делать - Damn CSS!
Ответы
Ответ 1
Для этого можно использовать свойство css display:table-cell
. Напишите вот так:
.tabs{
display:table;
width:300px;
border:1px solid green;
}
.tabs li{
display:table-cell;
border:1px solid red;
height:40px;
}
Отметьте http://jsfiddle.net/px7Uf/
Ответ 2
Вот решение, которое сохраняет даже ширину, когда содержимое переполняет выделенную ширину ячейки, используя flexbox:
ul.tabs {
display: flex;
flex-wrap: nowrap;
align-items: stretch;
list-style-type: none;
margin: 0;
padding: 0;
}
ul.tabs>li.tab {
flex: 1;
text-align: center;
/* just adding visibility to the tabs */
border: 1px solid rgba(0,0,0,.12);
padding: 10px;
}
<ul class="tabs">
<li class="tab active" id="tab-1"><span class="tab-title">Tab 1</span></li>
<li class="tab " id="tab-2"><span class="tab-title">Tab 2</span></li>
<li class="tab " id="tab-3"><span class="tab-title">Tab 3. This is a very long tab and should overflow...</span></li>
<li class="tab " id="tab-4"><span class="tab-title">Tab 4</span></li>
</ul>