Якщо це один рядок тексту та / або зображення, це зробити легко. Просто використовуйте:
text-align: center;
vertical-align: middle;
line-height: 90px; /* The same as your div height */
Це воно. Якщо це може бути кілька рядків, то це дещо складніше. Але на http://pmob.co.uk/ є рішення . Шукайте "вертикальне вирівнювання".
Оскільки вони, як правило, хакі або додавання складних дівок ... Я зазвичай використовую таблицю з однією коміркою, щоб зробити це ... щоб зробити це максимально просто.
Оновлення до 2020 року:
Якщо вам не потрібно, щоб він працював у попередніх браузерах, таких як Internet Explorer 10, ви можете використовувати flexbox. Він широко підтримується всіма поточними основними браузерами . В основному контейнер потрібно вказати як гнучкий контейнер разом з центром уздовж його головної та поперечної осі:
#container {
display: flex;
justify-content: center;
align-items: center;
}
Щоб вказати фіксовану ширину для дитини, яку називають "гнучким елементом":
#content {
flex: 0 0 120px;
}
Приклад: http://jsfiddle.net/2woqsef1/1/
Щоб зменшити вміст упаковки, це ще простіше: просто вийміть flex: ...
рядок з елемента flex, і він автоматично згортається.
Приклад: http://jsfiddle.net/2woqsef1/2/
Наведені вище приклади були протестовані в основних браузерах, включаючи MS Edge та Internet Explorer 11.
Одне технічне зауваження, якщо вам потрібно його налаштувати: всередині елемента flex, оскільки цей елемент flex не є самим контейнером flex, старий CSS-режим, який не є flexbox, працює так, як очікувалося. Однак якщо ви додасте додатковий гнучкий елемент до поточного гнучких контейнерів, два гнучкі елементи будуть розміщені горизонтально. Щоб їх розмістити вертикально, додайте flex-direction: column;
в гнучку ємність. Ось як це працює між гнучким контейнером та його безпосередніми дочірніми елементами.
Існує альтернативний метод проведення центрування: не вказуючи center
розподіл на головну та поперечну вісь для гнучких контейнерів, а замість цього вказуйте margin: auto
на елементі flex, щоб зайняти весь додатковий простір у всіх чотирьох напрямках та рівномірно розподілені поля. зробить гнучкий елемент по центру в усіх напрямках. Це працює, за винятком випадків, коли є кілька гнучких елементів. Також ця методика працює на MS Edge, але не на Internet Explorer 11.
Оновлення за 2016/2017 роки:
З ним можна частіше працювати transform
, і він добре працює навіть у старих браузерах, таких як Internet Explorer 10 та Internet Explorer 11. Він може підтримувати кілька рядків тексту:
position: relative;
top: 50%;
transform: translateY(-50%);
Приклад: https://jsfiddle.net/wb8u02kL/1/
Щоб зменшити ширину:
Розчин вище використовував фіксовану ширину для області вмісту. Для використання усадочної ширини використовуйте
position: relative;
float: left;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
Приклад: https://jsfiddle.net/wb8u02kL/2/
Якщо потрібна підтримка Internet Explorer 10, флексбокс не працюватиме, а спосіб вище та line-height
метод буде працювати. Інакше флексбокс зробив би цю роботу.
text-align:center
що не робить "вертикальну частину"?