Hoe centreer ik tekst verticaal met CSS?

Ik heb een <div> element dat tekst bevat en ik wil de inhoud van deze <div> verticaal uitlijnen.

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>

Antwoord 1, autoriteit 100%

U kunt deze basisbenadering proberen:

div {
  height: 100px;
  line-height: 100px;
  text-align: center;
  border: 2px dashed #f69c55;
}
<div>
  Hello World!
</div>

Antwoord 2, autoriteit 45%

Een andere manier (hier nog niet genoemd) is met Flexbox.

Voeg gewoon de volgende code toe aan het container element:

display: flex;
justify-content: center; /* align horizontal */
align-items: center; /* align vertical */

Flexbox-demo 1

.box {
  height: 150px;
  width: 400px;
  background: #000;
  font-size: 24px;
  font-style: oblique;
  color: #FFF;
  text-align: center;
  padding: 0 20px;
  margin: 20px;
  display: flex;
  justify-content: center;
  /* align horizontal */
  align-items: center;
  /* align vertical */
}
<div class="box">
  Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh
</div>

Antwoord 3, autoriteit 5%

U kunt dit eenvoudig doen door het volgende stukje CSS-code toe te voegen:

display: table-cell;
vertical-align: middle;

Dat betekent dat je CSS er uiteindelijk zo uitziet:

#box {
  height: 90px;
  width: 270px;
  background: #000;
  font-size: 48px;
  font-style: oblique;
  color: #FFF;
  text-align: center;
  margin-top: 20px;
  margin-left: 5px;
  display: table-cell;
  vertical-align: middle;
}
<div id="box">
  Some text
</div>

Antwoord 4, autoriteit 4%

Ter referentie en om een ​​eenvoudiger antwoord toe te voegen:

Pure CSS:

.vertical-align {
    position: relative;
    top: 50%;
    -webkit-transform: translateY(-50%);
    -ms-transform: translateY(-50%);
    transform: translateY(-50%);
}

Of als een SASS/SCSS Mixin:

@mixin vertical-align {
    position: relative;
    top: 50%;
    -webkit-transform: translateY(-50%);
    -ms-transform: translateY(-50%);
    transform: translateY(-50%);
}

Gebruik door:

.class-to-center {
    @include vertical-align;
}

Door de blogpost van Sebastian Ekstrom Vertical align alles met slechts 3 regels CSS:

Deze methode kan ervoor zorgen dat elementen wazig zijn doordat het element op een halve pixel wordt geplaatst. Een oplossing hiervoor is om het bovenliggende element in te stellen op conserve-3d. Zoals het volgende:

.parent-element {
    -webkit-transform-style: preserve-3d;
    -moz-transform-style: preserve-3d;
    transform-style: preserve-3d;
}

We leven in 2015+ en Flex Box wordt ondersteund door elke grote moderne browser.

Zo worden vanaf nu websites gemaakt.

Leer het!


Antwoord 5, autoriteit 2%

Alle eer gaat naar de eigenaar van deze link @Sebastian Ekstrom Link; ga hier alsjeblieft doorheen. Zie het in actie codepen. Door het bovenstaande artikel te lezen heb ik ook een demoviool gemaakt.

Met slechts drie regels CSS (exclusief leveranciersvoorvoegsels) kunnen we het doen met behulp van een transformatie: translateY centreert verticaal wat we willen, zelfs als we de hoogte niet weten.

De CSS-eigenschap transformatie wordt meestal gebruikt voor het roteren en schalen van elementen, maar met de functie translateY kunnen we nu elementen verticaal uitlijnen. Meestal moet dit worden gedaan met absolute positionering of het instellen van regelhoogten, maar hiervoor moet u ofwel de hoogte van het element weten of alleen werken op tekst met één regel, enz.

Dus om dit te doen, schrijven we:

.element {
    position: relative;
    top: 50%;
    transform: translateY(-50%);
} 

Dat is alles wat je nodig hebt. Het is een vergelijkbare techniek als de absolute-positiemethode, maar met het voordeel dat we geen hoogte op het element of positie-eigenschap op de ouder hoeven in te stellen. Het werkt direct uit de doos, zelfs in Internet Explorer 9!

Om het nog eenvoudiger te maken, kunnen we het schrijven als een mix-in met de leveranciersvoorvoegsels.


Antwoord 6, autoriteit 2%

Er is een kleine magie met CSS3-flexboxen:

/* Important */
section {
    display: flex;
    display: -webkit-flex;
}
section p {
    /* Key Part */
    margin: auto;
}
/* Unimportant, coloring and UI */
section {
    height: 200px;
    width: 60%;
    margin: auto;
    border-radius: 20px;
    border: 3px solid orange;
    background-color: gold;
}
section p {
    text-align: center;
    font-family: Cantarell, Calibri;
    font-size: 15px;
    background-color: yellow;
    border-radius: 20px;
    padding: 15px;
}
<section>
    <p>
        I'm a centered box!<br/>
        Flexboxes are great!
    </p>
</section>

Antwoord 7

Flexibele aanpak

div {
  width: 250px;
  min-height: 50px;
  line-height: 50px;
  text-align: center;
  border: 1px solid #123456;
  margin-bottom: 5px;
}
span {
  display: inline-block;
  vertical-align: middle;
  line-height: normal;
}
<div>
  <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br />
    Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br />
    Lorem ipsum dolor sit amet, consectetur adipiscing elit.</span>
</div>
<div>
  <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</span>
</div>
<div>
  <span>Lorem ipsum dolor sit amet.</span>
</div>
<div>

Antwoord 8

Ik heb de vorige antwoorden gezien en ze werken alleen voor die breedte van het scherm (niet responsief). Voor de responsive moet je flex gebruiken.

Voorbeeld:

div { display:flex; align-items:center; }

Antwoord 9

De oplossing die als het antwoord wordt geaccepteerd, is perfect om line-height hetzelfde te gebruiken als de hoogte van div, maar deze oplossing werkt niet perfect als tekst is ingepakt OF in twee regels staat.

p>

Probeer deze eens als tekst is teruggelopen of op meerdere regels in een div staat.

#box
{
  display: table-cell;
  vertical-align: middle;
}

Voor meer referentie, zie:


Antwoord 10

Hier is een andere optie om flexbox te gebruiken.

HTML

<div id="container">
  <div class="child">
    <span
      >Lorem ipsum dolor sit amet consectetur adipisicing elit. Molestiae,
      nemo.</span
    >
  </div>
</div>

CSS

  #container {
    display: flex;
  }
  .child {
    margin: auto;
  }

Resultaat

Voer hier de afbeeldingsbeschrijving in

Hier is een geweldig artikel over centreren in css. bekijk het https://ishadeed.com/article/learn-css-centering/


Antwoord 11

Probeer deze oplossing:

.EXTENDER {
    position: absolute;
    top: 0px;
    left: 0px;
    bottom: 0px;
    right: 0px;
    width: 100%;
    height: 100%;
    overflow-y: hidden;
    overflow-x: hidden;
}
.PADDER-CENTER {
    width: 100%;
    height: 100%;
    display: -webkit-box;
    display: -moz-box;
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;
    -webkit-box-pack: center;
    -moz-box-pack: center;
    -ms-flex-pack: center;
    -webkit-justify-content: center;
    justify-content: center;
    -webkit-box-align: center;
    -moz-box-align: center;
    -ms-flex-align: center;
    -webkit-align-items: center;
    align-items: center;
}
<div class="EXTENDER">
  <div class="PADDER-CENTER">
    <div contentEditable="true">Edit this text...</div>
  </div>
</div>

Antwoord 12

U kunt het volgende codefragment als referentie gebruiken. Het werkt als een tierelier voor mij:

<!DOCTYPE html>
<html lang="de">
    <head>
        <title>Vertically Center Text</title>
        <style>
        html, body {
            height: 100%;
            margin: 0;
            padding: 0;
            width: 100%;
        }
        body {
            display: table;
        }
        .centered-text {
            text-align: center;
            display: table-cell;
            vertical-align: middle;
        }
        </style>
    </head>
    <body style="background:#3cedd5">
        <div class="centered-text">
            <h1>Yes, it's my landing page</h1>
            <h2>Under construction, coming soon!!!</h2>
        </div>
    </body>
</html>

Antwoord 13

U kunt ook onderstaande eigenschappen gebruiken.

display: flex; 
align-content: center; 
justify-content : center;

Antwoord 14

Een andere manier:

Stel het height attribuut van de div niet in, maar gebruik in plaats daarvan padding: om het effect te bereiken. Net als bij regelhoogte werkt het alleen als je één regel tekst hebt. Hoewel op deze manier, als je meer inhoud hebt, de tekst nog steeds gecentreerd zal zijn, maar de div zelf zal iets groter zijn.

Dus in plaats van mee te gaan:

div {
  height: 120px;
  line-height: 120px;
}

Je kunt zeggen:

div {
   padding: 60px 0; // Maybe 60 minus font-size divided by two, if you want to be exact
}

Hiermee worden de padding van de div bovenaan en onderaan ingesteld op 60px, en de linker en rechter padding op nul zetten, de div 120 pixels (plus de hoogte van je lettertype) hoog maken en de tekst verticaal gecentreerd in de div plaatsen.


Antwoord 15

Ik weet niet zeker of iemand de writing-mode-route heeft gevolgd, maar ik denk dat het het probleem netjes oplost en brede ondersteuning heeft:

.vertical {
  //border: 1px solid green;
  writing-mode: vertical-lr;
  text-align: center;
  height: 100%;
  width: 100%;
}
.horizontal {
  //border: 1px solid blue;
  display: inline-block;
  writing-mode: horizontal-tb;
  width: 100%;
  text-align: center;
}
.content {
  text-align: left;
  display: inline-block;
  border: 1px solid #e0e0e0;
  padding: .5em 1em;
  border-radius: 1em;
}
<div class="vertical">
  <div class="horizontal">
    <div class="content">
      I'm centered in the vertical and horizontal thing
    </div>
  </div>
</div>

Antwoord 16

Voor al uw behoeften op het gebied van verticale uitlijning!

Declareer deze mix:

@mixin vertical-align($position: relative) {
  position: $position;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
}

Neem het dan op in je element:

.element{
    @include vertical-align();
}

Antwoord 17

Een nog beter idee hiervoor. Je kunt dit ook zo doen

body,
html {
  height: 100%;
}
.parent {
  white-space: nowrap;
  height: 100%;
  text-align: center;
}
.parent:after {
  display: inline-block;
  vertical-align: middle;
  height: 100%;
  content: '';
}
.centered {
  display: inline-block;
  vertical-align: middle;
  white-space: normal;
}
<div class="parent">
  <div class="centered">
    <p>Lorem ipsum dolor sit amet.</p>
  </div>
</div>

Antwoord 18

Voor een enkele regel tekst (of een enkel teken) kunt u deze techniek gebruiken:

Het kan worden gebruikt wanneer #box een niet-vaste, relatieve hoogte in % heeft.

<div id="box"></div>

#box::before {
    display: block;
    content: "";
    height: 50%;
}
#box::after {
    vertical-align: top;
    line-height: 0;
    content: "TextContent";
}

Bekijk een live demo op JsBin (gemakkelijker om CSS te bewerken ) of JsFiddle (gemakkelijker om de hoogte van het resultaatframe te wijzigen).

Als u binnentekst in HTML wilt plaatsen, niet in CSS, dan moet u de tekstinhoud in een extra inline element plaatsen en #box::after bewerken om matchen. (En natuurlijk moet de eigenschap content: 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 :.


Antwoord 19

Probeer de eigenschap transform:

 #box {
  height: 90px;
  width: 270px;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
 <div Id="box">
    Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</div>

Antwoord 20

Een zeer eenvoudige & krachtigste oplossing om het midden verticaal uit te lijnen:

.outer-div {
  height: 200px;
  width: 200px;
  text-align: center;
  border: 1px solid #000;
}
.inner {
  position: relative;
  top: 50%;
  transform: translateY(-50%);
  color: red;
}
<div class="outer-div">
  <span class="inner">No data available</span>
</div>

Antwoord 21

De eenvoudige en veelzijdige manier is (zoals Michielvoo’s
tafelbenadering
):

[ctrv]{
    display:table !important;
}
[ctrv] > *{ /* adressing direct discendents */
      display: table-cell;
      vertical-align: middle;
      // text-align: center; /* optional */
}

Het gebruik van dit kenmerk (of een equivalente klasse) op een bovenliggende tag werkt zelfs voor veel kinderen om uit te lijnen:

<parent ctrv>  <ch1/>  <ch2/>   </parent>

Antwoord 22

De volgende code plaatst de div in het midden van het scherm, ongeacht de schermgrootte of de grootte van de div:

.center-screen {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  text-align: center;
  min-height: 100vh;
}
 <html>
 <head>
 </head>
 <body>
 <div class="center-screen">
 I'm in the center
 </div>
 </body>
 </html>

Antwoord 23

Probeer de volgende code:

display: table-cell;
vertical-align: middle;
div {
  height: 80%;
  width: 100%;
  text-align: center;
  display: table-cell;
  vertical-align: middle;
  background: #4CAF50;
  color: #fff;
  font-size: 50px;
  font-style: italic;
}
<div>
  Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s
</div>

Antwoord 24

Ik wil graag het antwoord van Michielvoo om de behoefte aan lijnhoogte en ademhaling van div-hoogte los te laten. Het is eigenlijk gewoon een vereenvoudigde versie zoals deze:

div {
  width: 250px;
  /* height: 100px;
  line-height: 100px; */
  text-align: center;
  border: 1px solid #123456;
  background-color: #bbbbff;
  padding: 10px;
  margin: 10px;
}
span {
  display: inline-block;
  vertical-align: middle;
  line-height: normal;
}
<div>
  <span>All grown-ups were once children... but only few of them remember it</span>
</div>
<div>
  <span>And now here is my secret, a very simple secret: It is only with the heart that one can see rightly; what is essential is invisible to the eye.</span>
</div>

Antwoord 25

Ik had een rij klikbare olifanten nodig, verticaal gecentreerd, maar zonder een tabel te gebruiken om een ​​internet Explorer 9 gekheid te omzeilen.

Uiteindelijk vond ik de mooiste CSS (voor mijn behoeften) en het is geweldig met Firefox, Chrome en Internet Explorer 11. Helaas lacht Internet Explorer 9 me nog steeds uit…

div {
  border: 1px dotted blue;
  display: inline;
  line-height: 100px;
  height: 100px;
}
span {
  border: 1px solid red;
  display: inline-block;
  line-height: normal;
  vertical-align: middle;
}
.out {
  border: 3px solid silver;
  display: inline-block;
}
<div class="out" onclick="alert(1)">
  <div> <span><img src="https://www.birdfolk.co.uk/littleredsolo.png"/></span> </div>
  <div> <span>A lovely clickable option.</span> </div>
</div>
<div class="out" onclick="alert(2)">
  <div> <span><img src="https://www.birdfolk.co.uk/bang2/Ship01.png"/></span> </div>
  <div> <span>Something charming to click on.</span> </div>
</div>

Antwoord 26

U kunt de positioneringsmethode in CSS gebruiken:

Controleer het resultaat hier….

HTML:

<div class="relativediv">
  <p>
    Make me vertical align as center
  </p>
</div>

CSS:

.relativediv{position:relative;border:1px solid #ddd;height:300px;width:300px}
.relativediv p{position:absolute:top:50%;transfrom:translateY(-50%);}

Ik hoop dat je deze methode ook gebruikt.


Antwoord 27

Waar je maar wilt, verticaal gecentreerde stijl betekent dat je display:table-cell en vertical-align:middle kunt proberen.

Voorbeeld:

#box
{
  display: table-cell;
  vertical-align: middle;
  height: 90px;
  width: 270px;
  background: #000;
  font-size: 48px;
  font-style: oblique;
  color: #FFF;
  text-align: center;
  margin-top: 20px;
  margin-left: 5px;
}
<div Id="box">
  Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</div>

Antwoord 28

Stel het in binnen de button in plaats van div als het kleine visuele 3D-effect je niet interesseert.

#box
{
  height: 120px;
  width: 300px;
  background: #000;
  font-size: 48px;
  font-style: oblique;
  color: #FFF;
}
<button Id="box" disabled>
  Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</button>

Antwoord 29

Absolute positionering en stretching

Net als bij de bovenstaande methode begint deze met het instellen van de positionering op de bovenliggende en onderliggende elementen als respectievelijk relatief en absoluut. Van daaruit verschillen de dingen.

In de onderstaande code heb ik deze methode opnieuw gebruikt om het kind zowel horizontaal als verticaal te centreren, hoewel je de methode alleen voor verticaal centreren kunt gebruiken.

HTML

<div id="parent">
    <div id="child">Content here</div>
</div>

CSS

#parent {position: relative;}
#child {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    width: 50%;
    height: 30%;
    margin: auto;
}

Het idee van deze methode is om te proberen het onderliggende element naar alle vier de randen uit te rekken door de waarden boven, onder, rechts en links in te stellen op 0. Omdat ons onderliggende element kleiner is dan onze bovenliggende elementen, kan dat niet alle vier de randen bereiken.

Als u auto instelt als de marge aan alle vier de zijden, zijn de tegenovergestelde marges echter gelijk en wordt onze onderliggende div weergegeven in het midden van de bovenliggende div.

Helaas werkt het bovenstaande niet in Internet Explorer 7 en lager, en net als bij de vorige methode kan de inhoud in de onderliggende div te groot worden, waardoor deze verborgen wordt.


Antwoord 30

.element{position: relative;top: 50%;transform: translateY(-50%);}

Voeg deze kleine code toe aan de CSS-eigenschap van je element. Het is geweldig. Probeer het!

LEAVE A REPLY

Please enter your comment!
Please enter your name here

five × five =

Other episodes