воскресенье, 18 августа 2013 г.

Выравнивание горизонтального меню по центру блока/страницы

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



Привычный всем html-код для меню:
CSS для горизонтального меню:

.menu{
width: 700px; /* ширина обертки меню */
height: 30px; /* высота */
margin: 0 auto; /* центрирование обертки! меню */
background: #30a8c3; /* цвет фона */
}

.menu ul li{
list-style: none; /* убираем маркеры */
float: left; /* выстраиваем пункты меню по горизонтали */
}

.menu ul li a{
text-decoration: none; /* убираем подчеркивание ссылки */
display: block; /* делаем ссылки блочными */
padding: 2px 10px; /* отступы */
color: #FFFFFF; /* цвет ссылок */
}

Но, как мы видим, меню не отцентрировано внутри блока-обертки и все пункты прижимаются к левому краю (float: left):


Первое, что приходит в голову,- использование margin: 0 auto или text-align: center. Но:

  • margin: 0 auto подразумевает фиксированную ширину, которая для пунктов меню заранее неизвестна;
  • text-align: center в <ul> не работает, если для <li> задано float: left.

Сразу отбросим первый вариант и попробуем что-то сделать со вторым.

Итак, если нам нужно, чтоб пункты меню отображались по-горизонтали без float: left;, можно применить display: inline-block; для тега <li>. После этого можно задать в теге <ul> выравнивание содержимого по центру:

.menu ul{
text-align: center; /* центрируем содержимое */
}

.menu ul li{
list-style: none; /* убираем маркеры */
display: inline-block; /* вместо float: left; */
}