chevron-left chevron-right

[CSS] Wyśrodkowanie menu za pomocą CSS

W dzisiejszym tutorialu poruszam problem wyśrodkowywania menu za pomocą CSS. Do tej pory wielu ludzi ma z tym problemy i próbuje robić menu z wykorzystaniem marginesów czy paddingów, a to nie jest dobry sposób jeśli chcemy mieć menu z dynamicznie ustalaną szerokością zależną od długości przycisków czy napisów w linkach w menu.

Na początek stwórzmy sobie przykładową strukturę menu. W moim przypadku wygląda następująco:

<div id="menu">
<ul>
<li><a href="#">Przycisk 1</a></li>
<li><a href="#">Przycisk 2</a></li>
<li><a href="#">Przycisk 3</a></li>
<li><a href="#" class="zaznaczony">Przycisk 4</a></li>
</ul>
</div>

Następnie trzeba stworzyć plik CSS, który będzie zawierał poniższy kod:

#menu {
   float: left;
   width: 100%;
   background: #fff;
   border-bottom: 4px solid #000;
   overflow: hidden;
   position: relative;
}
#menu ul {
   clear: left;
   float: left;
   list-style: none;
   margin: 0;
   padding: 0;
   position: relative;
   left: 50%;
   text-align: center;
}
#menu ul li {
   display: block;
   float: left;
   list-style: none;
   margin: 0;
   padding: 0;
   position: relative;
   right: 50%;
}
#menu ul li a {
   display: block;
   margin: 0 0 0 1px;
   padding: 3px 10px;
   background: #ddd;
   color: #000;
   text-decoration: none;
   line-height: 20px;
}
#menu ul li a:hover {
   background: #b00;
   color: #fff;
}
#menu ul li a.zaznaczony, #menu ul li a.zaznaczony:hover {
   color: #fff;
   background: #000;
   font-weight: bold;
}

Aby stworzyć efekt wyśrodkowania menu użyłem pozycjonowania relatywnego dla ul w którym jest zawarte menu i ustawiłem jego pozycję na 50% z lewej strony i wzmocniłem ustawiając text-align: center.
Ponadto, dla każdego elementu listy menu dałem pozycjonowanie relatywne ustawiając pozycję na 50% z prawej strony i display: block.

Tworząc tego typu wyśrodkowane menu należy pamiętać o kilku rzeczach:

  • Nie możesz dać żadnych wizualnych styli do elementu ul takich jak: background czy border. Musisz te atrybuty dać dla elementów listy li.
  • Jeśli chcesz stworzyć osobny styl dla którejś pozycji w menu, to dodaj klasę do tego przycisku. Dzięki temu unikniesz dziwnego wysypania się menu.

Budując w ten sposób menu dostajesz menu w pełni zgodne ze standardami, bez żadnych hacków dla innych przeglądarek oraz dodatkowego kodu JavaScript.

Demo z tego artykułu jest dostępne tutaj: wyśrodkowane menu CSS