У меня есть div
набор display:block
( 90px
height
и width
), и у меня есть текст внутри.
Мне нужно, чтобы текст был выровнен по центру как по вертикали, так и по горизонтали.
Я пытался text-align:center
, но это не делает горизонтальную часть, поэтому я попытался vertical-align:middle
, но это не сработало.
Любые идеи?
text-align:center
, не делает "вертикальную часть"?Ответы:
Если это одна строка текста и / или изображения, то это легко сделать. Просто используйте:
Вот и все. Если это может быть несколько строк, то это несколько сложнее. Но есть решения на http://pmob.co.uk/ . Ищите «вертикальное выравнивание».
Так как они имеют тенденцию быть хаки или добавления сложных div-ов ... Я обычно использую таблицу с одной ячейкой, чтобы сделать это ... чтобы сделать это как можно более простым.
Обновление до 2020 года:
Если вам не нужно, чтобы он работал в более ранних браузерах, таких как Internet Explorer 10, вы можете использовать flexbox. Он широко поддерживается всеми основными браузерами . В основном, контейнер должен быть указан как гибкий контейнер с центрированием вдоль его главной и поперечной оси:
Чтобы указать фиксированную ширину для дочернего элемента, которая называется «гибкий элемент»:
Пример: 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. Он может поддерживать несколько строк текста:Пример: https://jsfiddle.net/wb8u02kL/1/
Чтобы уменьшить ширину:
Решение выше использовал фиксированную ширину для области содержимого. Чтобы использовать ширину в термоусадочную пленку, используйте
Пример: https://jsfiddle.net/wb8u02kL/2/
Если требуется поддержка Internet Explorer 10, то flexbox не будет работать, а метод выше и
line-height
метод будут работать. В противном случае, flexbox сделает эту работу.источник
display: table-cell
свойство для этого, к вашему сведению. Его использование заставляет элемент вести себя как ячейка таблицы и позволяетvertical-align: middle;
font:
их, убедитесь, что вы поставили их вышеline-
высоты`.Общие методы по состоянию на 2014 год:
Подход 1 -
transform
translateX
/translateY
:Пример здесь / Пример полного экрана
В поддерживаемых браузерах (большинство из них) вы можете использовать
top: 50%
/left: 50%
в комбинации сtranslateX(-50%) translateY(-50%)
для динамического вертикального / горизонтального центрирования элемента.Подход 2 - метод Flexbox:
Пример здесь / Пример полного экрана
В поддерживаемых браузерах установите
display
целевой элементflex
и используйте егоalign-items: center
для вертикального иjustify-content: center
горизонтального центрирования. Только не забудьте добавить префиксы поставщиков для дополнительной поддержки браузера ( см. Пример ).Подход 3 -
table-cell
/vertical-align: middle
:Пример здесь / Пример полного экрана
В некоторых случаях вам необходимо убедиться, что высота элемента
html
/body
установлена на100%
.Для вертикального выравнивания установите родительский элемент
width
/height
в100%
и добавьтеdisplay: table
. Тогда для дочернего элемента, изменитьdisplay
кtable-cell
и добавитьvertical-align: middle
.Для горизонтального центрирования вы можете добавить
text-align: center
к центру текст и любые другиеinline
дочерние элементы. В качестве альтернативы вы можете использоватьmargin: 0 auto
допущение, что элемент являетсяblock
уровнем.Подход 4 - Абсолютно позиционируется
50%
сверху со смещением:Пример здесь / Пример полного экрана
Такой подход предполагает , что текст имеет известную высоту - в этом случае
18px
. Просто расположите элемент50%
сверху, относительно родительского элемента. Используйте отрицательноеmargin-top
значение, равное половине известной высоты элемента, в данном случае --9px
.Подход 5 -
line-height
Метод (наименее гибкий - не рекомендуется):Пример здесь
В некоторых случаях родительский элемент будет иметь фиксированную высоту. Для вертикального центрирования все, что вам нужно сделать, это установить
line-height
значение дочернего элемента, равное фиксированной высоте родительского элемента.Хотя в некоторых случаях это решение будет работать, стоит отметить, что оно не будет работать при наличии нескольких строк текста - например, так .
Методы 4 и 5 не самые надежные. Перейти с одним из первых 3.
источник
table-cell
как можно больше.Использование flexbox / CSS:
CSS:
Взято из краткого совета: самый простой способ центрировать элементы по вертикали и горизонтали
источник
display: -ms-flexbox; -ms-flex-align: center; -ms-flex-pack: center
.text-align:center
дляinline-
элементов .. таких как текст.Добавьте строку
display: table-cell;
в ваш контент CSS для этого div.Только ячейки таблицы поддерживают
vertical-align: middle;
, но вы можете дать определение [table-cell] div ...Живой пример здесь: http://jsfiddle.net/tH2cc/
источник
position
является абсолютным или фиксированным. См .: jsfiddle.net/tH2cc/1636Я всегда использую следующий CSS для контейнера, чтобы центрировать его содержимое по горизонтали и вертикали.
Смотрите это в действии здесь: https://jsfiddle.net/yp1gusn7/
источник
Вы можете попробовать очень простой код для этого:
Ссылка Codepen: http://codepen.io/santoshkhalse/pen/xRmZwr
источник
Передайте этот класс CSS целевому элементу <div>:
источник
Вы можете использовать
flex
свойство у родителяdiv
и добавитьmargin:auto
свойство к дочерним элементам:Вы можете увидеть больше вариантов
flex
здесь: https://css-tricks.com/snippets/css/a-guide-to-flexbox/источник
Подход 1
Подход 2
Подход 3
источник
источник
источник
источник
источник
Это работает для меня (проверено ОК!):
HTML:
CSS:
Вы можете выбрать другие значения, чем 50%. Например, 25% от центра в 25% от родителей.
источник
источник
Вы можете попробовать следующие методы:
Если у вас есть одно слово или предложение в одну строку, то следующий код может помочь.
Поместите текст внутри тега div и присвойте ему идентификатор. Определите следующие свойства для этого идентификатора.
Примечание. Убедитесь, что свойство line-height соответствует высоте деления.
Образ
Но если содержимое содержит более одного слова или строки, это не работает. Также будут случаи, когда вы не сможете указать размер деления в px или% (когда деление очень маленькое, и вы хотите, чтобы содержимое было точно посередине).
Чтобы решить эту проблему, мы можем попробовать следующую комбинацию свойств.
Образ
Эти 3 строки кода устанавливают содержимое точно в середине раздела (независимо от размера дисплея). «ALIGN-элементы: центр» помогает в вертикальной центровки в то время как «оправдает-контента: центр» сделает его горизонтально по центру.
Примечание. Flex работает не во всех браузерах. Убедитесь, что вы добавили соответствующие префиксы поставщиков для дополнительной поддержки браузера.
источник
GRID
Показать фрагмент кода
источник
Регулировка высоты линии, чтобы получить вертикальное выравнивание.
источник
Это должен быть правильный ответ. Самый чистый и простой:
источник
Применить стиль:
Ваш текст будет в центре независимо от его длины.
источник
Это сработало для меня:
источник
Для меня это было лучшее решение:
HTML:
CSS:
источник
источник
Действительно простой код, который работает для меня! Всего одна строка, и ваш текст будет центрирован по горизонтали.
Вывод выглядит так:
Пожалуйста, проголосуйте за этот ответ, если он работает только для того, чтобы сэкономить время разработчиков, ищущих простые решения. Спасибо! :)
источник
Попробуйте следующий пример. Я добавил примеры для каждой категории: горизонтальные и вертикальные
источник