Выпадающее меню без javascript 2

36

На CSSplay недавно была опубликована новая версия выпадающего меню на «чистом» CSS. В этой версии никаких хаков, условных комментариев и таблиц для IE6.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<ul id="nav">
  <li><a href="">Главная</a></li>
  <li><a href="">Товары</a>
    <ul>
      <li><a href="">Компьютеры</a></li>
      <li><a href="">Мониторы</a></li>
      <li><a href="">Комплектующие</a></li>
    </ul>
  </li>
  <li><a href="">Услуги</a>
    <ul>
      <li><a href="">Сборка</a></li>
      <li><a href="">Ремонт</a></li>
      <li><a href="">Обслуживание</a></li>
    </ul>
  </li>
  <li><a href="">Условия</a></li>
  <li><a href="">Карта сайта</a></li>
</ul>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
*{
  margin:0;
  padding:0
}
#nav{
  font-size:0.7em;
  list-style-type:none;
  width:600px;
  height:25px;
  display:inline-block;
  background:#355C96;
  line-height:25px
}
  #nav li{
    float:left;
    width:120px;
    margin-top:-10000px
  }
    #nav li a{
      width:120px;
      text-decoration:none;
      text-align:center;
      color:#fff;
      position:relative;
      float:left;
      margin-right:-119px;
      margin-top:10000px
    }
    #nav li a:hover, #content #nav li a:focus, #content #nav li a:active{
      background:#DCE2FC;
      margin-right:0;
      color:#355C96
    }
    #nav li ul{
      background:#6286BD;
      float:left;
      margin-top:-25px;
      padding-top:25px;
      margin-bottom:-10000px;
      list-style-type:none
    }
      #nav li ul li{
        float:none;
        margin:0;
        width:auto
      }
        #nav li ul li a{
          float:none;
          display:block;
          margin:0;
          margin-right:-1px;
          background:#6286BD
        }

Наложение кнопок в меню

28

Периодически мне для вёрстки попадаются макеты в навигации у которых присутствуют перекрывающиеся по краям кнопки. Часто таким образом выделяют пункт меню открытой в данный момент страницы. У некоторых это вызывает некоторые трудности в реализации. В связи с этим выкладываю простой пример с подобным эффектом.

В качестве навигации используем список:

1
2
3
4
5
6
7
<ul>
    <li><a href="" title="">О нас</a></li>
    <li><a href="" title="">Новости</a></li>
    <li class="active"><span>Услуги</span></li>
    <li><a href="" title="">Портфолио</a></li>
    <li><a href="" title="">Контакты</a></li>
</ul>

Перекрывание кнопок осуществляется засчёт отрицательных внешних отступов, а позиционирование активного пункта поверх остальных с помощью z-index.

Перекрывающиеся кнопки в меню

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
ul{
    list-style-type:none;
    font-size:0.9em;
    color:#fff;
    height:50px;
    width:505px;
    margin:0 auto
}
ul li{
    float:left;
    border-right:solid 1px #fff;
    position:relative;
    z-index:5;
    background:#96B1D4 url(images/lc.gif) no-repeat -5px top;
    text-align:center
}
ul li.active{
    z-index:10;
    background:#9A2D7F url(images/lc.gif) no-repeat left -5px;
    border:none;
    margin:0 -9px 0 -10px;
    top:-10px
}
ul li a{
    float:left;
    display:block;
    padding:10px 0;
    background:url(images/rc.gif) no-repeat 95px top;
    text-decoration:none;
    color:#fff;
    width:100px
}
ul li span{
    float:left;
    display:block;
    padding:15px 0;
    position:relative;
    background:url(images/rc.gif) no-repeat 109px -5px;
    width:119px
}

Как видите ключевыми свойствами в примере являются margin и z-index применяемые к элементам li, остальные можно в той или иной степени менять по своему усмотрению.

Выпадающее меню без Javascript

175

В этом посте я покажу вам как сделать выпадающее меню ограничиваясь только средствами HTML и CSS, без использования скриптов. Источником сего примера является полезнейший ресурс CSSPlay. Те у кого этот сайт еще не нашел свое место в закладках, советую сделать это как можно быстрей. На сайте еще много различных и полезных примеров кода.

Приступим…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<div class="menu">
    <ul> 
        <li><a class="hide" href="">Раздел 1</a>
 
        <!--[if lte IE 6]>
        <a href="">Раздел 1
        <table><tr><td>
        <![endif]-->
 
            <ul>
                <li><a href="" title="">Страница 1</a></li>
                <li><a href="" title="">Страница 1.1</a></li>
                <li><a href="" title="">Страница 1.2</a></li>
            </ul>
 
        <!--[if lte IE 6]>
        </td></tr></table>
        </a>
        <![endif]-->
 
        </li>
 
        <li><a class="hide" href="">Раздел 2</a>
 
        <!--[if lte IE 6]>
        <a href="">Раздел 2
        <table><tr><td>
        <![endif]-->
 
            <ul>
                <li><a href="" title="">Страница 2</a></li>
                <li><a href="" title="">Страница 2.1</a></li>
                <li><a href="" title="">Страница 2.2</a></li>
                <li><a href="" title="">Страница 2.3</a></li>
                <li><a href="" title="">Страница 2.4</a></li>
                <li><a href="" title="">Страница 2.5</a></li>
            </ul>
 
        <!--[if lte IE 6]>
        </td></tr></table>
        </a>
        <![endif]-->
 
        </li>
 
</ul> 
</div>

Вы можете добавить дополнительные разделы, при этом необходимо будет изменить в CSS ширину меню. Как вы видите в примере используются условные комментарии, с дополнительным кодом. Это необходимо для браузера IE6.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
.menu{
    font-family:arial, sans-serif;
    width:212px;
    height:100px;
    position:relative;
    font-size:11px;
    z-index:100
}
.menu ul li a, .menu ul li a:visited{
    display:block;
    text-decoration:none;
    color:#000;
    width:104px;
    height:20px;
    text-align:center;
    color:#fff;
    border:1px solid #fff;
    background:#710069;
    line-height:20px;
    font-size:11px;
    overflow:hidden
}
.menu ul{
    padding:0;
    margin:0;
    list-style:none
}
.menu ul li{
    float:left;
    position:relative}
.menu ul li ul{
    display:none
}
.menu ul li:hover a{
    color:#fff;
    background:#36f
}
.menu ul li:hover ul{
    display:block;
    position:absolute;
    top:21px;
    left:0;
    width:105px
}
.menu ul li:hover ul li a{
    display:block;
    background:#ddd;
    color:#000
}
.menu ul li:hover ul li a:hover{
    background:#6fc;
    color:#000
}

Оформление пунктов меню можно менять так как вам хочется. Для IE6 используются дополнительные стили, которые также нужно подключить с помощью условных комментариев:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
.menu ul li a.hide, .menu ul li a:visited.hide{
    display:none
}
.menu ul li a:hover{
    color:#fff;
    background:#36f
}
.menu ul li a:hover ul{
    display:block;
    position:absolute;
    top:21px;
    left:0;
    width:105px
}
.menu ul li a:hover ul li a{
    display:block;
    background:#ddd;
    color:#000
}
.menu ul li a:hover ul li a:hover{
    background:#6fc;
    color:#000
}

Вот собственно и все. Пример работает во всех наиболее популярных браузерах, включая IE6. Для корректной работы меню необходимо указать тип документа.