Що саме потрібно для "margin: 0 auto;" працювати?


205

Я знаю, що налаштування margin: 0 auto;на елемент використовується для його центрування (зліва-справа). Однак я знаю, що елемент та його батько повинні відповідати певним критеріям, щоб автоматичний запас працював, і я ніколи не можу отримати магію правильно.

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


це, здається, ніколи не працює належним чином для мене в IE ... тому мені цікаво і про це.
квітня 11

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

Відповіді:


292

Вгорі голови:

  1. Елемент повинен бути на рівні блоку, наприклад, display: blockабоdisplay: table
  2. Елемент не повинен плавати
  3. Елемент не повинен мати фіксованого або абсолютного положення 1

Зверху голови інших людей:

  1. Елемент повинен мати a, 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, не всі елементи 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 - корисна властивість відображення в цьому випадку, оскільки для нього не потрібно встановлювати ширину. (Я знаю, що цій посаді 5 років, але вона все ще стосується перехожих;)


2

У верхній частині голови моєї кішки переконайтеся, що divви не намагаєтесь зробити центрwidth: 100% .

Якщо це так, то важливими будуть правила, встановлені на дитячих дівах.


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
Самсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.