Ik wil een div
verticaal centreren met CSS. Ik wil geen tabellen of JavaScript, maar alleen pure CSS. Ik heb een aantal oplossingen gevonden, maar ze missen allemaal ondersteuning voor Internet Explorer 6.
<body>
<div>Div to be aligned vertically</div>
</body>
Hoe kan ik een div
verticaal centreren in alle belangrijke browsers, inclusief Internet Explorer 6?
Antwoord 1, autoriteit 100%
Hieronder staat de beste totaaloplossing die ik zou kunnen bouwen om een inhoudsdoos met een vaste breedte en een flexibele hoogteverticaal en horizontaal te centreren. Het is getest en werkte voor recente versies van Firefox, Opera, Chrome en Safari.
.outer {
display: table;
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
}
.middle {
display: table-cell;
vertical-align: middle;
}
.inner {
margin-left: auto;
margin-right: auto;
width: 400px;
/* Whatever width you want */
}
<div class="outer">
<div class="middle">
<div class="inner">
<h1>The Content</h1>
<p>Once upon a midnight dreary...</p>
</div>
</div>
</div>
Antwoord 2, autoriteit 20%
Nog één die ik niet op de lijst kan zien:
.Center-Container {
position: relative;
height: 100%;
}
.Absolute-Center {
width: 50%;
height: 50%;
overflow: auto;
margin: auto;
position: absolute;
top: 0; left: 0; bottom: 0; right: 0;
border: solid black;
}
- Cross-browser (inclusief internet & nbsp; Explorer & NBSP; 8 – Internet & NBSP; Explorer & NBSP; 10 zonder hacks!)
- reageren met percentages en min- / max –
- gecentreerd ongeacht de vulling (zonder box-sizing!)
height
moet worden aangegeven (zie Variabele hoogte )- Aanbevolen instelling
overflow: auto
Om inhoudsspillover te voorkomen (zie overflow)
Bron: absolute horizontale en verticale centrering in CSS
Antwoord 3, Autoriteit 20%
De eenvoudigste manier zou de volgende zijn drie lijnen van CSS:
1) Positie: familielid;
2) Top: 50%;
3) Transformeren: Translatyy (-50%);
Hieronder volgt een voorbeeld :
div.outer-div {
height: 170px;
width: 300px;
background-color: lightgray;
}
div.middle-div {
position: relative;
top: 50%;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
transform: translateY(-50%);
}
<div class='outer-div'>
<div class='middle-div'>
Test text
</div>
</div>
Antwoord 4, autoriteit 11%
Nu is de Flexbox-oplossing een zeer gemakkelijke manier voor moderne browsers, dus ik raad dit aan voor jij:
.container {
display: flex;
align-items: center;
justify-content: center;
height: 100%;
background: green;
}
body,
html {
height: 100%;
}
<div class="container">
<div>Div to be aligned vertically</div>
</div>
Antwoord 5, autoriteit 10%
Eigenlijk heb je twee div’s nodig voor verticaal centreren. De div met de inhoud moet een breedte en hoogte hebben.
#container {
position: absolute;
top: 50%;
margin-top: -200px;
/* Half of #content height */
left: 0;
width: 100%;
}
#content {
width: 624px;
margin-left: auto;
margin-right: auto;
height: 395px;
border: 1px solid #000000;
}
<div id="container">
<div id="content">
<h1>Centered div</h1>
</div>
</div>
Antwoord 6, autoriteit 5%
Bewerk 2020: gebruik dit alleen als je oude browsers zoals Internet Explorer 8(wat je zou moeten weigeren 😉). Zo niet, gebruik dan Flexbox.
Dit is de eenvoudigste methode die ik heb gevonden en ik gebruik hem altijd
(jsFiddle-demo hier).
Bedank Chris Coyier van CSS Tricks voor dit artikel.
html, body{
height: 100%;
margin: 0;
}
.v-wrap{
height: 100%;
white-space: nowrap;
text-align: center;
}
.v-wrap:before{
content: "";
display: inline-block;
vertical-align: middle;
width: 0;
/* adjust for white space between pseudo element and next sibling */
margin-right: -.25em;
/* stretch line height */
height: 100%;
}
.v-box{
display: inline-block;
vertical-align: middle;
white-space: normal;
}
<div class="v-wrap">
<article class="v-box">
<p>This is how I've been doing it for some time</p>
</article>
</div>
Antwoord 7, autoriteit 5%
Na veel onderzoek heb ik eindelijk de ultieme oplossing gevonden. Het werkt zelfs voor zwevende elementen. Bron weergeven
.element {
position: relative;
top: 50%;
transform: translateY(-50%); /* or try 50% */
}
Antwoord 8, autoriteit 4%
Gebruik de CSS Flexboxalign-items
eigenschap om dit te bereiken.
html, body {
height: 100%;
}
body {
display: flex;
align-items: center;
}
<div>This is centered vertically</div>
Antwoord 9, autoriteit 3%
Om de div op een pagina te centreren, check de fiddle-link.
#vh {
margin: auto;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
}
.box{
border-radius: 15px;
box-shadow: 0 0 8px rgba(0, 0, 0, 0.4);
padding: 25px;
width: 100px;
height: 100px;
background: white;
}
<div id="vh" class="box">Div to be aligned vertically</div>
Antwoord 10, autoriteit 2%
De eenvoudigste oplossing is hieronder:
.outer-div{
width: 100%;
height: 200px;
display: flex;
border:1px solid #000;
}
.inner-div{
margin: auto;
text-align: center;
border: 1px solid red;
}
<div class="outer-div">
<div class="inner-div">
Hey there!
</div>
</div>
Antwoord 11, autoriteit 2%
Helaas – maar niet verrassend – is de oplossing ingewikkelder dan je zou willen. Helaas moet je ook extra divs gebruiken rond de div die je verticaal gecentreerd wilt hebben.
Voor browsers die aan standaarden voldoen, zoals Mozilla, Opera, Safari, enz., moet u de buitenste div instellen om te worden weergegeven als een tabelen de binnenste div om te worden weergegeven als een tabel -cel— die dan verticaal kan worden gecentreerd. Voor Internet Explorer moet u de binnenste div absoluutin de buitenste div positionerenen vervolgens de topspecificeren als 50%. De volgende pagina’s leggen deze techniek goed uit en bieden ook enkele codevoorbeelden:
- Verticale centrering in CSS
- Verticale centrering in CSS met onbekende hoogte (compatibel met Internet Explorer 7)(Gearchiveerd artikel met dank aan de Wayback Machine)
Er is ook een techniek om verticaal te centreren met JavaScript. Verticale uitlijning van inhoud met JavaScript & CSSlaat het zien.
Antwoord 12
Als iemand alleen om Internet Explorer 10 (en hoger) geeft, gebruik dan Flexbox:
.parent {
width: 500px;
height: 500px;
background: yellow;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
}
.centered {
width: 100px;
height: 100px;
background: blue;
}
<div class="parent">
<div class="centered"></div>
</div>
Antwoord 13
Een moderne manier om een element verticaal te centreren is door te gebruiken flexbox
.
Je hebt een ouder nodig om de lengte te bepalen en een kind om te centreren.
Het onderstaande voorbeeld centreert een div in het midden van uw browser. Wat belangrijk is (in mijn voorbeeld) is om height: 100%
in te stellen op body
en html
en dan min-height: 100%
naar uw container.
body, html {
background: #F5F5F5;
box-sizing: border-box;
height: 100%;
margin: 0;
}
#center_container {
align-items: center;
display: flex;
min-height: 100%;
}
#center {
background: white;
margin: 0 auto;
padding: 10px;
text-align: center;
width: 200px;
}
<div id='center_container'>
<div id='center'>I am center.</div>
</div>
Antwoord 14
.center {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%); /* (x, y) => position */
-ms-transform: translate(-50%, -50%); /* IE 9 */
-webkit-transform: translate(-50%, -50%); /* Chrome, Safari, Opera */
}
.vertical {
position: absolute;
top: 50%;
//left: 0;
transform: translate(0, -50%); /* (x, y) => position */
}
.horizontal {
position: absolute;
//top: 0;
left: 50%;
transform: translate(-50%, 0); /* (x, y) => position */
}
div {
padding: 1em;
background-color: grey;
color: white;
}
<body>
<div class="vertical">Vertically left</div>
<div class="horizontal">Horizontal top</div>
<div class="center">Vertically Horizontal</div>
</body>
Antwoord 15
Alleen verticaal centreren
Als Internet Explorer 6 en 7 u niets interesseert, kunt u een techniek gebruiken waarbij twee containers nodig zijn.
De buitenste container:
- moet
display: table;
De binnencontainer:
- moet
display: table-cell;
- moet
vertical-align: middle;
Het inhoudsvak:
- moet
display: inline-block;
Je kunt elke gewenste inhoud aan het inhoudsvak toevoegen zonder je zorgen te maken over de breedte of hoogte!
Demo:
body {
margin: 0;
}
.outer-container {
position: absolute;
display: table;
width: 100%; /* This could be ANY width */
height: 100%; /* This could be ANY height */
background: #ccc;
}
.inner-container {
display: table-cell;
vertical-align: middle;
}
.centered-content {
display: inline-block;
background: #fff;
padding: 20px;
border: 1px solid #000;
}
<div class="outer-container">
<div class="inner-container">
<div class="centered-content">
Malcolm in the Middle
</div>
</div>
</div>
Antwoord 16
De flex-eigenschap van CSS gebruiken.
.parent {
width: 400px;
height:200px;
background: blue;
display: flex;
align-items: center;
justify-content:center;
}
.child {
width: 75px;
height: 75px;
background: yellow;
}
<div class="parent">
<div class="child"></div>
</div>
Antwoord 17
Hier ga ik altijd heen als ik terug moet komen op dit probleem.
Voor degenen die de sprong niet willen maken:
- Geef de bovenliggende container op als
position:relative
ofposition:absolute
. - Specificeer een vaste hoogte op de kindercontainer.
- Stel
position:absolute
entop:50%
in op de onderliggende container om de bovenkant naar het midden van de bovenliggende container te verplaatsen. - Stel margin-top:-yy in, waarbij yy de helft is van de hoogte van de onderliggende container om het item naar boven te verplaatsen.
Een voorbeeld hiervan in code:
<style type="text/css">
#myoutercontainer {position:relative}
#myinnercontainer {position:absolute; top:50%; height:10em; margin-top:-5em}
</style>
...
<div id="myoutercontainer">
<div id="myinnercontainer">
<p>Hey look! I'm vertically centered!</p>
<p>How sweet is this?!</p>
</div>
</div>
Antwoord 18
Ik heb zojuist deze CSS geschreven en ga voor meer informatie naar: Dit artikel waarin alles verticaal wordt uitgelijnd met slechts 3 regels CSS.
.element {
position: relative;
top: 50%;
transform: perspective(1px) translateY(-50%);
}
Antwoord 19
Voor nieuwkomers, probeer:
display: flex;
align-items: center;
justify-content: center;
Antwoord 20
De drie regels code die transform
gebruiken, werken praktisch in moderne browsers en Internet Explorer:
.element{
position: relative;
top: 50%;
transform: translateY(-50%);
-moz-transform: translateY(-50%);
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
}
Ik voeg dit antwoord toe omdat ik een onvolledigheid vond in de vorige versie van dit antwoord (en Stack Overflow staat me niet toe om gewoon commentaar te geven).
-
‘positie’ relatief verpest de styling als de huidige div zich in de body bevindt en geen container-div heeft. ‘Fixed’ lijkt echter te werken, maar het corrigeert duidelijk de inhoud in het midden van de viewport
-
Ook heb ik deze stijl gebruikt om enkele overlay-div’s te centreren en ontdekte dat in Mozilla alle elementen in deze getransformeerde div hun onderste randen hadden verloren. Mogelijk een weergaveprobleem. Maar door alleen de minimale opvulling aan sommigen van hen toe te voegen, werd het correct weergegeven. Chrome en Internet Explorer hebben (verrassend genoeg) de vakken weergegeven zonder opvulling
Antwoord 21
CSS-raster
body, html { margin: 0; }
body {
display: grid;
min-height: 100vh;
align-items: center;
}
<div>Div to be aligned vertically</div>
Antwoord 22
Het antwoord van Billbad werkt alleen met een vaste breedte van de .inner
div.
Deze oplossing werkt voor een dynamische breedte door het attribuut text-align: center
toe te voegen aan de .outer
div.
.outer {
position: absolute;
display: table;
width: 100%;
height: 100%;
text-align: center;
}
.middle {
display: table-cell;
vertical-align: middle;
}
.inner {
text-align: center;
display: inline-block;
width: auto;
}
<div class="outer">
<div class="middle">
<div class="inner">
Content
</div>
</div>
</div>
Antwoord 23
Doe het gewoon: voeg de klas toe aan je div
:
.modal {
margin: auto;
position: absolute;
top: 0;
right: 0;
left: 0;
bottom: 0;
height: 240px;
}
En lees dit artikelvoor een toelichting. Opmerking: Height
is noodzakelijk.
Antwoord 24
Geen antwoord op browsercompatibiliteit, maar om ook de nieuwe Grid en de niet zo nieuwe Flexbox-functie te noemen.
Raster
Browserondersteuning: Gridbrowserondersteuning
CSS:
.wrapper {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-gap: 10px;
grid-auto-rows: 200px;
grid-template-areas:
". a a ."
". a a .";
}
.item1 {
grid-area: a;
align-self: center;
justify-self: center;
}
HTML:
<div class="wrapper">
<div class="item1">Item 1</div>
</div>
Flexbox
Browserondersteuning: Flexbox-browserondersteuning
CSS:
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
align-items: center;
justify-content: center;
Antwoord 25
Ik deed het hiermee (wijzig breedte, hoogte, margin-top en margin-left dienovereenkomstig):
.wrapper {
width: 960px;
height: 590px;
position: absolute;
top: 50%;
left: 50%;
margin-top: -295px;
margin-left: -480px;
}
<div class="wrapper"> -- Content -- </div>
Antwoord 26
Ik denk een solide oplossing voor alle browsers zonder Flexbox te gebruiken – “align-items: center;” is een combinatie van display: table en vertical-align: middle;.
CSS
.vertically-center
{
display: table;
width: 100%; /* Optional */
height: 100%; /* Optional */
}
.vertically-center > div
{
display: table-cell;
vertical-align: middle;
}
HTML
<div class="vertically-center">
<div>
<div style="border: 1px solid black;">some text</div>
</div>
</div>
‣Demo: https://jsfiddle.net/6m640rpp/
Antwoord 27
Het kan op twee manieren worden gedaan
body{
left: 50%;
top:50%;
transform: translate(-50%, -50%);
height: 100%;
width: 100%;
}
OF
Flex gebruiken
body {
height:100%
width:100%
display: flex;
justify-content: center;
align-items: center;
}
align-items:center;
maakt de inhoud verticaal gecentreerd
justify-content: center;
maakt de inhoud horizontaal gecentreerd
Antwoord 28
Speciaal voor bovenliggende divs met relatieve (onbekende) hoogte, de centrering in het onbekende oplossing werkt prima voor mij. Er staan een aantal hele mooie codevoorbeelden in het artikel.
Het is getest in Chrome, Firefox, Opera en Internet Explorer.
/* This parent can be any width and height */
.block {
text-align: center;
}
/* The ghost, nudged to maintain perfect centering */
.block:before {
content: '';
display: inline-block;
height: 100%;
vertical-align: middle;
margin-right: -0.25em; /* Adjusts for spacing */
}
/* The element to be centered, can
also be of any width and height */
.centered {
display: inline-block;
vertical-align: middle;
width: 300px;
}
<div style="width: 400px; height: 200px;">
<div class="block" style="height: 90%; width: 100%">
<div class="centered">
<h1>Some text</h1>
<p>Any other text..."</p>
</div>
</div>
</div>
Antwoord 29
.center{
display: grid;
place-items: center;
}
Antwoord 30
De inhoud kan eenvoudig worden gecentreerd met Flexbox. De volgende code toont de CSS voor de container waarin de inhoud moet worden gecentreerd:
.absolute-center {
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-ms-flex-align: center;
-webkit-align-items: center;
-webkit-box-align: center;
align-items: center;
}