lw1
@lw1
Пью пуэр.

Как растянуть боковые отступы li в меню?

Имеется ul с фиксированной шириной, и пункты меню (li)
нужно чтобы пункты меню растягивались по ширине ul.

Для примера:

| item | item | item | item |
| item | item |item| item | item |
  • Вопрос задан
  • 3163 просмотра
Решения вопроса 4
Имитировать поведение таблицы через значения table/table-cell свойства display.
Ответ написан
Комментировать
zenwalker
@zenwalker
0xABADBABE
text-align: justify же

jsfiddle.net/s7zpH
Ответ написан
Комментировать
@Myateznik
Попробуйте свойство CSS3 flex.
ul{display:flex;}
li{display:block;flex:1;}

Пример 1 (с учётом margin у элементов li) · Пример 2 (Без учёта margin)
Одна проблема нужно учитывать совместимость с браузерами
Ответ написан
Комментировать
@ModestesGonze
Так?
Для равномерного распределения пунктов меню, задаешь для родителя (ul) display: table; а для потомков (li) display: table-cell;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
ixon
@ixon

Вот, если я правильно понял.
ul{text-align: justify;}
ul li{display:block;float:left}
Ответ написан
Статейка про выравнивание. Все можно не читать, а прокрутить вниз статьи, там наиболее рабочий и адекватный пример.
Ответ написан
Комментировать
mccrush
@mccrush
Vue.js Developer
Может что-то не понял, но если количество li фиксировано, разве width: *% не поможет?
jsfiddle.net/mccrush/s7zpH/4

А если количество li будет меняться, высчитывать*% через js.
Велосипед, но едет :)
Ответ написан
@telegraphnij_stolb
Оба ответа не полные.

1) display: table-cell

свойства задать нужно ячейкам(для ul не нужно задавать display: table)

li {
  display: table-cell;
  width: 1%;
}


При этом будет глючить при адаптиве в Safari некоторых версий(подробнее)

2) text-align: justify;

свойство работает только если есть как минимум 2 строки. Значит нужно сымитировать 2-ую строчку при помощи псевдоэлемента. Из-за этого появится ненужный отступ снизу. Убрать можно либо установив для меню высоту, либо line-height: 0; (font-size: 0 очень глючный, его ставить не советую). Потом line-height нужно будет явно задать для li.

Задать высоту - наилучший вариант, т.к. в варианте с line-height, если нужна поддержка Opera 10-11, то в них надо еще и font-size 0.5px задавать. И все равно 1px отступ снизу останется. А с высотой проблем нет.

код:

ul {
  text-align: justify;
  text-justify: distribute-all-lines;  /* IE */
  height: 40px; /* (либо line-height: 0;) */
}

ul: after {
  display: inline-block;
  width: 100%;
  height: 0;
}

li {
  display:  inline-block;
  vertical-align: top;  /* (если задали line-height: 0 для ul, то тут нужно перезадать line-height)*/
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы