Разделители в меню
05 Nov, 2006Довольно часто на практике встречаются меню с разделителями - например:
О том как сделать такое меню с минимумом правильного HTML кода и пойдет дальше речь.
HTML
Очевидным HTML для подобных конструкций служит ненумерованный список UL, вот например такой:- <ul id="nav">
- <li><a href="#">Главная</a></li>
- <li><a href="#">Новости</a></li>
- <li><a href="#">Каталог</a></li>
- <li><a href="#">Рейтинг</a></li>
- </ul>
- <a href="#">Главная</a> | <a href="#">Новости</a> | <a href="#">Каталог</a> | <a href="#">Рейтинг</a>
Как обычно делалось
Обычно для получения результата - то есть меню с вертикальными разделителями, приходилось задавать левую (или правую) границу для каждого элемента(здесь я опускаю код позиционирующий меню, он есть в примерах):- #nav li{border-left:1px solid #000}
- <ul id="nav">
- <li class="first"><a href="#">Главная</a></li>
- ...
- #nav li.first{border:none}
Проблема(лень)
Так как мои меню генерировал движок, то для вставки этого класса пришлось бы менять код движка, а лезть туда мне было лень. Отсюда родилось решение как сделать такие разделители не вставляя никаких классов и оперируя лишь обычным списком.Решение
Идея простая как 5 копеек. Вот весь код:- #nav{
- overflow:hidden;/* что бы UL растянулся до содержимых float во всех броузерах кроме ИЕ, а так же для нашего "обрезания"*/
- width:100%;/* что бы UL растянулся до содержимого в ИЕ, к самому трюку имеет косвенное отношение*/
- }
- #nav li{
- margin-left:-1px;/*сдвигаем все элементы влево*/
- }
Идея
Эта же идея только с заменой на border-top и margin-top:-1px сработает и для таких меню: Смотреть пример Более того такой прием можно применять и для графических разделителей. Будь они даже потолще одного пиксела - просто придётся задавать больший отрицателый отступ для элементов списка. Таким образом это работает и для разделителей в виде картинки.В конце
Хотя прием и довольно узкоприменимый, но мне сэкономил время, да и идея мне понравилась. Тестировалось и работает во всех моих виндошных браузерах(IE5-7, FF, Opera). Думаю работает везде.- Рабочий пример для горизонтальных разделителей
- Рабочий пример для вертикальных разделителей
- "Навигация по-русски" - пост двухлетней давности про эту идею
61 комментариев к “Разделители в меню”