2015-08-06 2 views
0

Я недавно обманывал HTML/CSS, и я пытаюсь вертикально выровнять текст в li так, чтобы он находился в центре. Я видел, что этот вопрос (или некоторые его варианты) спросил несколько раз, поэтому я заранее извиняюсь за задание вопроса. Я уверен, что вы устали видеть, но я не могу получить ни одно из предлагаемых решений работать. Я также стараюсь не устанавливать значение height/line-height для li, так как я хотел бы, чтобы это отрегулировало размер экрана.Вертикальное выравнивание текста в li

Вот HTML:

<ul id="nav"> 
    <li><a href="">Home</a></li> 
    <li><a href="">About</a></li> 
    <li><a href="">Experience</a></li> 
    <li><a href="">Contact</a></li> 
</ul> 

Вот CSS:

#nav { 
    position: absolute; 
    width: 100%; 
    height: 100vh; 
    top: 0; 
    left: 0; 
    list-style: none; 
    padding: 0; 
    margin: 0; 
} 

#nav li { 
    text-align: center; 
    height: 25%; 
    width: 100%; 
    margin: 0 auto; 
} 

#nav li a { 
    display: block; 
    height: 100%; 
} 

#nav li a:hover { 
    background: #ccc; 
} 

У меня тоже есть этот fiddle набор в случае, если вы хотите возиться с ним и посмотреть, если вы можете получить он работает. Благодаря!

ответ

1

Установите display: table; на вашем li и

display: table-cell; 
vertical-align: middle; 

на ваших a

конечных стилей:

#nav li { 
    display: table; 
    text-align: center; 
    height: 25%; 
    width: 100%; 
    margin: 0 auto; 
} 

#nav li a { 
    display: table-cell; 
    height: 100%; 
    vertical-align: middle; 
} 

Rev 6 of your fiddle

+1

Спасибо! Раньше я пытался использовать 'table' и' table-cell', но я предполагаю, что применяю их к неправильным элементам. – Jack

0

Попробуйте сделать ваш liinline-block, если вы хотите, чтобы они были рядом с eachother, или как блок, если вы хотите, чтобы они под друг друга. Удостоверьтесь, что вы даете li элементам фиксированную ширину и устанавливаете их выравнивание текста как centered.

+0

Спасибо за быстрый ответ! Я просто установил 'li'' display: block', но это, похоже, ничего не изменило. Что касается договоренности о себе, он выглядит так, как я этого хочу. Я просто хочу сосредоточить ссылки по вертикали внутри каждого 'li'. ** Редактировать: ** Только что увидел ваш комментарий - не беспокойтесь! – Jack

1

Вы можете просто сделать линейку высоту #nav Li 25% от высоты окна просмотра, как так

#nav li { 
text-align: center; 
height: 25%; 
width: 100%; 
margin: 0 auto; 
line-height: 25vh; /* this is the only thing you need to add */ 
} 

Это очень простое и короткое, и будет работать с любыми изменениями в текст (например, размер шрифта и т. д.) или список. Неважно, сколько элементов вы добавляете или удаляете из списка или какие изменения вы делаете на высоту #nav или элементов списка. См first working revision of your jsFiddle;)

+0

Awesome - спасибо за легкое решение! Мне никогда не приходило в голову, что вы можете использовать vh для высоты линии. – Jack

1

Попробуйте эти изменения в вашем CSS

#nav li { 
    text-align: center; 
    height: 25%; 
    width: 100%; 
    margin: 0 auto; 
    display: table; /* added */ 
} 

#nav li a { 
    display: table-cell; /* changes from block to table-cell */ 
    vertical-align: middle; /* added */ 
    height: 100%; 
} 

См Рабочих здесь пример http://jsfiddle.net/t6ryfqzk/7/

+0

Спасибо за помощь! Как я уже сказал в другом ответе, я пробовал делать что-то подобное, но я использовал эти дисплеи на неправильных элементах. – Jack

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