Hoe centreer ik tekst verticaal met CSS?
Ik heb een div element dat tekst bevat, en ik wil de inhoud van deze div verticaal centreren.
Hier is mijn div stijl:
#box {
height: 170px;
width: 270px;
background: #000;
font-size: 48px;
color: #FFF;
text-align: center;
}
<div id="box">
Lorem ipsum dolor sit
</div>
Wat is de beste manier om dit te doen?
2181
3
Je kunt deze basisaanpak proberen:
Het werkt echter alleen voor een enkele regel tekst, omdat we de regel's hoogte op dezelfde hoogte zetten als het bevattende box element.
Een meer veelzijdige aanpak
Dit is een andere manier om tekst verticaal uit te lijnen. Deze oplossing werkt voor een enkele regel en meerdere regels tekst, maar het vereist nog steeds een container met vaste hoogte:
De CSS maakt gewoon de
<div>
groot, centreert de<span>
verticaal door de<div>
's line-height gelijk te zetten aan zijn hoogte, en maakt van de<span>
een inline-block metvertical-align: middle
. Dan stelt het de line-height weer in op normaal voor de<span>
, zodat de inhoud natuurlijk binnen het blok zal vloeien.Simulatie van tabel weergave
En hier is een andere optie, die misschien niet werkt op oudere browsers die
display: table
endisplay: table-cell
niet ondersteunen (in principe alleen Internet Explorer 7). Met CSS simuleren we het gedrag van een tabel (omdat tabellen verticale uitlijning ondersteunen), en de HTML is hetzelfde als het tweede voorbeeld:Absolute positionering gebruiken
Deze techniek gebruikt een absoluut gepositioneerd element waarbij top, bottom, left en right op 0 worden gezet. Het wordt in meer detail beschreven in een artikel in Smashing Magazine, Absolute Horizontal And Vertical Centering In CSS.
U kunt dit gemakkelijk doen door het volgende stukje CSS code toe te voegen:
Dat betekent dat uw CSS er uiteindelijk uitziet als:
Voor een enkele regel tekst (of een enkel karakter) kunt u deze techniek gebruiken:
Het kan gebruikt worden als
#box
een niet-vaste, relatieve hoogte in % heeft.<div id="box"></div>
Zie een live demo op JsBin (eenvoudiger om CSS te bewerken) of [JsFiddle][2] (eenvoudiger om de hoogte van het resultaatframe te veranderen).
Als je innerlijke tekst in HTML wilt plaatsen, en niet in CSS, dan moet je tekst-inhoud in een extra inline element wikkelen en
#box::after
aanpassen zodat het overeenkomt. (En, natuurlijk,content:
eigenschap moet worden verwijderd).Bijvoorbeeld,
<div id="box"><span>TextContent</span></div>
. In dit geval moet#box::after
worden vervangen door#box span
.Voor Internet Explorer 8 ondersteuning moet u
::
vervangen door:
.