Если я правильно понимаю:
- Вы хотите список.
- Вы хотите, чтобы каждый элемент списка был одинаковой ширины.
Вы хотите, чтобы эта ширина была шириной содержимого самого широкого элемента списка.
Вам также нужен способ равномерного распределения элементов списка по контейнеру, это кажется несовместимым с 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 плавают, чтобы сжать их до ширины содержимого. li очищаются и устанавливаются на 100% ширины их контейнера, тот же самый контейнер, который сжимается до их размера.
--
Ваш другой вариант невозможен в CSS, если вы не знаете количество элементов списка. Хотя, если вы не знаете количество элементов списка, это означает, что сценарии выполняются либо на стороне сервера, либо на стороне клиента, и вы можете узнать количество элементов. :)
В прошлом я решал эту проблему, давая ul класс с количеством дочерних элементов в нем, используя множество правил CSS и надеясь, что одно из них приживется.
eg
<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>
person
robotdana
schedule
16.08.2010