Если я правильно понимаю:
- Вы хотите список.
- Вы хотите, чтобы каждый элемент списка был одинаковой ширины.
Вы хотите, чтобы эта ширина была шириной содержимого самого широкого элемента списка
Вам также нужен способ равномерного размещения элементов списка по контейнеру,
это кажется несовместимым с 3, потому что тогда они будут распределяться не равномерно по содержанию, а по размеру контейнера.
Итак, я предполагаю, что вы хотите два разных решения.
Я думаю, что вы можете сделать
<style>
ul, li{float:left;margin;padding:0;display:block;}
li {clear:left;width:100%;margin:1px 0;background:#03a;}
</style>
<ul>
<li>Item 1</li>
<li>Item 2 which is longer</li>
<li>Item 3</li>
</ul>
работает в некоторых браузерах. Кажется, я помню, что он не работал в IE, и мне пришлось заставить его работать с помощью выражений CSS.
Идея состоит в том, что ul и li плавают, чтобы уменьшить их до ширины содержимого.
Ли очищаются и устанавливаются на 100% ширины их контейнера, того же контейнера, который уменьшен до их размера.
-
Ваш другой вариант невозможен в CSS, если вы не знаете количество элементов списка.
Хотя, если вы не знаете количество элементов списка, это означает, что сценарии выполняются либо на стороне сервера, либо на стороне клиента, и вы можете узнать количество элементов. :)
В прошлом я решил эту проблему, дав ul-классу с количеством детей в нем, и используя множество правил CSS и надеясь, что кто-то придерживается.
например
<style>
ul.lis1 li {width:100%}
ul.lis2 li {width:50%}
ul.lis3 li {width:33.3%}
ul.lis4 li {width:25%}
/* ... you can keep going forever here, though there'll be a point at which they become too thin and your UI breaks anyway, */
</style>
<ul class="lis4"> <!-- lis4 is generated by PHP or Ruby or whatever -->
<li>item 1</li>
<li>item 2</li>
<li>item 3</li>
<li>item 4</li>
</ul>