CSS - плавающие LI - больший контент портит следующую строку - PullRequest
3 голосов
/ 23 октября 2010
<style>
ul{margin:0px;padding:0px;}
ul li{margin:0px 5px 5px 0px;padding:0px;list-style-type:none;float:left;}
</style>

<ul class="clearfix">
    <li>&nbsp;</li>
    <li>&nbsp;</li>
    <li>&nbsp;</li>
    <li>&nbsp;</li>
    <li>&nbsp;</li>
    <li>&nbsp;</li>
</ul>

first li содержит больше контента, чем остальные.

Итак, у меня следующая проблема:
проблема http://img830.imageshack.us/img830/240/problemc.png

Но как мне переместить следующий ряд вниз, чтобы это выглядело так: хочу это http://img440.imageshack.us/img440/9750/solutionm.png

Я пытался использовать display: inline-block; вместо float: left; для lis , который работает, но я все равно предпочел бы использовать float: left; overline-block.

Есть идеи, как это сделать?

Решение для IE:
http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block/

Ответы [ 3 ]

0 голосов
/ 23 октября 2010

Вы не можете сделать это, используя только float:left;блоки просто попадают на место, где они подходят, как показывает ваш первый пример.Если вы хотите, чтобы ваш контент всегда отображался в трех столбцах, вы можете программно очистить плавающий элемент для первого элемента в каждой строке.

0 голосов
/ 28 октября 2010

Лучшее решение - использовать малоизвестный стиль отображения, называемый table-cell.

Я должен был сделать это несколько раз. Вот как вы это делаете:

/* -*- CSS -*- */
ul li .wrapper
{
    display:table-cell;
    width:100px;     /*replace here*/
    min-height:100px;/*  "     "   */
}

ul li
{
    float:left;
    display:inline-block;
}
ul
{
    display:table;
}

...

<!-- HTML -->
<ul>
    <li><div class="wrapper">my-content</div></li>
    <li><div class="wrapper">my-content</div></li>
    <li><div class="wrapper">my-content</div></li>
    <li><div class="wrapper">my-content</div></li>
</ul>    

Как это работает:

Когда анализатор видит, что существует объект UL, он обрабатывает его как таблицу, а не список. Это дает вам явное преимущество в том, что вы начинаете / действуют / как будто работаете с таблицами (но это не так!)

Затем правило запускается для класса-оболочки - это создает «ячейку таблицы». Мы не хотим помещать это в li, потому что OTHERWISE li будет действовать как ячейка таблицы. Это довольно плохо. работа заключается в том, что ваш li фактически выровнен по левому краю. Есть некоторый аргумент, является ли хорошей идеей сделать это таким образом - это «Наиболее эффективный», потому что он заставляет блочную модель соответствовать. Это ужасно, я знаю.

ПРИЧИНА плохо, что li будет рассматриваться как табличная ячейка, в том, что он не будет переноситься. Причина, по которой он не будет оборачиваться, состоит в том, что ячеистые таблицы не должны оборачиваться.

Существует еще одно решение, которое может работать, однако я его не проверял.

/* -*- CSS -*- */
ul li { display: inline-block; float:left; min-height:200px;width:200px; }

Это не так некрасиво, но должно работать, заставляя блочную модель принудительно выравнивать.

0 голосов
/ 23 октября 2010

Прежде всего: Вы уверены, что используете правильную разметку? Список обычно не выглядит так.

Во-вторых. Вы знаете, сколько предметов у вас будет в ряд? На вашем изображении они, кажется, имеют одинаковую ширину. Если вы знаете, что можете добавить clear:both; к четвертому li (и другому, что вам может понадобиться) и принудительно отключить. Это был бы единственный способ сделать это с оставленным плавающим li s.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...