Как выровнять все тело html по центру?


Ответы:


115

Я только что наткнулся на этот старый пост, и хотя я уверен, что user01 давно нашел свой ответ, я обнаружил, что текущие ответы не совсем работают. Немного поигравшись с информацией, предоставленной другими, я нашел решение, которое работало в IE, Firefox и Chrome. В CSS:

html, body {
    height: 100%;
}

html {
    display: table;
    margin: auto;
}

body {
    display: table-cell;
    vertical-align: middle;
}

Это почти идентично ответу Абернье, но я обнаружил, что включение ширины нарушит центрирование, как и исключение автоматического поля. Я надеюсь, что любой, кто наткнется на эту тему, найдет мой ответ полезным.

Примечание. Не центрируйте html, body { height: 100%; }только по горизонтали.


Хороший ответ. Просто интересно (поскольку у меня нет большого опыта работы с HTML), необходимо ли устанавливать высоту на 100%?
закат 8

7
@JackHumphries Высота необходима только в том случае, если вы хотите выровнять центр страницы как по вертикальной, так и по горизонтальной оси. Если горизонтальное - это все, что вам нужно, вы можете не указывать высоту.
MildWolfie

36

Можешь попробовать:

body{ margin:0 auto; }

1
Это такой простой ответ, но при этом самый чистый и эффективный способ центрировать тег body в середине страницы.
Justinhartman

1
Хотя он и короткий, он также не работает в IE, Edge Legacy, Edge, Chrome или Firefox. Проблема в том, что margin auto работает только тогда, когда ширина элемента меньше ширины родительского элемента. Поскольку для параметра body по умолчанию установлено значение 100%, по краям нет места для автоматической вставки полей. Вы можете использовать, body { margin:0 auto; max-width: 700px; }и тогда ваше тело будет до 700 пикселей и позволит обертывать на небольших устройствах.
user3347790

17

РЕДАКТИРОВАТЬ

На сегодняшний день с помощью flexbox вы могли

body {
  display:flex; flex-direction:column; justify-content:center;
  min-height:100vh;
}

ПРЕДЫДУЩИЙ ОТВЕТ

html, body {height:100%;}
html {display:table; width:100%;}
body {display:table-cell; text-align:center; vertical-align:middle;}

1
Какой DOCTYPE позволяет использовать styleатрибут htmlобъекта?
ceven

1
@ceving: не уверен, что понял ... значит, это недействительный CSS?
Абернье,

11

Если у меня есть что-то, чем я люблю делиться относительно CSS, так это МОЙ ЛЮБИМЫЙ СПОСОБ ЦЕНТРАНИРОВАНИЯ ВСЕГО ПО ОБЕИМ ОСИ !!!

Преимущества этого метода :

  1. Полная совместимость с браузерами, которые люди действительно используют
  2. Таблицы не требуются
  3. Возможность многократного использования для центрирования любых других элементов внутри их родителя
  4. Подходит для родителей и детей с динамическими (изменяющимися) размерами!

Я всегда делаю это, используя 2 класса: один для указания родительского элемента, содержимое которого будет центрировано ( .centered-wrapper), и второй, чтобы указать, какой дочерний элемент родительского элемента центрирован ( .centered-content). Этот второй класс полезен в случае, когда у родителя несколько дочерних элементов, но нужно центрировать только 1). В этом случае bodyбудет то .centered-wrapper, а внутреннее divбудет .centered-content.

<html>
    <head>...</head>
    <body class="centered-wrapper">
        <div class="centered-content">...</div>
    </body>
</html>

Идея для центрирования теперь будет делать . Это легко упростит горизонтальное центрирование, сквозное , а также позволит центрировать по вертикали, как вы увидите..centered-contentinline-blocktext-align: center;

.centered-wrapper {
    position: relative;
    text-align: center;
}
.centered-wrapper:before {
    content: "";
    position: relative;
    display: inline-block;
    width: 0; height: 100%;
    vertical-align: middle;
}
.centered-content {
    display: inline-block;
    vertical-align: middle;
}

Это дает вам 2 действительно многоразовых класса для центрирования любого дочернего элемента внутри любого родителя! Просто добавьте .centered-wrapperи .centered-contentклассы.

Итак, что случилось с этим :beforeэлементом? Это облегчает vertical-align: middle;и необходимо, потому что вертикальное выравнивание не относительно высоты родителя - вертикальное выравнивание относительно высоты самого высокого родного брата !!! . Следовательно, гарантируя, что есть брат или сестра, высота которого равна высоте родителя (100% высоты, 0 ширины, чтобы сделать его невидимым), мы знаем, что вертикальное выравнивание будет относительно высоты родителя.

Одна последняя вещь: Вы должны убедиться , что ваши htmlи bodyтеги размер окна так , чтобы центровка к ним так же , как центрирование в браузере!

html, body {
    width: 100%;
    height: 100%;
    padding: 0;
    margin: 0;
}

Скрипка: https://jsfiddle.net/gershy/g121g72a/



8

Я использую flexbox на html. Для приятного эффекта вы можете сопоставить хром браузеров, чтобы отображать контент на экранах, размер которых превышает максимальные значения вашей страницы. Я считаю, что это #eeeeeeочень хорошо подходит. Вы можете добавить тень блока для хорошего эффекта плавания.

    html{
        display: flex;
        flex-flow: row nowrap;  
        justify-content: center;
        align-content: center;
        align-items: center;
        height:100%;
        margin: 0;
        padding: 0;
        background:#eeeeee;
    }
    body {
        margin: 0;
        flex: 0 1 auto;
        align-self: auto;
        /*recommend 1920 / 1080 max based on usage stats, use 100% to that point*/
        width: 100%
        max-width: 900px;
        height: 100%;
        max-height: 600px;
        background:#fafafa;
        -webkit-box-shadow: 0px 0px 96px 0px rgba(0,0,0,0.75);
        -moz-box-shadow: 0px 0px 96px 0px rgba(0,0,0,0.75);
        box-shadow: 0px 0px 96px 0px rgba(0,0,0,0.75);
    }

введите описание изображения здесь введите описание изображения здесь изображение / данные любезно предоставлены StatCounter


4
Хороший современный ответ. Всего несколько комментариев. (a) Префикс vendor-prefix для box-shadowвероятно избыточен, поскольку браузеры flexтакже поддерживают box-shadow. (б) Есть много CSS, который украшает ваш ответ, но затрудняет различение важных частей. Спасибо
Manngo 06

Очень много (b), в комментарии @ Manngo выше.
cjauvin

Хороший ответ. Современное. Но могло быть и попроще с тем же содержанием.
carloswm85 05

4
<style>
        body{
            max-width: 1180px;
            width: 98%;
            margin: 0px auto;
            text-align: left;
        }
</style>

Просто примените этот стиль перед применением любого CSS. Вы можете изменить ширину в соответствии с вашими потребностями.



Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.