Wyśrodkowanie w pionie i poziomie

Written by Sebastian Potasiak

Topics: CSS, HTML, Projektowanie

Czasami potrzebujemy wycentrować jakiś element strony, np. okienko informujące o błędzie. O ile z wyśrodkowaniem poziomym nie ma problemu, to wyśrodkowanie pionowe sprawia pewne trudności. W tym wpisie pokażę wam krok po kroku, jak wycentrować zwykłego DIV-a.

Kod HTML

Na początek przedstawię Wam przykładowy kod HTML, na podstawie którego będziemy pracować. Będzie to najprostszy dokument z jednym DIV-em zawierającym tekst:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html>
     <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
          <link rel="Stylesheet" type="text/css" href="style.css" />
          <title>Wycentrowanie</title>
     </head>
     <body>
          <div id="wycentrowane">
               <h2>Przykład</h2>
               <p>Tekst przykładu.</p>
          </div>
     </body>
</html>

Zakładam, że posiadacie podstawową wiedzę o HTMLu i ten kod jest dla Was w pełni zrozumiały. Przejdźmy więc dalej.

Style CSS

Teraz zajmiemy się stylami. Tutaj ustawimy wszystkie parametry niezbędne do wyśrodkowania oraz nadamy naszemu przykładowi trochę koloru.

Utwórzmy więc plik style.css i wpiszmy do niego style trzech obiektów: DIV-a, nagłówka H2 oraz akapitu P:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
div#wycentrowane
{
    background-color: #FFAD73;
    border: solid 2px #FF6A00;
}
 
div#wycentrowane h2
{
    margin: 5px;
    color: #A64500;
}
 
div#wycentrowane p
{
    margin: 10px;
    color: #A64500;
}

Teraz dobrze widoczne będzie położenie DIV-a, a całość nabierze jako-takiej estetyki.

W kolejnym kroku zajmiemy się stylizowaniem DIV-a, więc kolejne fragmenty kodu wpisujcie między klamry stylu div#wycentrowane.

Wielkość obiektu

Jeśli chcemy obiekt idealnie wycentrować, to musimy podać w stylach jego wysokość i szerokość. Nasz DIV nie będzie duży, więc wystarczy:

1
2
    width: 200px;
    height: 80px;

Na podstawie wielkości obiektu będzie odbywało się centrowanie, więc nie pomijajcie tego kroku!

Pozycja

Teraz zajmiemy się pozycją obiektu. Pozycja musi być absolutna, a odległość obiektu od górnej i lewej krawędzi musi wynosić 50%:

1
2
3
    position: absolute;
    top: 50%;
    left: 50%;

Kiedy już to zrobimy, zauważymy, że cały obiekt uciekł za bardzo w prawą stronę. Jest to winą tego, że w pozycji absolutnej 50% to odległość lewej i prawej krawędzi obiektu od ram strony. Tutaj wkracza użycie wielkości obiektu.

Marginesy

Aby w końcu poprawnie wycentrować naszego DIV-a, należy mu nadać ujemne lewe i prawe marginesy. Ich wartość powinna wynosić połowę szerokości i wysokości obiektu, czyli jeśli nasz obiekt ma szerokość 200 pikseli, to lewy margines musi wynosić -100 pikseli. Idąc tym tropem wpisujemy:

1
2
    margin-top: -40px;
    margin-left: -100px;

Voila! Gotowe. Teraz jeszcze podaję treść całego pliku style.css w razie, gdyby coś Wam nie działało:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
div#wycentrowane
{
    width: 200px;
    height: 80px;
    position: absolute;
    top: 50%;
    left: 50%; 
    margin-top: -40px;
    margin-left: -100px;
    background-color: #FFAD73;
    border: solid 2px #FF6A00;
}
 
div#wycentrowane h2
{
    margin: 5px;
    color: #A64500;
}
 
div#wycentrowane p
{
    margin: 10px;
    color: #A64500;
}

Mam nadzieję, że artykuł ten przyda Wam się przy tworzeniu stron.

Podziel się z innymi
  • Digg
  • del.icio.us
  • Facebook
  • email
  • Wykop
  • Twitter

13 komentarzy Comments For This Post I'd Love to Hear Yours!

  1. piotrooo89 mówi:

    opisałem tu bardziej pozycjonowanie w CSS, wyśrodkowanie w pionie i poziomie bardziej odnosi się do odpowiedniego ustawiania tekstu w komórkach tabelek albo w div’ach. ;)

  2. @Athlan
    Oooo! Właśnie gdzieś kiedyś o tym czytałem, tylko nie mogłem tego znaleźć. No ale trudno. Napisałem, to niech zostanie.

  3. Niby nie powinno się stosować tabelek w layoucie, ale jeśli cały składa się z jednego wycentrowanego w pionie i poziomie diva, to już odpuszczam i robię sobie vertical-align: center;. No ale cóż, trzeba sięoduczyć złych praktyk, więc pewnie spróbuję Twojego sposobu. ;]

  4. Przypadkowy czytelnik mówi:

    A co jeśli wysokość div-a nie jest statyczna i raz może być 100 a raz 300? Wtedy pozostaje już chyba tylko tabela… (wykluczam JS).

  5. No na to narazie nie znalazłem sposobu, ale jak coś znajdę to zaktualizuję wpis.

  6. sielay mówi:

    Osobiście w poziomie wycentrował bym za pomocą margin: auto. Jeśli zdefiniujesz text-align na center dla body to na IE 6+ też zadziała.

    body, html {text-align: center;}
    #wycentrowane { margin: auto; width: 400px; height: 400px;}

    Co do pionu to faktycznie trochę gorzej. Na necie jest dużo przykładów np z użyciem display.

  7. piotrooo89 mówi:

    text-aling: center średnio ładnie jest uzywanie właśnie tego parametru.

  8. SebaZ mówi:

    Moze i średnio ładne, ale skuteczne i działa, a przykład kolegi sielaj rozszerzyłbym do tego poziomu:

    body, html {text-align: center;}
    #wycentrowane { text-align: left; margin: auto; width: 400px; height: 400px;}

    żeby nam się tekst w danej warstwie nie centrował ;)

  9. Faktycznie, nie ma to jak sobie życie utrudnić. Często stosuję display: table-something, ale jak to mówią: “jak się nie potkniesz to nie zauważysz”. ;]

Leave a Comment Here's Your Chance to Be Heard!