Hoe kan ik een <div>
horizontaal centreren in een andere <div>
met behulp van CSS?
<div id="outer">
<div id="inner">Foo foo</div>
</div>
Antwoord 1, autoriteit 100%
U kunt deze CSS toepassen op de binnenste <div>
:
#inner {
width: 50%;
margin: 0 auto;
}
Natuurlijk hoef je de width
niet in te stellen op 50%
. Elke breedte kleiner dan de bevattende <div>
zal werken. De margin: 0 auto
is wat de eigenlijke centrering doet.
Als je Internet Explorer 8(en hoger) target, is het misschien beter om dit in plaats daarvan te hebben:
#inner {
display: table;
margin: 0 auto;
}
Het maakt het binnenste element horizontaal in het midden en het werkt zonder een specifieke width
in te stellen.
Werkvoorbeeld hier:
#inner {
display: table;
margin: 0 auto;
border: 1px solid black;
}
#outer {
border: 1px solid red;
width:100%
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>
Antwoord 2, autoriteit 26%
Als u geen vaste breedte op de binnenste div
wilt instellen, kunt u zoiets als dit doen:
#outer {
width: 100%;
text-align: center;
}
#inner {
display: inline-block;
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>
Antwoord 3, autoriteit 8%
De beste aanpak is met CSS 3.
Boxmodel:
#outer {
width: 100%;
/* Firefox */
display: -moz-box;
-moz-box-pack: center;
-moz-box-align: center;
/* Safari and Chrome */
display: -webkit-box;
-webkit-box-pack: center;
-webkit-box-align: center;
/* W3C */
display: box;
box-pack: center;
box-align: center;
}
#inner {
width: 50%;
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>
Antwoord 4, autoriteit 5%
Stel dat uw div 200 pixels breed is:
.centered {
position: absolute;
left: 50%;
margin-left: -100px;
}
Zorg ervoor dat het bovenliggende element gepositioneerdis, dwz relatief, vast, absoluut of plakkerig.
Als je de breedte van je div niet weet, kun je transform:translateX(-50%);
gebruiken in plaats van de negatieve marge.
https://jsfiddle.net/gjvfxxdj/
Met CSS calc()kan de code nog eenvoudiger:
.centered {
width: 200px;
position: absolute;
left: calc(50% - 100px);
}
Het principe is nog steeds hetzelfde; plaats het item in het midden en compenseer de breedte.
Antwoord 5, autoriteit 5%
Ik heb dit voorbeeldgemaakt om te laten zien hoe je verticaalen horizontaalalign
.
De code is eigenlijk dit:
#outer {
position: relative;
}
en…
#inner {
margin: auto;
position: absolute;
left:0;
right: 0;
top: 0;
bottom: 0;
}
En het blijft in het center
staan, zelfs als je het scherm verkleint.
Antwoord 6, autoriteit 5%
Sommige posters hebben de CSS 3-manier van centreren genoemd met behulp van display:box
.
Deze syntaxis is verouderd en mag niet meer worden gebruikt. [Zie ook dit bericht].
Dus voor de volledigheid is hier de nieuwste manier om in CSS 3 te centreren met behulp van de Module voor flexibele doosindeling.
Dus als je eenvoudige opmaak hebt zoals:
<div class="box">
<div class="item1">A</div>
<div class="item2">B</div>
<div class="item3">C</div>
</div>
…en je wilt je items in de doos centreren, dit is wat je nodig hebt op het bovenliggende element (.box):
.box {
display: flex;
flex-wrap: wrap; /* Optional. only if you want the items to wrap */
justify-content: center; /* For horizontal alignment */
align-items: center; /* For vertical alignment */
}
Antwoord 7, autoriteit 3%
Als je geen vaste breedte wilt instellen en geen extra marge wilt, voeg dan display: inline-block
toe aan je element.
U kunt gebruiken:
#element {
display: table;
margin: 0 auto;
}
Antwoord 8, autoriteit 2%
Een div met onbekende hoogte en breedte centreren
Horizontaal en verticaal. Het werkt met redelijk moderne browsers (Firefox, Safari/WebKit, Chrome, Internet & Explorer & 10, Opera, enz.)
.content {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
<div class="content">This works with any content</div>
Antwoord 9, autoriteit 2%
Stel de width
in en stel margin-left
en margin-right
in op auto
. Dat is echter alleen voor horizontaal. Als je beide manieren wilt, zou je het gewoon op beide manieren doen. Wees niet bang om te experimenteren; het is niet alsof je iets breekt.
Antwoord 10, autoriteit 2%
Het kan niet worden gecentreerd als je het geen breedte geeft. Anders neemt het standaard de hele horizontale ruimte in beslag.
Antwoord 11, autoriteit 2%
Box-align-eigenschap van CSS 3
#outer {
width: 100%;
height: 100%;
display: box;
box-orient: horizontal;
box-pack: center;
box-align: center;
}
Antwoord 12
Ik moest onlangs een “verborgen” div centreren (d.w.z. display:none;
) met daarin een tabelvorm die op de pagina moest worden gecentreerd. Ik heb de volgende jQuery-code geschreven om de verborgen div weer te geven en vervolgens de CSS-inhoud bij te werken naar de automatisch gegenereerde breedte van de tabel en de marge te wijzigen om deze te centreren. (De weergave-toggle wordt geactiveerd door op een link te klikken, maar deze code was niet nodig om weer te geven.)
OPMERKING:ik deel deze code, omdat Google me naar deze Stack Overflow-oplossing bracht en alles zou hebben gewerkt, behalve dat verborgen elementen geen breedte hebben en niet kunnen worden vergroot/verkleind/ gecentreerd totdat ze zijn weergegeven.
$(function(){
$('#inner').show().width($('#innerTable').width()).css('margin','0 auto');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="inner" style="display:none;">
<form action="">
<table id="innerTable">
<tr><td>Name:</td><td><input type="text"></td></tr>
<tr><td>Email:</td><td><input type="text"></td></tr>
<tr><td>Email:</td><td><input type="submit"></td></tr>
</table>
</form>
</div>
Antwoord 13
De manier waarop ik het meestal doe, is de absolute positie gebruiken:
#inner{
left: 0;
right: 0;
margin-left: auto;
margin-right: auto;
position: absolute;
}
De buitenste div heeft geen extra eigenschappen nodig om dit te laten werken.
Antwoord 14
Voor Firefox en Chrome:
<div style="width:100%;">
<div style="width: 50%; margin: 0px auto;">Text</div>
</div>
Antwoord 15
Gebruik:
#outerDiv {
width: 500px;
}
#innerDiv {
width: 200px;
margin: 0 auto;
}
<div id="outerDiv">
<div id="innerDiv">Inner Content</div>
</div>
Antwoord 16
Een andere oplossing hiervoor zonder een breedte in te stellen voor een van de elementen is het gebruik van het CSS 3 transform
attribuut.
#outer {
position: relative;
}
#inner {
position: absolute;
left: 50%;
transform: translateX(-50%);
}
De truc is dat translateX(-50%)
het #inner
element 50 procent links van zijn eigen breedte zet. U kunt dezelfde truc gebruiken voor verticale uitlijning.
Hier is een Fiddlemet horizontale en verticale uitlijning.
Meer informatie is te vinden op Mozilla Developer Network.
Antwoord 17
Chris Coyier die een uitstekende postschreef over ‘Centering in the Unknown ‘ op zijn blog. Het is een verzameling van meerdere oplossingen. Ik heb er een gepost die niet in deze vraag staat. Het heeft meer browserondersteuning dan de Flexbox-oplossing, en je gebruikt geen display: table;
die andere dingen zou kunnen breken.
/* This parent can be any width and height */
.outer {
text-align: center;
}
/* The ghost, nudged to maintain perfect centering */
.outer:before {
content: '.';
display: inline-block;
height: 100%;
vertical-align: middle;
width: 0;
overflow: hidden;
}
/* The element to be centered, can
also be of any width and height */
.inner {
display: inline-block;
vertical-align: middle;
width: 300px;
}
Antwoord 18
Ik heb onlangs een aanpak gevonden:
#outer {
position: absolute;
left: 50%;
}
#inner {
position: relative;
left: -50%;
}
Beide elementen moeten dezelfde breedte hebben om correct te kunnen functioneren.
Antwoord 19
Zie bijvoorbeeld deze linken het onderstaande fragment:
div#outer {
height: 120px;
background-color: red;
}
div#inner {
width: 50%;
height: 100%;
background-color: green;
margin: 0 auto;
text-align: center; /* For text alignment to center horizontally. */
line-height: 120px; /* For text alignment to center vertically. */
}
<div id="outer" style="width:100%;">
<div id="inner">Foo foo</div>
</div>
Antwoord 20
Alleen horizontaal centreren
In mijn ervaring is de beste manier om een vak horizontaal te centreren door de volgende eigenschappen toe te passen:
De container:
- moet
text-align: center;
Het inhoudsvak:
- moet
display: inline-block;
Demo:
.container {
width: 100%;
height: 120px;
background: #CCC;
text-align: center;
}
.centered-content {
display: inline-block;
background: #FFF;
padding: 20px;
border: 1px solid #000;
}
<div class="container">
<div class="centered-content">
Center this!
</div>
</div>
Antwoord 21
De gemakkelijkste manier:
#outer {
width: 100%;
text-align: center;
}
#inner {
margin: auto;
width: 200px;
}
<div id="outer">
<div id="inner">Blabla</div>
</div>
Antwoord 22
Flexbox
display: flex
gedraagt zich als een blokelement en geeft de inhoud op volgens het flexbox-model. Het werkt met justify-content: center
.
Let op:Flexbox is compatibel met alle browsers behalve Internet Explorer. Zie display: flex werkt niet in Internet Explorervoor een complete en actuele lijst met browsercompatibiliteit.
Antwoord 23
Als de breedte van de inhoud onbekend is, kun je de volgende methode gebruiken. Stel dat we deze twee elementen hebben:
.outer
— volledige breedte.inner
— geen breedte ingesteld (maar een maximale breedte kan worden opgegeven)
Stel dat de berekende breedte van de elementen respectievelijk 1000 pixels en 300 pixels is. Ga als volgt te werk:
- Wikkel
.inner
in.center-helper
- Maak
.center-helper
een inline blok; het wordt even groot als.inner
waardoor het 300 pixels breed wordt. - Push
.center-helper
50% recht ten opzichte van zijn ouder; dit plaatst zijn linkerzijde op 500 pixels tov. buitenste. - Push
.inner
50% links ten opzichte van zijn bovenliggende; dit plaatst zijn linkerzijde op -150 pixels tov. middelste helper, wat betekent dat de linkerkant 500 – 150 = 350 pixels tov. buitenste. - Stel de overloop op
.outer
in op verborgen om horizontale schuifbalk te voorkomen.
Demo:
body {
font: medium sans-serif;
}
.outer {
overflow: hidden;
background-color: papayawhip;
}
.center-helper {
display: inline-block;
position: relative;
left: 50%;
background-color: burlywood;
}
.inner {
display: inline-block;
position: relative;
left: -50%;
background-color: wheat;
}
<div class="outer">
<div class="center-helper">
<div class="inner">
<h1>A div with no defined width</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br>
Duis condimentum sem non turpis consectetur blandit.<br>
Donec dictum risus id orci ornare tempor.<br>
Proin pharetra augue a lorem elementum molestie.<br>
Nunc nec justo sit amet nisi tempor viverra sit amet a ipsum.</p>
</div>
</div>
</div>
Antwoord 24
Je kunt zoiets als dit doen
#container {
display: table;
width: <width of your container>;
height: <height of your container>;
}
#inner {
width: <width of your center div>;
display: table-cell;
margin: 0 auto;
text-align: center;
vertical-align: middle;
}
Hiermee wordt de #inner
ook verticaal uitgelijnd. Als u dat niet wilt, verwijdert u de eigenschappen display
en vertical-align
;
Antwoord 25
Flex heeft meer dan 97% dekking voor browserondersteuning en is wellicht de beste manier om dit soort problemen binnen een paar regels op te lossen:
#outer {
display: flex;
justify-content: center;
}
Antwoord 26
Dit is wat je op de kortste manier wilt.
#outer {
margin - top: 100 px;
height: 500 px; /* you can set whatever you want */
border: 1 px solid# ccc;
}
#inner {
border: 1 px solid# f00;
position: relative;
top: 50 % ;
transform: translateY(-50 % );
}
Antwoord 27
Je kunt display: flex
gebruiken voor je buitenste div en om horizontaal te centreren moet je justify-content: center
toevoegen
#outer{
display: flex;
justify-content: center;
}
of u kunt w3schools – CSS flex Propertybezoeken voor meer ideeën.
Antwoord 28
Deze methode werkt ook prima:
div.container {
display: flex;
justify-content: center; /* For horizontal alignment */
align-items: center; /* For vertical alignment */
}
Voor de binnenste <div>
is de enige voorwaarde dat de height
en width
niet groter mogen zijn dan die van de container.
Antwoord 29
Nou, ik heb een oplossing gevonden die misschien in alle situaties past, maar die JavaScript gebruikt:
Hier is de structuur:
<div class="container">
<div class="content">Your content goes here!</div>
<div class="content">Your content goes here!</div>
<div class="content">Your content goes here!</div>
</div>
En hier is het JavaScript-fragment:
$(document).ready(function() {
$('.container .content').each( function() {
container = $(this).closest('.container');
content = $(this);
containerHeight = container.height();
contentHeight = content.height();
margin = (containerHeight - contentHeight) / 2;
content.css('margin-top', margin);
})
});
Als u het in een responsieve benadering wilt gebruiken, kunt u het volgende toevoegen:
$(window).resize(function() {
$('.container .content').each( function() {
container = $(this).closest('.container');
content = $(this);
containerHeight = container.height();
contentHeight = content.height();
margin = (containerHeight - contentHeight) / 2;
content.css('margin-top', margin);
})
});
Antwoord 30
Er was één optie die ik vond:
Iedereen zegt te gebruiken:
margin: auto 0;
Maar er is nog een andere optie. Stel deze eigenschap in voor de bovenliggende div. Het
werkt altijd perfect:
text-align: center;
En kijk, kind ga naar het midden.
En tot slot CSS voor jou:
#outer{
text-align: center;
display: block; /* Or inline-block - base on your need */
}
#inner
{
position: relative;
margin: 0 auto; /* It is good to be */
}