Як вирівняти все тіло 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
Це така проста відповідь, але найчистіший та найефективніший спосіб центрування тегу тіла в середині сторінки.
justinhartman

1
Незважаючи на те, що він короткий, також не працює в IE, Edge Legacy, Edge, Chrome або Firefox. Проблема в тому, що margin auto працює лише тоді, коли ширина елемента менша, ніж у батьківського. Оскільки за замовчуванням значення "body" встановлено на 100%, по краях не залишається місця для автоматичного вставлення полів. Ви можете використовувати, body { margin:0 auto; max-width: 700px; }і тоді ваше тіло буде до 700px і дозволить обгортання на менших пристроях.
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сутності?
закінчується

1
@ceving: не впевнений у розумінні ... означає, що це не дійсний CSS?
Аберньє

11

Якщо у мене є одна річ, якою я люблю ділитися по відношенню до CSS, це МОЙ УЛИЧНИЙ ШЛЯХ ЦЕНТРОВАННЯ РЕЧІВ ВІД ОСІХ !!!

Переваги цього методу :

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

Я завжди роблю це, використовуючи 2 класи: Один для вказівки батьківського елемента, вміст якого буде відцентрований ( .centered-wrapper), а другий - для визначення дочірнього елемента батьківського центру ( .centered-content). Цей 2-й клас корисний у тому випадку, коли батько має декількох дітей, але лише 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. Для приємного ефекту ви можете підібрати браузер chrome так, щоб розмістити ваш вміст на розмірах екрана, більших за максимальну кількість сторінок. Я вважаю, що це #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
Гарна, сучасна відповідь. Лише кілька коментарів. (а) Префікс постачальника для box-shadow, ймовірно, надлишковий, оскільки браузери, які flexтакож підтримують box-shadow. (b) Існує багато CSS, який прикрашає вашу відповідь, але ускладнює розрізнення важливих бітів. Дякую
Маннго

Дуже багато (б), у коментарі @ Manngo вище.
cjauvin

Гарна відповідь. Сучасна. Але це могло бути і простіше з однаковим змістом.
carloswm85

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.