2013-06-12 3 views
1

У меня есть простое меню, как это:Вертикального центрирования якоря внутри плавал элементы списка

<ul class="menu"> 
    <li> 
     <a href="">Home</a> 
    </li> 
    <li> 
     <a href="">Products</a> 
    </li> 
    <li> 
     <a href="">Contact</a> 
    </li> 
</ul> 

В списке элементов неупорядоченного списка плавал слева и имеет фиксированную height:

ul.menu li { 
    float: left; 
    height: 50px; 
    list-style: none; 
    padding: 0 10px; 
    background-color: yellow; 
} 

jsFiddle

Теперь я хотел бы вертикально центрировать якоря внутри элементов списка.

Каков наилучший подход для этого?

ответ

4

Для вертикального центра текста установите line-height на то же значение, что и высота элемента. Видя, как у вас есть набор высоты, это будет работать без проблем:

.menu li a { 
    line-height: 50px; 
} 

http://jsfiddle.net/QNMy7/3/

+0

быстрее, чем у меня!+1 – zkanoca

+0

Это работает, спасибо. Можно ли удалить свойство height из элементов 'li'? Теперь это отчасти избыточно, поскольку я отношусь к – Alexxus

+0

. Если вы удалите высоту элемента li, это может испортить центрирование текста. Высота строки указывает высоту каждой строки текста на 50 пикселей высотой, такую ​​же, как высота элемента, чтобы она соответствовала высоте. Если у вас более одной строки, следующая строка не будет видна. – Kyle

0
.menu li { 
    float: left; 
    height: 50px; 
    padding: 0 10px; 
    list-style: none; 
    background-color: yellow; 
    text-align: center; 
    min-width: 100px; 
} 

.menu li a 
{ 
    line-height: 50px; 
} 
0

вопрос с .menu li класса. Вы указали float, чтобы он переместился влево, но чтобы сделать это vertically-aligned, вы должны удалить float и применить display:table-cell;, чтобы получить vertical-alignment.

НАПРИМЕР,

.menu li { 
    /*float: left;*/ 
    display:table-cell; 
    vertical-align:middle; 
    height: 50px; 
    padding: 0 10px; 
    list-style: none; 
    background-color: yellow; 
} 

Вот WORKING SOLUTION

Надеется, что это помогает.

+0

Что? С тех пор, когда вы _need_ должны иметь «display: table-cell;», чтобы включить вертикальное центрирование. Конечно, это единственный способ сделать это, но это не единственный. – Kyle

+0

Да. Это один из способов сделать это, а не единственный. - @KyleSevenoaks – Nitesh

+0

Я не хочу удалять 'float'. Элементы списка должны оставаться плавающими влево – Alexxus

2

добавить высоту строки равна высота:

.menu li { 
    float: left; 
    height: 50px; 
    **line-height: 50px;** 
    padding: 0 10px; 
    list-style: none; 
    background-color: yellow; 
} 
+0

+1 для добавления 'line-height' в' .menu li'. Посмотрите мои комментарии к ответу Кайла Севеноукса – Alexxus

0

Вы можете использовать line-height для контроля вертикального выравнивания, но это работает только надежно по каждому элементу списка, если все они ограничены одной линии.

Самый надежный способ добиться этого путем удаления поплавок & отображения элемента списка как CSS table-cell:

.menu { 
    display: table; 
} 

.menu li { 
    height: 50px; 
    padding: 0 10px; 
    list-style: none; 
    background-color: yellow; 
    display: table-cell; 
    vertical-align: middle; 
} 

.menu li a { 
    display: block; 
} 

Таким образом, если одна из ссылок падает на две строки, она по-прежнему вертикально в центре , как показано здесь:

http://jsfiddle.net/QNMy7/6/

+0

[Это правильно и уже ответили.] (Http://stackoverflow.com/questions/17064436/vertical-centering-anchors-inside-floated-list-items/17064554#17064554) – Nitesh

+0

. .. Хорошо. – blend

0

Кроме того, чтобы плавать и таблицы ячейки, вы можете также использовать встроенный блок:

.menu li { 
    display: inline-block; 
    line-height: 50px; 
    padding: 0 10px; 
    list-style: none; 
    background-color: yellow; 
} 
.menu li a { 
    vertical-align: middle; 
} 

Подобно другим должностям, я поставил line-height: 50px на .menu li и vertical-align: middle на a элементов. В этом примере вы можете опустить высоту.

См демо: http://jsfiddle.net/audetwebdesign/QNMy7/7/

+0

'inline-block' добавляет неприятные промежутки между элементами. Я уже пробовал это, прежде чем отправлять – Alexxus

+1

Действительно, эти неприятные небольшие пространства иногда раздражают. В некоторых случаях макет требует левого/правого полей между элементами, поэтому это не становится проблемой. Маленькие пробелы исчезают, если код html не содержит лишнего пробела, но это также является неприятностью. Если вам нужны элементы для выравнивания от края до края, поплавки - это путь. –

+0

Существует статья об удалении неприятных мест на [css-tricks.com] (http://css-tricks.com/fighting-the-space-between-inline-block-elements/). Но после прочтения я решил придерживаться поплавков. – Alexxus

Смежные вопросы