Вертикальное выпадающее меню

08.10.2009 12:54
Artin

Представляю Вашему вниманию вертикальное выпадающее меню. Как оно выглядит и ознакомиться с ним Вы можете ниже. Файл для скачки в конце статьи.

Итак, наше меню содержит три уровня. Вы можете изменять количество уровней как Вам угодно, главное следить за правильностью открытия/закрытия тэгов.

Шаг 1

<div class="sidebarmenu">
<ul id="sidebarmenu1">
<li><a href="#">Item 1</a></li>
<li><a href="#">Item 2</a></li>
<li><a href="#">Folder 1</a>
<ul>
<li><a href="#">Sub Item 1.1</a></li>
<li><a href="#">Sub Item 1.2</a></li>
</ul>
</li>
<li><a href="#">Item 3</a></li>
<li><a href="#">Folder 2</a>
<ul>
<li><a href="#">Sub Item 2.1</a></li>
<li><a href="#">Folder 2.1</a>
<ul>
<li><a href="#">Sub Item 2.1.1</a></li>
<li><a href="#">Sub Item 2.1.2</a></li>
<li><a href="#">Sub Item 2.1.3</a></li>
<li><a href="#">Sub Item 2.1.4</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#">Item 4</a></li>
</ul>
</div>

Выше представленный код установите на страницу, в которую Вы хотите добавить меню.

Шаг 2

Сначало, создаём файл "style.css" и копируем туда всё ,что относится к CSS.

.sidebarmenu ul{
margin: 0;
padding: 0;
list-style-type: none;
font: bold 13px Verdana;
width: 150px; /*Ширина меню */
border-bottom: 1px solid #ccc;
}
 
.sidebarmenu ul li{
position: relative;
}

Все подробности я предоставил в статье о горизонтальном выпадающем меню. Здесь же я в кратце поясню, что к чему.

  • padding и margin - это мы обнулили отступы у элементов меню.
  • list-style-type:none - убрали буллеты из нашего списка
  • font: bold 13px Verdana - текст: полужирный, размер, название шрифта
  • border-bottom: 1px solid #ccc - устанавливаем стиль границы контейнера в который заключен элемент. В данном случае имеется ввиду нижняя граница тега <li> (ширина границы, solid - сплошная линия(возможные значения: dotted - пунктир, dashed - росчерк, double - двойная линия) , #ccc - цвет линии.
/* Стили ссылок для основного списка меню */
.sidebarmenu ul li a{
display: block;
overflow: auto; /*force hasLayout in IE7 */
color: white;  /*цвет шрифта*/
text-decoration: none;  /*убрали подчеркивание*/
padding: 6px; /*отступы*/
border-bottom: 1px solid #778;
border-right: 1px solid #778;
}
.sidebarmenu ul li a:link, .sidebarmenu ul li a:visited,
.sidebarmenu ul li a:active{
background-color: #012D58; /*фоновый цвет основного списка*/
}
.sidebarmenu ul li a:visited{
color: white; /*цвет шрифта после наведения курсора*/ 
}
.sidebarmenu ul li a:hover{
background-color: black; /*цвет фона после наведения курсора*/
}
/*Стили для подменю */
.sidebarmenu ul li ul{
position: absolute;
width: 170px; /*ширина подменю */
top: 0;
visibility: hidden;
}
.sidebarmenu a.subfolderstyle{
background:url(right.gif) no-repeat 97% 50%;/*изображение(стрелочка вправо)*/
}

Изображение присутствует в файле для скачивания. Вы можете поменять изображение на свое или сменить место положение стрелочки, меняя координаты (97% и 50%) , как Вам угодно.

Следующие строки, для того чтобы наше меню работало в пресловутом Internet Explorer.

/* Holly Hack for IE \\*/
* html .sidebarmenu ul li { float: left; height: 1%; }
* html .sidebarmenu ul li a { height: 1%; }
/* End */

Вот и закончили со стилями CSS. Теперь переходим к скриптам JavaScript.

Шаг 3

Создаем файл "script.js" и копируем туда ниже представленный код. Скрипт выводит изображение(стрелочку) и осуществляет корректное отображение меню в IE.

var menuids=["sidebarmenu1"] 
//Enter id(s) of each Side Bar Menu''s main UL, separated by commas
function initsidebarmenu(){
for (var i=0; i<menuids.length; i++){
   var ultags=document.getElementById(menuids[i]).getElementsByTagName("ul")
     for (var t=0; t<ultags.length; t++){
       ultags[t].parentNode.getElementsByTagName("a")[0].className+=" subfolderstyle"
       if (ultags[t].parentNode.parentNode.id==menuids[i]) //if this is a first level submenu
         ultags[t].style.left=ultags[t].parentNode.offsetWidth+"px" //dynamically position first level submenus to be width of main menu item
       else //else if this is a sub level submenu (ul)
         ultags[t].style.left=ultags[t-1].getElementsByTagName("a")[0].offsetWidth+"px" //position menu to the right of menu item that activated it
         ultags[t].parentNode.onmouseover=function(){
         this.getElementsByTagName("ul")[0].style.display="block"
         }
         ultags[t].parentNode.onmouseout=function(){
         this.getElementsByTagName("ul")[0].style.display="none"
         }
       }
  for (var t=ultags.length-1; t>-1; t--){ //loop through all sub menus again, and use "display:none" to hide menus (to prevent possible page scrollbars)
    ultags[t].style.visibility="visible"
    ultags[t].style.display="none"
  }
  }
}
if (window.addEventListener)
window.addEventListener("load", initsidebarmenu, false)
else if (window.attachEvent)
window.attachEvent("onload", initsidebarmenu)

Финал

Скопируйте выше приведенный код или скачайте его здесь. Затем вставьте код, представленный ниже, на страницы, где будет меню, между тегами <HEAD> и </HEAD>

<script type="text/javascript" src="/script.js"></script>
<link  rel="StyleSheet" type="text/css" href="/style.css"/>

Обязательно пропишите пути к файлам ''script.js'' и ''style.css'', чтобы они корректно подключились.

Вот и всё. Спасибо!!! за внимание.

 

( 1 Голос ) 
  • Orkin

    2009-12-12 09:36:31

    Спасибо! У меня все работает, как ты и говорил Только вот хак для IE что-то не пашет

  • Orkin

    2009-12-12 09:41:23

    А нет извиняюсь, заработало

  • GSG-9

    2010-03-19 13:59:20

    Все работает - изменил цвет и размер - все зашибись - спасибо

  • Zhanna

    2011-03-10 08:11:13

    Спасибо!!! Очень пригодилось

  • Юлия

    2011-07-15 16:27:35

    Доброго времени суток! У меня вроде все нормально, но, нет стрелочек в IE, Соответственно страницы не возможно открыть. Вроде все сделала, как надо. Помогите найти ошибку, пожалуйста.

  • Александр

    2011-07-31 12:54:20

    Все кратко и ясно, большое спасибо!

  • Александр

    2011-07-31 16:00:13

    Заметил что меню раскрывается только с главной страницы.

  • Masha

    2011-11-30 08:06:06

    Всё очень понятно расписано. Спасибо! :) Только у меня меню получилось, а сам сайт почему-то превратился из белого в серый, ну то есть там была белая картинка фоном, и теперь перестала отображаться. В чем может быть ошибка?

  • Дмитрий

    2012-02-20 17:58:25

    настраиваю вертикальное выпадающее меню под joomla. У меня там не id списка, а class используется.
    <ul class="menu">
    <li class="item-15">
    <li class="item-16">
    С javascript не знаком сильно, что нужно там поправить?

  • Admin

    2012-02-28 22:42:48

    Вы можете, без проблем, в модуле Вашего меню добавить нужный id. В стандартном меню это файл /modules/mod_menu/tmpl/default.php А ещё лучше в шаблоне сайта создать папку под названием html и уже там, спокойно, менять дизайн как Вам угодно.

  • jrez

    2012-04-15 18:38:28

    Спасибо, взял на заметку, некоторую часть кода уже использовал

Captcha
Обновить