Как вертикально центрировать div для всех браузеров?


1368

Я хочу центрировать по divвертикали с помощью CSS. Я не хочу таблиц или JavaScript, а только чистый CSS. Я нашел несколько решений, но во всех них отсутствует поддержка Internet Explorer 6.

<body>
    <div>Div to be aligned vertically</div>
</body>

Как я могу центрировать по divвертикали во всех основных браузерах, включая Internet Explorer 6?


25
@MarcoDemaio Разве люди постоянно не одобряют tablesздесь макеты?
— Chud37

14
@ Chud37: это зависит от того, что вы должны сделать, таблицы для разметки, как правило, не универсальны и длинны для ввода кода, с помощью CSS вы можете легко изменить разметку в 2 столбца в разметку 3/4/5 sols и т. Д. Но в этом случае отличается тем, что использует десятки советов и хитростей CSS для такой простой задачи, которую можно решить с помощью идеального кросс-браузерного стола, это все равно что пытаться войти в свой дом через окно вместо использования двери.
— Марко Демайо

В случае, если люди не заботятся о поддержке старых браузеров: davidwalsh.name/css-vertical-center
— Karolis Šarapnickis

1
css-vertical-center.com есть некоторые решения с информацией о совместимости браузера
— EscapeNetscape

2
Вот много способов сделать это css-tricks.com/centering-css-complete-guide
— Майкл Юрин

Ответы:


1375

Ниже приведено лучшее универсальное решение, которое я мог бы построить для центрирования по вертикали и горизонтали в центре содержимого с фиксированной шириной и гибкой высотой . Он был протестирован и работает для последних версий Firefox, Opera, Chrome и Safari.

.outer {
  display: table;
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;
}

.middle {
  display: table-cell;
  vertical-align: middle;
}

.inner {
  margin-left: auto;
  margin-right: auto;
  width: 400px;
  /*whatever width you want*/
}
<div class="outer">
  <div class="middle">
    <div class="inner">
      <h1>The Content</h1>
      <p>Once upon a midnight dreary...</p>
    </div>
  </div>
</div>

Просмотр рабочего примера с динамическим контентом

Я встроил некоторый динамический контент для проверки гибкости и хотел бы знать, если кто-нибудь видит какие-либо проблемы с ним. Он должен хорошо работать и для центрированных оверлеев - лайтбокс, всплывающее окно и т. Д.


Без «абсолютного» внешнего DIV любой контент на странице до того, как он сдвинет весь блок вниз. Это делает его более независимым от другого содержимого страницы.
— Billbad

9
.outer {position:absolute;width:100%;height:100%}не нужно, они здесь просто для демонстрации. Все, что нам нужно display:table, если кто-то запутался, как я.
— лица

Я заметил, что это требует 99%, чтобы избежать полос прокрутки. Что более важно, это работает только с первыми двумя дивами, скажем , держатся .outerи middleи явно игнорировать .innerи его стиль. Я не знаю, в чем смысл margin-left, margin-rightустановить на авто, так как это не центрирует элемент по горизонтали ?? !!!
— user10089632

Удаление width: 100%;и добавление margin: 0 autoк .outerпозволяет переменную ширину , а также.
— рококо,

@ user10089632 Нет, дело не в ширине или высоте, а в положении. top: 0; left 0;отсутствует, по крайней мере, в Chrome, который устанавливает значение по умолчанию 1.
— Michał Woliński

280

Еще один, которого я не вижу в списке:

.Center-Container {
  position: relative;
  height: 100%;
}

.Absolute-Center {
  width: 50%;
  height: 50%;
  overflow: auto;
  margin: auto;
  position: absolute;
  top: 0; left: 0; bottom: 0; right: 0;
  border: solid black;
}
  • Кросс-браузер (включая Internet Explorer 8 - Internet Explorer 10 без хаков!)
  • Отзывчив с процентами и мин / макс
  • По центру независимо от заполнения (без определения размера ящика!)
  • heightдолжен быть объявлен (см. Переменная высота )
  • Рекомендуемая настройка overflow: autoдля предотвращения распространения контента (см. Переполнение)

Источник: Абсолютное горизонтальное и вертикальное центрирование в CSS


7
Это сработало для меня, но мне нужно было по какой-то причине иметь фиксированную ширину и высоту в хроме
— Райан Кнелл

1
Спасибо. Мне нужно было исправить, где мне не нужно было вычислять высоту или ширину в пикселях, и это работало отлично.
— GFoley83

8
Отличное решение, особенно потому, что вам не нужен родительский div
— Лука Стиб

1
Это делает растяжку, если высота не фиксирована, кроме этого: хорошее решение
— Барт Бург

Если у вас есть ширина и высота, которые не являются 100%, используйтеmargin: auto;
— Чарльз Л.

253

Самым простым способом были бы следующие 3 строки CSS:

1) положение: относительное;

2) верх: 50%;

3) преобразование: translateY (-50%);

Ниже приведен пример :

div.outer-div {
  height: 170px;
  width: 300px;
  background-color: lightgray;
}

div.middle-div {
  position: relative;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
}
<div class='outer-div'>
  <div class='middle-div'>
    Test text
  </div>
</div>


4
примечание: не работает должным образом, если высота внешнего делителя установлена ​​с "min-height: 170px"
— Барт Бург


4
не работает, когда heightвнешнее divесть 100%. Тогда работает только с position: absolute;.
— Arch Linux Tux

1
Сначала я нашел это решение в другом месте, но дополнительные благодарности этому конкретному ответу за упоминание -webkit-transformконкретного варианта, который мне понадобился, чтобы заставить этот метод работать в фантомах ... закончились часы борьбы, так что спасибо!
— drmrbrewer

2
Это лучший ответ. Это невероятно просто, портит наименьшее количество существующей работы и функционирует во всем, начиная с IE9, который никто даже больше не использует. Давайте возьмем этого парня еще больше голосов!
— Ник Стил

136

На самом деле вам нужно два div для вертикального центрирования. Элемент div, содержащий содержимое, должен иметь ширину и высоту.

#container {
  position: absolute;
  top: 50%;
  margin-top: -200px;
  /* half of #content height*/
  left: 0;
  width: 100%;
}

#content {
  width: 624px;
  margin-left: auto;
  margin-right: auto;
  height: 395px;
  border: 1px solid #000000;
}
<div id="container">
  <div id="content">
    <h1>Centered div</h1>
  </div>
</div>

Вот результат


4
это старый трюк ... верхние 50% и верхнее поле отрицательны на половину высоты внутреннего div
— Manatax

34
предполагается, что у вас есть фиксированная высота для div. не работает, когда div может изменить высоту.
— Андре Фигейредо

116

Теперь решение flexbox - очень простой способ для современных браузеров, поэтому я рекомендую это для вас:

.container{
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100%;
    background:green;
}

body, html{
  height:100%;
}
<div class="container">
    <div>Div to be aligned vertically</div>
</div>


1
Если у вас есть navbar, вы можете изменить высоту, используя height: calc(100% - 55px)или любой другой рост navbar.
— Адриан,

я также должен был удалить края / отступы от тела
— Бен

Хорошо работает с float. Спасибо.
— Амир А. Шабани

Обратите внимание, что это может вести себя странно в «новых, более старых» мобильных браузерах Safari. Рекомендуемое использование вместо высоты - flex-based для класса
— Nine Magics

78

Редактировать 2020: используйте это, только если вам нужно поддерживать старые браузеры, такие как IE8 (что вы должны отказаться should). Если нет, используйте flexbox.


Это самый простой метод, который я нашел, и я использую его все время ( демонстрация jsFiddle здесь )

Спасибо Крису Койеру из CSS Tricks за эту статью .

html, body{
  height: 100%;
  margin: 0;
}
.v-wrap{
    height: 100%;
    white-space: nowrap;
    text-align: center;
}
.v-wrap:before{
    content: "";
    display: inline-block;
    vertical-align: middle;
    width: 0;
    /* adjust for white space between pseudo element and next sibling */
    margin-right: -.25em;
    /* stretch line height */
    height: 100%; 
}
.v-box{
    display: inline-block;
    vertical-align: middle;
    white-space: normal;
}
<div class="v-wrap">
    <article class="v-box">
        <p>This is how I've been doing it for some time</p>
    </article>
</div>

Поддержка начинается с IE8.


Отказавшись от поддержки старых браузеров, решением для меня стала не flexbox, а сеточная система. Мне было немного неприятно центрировать контент в контейнере, который, когда он становился слишком маленьким по высоте, должен был показывать полосу прокрутки, а центрированный контент терял область прокрутки всеми другими методами. В контейнере я просто использую: {display: grid; align-items: center; } Надеюсь, это кому-нибудь поможет.
— Томасофен

63

После долгих исследований я наконец нашел окончательное решение. Это работает даже для плавающих элементов. Просмотреть исходный код

.element {
    position: relative;
    top: 50%;
    transform: translateY(-50%); /* or try 50% */
}

4
Это работает действительно хорошо, если вы помните, что элемент контейнера должен иметь неявную или явную высоту; jsfiddle.net/14kt53un Небольшая ошибка для тех, кто относительно новичок в CSS.
— Мартын Шатт

6
Из всех ответов это самый простой! Я надеюсь, что другие тоже увидят ваш ответ! Спасибо! Кстати, 50%у меня сработало (не -50%)
— The Codesee

Это было невероятно. После нескольких часов поисков этот сработал для меня. Я должен был использовать translateY (50%), я уверен, почему, но это сработало. В моем случае родитель был создан AEM Forms Engine, и я могу управлять только определенными дочерними элементами.
— tarekahf


36

Чтобы центрировать div на странице, проверьте ссылку скрипта .

#vh {
    margin: auto;
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
}
.box{
    border-radius: 15px;
    box-shadow: 0 0 8px rgba(0, 0, 0, 0.4);
    padding: 25px;
    width: 100px;
    height: 100px;
    background: white;
}
<div id="vh" class="box">Div to be aligned vertically</div>

Другой вариант - использовать flex box, проверьте ссылку на скрипку .

.vh {
    background-color: #ddd;
    height: 400px;
    align-items: center;
    display: flex;
}
.vh > div {
    width: 100%;
    text-align: center;
    vertical-align: middle;
}
<div class="vh">
    <div>Div to be aligned vertically</div>
</div>

Другой вариант - использовать CSS 3-преобразование:

#vh {
    position: absolute;
    top: 50%;
    left: 50%;
    /*transform: translateX(-50%) translateY(-50%);*/
    transform: translate(-50%, -50%);
}
.box{
    border-radius: 15px;
    box-shadow: 0 0 8px rgba(0, 0, 0, 0.4);
    padding: 25px;
    width: 100px;
    height: 100px;
    background: white;
}
<div id="vh" class="box">Div to be aligned vertically</div>


3
@ArmelLarcier Это неправильно. Относительными единицами являются проценты %, emс и remс. Абсолютные или фиксированные значения - это пиксели или точки. То, что вы имеете в виду, это «это работает только с заявленной высотой». Однако, хотя этот метод, описанный Моесом, требует высоты, когда вы объявляете его в относительных единицах, процентное соотношение является лучшим, независимо от того, сколько контента находится внутри центрированного DIV, DIV будет расширяться по вертикали, чтобы соответствовать его контенту. В этом прелесть этого метода. Еще одна хорошая вещь - этот метод работает в IE8 / 9/10 на тот случай, если кому-то все еще нужно поддерживать эти браузеры.
— Рикардо Зеа

@ricardozea Я не хочу играть упрямо, но говорить, что центрированный div будет расширяться по вертикали, а оставаться вертикально центрированным - неправильно. Попробуй это. Я знаю, когда говорю, что высота должна быть «фиксированной», это не то слово. Это действительно относительно его родителя. В любом случае, я думаю, что метод Криса Койера имеет больше смысла, см. Мой ответ stackoverflow.com/a/21919578/1491212 Он совместим с IE8 и работает с элементом без заданных размеров.
— Армель Ларсье

1
@ArmelLarcier Все хорошо. Это не так, брат. Попробуйте это: codepen.io/shshaw/pen/gEiDt - Добавить абзацы в зеленое поле;]. Конечно, он использует Modernizr для достижения эффекта, но в целом это выполнимо. Я видел ваш ответ и пост CSS-Tricks.com, но этот метод меня не радует, он использует дополнительную разметку, а CSS слишком многословен. Я думаю, что лучшее решение - использовать flexbox или transform: translate(-50%, -50%);технику. Для IE8 я бы просто оставил его сверху / по центру и двигался дальше.
— Рикардо Зеа

1
@ricardozea Ну, кодовая ручка, на которую вы ссылались, использует метод display: table и дополнительную разметку, поэтому я не удивлен. В любом случае +1 к последнему предложению.
— Армель Ларсье

23

Самое простое решение ниже:

.outer-div{
  width: 100%;
  height: 200px;
  display: flex;
  border:1px solid #000;
}
.inner-div{
  margin: auto;
  text-align:center;
  border:1px solid red;
}
<div class="outer-div">
  <div class="inner-div">
    Hey there!
  </div>
</div>


2
Действительно, самый простой из всех :) Хотя я должен был установить стили для внешнего div, вместо body.
— Baburao

21

К сожалению - но неудивительно - решение более сложное, чем хотелось бы. Также, к сожалению, вам нужно будет использовать дополнительные элементы div вокруг элемента, который вы хотите расположить по центру.

Для совместимых со стандартами браузеров, таких как Mozilla, Opera, Safari и т. Д., Вам нужно установить внешний div, который будет отображаться в виде таблицы, и внутренний div, который будет отображаться в виде ячейки таблицы, - который затем можно центрировать по вертикали. Для Internet Explorer вам нужно расположить внутренний div абсолютно внутри внешнего div, а затем указать верх как 50% . Следующие страницы хорошо объясняют эту технику и предоставляют несколько примеров кода:

Существует также методика вертикального центрирования с использованием JavaScript. Вертикальное выравнивание контента с помощью JavaScript и CSS демонстрирует это.


20

Если кому-то нужна только Internet Explorer 10 (и более поздние версии), используйте flexbox:

.parent {
    width: 500px;
    height: 500px;
    background: yellow;

    display: -webkit-flex;
    display: -ms-flexbox;
    display: flex;

    -webkit-justify-content: center;
    -ms-flex-pack: center;
    justify-content: center;

    -webkit-align-items: center;
    -ms-flex-align: center;
    align-items: center;
}

.centered {
    width: 100px;
    height: 100px;
    background: blue;
}
<div class="parent">
    <div class="centered"></div>
</div>

Поддержка Flexbox: http://caniuse.com/flexbox


Android <4.4 не поддерживает align-items: center;!
— Андре Фидлер

На самом деле, он поддерживает align-items: center; caniuse.com/#search=align-items
— t.mikael.d

@ t.mikael.d Вы можете поближе взглянуть на этот стол. Для Android <4.4 говорится: «Поддерживает только старую спецификацию flexbox и не поддерживает перенос».
— Натан Осман

15

Современный способ центрировать элемент по вертикали - использовать flexbox.

Вам нужен родитель, чтобы решить рост и ребенка по центру.

В приведенном ниже примере центр в центре вашего браузера. Что важно (в моем примере), чтобы установить , height: 100%чтобы bodyи htmlзатем min-height: 100%к контейнеру.

body, html {
  background: #F5F5F5;
  box-sizing: border-box;
  height: 100%;
  margin: 0;
}

#center_container {
  align-items: center;
  display: flex;
  min-height: 100%;
}

#center {
  background: white;
  margin: 0 auto;
  padding: 10px;
  text-align: center;
  width: 200px;
}
<div id='center_container'>
  <div id='center'>I am center.</div>
</div>


14

Центрирование только по вертикали

Если вас не интересуют Internet Explorer 6 и 7, вы можете использовать технику, включающую два контейнера.

Внешний контейнер:

  • должен иметь display: table;

Внутренний контейнер:

  • должен иметь display: table-cell;
  • должен иметь vertical-align: middle;

Контент окно:

  • должен иметь display: inline-block;

Вы можете добавить любой контент в поле контента, не заботясь о его ширине или высоте!

Демо-версия:

body {
    margin: 0;
}

.outer-container {
    position: absolute;
    display: table;
    width: 100%; /* This could be ANY width */
    height: 100%; /* This could be ANY height */
    background: #ccc;
}

.inner-container {
    display: table-cell;
    vertical-align: middle;
}

.centered-content {
    display: inline-block;
    background: #fff;
    padding: 20px;
    border: 1px solid #000;
}
<div class="outer-container">
   <div class="inner-container">
     <div class="centered-content">
        Malcolm in the Middle
     </div>
   </div>
</div>

Смотрите также эту скрипку !


Центрирование по горизонтали и вертикали

Если вы хотите центрировать как горизонтально, так и вертикально, вам также необходимо следующее.

Внутренний контейнер:

  • должен иметь text-align: center;

Контент окно:

  • следует заново отрегулировать горизонтальное выравнивание текста, например, text-align: left;или text-align: right;, если вы не хотите, чтобы текст центрировался

Демо-версия:

body {
    margin: 0;
}

.outer-container {
    position: absolute;
    display: table;
    width: 100%; /* This could be ANY width */
    height: 100%; /* This could be ANY height */
    background: #ccc;
}

.inner-container {
    display: table-cell;
    vertical-align: middle;
    text-align: center;
}

.centered-content {
    display: inline-block;
    text-align: left;
    background: #fff;
    padding: 20px;
    border: 1px solid #000;
}
<div class="outer-container">
   <div class="inner-container">
     <div class="centered-content">
         Malcolm in the Middle
     </div>
   </div>
</div>

Смотрите также эту скрипку !


13

.center {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%); /* (x, y)  => position */
  -ms-transform: translate(-50%, -50%); /* IE 9 */
  -webkit-transform: translate(-50%, -50%); /* Chrome, Safari, Opera */    
}

.vertical {
  position: absolute;
  top: 50%;
  //left: 0;
  transform: translate(0, -50%); /* (x, y) => position */
}

.horizontal {
  position: absolute;
  //top: 0;
  left: 50%;
  transform: translate(-50%, 0); /* (x, y)  => position */
}

div {
  padding: 1em;
  background-color: grey; 
  color: white;
}  
<body>
  <div class="vertical">Vertically left</div>
  <div class="horizontal">Horizontal top</div>
  <div class="center">Vertically Horizontal</div>  
</body>

Связанный: Center a Image


10

Это всегда, куда я иду, когда я должен вернуться к этому вопросу .

Для тех, кто не хочет совершать прыжок:

  1. Укажите родительский контейнер как position:relativeили position:absolute.
  2. Укажите фиксированную высоту для дочернего контейнера.
  3. Установите position:absoluteи top:50%на дочернем контейнере, чтобы переместить верхнюю часть к середине родительского контейнера.
  4. Установите margin-top: -yy, где yy - половина высоты дочернего контейнера, чтобы сместить элемент вверх.

Пример этого в коде:

<style type="text/css">
    #myoutercontainer {position:relative}
    #myinnercontainer {position:absolute; top:50%; height:10em; margin-top:-5em}
</style>
...
<div id="myoutercontainer">
    <div id="myinnercontainer">
        <p>Hey look! I'm vertically centered!</p>
        <p>How sweet is this?!</p>
    </div>
</div>

9

Использование свойства flex в CSS.

.parent {
    width: 400px;
    height:200px;
    background: blue;
    display: flex;
    align-items: center;
    justify-content:center;
}

.child {
    width: 75px;
    height: 75px;
    background: yellow;
}
<div class="parent">
    <div class="child"></div>
</div>

или с помощью display: flex;иmargin: auto;

показать текстовый центр

Используя процент (%) высоты и ширины.


8

Я только что написал этот CSS и, чтобы узнать больше, пожалуйста, пройдите: Эта статья с вертикальным выравниванием всего с 3-мя строками CSS .

.element {
    position: relative;
    top: 50%;
    transform: perspective(1px) translateY(-50%);
}

1
CSS-преобразования могут вызывать искажения в тексте и границах (когда математика приводит к дробным пикселям).
— Натан К


5

Для новичков, пожалуйста, попробуйте

display: flex;
align-items: center;
justify-content: center;

1
Добавьте фрагмент стека, показывающий, как этот код CSS выравнивает по вертикали a div.
— Еретик Обезьяна

это тоже работает <div style="display:flex"><div style="margin:auto">Inner</div></div>
— idrisadetunmbi

Мне попалось это замечательное объяснение выравнивания предметов и обоснования содержания. Необходимо прочитать: stackoverflow.com/questions/42613359/…
— Усман, 1

4

Ответ от Billbad работает только с фиксированной шириной .innerdiv. Это решение работает для динамической ширины, добавляя атрибут text-align: centerв .outerdiv.

.outer {
  position: absolute;
  display: table;
  width: 100%;
  height: 100%;
  text-align: center;
}
.middle {
  display: table-cell;
  vertical-align: middle;
}
.inner {
  text-align: center;
  display: inline-block;
  width: auto;
}
<div class="outer">
  <div class="middle">
    <div class="inner">
      Content
    </div>
  </div>
</div>


Интересно! Я использую практически идентичную технику! -> stackoverflow.com/questions/396145/…
— Джон Слегерс

4

Использование трех строк кода transformработает практически в современных браузерах и Internet Explorer:

.element{
     position: relative;
     top: 50%;
     transform: translateY(-50%);
     -moz-transform: translateY(-50%);
     -webkit-transform: translateY(-50%);
     -ms-transform: translateY(-50%);
}

Я добавляю этот ответ, так как я обнаружил некоторую неполноту в предыдущей версии этого ответа (а переполнение стека не позволяет мне просто комментировать).

  1. Относительный 'position' портит стиль, если текущий div находится в теле и не имеет контейнерного div. Хотя «исправлено», кажется, работает, но оно, очевидно, фиксирует содержимое в центре области просмотра положение: родственник

  2. Также я использовал этот стиль для центрирования некоторых оверлеев div и обнаружил, что в Mozilla все элементы внутри этого трансформированного div потеряли свои нижние границы. Возможно проблема рендеринга. Но добавление только минимального отступа к некоторым из них сделало это правильно. Chrome и Internet Explorer (на удивление) рендерили поля без необходимости заполнения. Мозилла без внутренних прокладок Мозилла с прокладками


3

Следующая ссылка представляет простой способ сделать это всего за 3 строки в вашем CSS:

Выровняйте все по вертикали всего с 3 строками CSS .

Кредиты для : Себастьян Экстрём .

Я знаю, что на этот вопрос уже есть ответ, однако я увидел полезность в ссылке для его простоты.


3

Не отвечая за совместимость браузера, но также упомянув новую сетку и не очень новую функцию Flexbox.

сетка

От: Mozilla - Сетка Документация - Выровнять Div по вертикали

Поддержка браузеров: поддержка Grid Browser

CSS:

.wrapper {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-gap: 10px;
  grid-auto-rows: 200px;
  grid-template-areas: 
    ". a a ."
    ". a a .";
}
.item1 {
  grid-area: a;
  align-self: center;
  justify-self: center;
}

HTML:

<div class="wrapper">
 <div class="item1">Item 1</div>
</div>

Flexbox

Поддержка браузера: поддержка браузера Flexbox

CSS:

display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
align-items: center;
justify-content: center;

3

Я думаю, что солидное решение для всех браузеров без использования flexbox - "align-items: center;" является комбинацией отображения: таблица и вертикальное выравнивание: среднее ;.

CSS

.vertically-center
{
    display: table;

    width: 100%;  /* optional */
    height: 100%; /* optional */
}

.vertically-center > div
{
    display: table-cell;
    vertical-align: middle;
}

HTML

<div class="vertically-center">
    <div>
        <div style="border: 1px solid black;">some text</div>
    </div>
</div>

Moдемо: https://jsfiddle.net/6m640rpp/


2

Я сделал это с этим (изменить ширину, высоту, margin-top и margin-left соответственно):

.wrapper {
    width:960px;
    height:590px;
    position:absolute;
    top:50%;
    left:50%;
    margin-top:-295px;
    margin-left:-480px;
}

<div class="wrapper"> -- Content -- </div>

Это хорошо, только если вы знаете ширину / высоту DIV, которую вы пытаетесь отцентрировать. Это не то, что задает вопрос
— egr103

2

Содержимое может быть легко отцентрировано с помощью flexbox. Следующий код показывает CSS для контейнера, внутри которого содержимое должно быть центрировано:

.absolute-center {
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;

    -ms-flex-align: center;
    -webkit-align-items: center;
    -webkit-box-align: center;

    align-items: center;
}

2

Особенно для родительских элементов div с относительной (неизвестной) высотой центрирование в неизвестном решении прекрасно работает для меня. В статье есть несколько действительно хороших примеров кода.

Он был протестирован в Chrome, Firefox, Opera и Internet Explorer.

/* This parent can be any width and height */
.block {
  text-align: center;
}

/* The ghost, nudged to maintain perfect centering */
.block:before {
  content: '';
  display: inline-block;
  height: 100%;
  vertical-align: middle;
  margin-right: -0.25em; /* Adjusts for spacing */
}

/* The element to be centered, can
   also be of any width and height */ 
.centered {
  display: inline-block;
  vertical-align: middle;
  width: 300px;
}
<div style="width: 400px; height: 200px;">
   <div class="block" style="height: 90%; width: 100%">
  <div class="centered">
	 <h1>Some text</h1>
	 <p>Any other text..."</p>
  </div> 
   </div>
</div>


2

Просто сделайте это: добавьте класс по вашему div:

.modal {
  margin: auto;
  position: absolute;
  top: 0;
  right: 0;
  left: 0;
  bottom: 0;
  height: 240px;
}

И прочитайте эту статью для объяснения. Примечание: Heightнеобходимо.


2

Недавно я обнаружил одну хитрость: вам нужно использовать, top 50%а затем вы делаетеtranslateY(-50%)

.outer-div {
  position: relative;
  height: 150px;
  width: 150px;
  background-color: red;
}

.centered-div {
  position: absolute;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
  background-color: white;
}
<div class='outer-div'>
  <div class='centered-div'>
    Test text
  </div>
</div>

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.