[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