Мені це потрібно було робити багато разів, і послідовне рішення все ж вимагає додати трохи несемантичної розмітки та певних хакерських особливостей. Коли ми отримаємо підтримку браузера для css 3, ви отримаєте ваше вертикальне центрування без гріхів.
Для кращого пояснення методики ви можете подивитися статтю, з якої я її адаптував , але в основному вона передбачає додавання додаткового елемента та застосування різних стилів в IE та браузерах, які підтримують position:table\table-cell
елементи, що не є таблицями.
<div class="valign-outer">
<div class="valign-middle">
<div class="valign-inner">
Excuse me. What did you sleep in your clothes again last night. Really. You're gonna be in the car with her. Hey, not too early I sleep in on Saturday. Oh, McFly, your shoe's untied. Don't be so gullible, McFly. You got the place fixed up nice, McFly. I have you're car towed all the way to your house and all you've got for me is light beer. What are you looking at, butthead. Say hi to your mom for me.
</div>
</div>
</div>
<style>
/* Non-structural styling */
.valign-outer { height: 400px; border: 1px solid red; }
.valign-inner { border: 1px solid blue; }
</style>
<!--[if lte IE 7]>
<style>
/* For IE7 and earlier */
.valign-outer { position: relative; overflow: hidden; }
.valign-middle { position: absolute; top: 50%; }
.valign-inner { position: relative; top: -50% }
</style>
<![endif]-->
<!--[if gt IE 7]> -->
<style>
/* For other browsers */
.valign-outer { position: static; display: table; overflow: hidden; }
.valign-middle { position: static; display: table-cell; vertical-align: middle; width: 100%; }
</style>
Існує багато способів (хакків) застосування стилів у певних наборах браузерів. Я використовував умовні коментарі, але перегляньте статтю, зв'язану вище, щоб побачити дві інші методи.
Примітка. Існують прості способи отримання вертикального центрування, якщо ви знаєте деякі висоти заздалегідь, якщо ви намагаєтеся відцентрувати один рядок тексту або в кількох інших випадках. Якщо у вас є більше деталей, тоді введіть їх, тому що може бути метод, який не вимагає злому браузера або несемантичної розмітки.
Оновлення: Ми починаємо отримувати кращу підтримку браузера для CSS3, пропонуючи як flex-box, так і перетворення як альтернативні методи отримання вертикального центрування (серед інших ефектів). Дивіться це інше запитання для отримання додаткової інформації про сучасні методи, але майте на увазі, що підтримка браузера все ще є схематичною для CSS3.