Итак, я знаю, что мы можем центрировать div по горизонтали, если будем использовать margin:0 auto;
. Должно margin:auto auto;
работать так, как я думаю? И по вертикали?
Почему тоже не vertical-align:middle;
работает?
.black {
position:absolute;
top:0;
bottom:0;
left:0;
right:0;
background:rgba(0,0,0,.5);
}
.message {
background:yellow;
width:200px;
margin:auto auto;
padding:10px;
}
<div class="black">
<div class="message">
This is a popup message.
</div>
</div>
Ответы:
Обновить август 2020
Хотя ниже все еще стоит прочитать полезную информацию, у нас уже некоторое время есть Flexbox, поэтому просто используйте его в соответствии с этим ответом .
Вы не можете использовать:
vertical-align:middle
потому что это не применимо к элементам уровня блокаmargin-top:auto
иmargin-bottom:auto
поскольку их используемые значения будут вычисляться как нольmargin-top:-50%
поскольку процентные значения маржи рассчитываются относительно ширины содержащего блокаФактически, характер документооборота и алгоритмы расчета высоты элемента делают невозможным использование полей для центрирования элемента по вертикали внутри его родительского элемента. Всякий раз, когда значение вертикального поля изменяется, это вызывает повторный расчет высоты родительского элемента (повторный поток), который, в свою очередь, запускает повторное центрирование исходного элемента ... что делает его бесконечным циклом.
Ты можешь использовать:
Несколько подобных обходных путей, которые работают для вашего сценария; три элемента должны быть вложены следующим образом:
JSFiddle отлично работает согласно Browsershot .
источник
#
- это хитрость, при которой правило с префиксом интерпретируется только IE7 и ниже. Вместо этого вы можете предпочесть включить эти правила в таблицу стилей для IE , используя условные комментарии и т. Д.position: absolute; top: 50%; transform: translateY(-50%);
это тоже возможно и довольно популярно ... (в отличие отtop:50%;margin: - $halfHeight
того, что вам не нужно знать высоту заранее ...)Поскольку этот вопрос был задан в 2012 году, и мы прошли долгий путь с поддержкой браузерами флексбоксов, мне показалось, что этот ответ был обязательным.
Если отображается ваш родительский контейнер
flex
, то да ,margin: auto auto
(также известный какmargin: auto
) будет работать, чтобы центрировать его как по горизонтали, так и по вертикали, независимо от того, является ли он элементомinline
илиblock
.Обратите внимание, что ширину / высоту необязательно указывать абсолютно, как в этом примере jfiddle, который использует размер относительно области просмотра.
Хотя браузерная поддержка флексбоксов находится на рекордно высоком уровне на момент публикации, многие браузеры по-прежнему не поддерживают ее или требуют префиксов поставщика. Посетите http://caniuse.com/flexbox для получения обновленной информации о поддержке браузера.
Обновить
Поскольку этому ответу было уделено немного внимания, я также хотел бы указать, что вам вообще не нужно указывать, используете
margin
ли вы и хотите ли вы центрироватьdisplay: flex
все элементы в контейнере:источник
Вот лучшее решение, которое я нашел: http://jsfiddle.net/yWnZ2/446/ Работает в Chrome, Firefox, Safari, IE8-11 и Edge.
Если объявленная
height
(height: 1em
,height: 50%
и т.д.) , или это элемент , где браузер знает высоту (img
,svg
илиcanvas
, например), то все , что вам нужно для вертикального центрирования заключается в следующем:Вы обычно хотите , чтобы указать
width
илиmax-width
так что содержание не растягивается на всю длину экрана / контейнера.Если вы используете это для модального окна, которое вы хотите всегда центрировать в области просмотра, перекрывая другой контент, используйте
position: fixed;
для обоих элементов вместоposition: absolute
. http://jsfiddle.net/yWnZ2/445/Вот более полная запись: http://codepen.io/shshaw/pen/gEiDt
источник
position: relative
к родительскому элементу, и элемент будет центрирован внутри родительского элемента. Если вы хотите узнать больше, я написалparent
понял. Спасибо!display: table
для содержимого переменной высоты. В противном случае этот метод должен работать должным образом. Прочтите рецензию для получения более подробной информации в целом. Вы также должны иметь возможность протестировать полный вид в IE8 / 9, чтобы увидеть, есть ли какие-либо проблемы.Изменить: это 2020 год, вместо этого я бы использовал гибкую коробку.
Оригинальный ответ:
Html
CSS
источник
Я знаю, что это вопрос 2012 года, но я нашел самый простой способ и хотел поделиться.
HTML:
и CSS:
источник
Если вам известна высота блока div, который вы хотите центрировать , вы можете разместить его абсолютно внутри его родительского элемента, а затем установить
top
значение50%
. Это поместит верхнюю часть дочернего div на 50% вниз от его родительского элемента, то есть слишком низко. Поднимите его, установивmargin-top
на половину высоты. Итак, теперь у вас есть вертикальная средняя точка дочернего div, сидящая в вертикальной средней точке родительского элемента - вертикально по центру!Пример:
http://jsfiddle.net/yWnZ2/2/
источник
margin-top
не может быть установлена в% относительно высоты элемента, так что вы будете в конечном итоге с размерами зависимой затруднительногоmargin-top
.Эти два решения требуют только двух вложенных элементов.
Первый - относительное и абсолютное позиционирование, если контент статичен (ручной центр).
https://jsfiddle.net/GlupiJas/5mv3j171/
или для гибкого дизайна - вместо этого для точного информационного центра используйте следующий пример:
https://jsfiddle.net/GlupiJas/w3jnjuv0/
Вам нужно установить min-height, если содержимое превышает 50% высоты окна. Этой высотой также можно управлять с помощью медиа-запроса для мобильных и планшетных устройств. Но только если Вы играете с адаптивным дизайном.
Я думаю, вы могли бы пойти дальше и использовать простой скрипт JavaScript / JQuery для управления минимальной или фиксированной высотой, если по какой-то причине в этом есть необходимость.
Во- вторых - если содержание жидкости у может также использовать таблицы и таблицы ячейки CSS свойства с вертикальным выравниванием и выравнивания текста по центру:
и
Отлично работает и масштабируется, часто используется в качестве адаптивного решения для веб-дизайна с макетами сетки и медиа-запросами, которые управляют шириной объекта.
https://jsfiddle.net/GlupiJas/4daf2v36/
Я предпочитаю табличное решение для точного центрирования контента, но в некоторых случаях относительное абсолютное позиционирование будет работать лучше, особенно если мы не хотим сохранять точную пропорцию выравнивания контента.
источник
источник
Не существует одного простого способа центрировать div по вертикали, который помогал бы в любой ситуации.
Однако есть множество способов сделать это в зависимости от ситуации.
Вот несколько из них:
Вы также можете найти в Google "вертикальное центрирование css"
источник
переменная высота, верхнее и нижнее поле автоматически
переменная высота, верхнее и нижнее поле автоматически
источник
Использование Flexbox:
HTML:
CSS:
Посмотреть результат
источник
источник