CSS → Равномерное выравнивание блоков по ширине

10.10.2014

Очень распространённая задача — равномерно выровнять пункты меню неизвестного размера по ширине контейнера:

Решение:

HTML

<ul>
  <li>Пункт 1</li>
  <li>Пункт 2</li>
  <li>Пункт 3</li>
  <li>Пункт 4</li>
</ul>

CSS

ul {
  text-align: justify;
  line-height: 0;
  
  /* Opera Presto */
  font-size: 1px;
  
  /* IE6-7 */
  text-justify: newspaper; 
  zoom: 1;
  text-align-last: justify;
}
ul:after {
  width: 100%;
  height: 0px;
  visibility: hidden;
  overflow: hidden;
  content: "";
  display: inline-block;
}
ul li  {
  display: inline-block;
  text-align: left;

  /* Восстанавливаем обнулённые свойства */
  line-height: normal;
  font-size: 14px;

  /* Opera Presto */
  vertical-align: top;

  /* IE6-7 */
  //display : inline;
  //zoom : 1;
}

Работает в Firefox 8+, Opera 11.51+, IE6+, Safari 5.1+, Chrome.
Демо.

Почему именно так — подробно расписано в статье на css-live.ru.
Плюс недавно вышло обновление способа с использованием Flexbox.

Похожие записи

Комментарии

Мария Шерскова
11.10.2014, 17:50

Век живи, век учись. Казалось бы - простое и даже почти очевидное решение. Но нет ведь, даже в голову бы такое не пришло. Спасибо! :)

Вовандр
12.10.2014, 04:05

Сто лет в обед данному способу, сейчас же flexbox для фолбэка modernizr

для ul li нужно еще выставить min-height, какой-нить абстрактный, и _height

Способ, действительно, не новый (статья по первой ссылке датирована 2012-м), но ценность именно этого варианта — в подробном обосновании (как теоретического, по стандарту, так и практического, с учетом особенностей разных браузеров, в т.ч. устаревших). Только ради этого ту статью стоит прочесть:)

А за простым современным решением, где фоллбэк предусмотрен по построению и никакой модернайзер не нужен, как раз есть смысл сходить по второй ссылке и выбрать оптимальный для себя уровень поддержки «динозавров».

Добавить комментарий