18 kwietnia 2010 ~ Komentarzy: 4

Centrowanie w pionie

CSS
{lang: 'pl'}

Temat jest znany z czasów przeglądarki IE6. Brak obsługi CSS 2.1 uniemożliwia pionowe centrowanie w elementach innych niż komórki tablic <td>. Dušan Janovský na swoim blogu wyczerpująco opisał problem i zaproponował dwa rozwiązania. Wersja zgodna ze standardami niestety nie działa we współczesnych przeglądarkach.

Dobrą praktyką jest tworzenie layoutu w przeglądarce bardziej zgodnej ze standardami, później dostosowanie do tych mniej zgodnych. Pan Dušan postąpił odwrotnie. Pierwsze selektory w jego przykładzie dotyczą IE, a kolejne są poprawkami dla Firefoxa i Opery. Aby przykład zaczął działać, wystarczy zmienić pozycjonowanie na statyczne za pomocą selektorów poprawkowych.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
 <head>
  <title>Centrowanie w pionie</title>
  <style type="text/css">
   #align-middle {height: 400px; overflow: hidden; position: relative;}
   #align-middle[id] {display: table; position: static;}
   #middle-wrap {position: absolute; top: 50%;} /* tylko dla IE */
   #middle-wrap[id] {display: table-cell; vertical-align: middle; width: 100%; position: static;}
   #middle {position: relative; top: -50%} /* tylko dla IE */
   #middle[id] {position: static;}
   .border {border: 1px solid #000; background-color: #eee;}
  </style>
 </head>
 <body>
  <h1>Centrowanie w pionie</h1>
  <div id="align-middle" class="border">
   <div id="middle-wrap">
    <div id="middle" class="border">
     Tekst demonstracyjny<br>
     wielowierszowy
    </div>
   </div>
  </div>
 </body>
</html>

Podejście jest o tyle złe, że występuje tutaj niepotrzebna kaskadowość stylów, a w przyszłości może się pojawić przeglądarka, w której przykład znowu przestanie działać. Rozwiązaniem jest wykorzystanie komentarza warunkowego dla IE7. A oto przykład.

Komentarze dla “Centrowanie w pionie”

  1. Andrzej 11 maja 2010 at 09:07 Permalink

    No tak, strasznie dużo tych kaskad. Czasami są takie sytuacje, kiedy trzeba zrobić coś wbrew regułom. I to jest ta sytuacja, kiedy używam tabeli. Nie zanosi się, żeby ich obsługa miała zostać usunięta, więc póki przeglądarki nie nauczą się centrować w pionie w DIVach, będę tego używał. Takie komplikowanie kodu to trochę sztuka dla sztuki. Zwłaszcza, że jak piszesz: „w przyszłości może się pojawić przeglądarka, w której przykład znowu przestanie działać”. Po co się stresować taką ewentualnością?

  2. Maciej 11 maja 2010 at 09:57 Permalink

    Nie do końca sztuka dla sztuki. To raczej kwestia SEO. Przykład z komentarzem warunkowym jest dużo prostszy i raczej nie przestanie działać :) Pozdrawiam

  3. Andrzej 11 maja 2010 at 11:49 Permalink

    Używam tabel do centrowania własnego Lighboxa dla powiększonych zdjęć czy alertów od systemu i jakoś nie zauważyłem negatywnego wpływu na SEO. Gdyby zawartość tabel była zła z punktu widzenia SEO, to w ogóle by się ich nie używało do niczego. Ale jedna tabela na warstwie pozycjonowanej absolutnie z jedną komórką, w której wyświetlam jakiś element raczej nie powinna szkodzić.

    Co innego pocięcie całego layoutu do tabel… Ale tu raczej chodzi o sieczkę w kodzie niż samo używanie tabel. Dlatego SEO tego nie lubi.

    No ale to już moje zdanie i wcale nie musi być zgodne z rzeczywistością.

    Pozdrawiam!

  4. Bartek 25 stycznia 2012 at 18:53 Permalink

    Dzięki wielkie. Działa super.


Dodaj komentarz