Ответ 1
IE7 +: max-width: 660px
и margin: auto
Вы можете центрировать элемент уровня блока, назначив фиксированную ширину, а margin-right и -left установить auto.
.container ul {
/* for IE below version 7 use `width` instead of `max-width` */
max-width: 660px;
margin-right: auto;
margin-left: auto;
}
Примечания
- Не требуется контейнер
- Требуется ширина или максимальная ширина элемента до центра, который должен быть известен 👎
IE8 +: display: inline-block
и text-align: center
Также возможно центрирование элемента, как и обычного текста. Недостаток: вам нужно назначать значения как контейнеру, так и самому элементу.
.container {
text-align: center;
}
.container ul {
display: inline-block;
/* One most likely needs to realign flow content */
text-align: initial;
}
Примечания:
- Не требуется указывать определенную ширину 👍
- Требуется контейнер 👎
- Выравнивает содержимое потока в центр (потенциально нежелательный побочный эффект) 👎
- Работает хорошо с динамическим количеством пунктов меню (т.е. в тех случаях, когда вы не знаете ширины, которую занимает один элемент) 👍
IE8 +: display: table
и margin: auto
Как и первое решение, вы используете автоматические значения для полей справа и слева, но не назначаете ширину. Если вам не нужна поддержка IE7 и ниже, это лучше подходит, хотя для типа table
для display
кажется неловко использовать значение свойства display
.
.container ul {
display: table;
margin-right: auto;
margin-left: auto;
}
IE9 +: transform: translatex(-50%)
и left: 50%
Это похоже на метод причудливого центрирования, который использует абсолютное позиционирование и отрицательные поля.
.container {
position: relative;
}
.container ul {
position: absolute;
left: 50%;
transform: translatex(-50%);
}
Примечания
- Как всегда, при использовании абсолютного позиционирования центрированный элемент будет удален из потока документов. Все элементы будут заботиться только о контейнере, но игнорировать сам центрированный элемент. 👎👎👎
- Требуется контейнер 👎
- Этот метод позволяет легко вертикально центрировать, используя
top
вместоleft
иtranslateY()
вместоtranslateX()
. Также объединяетсяtop
иleft
сtranslate()
(обратите внимание на отсутствующиеX
иY
) 👍 - Отметьте caniuse.com для поддержки браузера, потому что здесь может потребоваться префикс для Android-браузеров и/или iOS-браузеров (и IE9).
Режущий край: display: flex
.container {
display: flex;
justify-content: center;
}
Примечания
- Это не хак 👍👍👍
- Требуется контейнер 👎
- Поддержка браузера неплоха, но имеет несколько заметных отверстий, особенно Internet Explorer до версии 11 и некоторых старых Android и Safari ( macOS и iOS)
Наконец, demo, в котором суммируются все вышеприведенные решения.