Из этих замечательных ответов я просто хочу подчеркнуть, что вы должны дать "#inner" значение "width", иначе оно будет равно "100%", и вы не сможете определить, находится ли оно уже по центру.
Конечно, вам не нужно устанавливать widthв 50%. Любая ширина меньше содержащей <div>будет работать. Это margin: 0 autoто, что делает фактическое центрирование.
Если вы ориентируетесь на Internet Explorer 8 (и более поздние версии), возможно, лучше иметь это вместо этого:
#inner {display: table;margin:0 auto;}
Это сделает внутренний элемент по центру по горизонтали, и это работает без установки конкретного width.
Для вертикального центрирования я обычно использую «line-height» (line-height == height). Это просто и приятно, но работает только с однострочным текстовым контентом :)
Николас Гийом
98
Вы должны использовать тег! DOCTYPE на своей HTML-странице, чтобы он хорошо работал в IE.
Фабио
15
Обратите внимание, что может быть необходимо добавить «float: none;» для #inner.
Мерт Мертс
15
Вы также устанавливаете верхнее и нижнее поля на 0, что не связано. Лучше выкладывать margin-left: auto; margin-right: autoя думаю.
Эммануэль Тузери
13
Не обязательно margin:0 auto: это может быть margin: <whatever_vertical_margin_you_need> autoвторой горизонтальный край.
YakovL
1247
Если вы не хотите устанавливать фиксированную ширину внутри, divвы можете сделать что-то вроде этого:
@SabaAhang правильный синтаксис для этого будет float: none;и, вероятно, необходим только потому, что #inner унаследовал один floatиз leftили rightгде-то еще в вашем CSS.
Даг Маклин
8
Это хорошее решение. Просто имейте в виду , что внутренняя унаследует text-alignтак что вы можете захотеть установить внутренние - х text-alignдо initialили другое значение.
Прежде чем приступить к реализации этого решения, обязательно прочитайте этот ответ .
cimmanon
4
Safari, на данный момент, все еще требует -webkitфлагов для flexbox ( display: -webkit-flex;и -webkit-align-items: center;и -webkit-justify-content: center;)
Джозеф Хансен
Я всегда думаю, что использование большого количества кода - плохая практика, например, с этим кодом я центрирую свой div: display: table; наценка: авто; простой и легкий
Мне не нравится это решение, потому что, когда внутренний элемент слишком широк для экрана, вы не можете прокрутить весь элемент по горизонтали. наценка: 0 авто работает лучше.
Aloso
поле слева: авто; поле справа: авто; центрирует элемент уровня блока
killscreen
Ширина по умолчанию для большинства элементов уровня блока - авто, которая заполняет доступную область на экране. Простое центрирование помещает его в то же положение, что и выравнивание по левому краю. Если вы хотите, чтобы он был визуально центрирован, вы должны установить ширину (или максимальную ширину, хотя Internet Explorer 6 и более ранние версии не поддерживают это, а IE 7 поддерживает его только в стандартном режиме).
killscreen
228
Я создал этот пример, чтобы показать, как вертикально и горизонтальноalign .
+1 за этот метод, я собирался ответить с ним. Обратите внимание, что вы должны объявить ширину элемента, который вы хотите центрировать по горизонтали (или высоту, если центрируете вертикально). Вот подробное объяснение: codepen.io/shshaw/full/gEiDt . Один из наиболее универсальных и широко поддерживаемых методов центрирования элементов по вертикали и / или по горизонтали.
stvnrynlds
6
Вы не можете использовать отступы внутри div, но если вы хотите создать иллюзию, используйте рамку того же цвета.
Белка
Я думаю, что для того, чтобы этот метод работал, вам нужно установить with и высоту внутреннего div
Nicolas S.Xu
212
Некоторые авторы упоминают CSS 3 способ использования по центру display:box.
Этот синтаксис устарел и больше не должен использоваться. [Смотрите также этот пост] .
Так что для полноты изложения здесь представлен новейший способ центрирования в CSS 3 с использованием модуля Flexible Box Layout .
... и вы хотите центрировать свои элементы в рамке, вот что вам нужно на родительском элементе (.box):
.box {display: flex;flex-wrap: wrap;/* Optional. only if you want the items to wrap */justify-content: center;/* For horizontal alignment */align-items: center;/* For vertical alignment */}
.box {display: flex;flex-wrap: wrap;/* Optional. only if you want the items to wrap */justify-content: center;/* For horizontal alignment */align-items: center;/* For vertical alignment */}*{margin:0;padding:0;}
html,
body {height:100%;}.box {height:200px;display: flex;flex-wrap: wrap;justify-content: center;align-items: center;border:2px solid tomato;}.box div {margin:010px;width:100px;}.item1 {height:50px;background: pink;}.item2 {background: brown;height:100px;}.item3 {height:150px;background: orange;}
что вы подразумеваете под "синтаксис устарел", это устарело?
Конга Раджу
6
Спецификация Flexbox прошла 3 основных пересмотра. Самый последний проект от сентября 2012 года, который официально устарел все предыдущие проекты. Тем не менее, поддержка браузеров не очень удобна (особенно старые браузеры Android): stackoverflow.com/questions/15662578/…
cimmanon
Это работало для меня в Chrome, когда версия Джастина Полия не сработала.
Верн Дженсен
Разве это не "justify-content: center;" для вертикального выравнивания и «align-items: center;» для горизонтального выравнивания?
Wouter Vanherck
3
@WouterVanherck это зависит от flex-directionзначения. Если это «строка» (по умолчанию) - тогда justify-content: center; для горизонтального выравнивания (как я упоминал в ответе) Если это «столбец» - тогда justify-content: center;для вертикального выравнивания.
Данилд
140
Если вы не хотите устанавливать фиксированную ширину и не хотите дополнительного поля, добавьте display: inline-blockк своему элементу.
Прежде чем приступить к реализации этого решения, обязательно прочитайте этот ответ .
cimmanon
88
Установите widthи установите margin-leftи margin-rightв auto. Это только для горизонтального , хотя. Если вы хотите оба пути, вы просто сделаете это обоими способами. Не бойся экспериментировать; это не значит, что ты что-то сломаешь.
Недавно мне пришлось display:none;центрировать «скрытый» div (то есть ), который имел внутри себя табличную форму, которую нужно было центрировать на странице. Я написал следующий код jQuery для отображения скрытого элемента div, а затем обновил содержимое CSS до автоматически сгенерированной ширины таблицы и изменил поле по центру. (Переключатель отображения активируется при нажатии на ссылку, но этот код не требуется для отображения.)
ПРИМЕЧАНИЕ. Я делюсь этим кодом, потому что Google привел меня к этому решению по переполнению стека, и все бы сработало, за исключением того, что скрытые элементы не имеют никакой ширины и не могут быть изменены или центрированы до тех пор, пока они не отобразятся.
Это text-align:свойство является необязательным для современных браузеров, но оно необходимо в режиме причуд Internet Explorer для поддержки устаревших браузеров.
Нет необходимости для свойства text-align. Это совершенно не нужно.
Тоухид Рахман
text-align на самом деле необходимо, чтобы он работал в режиме IE quicks, поэтому, если вы не возражаете, добавьте небольшое выражение для поддержки старых браузеров, оставьте его там. (IE8 с правилами IE8 и IE7 работают без выравнивания текста, так что, возможно, это касается только IE6 и старше)
Хитрость в том, что элемент translateX(-50%)устанавливается на #inner50 процентов слева от его собственной ширины. Вы можете использовать тот же трюк для вертикального выравнивания.
Вот Скрипка, показывающая горизонтальное и вертикальное выравнивание.
Также могут понадобиться префиксы поставщиков:-webkit-transform: translate(-50%,0); -moz-transform: translate(-50%,0); -ms-transform: translate(-50%,0); -khtml-transform: translate(-50%,0); -o-transform: translate(-50%,0);
Skippy le Grand Gourou
45
Крис Койер, который написал отличный пост на тему «Сосредоточение в неизвестном» в своем блоге. Это сводка нескольких решений. Я опубликовал тот, который не опубликован в этом вопросе. Он имеет больше поддержки браузера, чем решение Flexbox , и вы не используете, display: table;что может сломать другие вещи.
/* This parent can be any width and height */.outer {
text-align: center;}/* The ghost, nudged to maintain perfect centering */.outer:before {
content:'.';
display:inline-block;
height:100%;
vertical-align: middle;
width:0;
overflow: hidden;}/* The element to be centered, can
also be of any width and height */.inner {
display:inline-block;
vertical-align: middle;
width:300px;}
div#outer {height:120px;background-color: red;}
div#inner {width:50%;height:100%;background-color: green;margin:0 auto;text-align: center;/* For text alignment to center horizontally. */line-height:120px;/* For text alignment to center vertically. */}
Если у вас много детей под родителем, значит, ваш CSS-контент должен быть таким, как этот пример на скрипке .
Содержание HTML выглядит следующим образом:
<divid="outer"style="width:100%;"><divclass="inner"> Foo Text </div><divclass="inner"> Foo Text </div><divclass="inner"> Foo Text </div><divclass="inner"></div><divclass="inner"></div><divclass="inner"></div><divclass="inner"></div><divclass="inner"></div><divclass="inner"> Foo Text </div></div>
По моему опыту, лучший способ центрировать прямоугольник как по вертикали, так и по горизонтали, это использовать дополнительный контейнер и применять следующие свойства:
Как отмечает ваша скрипка, на #inner должна быть установлена ширина.
Майкл Терри
#outerне нужно, так width:100%;как <div>по умолчанию всегда есть width:100%. и text-align:centerтакже не является необходимым вообще.
Мобарак Али
27
Если ширина содержимого неизвестна, вы можете использовать следующий метод . Предположим, у нас есть эти два элемента:
.outer -- полная ширина
.inner - ширина не указана (но можно указать максимальную ширину)
Предположим, что вычисленная ширина элементов составляет 1000 пикселей и 300 пикселей соответственно. Действуйте следующим образом:
Завернуть .innerвнутрь.center-helper
Сделать .center-helperвстроенный блок; он становится того же размера, .innerчто и его ширина 300 пикселей.
Нажмите на .center-helper50% вправо относительно своего родителя; это оставляет его слева на 500 пикселей по отношению к. наружный.
Нажмите на .inner50% влево относительно своего родителя; это помещает его слева в -150 пикселей по отношению к. вспомогательный центр, что означает, что его левый находится на 500 - 150 = 350 пикселей относительно. наружный.
Установите переполнение на .outerскрытый, чтобы предотвратить горизонтальную полосу прокрутки.
Демо-версия:
body {font: medium sans-serif;}.outer {overflow: hidden;background-color: papayawhip;}.center-helper {display: inline-block;position: relative;left:50%;background-color: burlywood;}.inner {display: inline-block;position: relative;left:-50%;background-color: wheat;}
<divclass="outer"><divclass="center-helper"><divclass="inner"><h1>A div with no defined width</h1><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br>
Duis condimentum sem non turpis consectetur blandit.<br>
Donec dictum risus id orci ornare tempor.<br>
Proin pharetra augue a lorem elementum molestie.<br>
Nunc nec justo sit amet nisi tempor viverra sit amet a ipsum.</p></div></div></div>
#container {
display: table;
width:<width of your container>;
height:<height of your container>;}#inner {
width:<width of your center div>;
display: table-cell;
margin:0auto;
text-align: center;
vertical-align: middle;}
Это также выровняет по #innerвертикали. Если вы не хотите, удалите displayи vertical-alignсвойства;
Применение text-align: centerвстроенного содержимого центрируется в поле строки. Однако, поскольку внутренний div имеет по умолчанию, width: 100%вы должны установить определенную ширину или использовать один из следующих:
Использование margin: 0 auto- это еще один вариант, и он больше подходит для совместимости со старыми браузерами. Это работает вместе с display: table.
transform: translateпозволяет изменить координатное пространство модели визуального форматирования CSS. Используя его, элементы могут быть переведены, повернуты, масштабированы и перекошены. Для центрирования по горизонтали требуется position: absoluteи left: 50%.
Тег <center>является альтернативой HTML text-align: center. Он работает в старых браузерах и большинстве новых, но не считается хорошей практикой, поскольку эта функция устарела и была удалена из веб-стандартов.
text-align работает для выравнивания текста в его контейнере, а не для его контейнера с его родителем.
Лалит Кумар Маурья
я проверяю это, у меня проблема с установкой дочернего по центру, необходимо, когда у вас есть более одного дочернего элемента, больше раз поля: 0 автоматический шрифт ответа, но, выравнивание текста по центру, для родителя сделать этот дочерний элемент центром, даже если они являются элементом и не будь текстом,
проверь
выравнивание текста только по центру. Вы правы в данный момент, но когда вы пишете контейнер CSS, который содержит дочерний элемент с разной шириной и цветом, ваш код не работает. Проверьте это снова !!!!
Лалит Кумар Маурья
Посмотрите этот пример jsfiddle.net/uCdPK/2 и скажите мне, что вы об этом думаете !!!!!
Ответы:
Вы можете применить этот CSS к внутреннему
<div>
:Конечно, вам не нужно устанавливать
width
в50%
. Любая ширина меньше содержащей<div>
будет работать. Этоmargin: 0 auto
то, что делает фактическое центрирование.Если вы ориентируетесь на Internet Explorer 8 (и более поздние версии), возможно, лучше иметь это вместо этого:
Это сделает внутренний элемент по центру по горизонтали, и это работает без установки конкретного
width
.Рабочий пример здесь:
источник
margin-left: auto; margin-right: auto
я думаю.margin:0 auto
: это может бытьmargin: <whatever_vertical_margin_you_need> auto
второй горизонтальный край.Если вы не хотите устанавливать фиксированную ширину внутри,
div
вы можете сделать что-то вроде этого:Это превращает внутреннее
div
в линейный элемент, с которым можно центрироватьtext-align
.источник
float: none;
и, вероятно, необходим только потому, что #inner унаследовал одинfloat
изleft
илиright
где-то еще в вашем CSS.text-align
так что вы можете захотеть установить внутренние - хtext-align
доinitial
или другое значение.Лучшие подходы с CSS 3 .
Модель коробки:
В зависимости от вашего удобства вы также можете использовать
box-orient, box-flex, box-direction
свойства.Flex :
Узнайте больше о центрировании дочерних элементов
Ссылка 2
Ссылка 3
Ссылка 4
И это объясняет, почему блочная модель является лучшим подходом :
источник
-webkit
флагов для flexbox (display: -webkit-flex;
и-webkit-align-items: center;
и-webkit-justify-content: center;
)Предположим, что ваш div имеет ширину 200 пикселей:
Убедитесь , что родительский элемент позиционируется , т.е. относительное, фиксированное, абсолютное, или липким.
Если вы не знаете ширину вашего div, вы можете использовать
transform:translateX(-50%);
вместо отрицательного поля.https://jsfiddle.net/gjvfxxdj/
С помощью CSS calc () код может стать еще проще:
Принцип все тот же; положите предмет посередине и компенсируйте ширину.
источник
Я создал этот пример, чтобы показать, как вертикально и горизонтально
align
.Код в основном это:
а также...
И он останется
center
даже при изменении размера экрана.источник
Некоторые авторы упоминают CSS 3 способ использования по центру
display:box
.Этот синтаксис устарел и больше не должен использоваться. [Смотрите также этот пост] .
Так что для полноты изложения здесь представлен новейший способ центрирования в CSS 3 с использованием модуля Flexible Box Layout .
Так что если у вас есть простая разметка, как:
... и вы хотите центрировать свои элементы в рамке, вот что вам нужно на родительском элементе (.box):
Показать фрагмент кода
Если вам нужно поддерживать старые браузеры, которые используют более старый синтаксис для flexbox , то это хорошее место для поиска.
источник
flex-direction
значения. Если это «строка» (по умолчанию) - тогдаjustify-content: center;
для горизонтального выравнивания (как я упоминал в ответе) Если это «столбец» - тогдаjustify-content: center;
для вертикального выравнивания.Если вы не хотите устанавливать фиксированную ширину и не хотите дополнительного поля, добавьте
display: inline-block
к своему элементу.Ты можешь использовать:
источник
display: table;
. Что оно делает?Центрирование div неизвестной высоты и ширины
По горизонтали и вертикали. Он работает с достаточно современными браузерами (Firefox, Safari / WebKit, Chrome, Internet Explorer 10, Opera и т. Д.)
Повозись с этим дальше на Codepen или на JSBin .
источник
Он не может быть центрирован, если вы не дадите ему ширину. В противном случае по умолчанию он займет все горизонтальное пространство.
источник
width: fit-content;
иmargin: 0 auto
. Я думаю, что это может работать с неизвестной шириной.Свойство CSS 3 box-align
источник
Установите
width
и установитеmargin-left
иmargin-right
вauto
. Это только для горизонтального , хотя. Если вы хотите оба пути, вы просто сделаете это обоими способами. Не бойся экспериментировать; это не значит, что ты что-то сломаешь.источник
Недавно мне пришлось
display:none;
центрировать «скрытый» div (то есть ), который имел внутри себя табличную форму, которую нужно было центрировать на странице. Я написал следующий код jQuery для отображения скрытого элемента div, а затем обновил содержимое CSS до автоматически сгенерированной ширины таблицы и изменил поле по центру. (Переключатель отображения активируется при нажатии на ссылку, но этот код не требуется для отображения.)ПРИМЕЧАНИЕ. Я делюсь этим кодом, потому что Google привел меня к этому решению по переполнению стека, и все бы сработало, за исключением того, что скрытые элементы не имеют никакой ширины и не могут быть изменены или центрированы до тех пор, пока они не отобразятся.
источник
Я обычно делаю это, используя абсолютную позицию:
Внешний div не нуждается в дополнительных свойствах, чтобы это работало.
источник
Для Firefox и Chrome:
Для Internet Explorer, Firefox и Chrome:
Это
text-align:
свойство является необязательным для современных браузеров, но оно необходимо в режиме причуд Internet Explorer для поддержки устаревших браузеров.источник
Использование:
источник
Другое решение для этого без необходимости устанавливать ширину для одного из элементов - это использование
transform
атрибута CSS 3 .Хитрость в том, что элемент
translateX(-50%)
устанавливается на#inner
50 процентов слева от его собственной ширины. Вы можете использовать тот же трюк для вертикального выравнивания.Вот Скрипка, показывающая горизонтальное и вертикальное выравнивание.
Более подробная информация о Mozilla Developer Network .
источник
-webkit-transform: translate(-50%,0); -moz-transform: translate(-50%,0); -ms-transform: translate(-50%,0); -khtml-transform: translate(-50%,0); -o-transform: translate(-50%,0);
Крис Койер, который написал отличный пост на тему «Сосредоточение в неизвестном» в своем блоге. Это сводка нескольких решений. Я опубликовал тот, который не опубликован в этом вопросе. Он имеет больше поддержки браузера, чем решение Flexbox , и вы не используете,
display: table;
что может сломать другие вещи.источник
Я недавно нашел подход:
Оба элемента должны иметь одинаковую ширину для правильного функционирования.
источник
#inner
только:#inner { position:relative; left:50%; transform:translateX(-50%); }
. Это работает для любой ширины.Например, посмотрите эту ссылку и фрагмент ниже:
Если у вас много детей под родителем, значит, ваш CSS-контент должен быть таким, как этот пример на скрипке .
Содержание HTML выглядит следующим образом:
Тогда посмотрите этот пример на скрипке .
источник
Центрирование только по горизонтали
По моему опыту, лучший способ центрировать прямоугольник по горизонтали - применить следующие свойства:
Контейнер:
text-align: center;
Контент окно:
display: inline-block;
Демо-версия:
Смотрите также эту скрипку !
Центрирование по горизонтали и вертикали
По моему опыту, лучший способ центрировать прямоугольник как по вертикали, так и по горизонтали, это использовать дополнительный контейнер и применять следующие свойства:
Внешний контейнер:
display: table;
Внутренний контейнер:
display: table-cell;
vertical-align: middle;
text-align: center;
Контент окно:
display: inline-block;
Демо-версия:
Смотрите также эту скрипку !
источник
Самый простой способ:
источник
#outer
не нужно, такwidth:100%;
как<div>
по умолчанию всегда естьwidth:100%
. иtext-align:center
также не является необходимым вообще.Если ширина содержимого неизвестна, вы можете использовать следующий метод . Предположим, у нас есть эти два элемента:
.outer
-- полная ширина.inner
- ширина не указана (но можно указать максимальную ширину)Предположим, что вычисленная ширина элементов составляет 1000 пикселей и 300 пикселей соответственно. Действуйте следующим образом:
.inner
внутрь.center-helper
.center-helper
встроенный блок; он становится того же размера,.inner
что и его ширина 300 пикселей..center-helper
50% вправо относительно своего родителя; это оставляет его слева на 500 пикселей по отношению к. наружный..inner
50% влево относительно своего родителя; это помещает его слева в -150 пикселей по отношению к. вспомогательный центр, что означает, что его левый находится на 500 - 150 = 350 пикселей относительно. наружный..outer
скрытый, чтобы предотвратить горизонтальную полосу прокрутки.Демо-версия:
источник
Вы можете сделать что-то вроде этого
Это также выровняет по
#inner
вертикали. Если вы не хотите, удалитеdisplay
иvertical-align
свойства;источник
Вот что вы хотите кратчайшим путем.
JSFIDDLE
источник
Выровнять текст: по центру
Применение
text-align: center
встроенного содержимого центрируется в поле строки. Однако, поскольку внутренний div имеет по умолчанию,width: 100%
вы должны установить определенную ширину или использовать один из следующих:display: block
display: inline
display: inline-block
Показать фрагмент кода
Маржа: 0 авто
Использование
margin: 0 auto
- это еще один вариант, и он больше подходит для совместимости со старыми браузерами. Это работает вместе сdisplay: table
.Показать фрагмент кода
Flexbox
display: flex
ведет себя как блочный элемент и размещает его содержимое в соответствии с моделью flexbox. Это работает сjustify-content: center
.Обратите внимание: Flexbox совместим с большинством браузеров, но не со всеми. Смотрите здесь полный и обновленный список совместимости браузеров.
Показать фрагмент кода
преобразование
transform: translate
позволяет изменить координатное пространство модели визуального форматирования CSS. Используя его, элементы могут быть переведены, повернуты, масштабированы и перекошены. Для центрирования по горизонтали требуетсяposition: absolute
иleft: 50%
.Показать фрагмент кода
<center>
(Осуждаемый)Тег
<center>
является альтернативой HTMLtext-align: center
. Он работает в старых браузерах и большинстве новых, но не считается хорошей практикой, поскольку эта функция устарела и была удалена из веб-стандартов.Показать фрагмент кода
источник
Вы можете использовать
display: flex
для вашего внешнего div и горизонтального центра вы должны добавитьjustify-content: center
или вы можете посетить w3schools - CSS flex Property, чтобы получить больше идей.
источник
Flex обеспечивает более 97% поддержки браузеров и может быть лучшим способом решения подобных проблем в несколько строк:
источник
Что ж, мне удалось найти решение, которое, возможно, подойдет для любой ситуации, но использует JavaScript:
Вот структура:
И вот фрагмент JavaScript:
Если вы хотите использовать его адаптивно, вы можете добавить следующее:
источник
Этот метод также отлично работает:
Для внутреннего
<div>
единственного условия является то, что онheight
иwidth
не должен быть больше, чем у его контейнера.источник
Существовал один вариант, который я нашел:
Все говорят, чтобы использовать:
Но есть и другой вариант. Установите это свойство для родительского div. Он отлично работает в любое время:
И смотри, ребенок иди в центр.
И, наконец, CSS для вас:
источник