CSS: динамическая ширина дочерних элементов должна соответствовать родительской ширине

#css #css-float

#css #css-float

Вопрос:

При написании CSS мне всегда не хватает функции автоматической дочерней ширины для плавающих дочерних элементов, чтобы их общая ширина соответствовала ширине родительского элемента.
На самом деле мне трудно найти фразу в окне поиска Google, поэтому вы можете рассмотреть этот пример:
A ul содержит четыре li
li has float: left; list-style: none; и, поскольку есть четыре li элемента, каждый имеет width: 25%;
Что, если я хочу сделать количество li элементов переменным, вместо фиксированных четырех, чтобы li получить ширину 20%, когда их пять, или ширину 10%, если их десять, или ширину 50%, когда их два и т. Д.? Учитывая, что ul всегда имеет явно фиксированную ширину.

Ответ №1:

Возможно, вы сможете использовать гибкий интерфейс css3.

 ul{display:box;}
li{box-flex:1;}
  

Вот jsfiddle для демонстрации (возможно, вам потребуется изменить -webkit на -moz или -o) http://jsfiddle.net/wKKte /

Комментарии:

1. Даже не знал об этом свойстве, я бы сказал, что это правильный путь. К черту обратную совместимость.

2. Именно так я и хочу, чтобы это работало, у вас есть вопрос, выбранный кандидат на ответ. Но эти префиксы подразумевают, что они не поддерживаются большинством браузеров. Если только можно найти более стандартный метод…

3. @Andreas Carlbom Что вы имели в виду под «обратной совместимостью»? Был ли это ваш подход, отображение: таблица, которую вы считаете устаревшей?

4. Нет, я имел в виду, что я предпочитаю подход Гарета, но он вообще не очень совместим с обратной связью, поскольку он новый в спецификации CSS3. Мой дисплей: таблица немного более совместима, по крайней мере, с IE8, но, как услужливо указал thirtydot, она эффектно провалилась, когда содержимое элементов списка не имело одинаковой длины.

5. @rahmanisback Да, к сожалению, в настоящее время это работает только в Webkit и Gecko. Это позор, потому что он идеально подходит. По-видимому, IE10 будет поддерживать это…

Ответ №2:

Попробуйте отобразить: таблица;

Вот с этим возиться:

http://jsfiddle.net/7D5cM/