Jak wyśrodkować tekst w pionie za pomocą CSS?

Mam element div, który zawiera tekst i chcę wyrównać zawartość tego elementu div pionowo.

Oto Mój styl div:

#box {
  height: 170px;
  width: 270px;
  background: #000;
  font-size: 48px;
  color: #FFF;
  text-align: center;
}
<div id="box">
  Lorem ipsum dolor sit
</div>

Jaki jest najlepszy sposób, aby to zrobić?

Author: Tom Aranda, 2012-01-15

30 answers

Możesz spróbować tego podstawowego podejścia:

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

Działa tylko dla pojedynczego wiersza tekstu, ponieważ ustawiamy wysokość wiersza na taką samą wysokość jak element zawierający pole.


Bardziej wszechstronne podejście

Jest to inny sposób wyrównywania tekstu w pionie. Rozwiązanie to będzie działać dla pojedynczej linii i wielu linii tekstu, ale nadal wymaga kontenera o stałej wysokości:

div {
  height: 200px;
  line-height: 200px;
  text-align: center;
  border: 2px dashed #f69c55;
}
span {
  display: inline-block;
  vertical-align: middle;
  line-height: normal;
}
<div>
  <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Haec et tu ita posuisti, et verba vestra sunt. Non enim iam stirpis bonum quaeret, sed animalis. </span>
</div>

The CSS po prostu rozmiar <div>, pionowo wyrównuje <span> ustawiając <div> wysokość linii równą jej wysokości, i sprawia, że <span> inline-block z vertical-align: middle. Następnie ustawia wysokość linii z powrotem na normalną dla <span>, więc jej zawartość będzie naturalnie przepływać wewnątrz bloku.


Symulacja wyświetlania tabeli

A oto kolejna opcja, która może nie działać na starszych przeglądarkach, które nie obsługują display: table i display: table-cell (zasadniczo tylko Internet Explorer 7). Korzystanie z CSS symulujemy zachowanie tabeli (ponieważ tabele obsługują wyrównanie pionowe), a HTML jest taki sam jak w drugim przykładzie:

div {
  display: table;
  height: 100px;
  width: 100%;
  text-align: center;
  border: 2px dashed #f69c55;
}
span {
  display: table-cell;
  vertical-align: middle;
}
<div>
  <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</span>
</div>

Używanie pozycjonowania absolutnego

Ta technika używa absolutnie pozycjonowanego elementu ustawiającego górę, dół, lewo i prawo do 0. Jest to opisane bardziej szczegółowo w artykule w Smashing Magazine, absolutne Centrowanie poziome i pionowe w CSS.

 2521
Author: Michiel van Oosterhout,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-11 15:37:13

Innym sposobem (jeszcze nie wspomnianym tutaj) jest Flexbox .

Wystarczy dodać następujący kod do elementu container :

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>

Alternatywnie, zamiast wyrównywania zawartości za pomocą kontenera , flexbox może również wyśrodkować element a Flex z automatycznym marginesem gdy w kontenerze flex jest tylko jeden element flex (jak w przykładzie podane w powyższym pytaniu).

Więc aby wyśrodkować element flex zarówno w poziomie, jak i w pionie, ustaw go za pomocą margin:auto

Flexbox Demo 2

.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;
}
.box span {
  margin: auto;
}
<div class="box">
  <span>margin:auto on a flex item centers it both horizontally and vertically</span> 
</div>

Uwaga: wszystko to dotyczy centrowania elementów podczas układania ich w poziomych rzędach . Jest to również domyślne zachowanie, ponieważ domyślnie wartością flex-direction jest row. Jeśli jednak elementy flex muszą być ułożone w pionowych kolumnach , to flex-direction: column należy ustawić na kontenerze, aby ustawić główną oś jako kolumnę, a dodatkowo właściwości justify-content i align-items działają teraz odwrotnie Z justify-content: center centrowaniem w pionie i align-items: center centrowaniem w poziomie)

flex-direction: column demo

.box {
  height: 150px;
  width: 400px;
  background: #000;
  font-size: 18px;
  font-style: oblique;
  color: #FFF;
  display: flex;
  flex-direction: column;
  justify-content: center;
  /* vertically aligns items */
  align-items: center;
  /* horizontally aligns items */
}
p {
  margin: 5px;
  }
<div class="box">
  <p>
    When flex-direction is column...
  </p>
  <p>
    "justify-content: center" - vertically aligns
  </p>
  <p>
    "align-items: center" - horizontally aligns
  </p>
</div>
Jeśli chcesz dowiedzieć się więcej o Plikach cookie, kliknij tutaj, aby dowiedzieć się więcej o Plikach cookie i dowiedzieć się więcej o Plikach cookie.]}

Ponadto, wsparcie przeglądarki obecnie jest bardzo dobry: caniuse

Dla kompatybilności między przeglądarkami dla display: flex i align-items, możesz użyć następujących opcji:

display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -ms-flexbox;
display: flex;
-webkit-flex-align: center;
-ms-flex-align: center;
-webkit-align-items: center;
align-items: center;
 1003
Author: Danield,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-13 22:22:52

Możesz to łatwo zrobić, dodając następujący fragment kodu CSS:

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

Oznacza to, że Twój CSS w końcu wygląda następująco:

#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>
 114
Author: Ariful Islam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-12 08:09:02

Dla odniesienia i do dodania prostszej odpowiedzi:

Czysty CSS:

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

Lub jako Mixin SASS / SCSS:

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

Użyj przez:

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

By Sebastian Ekström 's blog post / align = "left" / CSS:

Ta metoda może powodować rozmycie elementów z powodu umieszczenia elementu na "pół pikselu". Rozwiązanie tego problemu polega na ustawieniu elementu nadrzędnego na preserve-3d. jak poniżej:

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

Żyjemy w 2015+ i Flex Box jest obsługiwany przez każdą większą nowoczesną przeglądarkę.

To będzie sposób tworzenia stron internetowych od teraz.

Naucz się!

 101
Author: BAR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-29 17:58:39

Wszystkie podziękowania należą się właścicielowi tego linku @ Sebastian Ekström Link; proszę przejść przez to. Zobacz go w akcji codepen . Czytając powyższy artykuł stworzyłem również Demo .

Z zaledwie trzema liniami CSS (z wyłączeniem przedrostków vendora) możemy to zrobić za pomocą transformacji: translateY Wyśrodkowuje pionowo cokolwiek chcemy, nawet jeśli nie znamy Jego Wysokości.

Transformacja właściwości CSS jest zwykle używana do obracania i skalowania elementów, ale z jego funkcja Translate możemy teraz pionowo wyrównać elementy. Zazwyczaj musi to być zrobione z bezwzględnym pozycjonowaniem lub ustawianiem wysokości linii, ale wymagają one albo znajomości wysokości elementu, albo działają tylko na tekście jednowierszowym, itp.

Więc, aby to zrobić piszemy:

.element {
    position: relative;
    top: 50%;
    transform: translateY(-50%);
} 
To wszystko, czego potrzebujesz. Jest to technika podobna do metody absolutnej pozycji, ale z tą zaletą, że nie musimy ustawiać żadnej wysokości na elemencie lub właściwości position na rodzicu. Działa prosto z pudełka, nawet w Internet Explorer 9 !

Aby uczynić to jeszcze prostszym, możemy napisać go jako mixin z jego przedrostkami.

 52
Author: ankitd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-19 22:40:11

Flexboxy, które zostały wprowadzone w CSS3 są rozwiązaniem:

section {
    display: flex;
    display: -webkit-flex;
    height: 200px;
    width: 50%;
    margin: auto;
    border-radius: 20px;
    border: 5px solid black;
    background-color: yellow;
}

p {
    text-align: center;
    margin: auto; /* Important */
    font-family: Calibri;
}
<section>
    <p>
        I'm center!<br/>
        Flexboxes are great!
    </p>
</section>

Uwaga : jeśli chcesz wyśrodkować tekst, Zastąp wiersz powyżej oznaczony jako ważny jednym z tych wierszy:

1) tylko w pionie:

margin: auto 0;

2) tylko poziomo:

margin: 0 auto;

UPDATE: jak zauważyłem, ta sztuczka działa również z siatkami (display: grid).

 30
Author: MAChitgarha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-30 12:11:35

Elastyczne podejście

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>
 16
Author: Jürg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-29 16:13:53

Rozwiązanie przyjęte jako odpowiedź jest idealne do użycia line-height takiej samej jak wysokość div, ale rozwiązanie to nie działa idealnie, gdy tekst jest zawinięty lub jest w dwóch wierszach.

Spróbuj tego, jeśli tekst jest zawinięty lub znajduje się w wielu wierszach wewnątrz div.

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

Aby uzyskać więcej informacji, zobacz:

 15
Author: Pranav Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-11 16:34:34

Spróbuj To rozwiązanie :

.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>

Zbudowany przy użyciu CSS + .

 11
Author: Marconi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-29 17:52:32

Możesz również użyć poniższych właściwości.

display: flex; 
align-content: center; 
justify-content : center;
 9
Author: satwik boorgula,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-15 13:01:33

Możesz użyć poniższego fragmentu kodu jako odniesienia. Dla mnie działa jak czar:

<!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>

Wynik powyższego fragmentu kodu jest następujący:

Tutaj wpisz opis obrazka

Kod źródłowy: Jak wyśrodkować tekst w pionie za pomocą CSS? - Kod Puran

 9
Author: Akshay Pethani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-19 18:02:50

Inny sposób:

Nie ustawiaj height atrybutu div, ale zamiast tego użyj padding:, aby osiągnąć efekt. Podobnie jak wysokość wiersza, działa tylko wtedy, gdy masz jeden wiersz tekstu. Chociaż w ten sposób, jeśli masz więcej treści, tekst nadal będzie wyśrodkowany, ale sam div będzie nieco większy.

Więc zamiast iść z:

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

Możesz powiedzieć:

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

To ustawi górną i dolną padding z div na 60px, a lewą i prawą padding do zera, czyniąc div 120px (plus wysokość czcionki) wysoką i umieszczając tekst pionowo wyśrodkowany w div.

 8
Author: Eseirt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-17 16:40:08

Dla wszystkich Twoich potrzeb w zakresie wyrównania pionowego!

{

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

Następnie dołącz go do swojego elementu:

.element{
    @include vertical-align();
}
 5
Author: Gothburz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-27 17:04:20

Nie jestem pewien, czy ktoś poszedł writing-mode drogą, ale myślę, że rozwiązuje to problem czysto i maszerokie wsparcie:

.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>

Będzie to oczywiście działać z dowolnymi wymiarami, których potrzebujesz (poza 100% rodzica). Jeśli odkomenderujesz linie graniczne, pomocne będzie zapoznanie się z nimi.

Jsfiddle demo dla Ciebie do zabawy.

Obsługa Caniuse: 85.22% + 6.26% = 91.48% (nawet IE jest w środku!)

 4
Author: Carles Alcolea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-27 23:27:30

Nawet lepszy pomysł na to. Możesz też tak robić

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>
 4
Author: Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-24 11:01:02

Dla pojedynczego wiersza tekstu (lub pojedynczego znaku) można użyć tej techniki:

To Może być używane, gdy #box ma nie stałą, wysokość względną w % .

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

#box::before {
    display: block;
    content: "";
    height: 50%;
}

#box::after {
    vertical-align: top;
    line-height: 0;
    content: "TextContent";
}

Zobacz demo na żywo w JsBin (łatwiejsze edytowanie CSS) lub JsFiddle (łatwiejsze zmienianie wysokości ramki wyniku).

Jeśli chcesz umieścić tekst wewnętrzny w HTML, a nie w CSS, musisz zawinąć zawartość tekstową w dodatkowy element inline i edytować / Align = "left" / (I, oczywiście, content: własność powinna zostać usunięta.)
Na przykład,
<div id="box"><span>TextContent</span></div>
W takim przypadku #box::after należy zastąpić #box span.

Dla obsługi IE8 należy zastąpić :: przez :.

 3
Author: user,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-01 21:10:08

Prosty i wszechstronny sposób jest (jak podejście tabeli michielvoo):

[ctrv]{
    display:table !important;
}

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

Używanie tego atrybutu (lub równoważnej klasy) na znaczniku nadrzędnym działa nawet dla wielu dzieci do wyrównania:

<parent ctrv>  <ch1/>  <ch2/>   </parent>
 3
Author: bortunac,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-19 22:37:01

Wypróbuj właściwość 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>
 3
Author: sstauross,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-27 13:46:05

Bardzo proste i najpotężniejsze rozwiązanie do pionowego wyrównania centrum:

.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>
 3
Author: Manish Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-27 09:33:58

Poniższy kod umieści div na środku ekranu niezależnie od rozmiaru ekranu lub rozmiaru 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>

Zobacz więcej szczegółów o flex tutaj .

 3
Author: Caner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-02 10:21:56

Widziałem poprzednie odpowiedzi i będą działać tylko dla tej szerokości ekranu(nie reagują). Aby reagować, musisz użyć flex.

Przykład:

div{ display:flex; align-item:center;}
 3
Author: Saravana priyan S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-19 18:00:32

Spróbuj użyć następującego kodu:

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>
 3
Author: Rafiqul Islam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-19 18:01:18

Chciałbym tylko rozszerzyć odpowiedź od @ michielvoo w celu uwolnienia potrzeby wzrostu linii i oddychania wysokości div. Jest to w zasadzie tylko uproszczona wersja w ten sposób:

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>

Uwaga: skomentowana część css jest potrzebna do fixed-height uzupełnienia div.

 2
Author: mPrinC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-16 10:23:38

Potrzebowałem rzędu klikalnych słoni, wyśrodkowanych pionowo, ale bez użycia tabeli, aby ominąć jakieś dziwactwa z Internet Explorera 9.

W końcu znalazłem najładniejszy CSS (dla moich potrzeb) i jest świetny z Firefox, Chrome i Internet Explorer 11. Niestety Internet Explorer 9 nadal się ze mnie śmieje...

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="http://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="http://www.birdfolk.co.uk/bang2/Ship01.png"/></span> </div>
  <div> <span>Something charming to click on.</span> </div>
</div>

oczywiście nie potrzebujesz granic, ale mogą pomóc ci zobaczyć, jak to działa.

 1
Author: Dave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-23 19:02:44

Ustaw go w button zamiast div, Jeśli nie zależy ci na małym wizualnym efekcie 3D.

#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>
 1
Author: URL87,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-19 18:09:48
.element{position: relative;top: 50%;transform: translateY(-50%);}

Dodaj ten mały kod do właściwości CSS twojego elementu. To jest niesamowite. Spróbuj!

 0
Author: Rahul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-19 22:43:18

Nowsze przeglądarki obsługują teraz funkcję CSS calc. Jeśli kierujesz te przeglądarki, możesz zajrzeć do zrobienia czegoś takiego:

<div style="position: relative; width: 400px; height: 400px; background-color: red">
  <span style="position: absolute; line-height: 40px; height: 80px; text-align: center; width: 300px; overflow: hidden; top: calc(50% - 40px); left: calc(50% - 150px);">
    Here are two lines that will be centered even if the parent div changes size.
  </span>
</div>

Kluczem jest użycie style = "top: calc(50% - [innerFixedHeightInPX/2]px); height: [innerFixedHeightInPX]px;" wewnątrz absolutnego lub relatywnie położonego nadrzędnego div.

 0
Author: bruceceng,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-29 16:01:44

Gdziekolwiek chcesz styl pionowo środkowy oznacza, że możesz spróbować display:table-cell i vertical-align:middle.

Przykład:

#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>
 0
Author: Ayyappan K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-21 11:19:19

.box {  
  width: 100%;
  background: #000;
  font-size: 48px;
  color: #FFF;
  text-align: center;
}

.height {
  line-height: 170px;
  height: 170px;
}

.transform { 
  height: 170px;
  position: relative;
}

.transform p {
  margin: 0;
  position: absolute;
  top: 50%;
  left: 50%;
  -ms-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
}
<h4>Using Height</h4>
<div class="box height">
  Lorem ipsum dolor sit
</div>

<hr />

<h4>Using Transform</h4>
<div class="box transform">
  <p>Lorem ipsum dolor sit</p>
</div>
 0
Author: antelove,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-22 15:03:18

Absolutne pozycjonowanie i rozciąganie

Tak jak w powyższej metodzie, ta zaczyna się od ustawienia położenia na elementach nadrzędnych i podrzędnych odpowiednio jako względne i absolutne. Od tego momentu rzeczy się różnią.

W poniższym kodzie po raz kolejny użyłem tej metody do wyśrodkowania dziecka zarówno w poziomie, jak i w pionie, chociaż możesz użyć metody tylko do wyśrodkowania w pionie.

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;
}

Pomysł z tym metoda polega na tym, aby element potomny rozciągał się do wszystkich 4 Krawędzi, ustawiając górne, dolne, prawe i lewe wartości na 0. Ponieważ element dziecięcy jest mniejszy od elementu rodzica, nie może osiągnąć wszystkich 4 Krawędzi.

Ustawienie auto jako marginesu na wszystkich 4 stronach powoduje jednak, że przeciwne marginesy są równe i wyświetla nasz dziecięcy div w centrum nadrzędnego div.

Niestety powyższe nie zadziała w IE7 i poniżej i podobnie jak poprzednia metoda zawartość wewnątrz child div może urosnąć zbyt duży, powodując jego ukrycie.

 0
Author: ArifMustafa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-03 15:34:01