Что именно нужно для «margin: 0 auto;» работать?


206

Я знаю, что настройка margin: 0 auto;элемента используется для его центрирования (слева направо). Тем не менее, я знаю, что элемент и его родительский элемент должны соответствовать определенным критериям для работы автоматического запаса, и я никогда не смогу понять магию правильно.

Поэтому мой вопрос прост: какие свойства CSS должны быть установлены для элемента и его родителя, margin: 0 auto;чтобы левее-правее центрировать дочерний элемент ?


мне кажется, в IE это не работает должным образом ... поэтому мне тоже интересно.
mpen

5
@Mark: IE будет margin: 0 auto;корректно работать только в стандартном режиме, поэтому вам нужен тип документа (как если бы он не был нужен раньше).
BoltClock

Ответы:


292

С верхней части моей головы:

  1. Элемент должен быть на уровне блока, например, display: blockилиdisplay: table
  2. Элемент не должен плавать
  3. Элемент не должен иметь фиксированной или абсолютной позиции 1

Вне головы других людей:

  1. Элемент должен иметь значение widthне auto2

Обратите внимание, что все эти условия должны выполняться для элемента, центрированного для его работы.


1 Есть одно исключение: если ваш фиксированный или абсолютно позиционированный элемент имеет left: 0; right: 0, он будет центрироваться с автоматическими полями .

2 Технически, margin: 0 autoработает с автоматической шириной, но автоматическая ширина имеет приоритет над автоматическими полями, и в результате автоматические поля обнуляются, в результате чего создается впечатление, что они «не работают».


7
Два ответа «От вершины моей головы»: o
Рассел Диас

4
добавить фиксированную ширину , и вы получили идеальный ответ
MeO

1
Черт! Все остальные ответили, пока я кодировал! С вершины моей головы также ...: O
Кайл

Я скучаю по ol startатрибуту (и это невозможно осуществить в Markdown) :(
BoltClock

1
@Triynko: Ни вопрос, ни мой ответ никогда не говорили о атрибутах представления HTML (вопрос даже не помечен [html]!), Поэтому я не уверен, что именно вы называете буллом. В любом случае, хотя каждый элемент, на который можно настроить таргетинг с помощью CSS, может иметь свойства CSS width и height, не все элементы HTML могут иметь соответствующие атрибуты представления, и причина этого заключается в том, что просто не имеет смысла иметь их в определенных HTML элементы.
BoltClock

19

С макушки головы, это нужно width. Вам необходимо указать ширину контейнера, который вы центрируете (не родительскую ширину).


16
Все идет от наших голов!
BoltClock

8

Полное правило для CSS:

  1. ( display: blockИ widthне авто) ИЛИdisplay: table
  2. float: none
  3. position: relative

3

Вне головы, если элемент не является блочным элементом - сделайте это так.

а затем дать ему ширину.


2

Он также будет работать с display: table - полезное свойство display в этом случае, потому что не требует установки ширины. (Я знаю, что этому посту 5 лет, но он все еще актуален для прохожих;)


2

От головы моей кошки, убедитесь, что divвы пытаетесь отцентрировать не установлен width: 100%.

Если это так, то правила, установленные для дочерних элементов div, будут иметь значение.


1

Пожалуйста, перейдите к этому быстрому примеру, я создал jsFiddle . Надеюсь, это легко понять. Вы можете использовать wrapperdiv с шириной сайта для выравнивания по центру. Причина, по которой вы должны указать, widthзаключается в том, что браузер знает, что вы не собираетесь использовать жидкую компоновку.


1

Вот мое предложение:

First: 
      1. Add display: block or table
      2. Add position: relative
      3. Add width:(percentage also works fine)
Second: 
      if above trick not works then you have to add float:none;

0

Возможно, интересно, что вам не нужно указывать ширину для <button>элемента, чтобы он работал - просто убедитесь, что он имеет display:block: http://jsfiddle.net/muhuyttr/


-1

Для тех, кто только что задал этот вопрос и не может его исправить margin: 0 auto, вот что я обнаружил, вы можете найти полезным: tableэлемент без заданной ширины должен иметь display: tableи не display: block для того, margin: autoчтобы выполнять работу. Это может быть очевидным для некоторых, так как комбинация display: blockи widthзначение по умолчанию даст таблицу, которая будет расширена для заполнения ее контейнера, но если вы хотите, чтобы таблица приняла ее «естественную» ширину и была отцентрирована, вам нужноdisplay: table


Это не правда (Хотя, если вы просто дадите его, display: blockон не будет соответствовать условию 4 принятого ответа)
Квентин

@Quentin спасибо за советы. В моем случае я не хотел, чтобы таблица занимала горизонтальное пространство (что, казалось бы, устраняет всю дискуссию margin: 0 auto), и я также не мог указать ширину таблицы, поскольку ее содержимое может иметь разную ширину. В этом случае единственное решение, которое работает (то есть визуализирует таблицу обычным способом, но центрирует ее), это не правило ширины, display: tableиmargin: 0 auto
samson
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.