Я хочу центрировать по div
вертикали с помощью CSS. Я не хочу таблиц или JavaScript, а только чистый CSS. Я нашел несколько решений, но во всех них отсутствует поддержка Internet Explorer 6.
<body>
<div>Div to be aligned vertically</div>
</body>
Как я могу центрировать по div
вертикали во всех основных браузерах, включая Internet Explorer 6?
css
cross-browser
alignment
vertical-alignment
centering
Бурак Эрдем
источник
источник
tables
здесь макеты?Ответы:
Ниже приведено лучшее универсальное решение, которое я мог бы построить для центрирования по вертикали и горизонтали в центре содержимого с фиксированной шириной и гибкой высотой . Он был протестирован и работает для последних версий Firefox, Opera, Chrome и Safari.
Просмотр рабочего примера с динамическим контентом
Я встроил некоторый динамический контент для проверки гибкости и хотел бы знать, если кто-нибудь видит какие-либо проблемы с ним. Он должен хорошо работать и для центрированных оверлеев - лайтбокс, всплывающее окно и т. Д.
источник
.outer {position:absolute;width:100%;height:100%}
не нужно, они здесь просто для демонстрации. Все, что нам нужноdisplay:table
, если кто-то запутался, как я..outer
иmiddle
и явно игнорировать.inner
и его стиль. Я не знаю, в чем смыслmargin-left
,margin-right
установить на авто, так как это не центрирует элемент по горизонтали ?? !!!width: 100%;
и добавлениеmargin: 0 auto
к.outer
позволяет переменную ширину , а также.top: 0; left 0;
отсутствует, по крайней мере, в Chrome, который устанавливает значение по умолчанию 1.Еще один, которого я не вижу в списке:
height
должен быть объявлен (см. Переменная высота )overflow: auto
для предотвращения распространения контента (см. Переполнение)Источник: Абсолютное горизонтальное и вертикальное центрирование в CSS
источник
margin: auto;
Самым простым способом были бы следующие 3 строки CSS:
1) положение: относительное;
2) верх: 50%;
3) преобразование: translateY (-50%);
Ниже приведен пример :
источник
height
внешнееdiv
есть100%
. Тогда работает только сposition: absolute;
.-webkit-transform
конкретного варианта, который мне понадобился, чтобы заставить этот метод работать в фантомах ... закончились часы борьбы, так что спасибо!На самом деле вам нужно два div для вертикального центрирования. Элемент div, содержащий содержимое, должен иметь ширину и высоту.
Вот результат
источник
Теперь решение flexbox - очень простой способ для современных браузеров, поэтому я рекомендую это для вас:
источник
navbar
, вы можете изменить высоту, используяheight: calc(100% - 55px)
или любой другой ростnavbar
.float
. Спасибо.Редактировать 2020: используйте это, только если вам нужно поддерживать старые браузеры, такие как IE8 (что вы должны отказаться should). Если нет, используйте flexbox.
Это самый простой метод, который я нашел, и я использую его все время ( демонстрация jsFiddle здесь )
Спасибо Крису Койеру из CSS Tricks за эту статью .
Поддержка начинается с IE8.
источник
После долгих исследований я наконец нашел окончательное решение. Это работает даже для плавающих элементов. Просмотреть исходный код
источник
50%
у меня сработало (не-50%
)Решение Flexbox
источник
justify-content: center
будетЧтобы центрировать div на странице, проверьте ссылку скрипта .
Другой вариант - использовать flex box, проверьте ссылку на скрипку .
Другой вариант - использовать CSS 3-преобразование:
источник
%
,em
с иrem
с. Абсолютные или фиксированные значения - это пиксели или точки. То, что вы имеете в виду, это «это работает только с заявленной высотой». Однако, хотя этот метод, описанный Моесом, требует высоты, когда вы объявляете его в относительных единицах, процентное соотношение является лучшим, независимо от того, сколько контента находится внутри центрированного DIV, DIV будет расширяться по вертикали, чтобы соответствовать его контенту. В этом прелесть этого метода. Еще одна хорошая вещь - этот метод работает в IE8 / 9/10 на тот случай, если кому-то все еще нужно поддерживать эти браузеры.transform: translate(-50%, -50%);
технику. Для IE8 я бы просто оставил его сверху / по центру и двигался дальше.Самое простое решение ниже:
источник
К сожалению - но неудивительно - решение более сложное, чем хотелось бы. Также, к сожалению, вам нужно будет использовать дополнительные элементы div вокруг элемента, который вы хотите расположить по центру.
Для совместимых со стандартами браузеров, таких как Mozilla, Opera, Safari и т. Д., Вам нужно установить внешний div, который будет отображаться в виде таблицы, и внутренний div, который будет отображаться в виде ячейки таблицы, - который затем можно центрировать по вертикали. Для Internet Explorer вам нужно расположить внутренний div абсолютно внутри внешнего div, а затем указать верх как 50% . Следующие страницы хорошо объясняют эту технику и предоставляют несколько примеров кода:
Вертикальное центрирование в CSS с неизвестной высотой (совместимо с Internet Explorer 7)(больше не работает)Существует также методика вертикального центрирования с использованием JavaScript. Вертикальное выравнивание контента с помощью JavaScript и CSS демонстрирует это.
источник
Если кому-то нужна только Internet Explorer 10 (и более поздние версии), используйте
flexbox
:Поддержка Flexbox: http://caniuse.com/flexbox
источник
align-items: center;
!Современный способ центрировать элемент по вертикали - использовать
flexbox
.Вам нужен родитель, чтобы решить рост и ребенка по центру.
В приведенном ниже примере центр в центре вашего браузера. Что важно (в моем примере), чтобы установить ,
height: 100%
чтобыbody
иhtml
затемmin-height: 100%
к контейнеру.источник
Центрирование только по вертикали
Если вас не интересуют Internet Explorer 6 и 7, вы можете использовать технику, включающую два контейнера.
Внешний контейнер:
display: table;
Внутренний контейнер:
display: table-cell;
vertical-align: middle;
Контент окно:
display: inline-block;
Вы можете добавить любой контент в поле контента, не заботясь о его ширине или высоте!
Демо-версия:
Смотрите также эту скрипку !
Центрирование по горизонтали и вертикали
Если вы хотите центрировать как горизонтально, так и вертикально, вам также необходимо следующее.
Внутренний контейнер:
text-align: center;
Контент окно:
text-align: left;
илиtext-align: right;
, если вы не хотите, чтобы текст центрировалсяДемо-версия:
Смотрите также эту скрипку !
источник
Связанный: Center a Image
источник
Это всегда, куда я иду, когда я должен вернуться к этому вопросу .
Для тех, кто не хочет совершать прыжок:
position:relative
илиposition:absolute
.position:absolute
иtop:50%
на дочернем контейнере, чтобы переместить верхнюю часть к середине родительского контейнера.Пример этого в коде:
источник
Использование свойства flex в CSS.
или с помощью
display: flex;
иmargin: auto;
Показать фрагмент кода
показать текстовый центр
Показать фрагмент кода
Используя процент (%) высоты и ширины.
Показать фрагмент кода
источник
Я только что написал этот CSS и, чтобы узнать больше, пожалуйста, пройдите: Эта статья с вертикальным выравниванием всего с 3-мя строками CSS .
источник
CSS Grid
источник
Для новичков, пожалуйста, попробуйте
источник
div
.<div style="display:flex"><div style="margin:auto">Inner</div></div>
Ответ от Billbad работает только с фиксированной шириной
.inner
div. Это решение работает для динамической ширины, добавляя атрибутtext-align: center
в.outer
div.источник
Использование трех строк кода
transform
работает практически в современных браузерах и Internet Explorer:Я добавляю этот ответ, так как я обнаружил некоторую неполноту в предыдущей версии этого ответа (а переполнение стека не позволяет мне просто комментировать).
Относительный 'position' портит стиль, если текущий div находится в теле и не имеет контейнерного div. Хотя «исправлено», кажется, работает, но оно, очевидно, фиксирует содержимое в центре области просмотра
Также я использовал этот стиль для центрирования некоторых оверлеев div и обнаружил, что в Mozilla все элементы внутри этого трансформированного div потеряли свои нижние границы. Возможно проблема рендеринга. Но добавление только минимального отступа к некоторым из них сделало это правильно. Chrome и Internet Explorer (на удивление) рендерили поля без необходимости заполнения.
источник
Следующая ссылка представляет простой способ сделать это всего за 3 строки в вашем CSS:
Выровняйте все по вертикали всего с 3 строками CSS .
Я знаю, что на этот вопрос уже есть ответ, однако я увидел полезность в ссылке для его простоты.
источник
Не отвечая за совместимость браузера, но также упомянув новую сетку и не очень новую функцию Flexbox.
сетка
От: Mozilla - Сетка Документация - Выровнять Div по вертикали
Поддержка браузеров: поддержка Grid Browser
CSS:
HTML:
Flexbox
Поддержка браузера: поддержка браузера Flexbox
CSS:
источник
Я думаю, что солидное решение для всех браузеров без использования flexbox - "align-items: center;" является комбинацией отображения: таблица и вертикальное выравнивание: среднее ;.
CSS
HTML
Moдемо: https://jsfiddle.net/6m640rpp/
источник
Я сделал это с этим (изменить ширину, высоту, margin-top и margin-left соответственно):
источник
Содержимое может быть легко отцентрировано с помощью flexbox. Следующий код показывает CSS для контейнера, внутри которого содержимое должно быть центрировано:
источник
Особенно для родительских элементов div с относительной (неизвестной) высотой центрирование в неизвестном решении прекрасно работает для меня. В статье есть несколько действительно хороших примеров кода.
Он был протестирован в Chrome, Firefox, Opera и Internet Explorer.
источник
Просто сделайте это: добавьте класс по вашему
div
:И прочитайте эту статью для объяснения. Примечание:
Height
необходимо.источник
Недавно я обнаружил одну хитрость: вам нужно использовать,
top 50%
а затем вы делаетеtranslateY(-50%)
источник