Если это одна строка текста и / или изображения, то это легко сделать. Просто используйте:
text-align: center;
vertical-align: middle;
line-height: 90px; /* The same as your div height */
Вот и все. Если это может быть несколько строк, то это несколько сложнее. Но есть решения на http://pmob.co.uk/ . Ищите «вертикальное выравнивание».
Так как они имеют тенденцию быть хаки или добавления сложных div-ов ... Я обычно использую таблицу с одной ячейкой, чтобы сделать это ... чтобы сделать это как можно более простым.
Обновление до 2020 года:
Если вам не нужно, чтобы он работал в более ранних браузерах, таких как Internet Explorer 10, вы можете использовать flexbox. Он широко поддерживается всеми основными браузерами . В основном, контейнер должен быть указан как гибкий контейнер с центрированием вдоль его главной и поперечной оси:
#container {
display: flex;
justify-content: center;
align-items: center;
}
Чтобы указать фиксированную ширину для дочернего элемента, которая называется «гибкий элемент»:
#content {
flex: 0 0 120px;
}
Пример: http://jsfiddle.net/2woqsef1/1/
Чтобы сжать содержимое, это еще проще: просто удалите flex: ...
строку из гибкого элемента, и она автоматически сжимается.
Пример: http://jsfiddle.net/2woqsef1/2/
Приведенные выше примеры были протестированы в основных браузерах, включая MS Edge и Internet Explorer 11.
Одно техническое замечание, если вам нужно его настроить: внутри элемента flex, поскольку этот элемент flex не является самим контейнером flex, старый не-flexbox-способ CSS работает должным образом. Однако, если вы добавите дополнительный гибкий элемент к текущему гибкому контейнеру, два гибких элемента будут расположены горизонтально. Чтобы сделать их вертикально расположенными, добавьте flex-direction: column;
в гибкий контейнер. Вот как это работает между контейнером flex и его непосредственными дочерними элементами.
Существует альтернативный метод центрирования: не указывать center
распределение по главной и поперечной оси для гибкого контейнера, а вместо этого указать margin: auto
на гибком элементе, чтобы он занимал все дополнительное пространство во всех четырех направлениях и равномерно распределенные поля сделает гибкий элемент по центру во всех направлениях. Это работает за исключением случаев, когда есть несколько элементов flex. Кроме того, этот метод работает на MS Edge, но не на Internet Explorer 11.
Обновление на 2016/2017:
С ним чаще можно справиться transform
, и он хорошо работает даже в старых браузерах, таких как Internet Explorer 10 и Internet Explorer 11. Он может поддерживать несколько строк текста:
position: relative;
top: 50%;
transform: translateY(-50%);
Пример: https://jsfiddle.net/wb8u02kL/1/
Чтобы уменьшить ширину:
Решение выше использовал фиксированную ширину для области содержимого. Чтобы использовать ширину в термоусадочную пленку, используйте
position: relative;
float: left;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
Пример: https://jsfiddle.net/wb8u02kL/2/
Если требуется поддержка Internet Explorer 10, то flexbox не будет работать, а метод выше и line-height
метод будут работать. В противном случае, flexbox сделает эту работу.
text-align:center
, не делает "вертикальную часть"?