Prezentacja menu

Menu jest listą, a listy mają domyślnie ustawiony margin lub padding dający im wcięcie.

 dl.menu, dt.menu  {margin: 0; padding: 0;}
 Usunięcie odstępów z <dl class="menu">

Sporą ilość propozycji stylów dla menu znajdziesz na List-a-matic, a sposób na „ożywienie” na blogu ethanaka.

Oto kilka podstaw:

Menu pionowe

Aby zwiększyć klikalny obszar najlepiej jest nadać odpowiednie style dla <a>:

 .menu a {display:block;}
 Czyni <a> elementem blokowym, dzięki czemu zajmuje on całą szerokość menu.

 .menu a {padding: 3px 10px;}
 Dodaje odstępy wewnątrz <a>. Jest to lepsze rozwiązanie od użycia margin lub robienia odstępów na <dt>, ponieważ zwiększa klikalną powierzchnię linków.

Całe menu można przesunąć na bok strony za pomocą pozycjonowania absolutnego albo wyglądu naśladującego tabele.

Menu poziome

Inline

Wystarczy nadać elementom menu display:inline i ew. dopasować wysokość za pomocą line-height.

Elementy menu będą miały szerokość dopasowaną do ich zawartości. Będzie można ustawić pozycję całego menu za pomocą text-align (np. wycentrować) oraz kontrolować jego przenoszenie do nowej linii za pomocą white-space.

Uwaga na spacje. Elementy liniowe są traktowane jak tekst i spacje oraz przejścia do nowej linii między elementami listy będą widoczne!

Zamiast robić przejście do nowej linii za </dt>, rób zaraz przed nim, aby </dt><dt> były razem.

To samo, z większą kontrolą nad wymiarami Bug w FF Bug w IE

Ustawienie display:inline-block zamiast display:inline pozwoli nadać szerokość elementom oraz da większą kontrolę nad wysokością. Poszczególne elementy będą mogły mieć tekst w więcej niż jednej linii.

Tabelkowe: display:table-cell Bug w IE

 dl.menu {display:table; width:100%}
 dl.menu dt {display:table-cell;}

Ten sposób gwarantuje, że menu będzie zawsze w jednej linii. Elementy menu mogą być dopasowane do zawartości albo równomiernie rozciągnięte na szerokość całego menu.

Nie zawsze jest to najlepsze rozwiązanie ze względu na ograniczenia elementów tabel.

Zupełnie swobodne

Jeśli robisz niekonwencjonalne menu możesz ustalić pozycję każdego elementu z osobna za pomocą pozycjonowania absolutnego.

 dl.menu {height: 200px; position:relative;}
 dl.menu dt.przyklady {position:absolute; top:10px; right:25px;}

Menu zagnieżdżone Bug w IE6

Można posłużyć się listą wypunktowania. XHTML:

 <ul class="menu">
 <li>Coś tam
 <ul>
 <li>Coś tam</li>
 </ul>
 </li>
 <!-- ... dalsze li ... -->
 </ul>

CSS:

 ul.menu li ul {
 display: none;
 }
 ul.menu li:hover ul {
 display: block;
 }
 ul.menu li ul:hover { 
 display: block;
 }

Obrazek zamiast braku ikony

 <dl class="menu">
 <dt><a href="#">foo</a></dt>
 <dt><a href="#">bar</a></dt>
 <dt><a href="#">baz</a></dt>
 </dl>


 dl.menu dt:before {content: url(rysunek.jpg);}

Co jeśli obrazek jest zbyt duży i nie mieści się w elemencie linowym (bo, np. ustawiony rozmiar czcionki jest mniejszy od wysokości obrazka)? Można ustawić tło dla elementu listy dt — jednak wtedy ikonka nie będzie klikalna — albo zmienić wymiary odnośnika. Tu CSS znowu daje nam kilka możliwości. Nie zmieniając sposobu wyświetlania nadajemy odnosnikowi większą wysokość linii lub padding. Drugim sposobem jest zmiania sposobu wyświetlania na display: block; i określenie np. marginesu. Przykład:

HTML
Nagłówek
Znaki specjalne
CSS
JavaScript


Zmodyfikowano: 29.08.2011, 05:13
submit