Een element horizontaal centreren

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 widthniet in te stellen op 50%. Elke breedte kleiner dan de bevattende <div>zal werken. De margin: 0 autois 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 widthin 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 divwilt 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 centerstaan, 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-blocktoe 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 widthin en stel margin-leften margin-rightin 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 transformattribuut.

#outer {
  position: relative;
}
#inner {
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
}

De truc is dat translateX(-50%)het #innerelement 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: flexgedraagt 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:

  1. Wikkel .innerin .center-helper
  2. Maak .center-helpereen inline blok; het wordt even groot als .innerwaardoor het 300 pixels breed wordt.
  3. Push .center-helper50% recht ten opzichte van zijn ouder; dit plaatst zijn linkerzijde op 500 pixels tov. buitenste.
  4. Push .inner50% 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.
  5. Stel de overloop op .outerin 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 #innerook verticaal uitgelijnd. Als u dat niet wilt, verwijdert u de eigenschappen displayen 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.

JSFIDDLE

#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: flexgebruiken 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 heighten widthniet 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 */
}

Other episodes