Фон каждого пункта меню разный.

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО

Как сделать у каждого пункта меню свой цвет фона

#1 29 августа 2012 в 20:14
Здравствуйте! Просьба, помочь разобраться:

При наведении на определенный пункт меню, данный пункт подсвечивался своим цветом.
При переходе на этот пункт меню его цвет оставался таким же как и при наведении.

Подскажите, вообще можно реализовать такое со стандартным меню.
Спасибо за внимание.
#2 29 августа 2012 в 20:45
Нужно в mod_menu.tpl пронумеровать каждый пункт(желательно 1 уровня) добавив номер в класс, потом в файле стилей прописать цвета под соответствующий номер. Это конечно в 2 словах, на самом деле все будет немного сложнее.
Надеюсь кто-то поможет вам более детально разобрать все шаги.
#3 30 августа 2012 в 18:30
Решение:
1. Привязку стиля к меню делаем через id меню, неудобно, но пока не нашел другого решения.
В классе class="selected" добавляем следующий параметр "{$item.id}" У меня получилось следующее:
  1. {if $item.NSLevel <= 1}
  2. <li {if ($menuid==$item.id || ($currentmenu.NSLeft > $item.NSLeft && $currentmenu.NSRight < $item.NSRight)) && $item.NSLevel<=1}class="selected_{$item.id} "{/if}>
  3. {/if}
  4. {if $item.NSLevel <= 1}
  5. <a href="{$item.link}" target="{$item.target}" {if $menuid==$item.id}class="selected_{$item.id}"{/if} title="{$item.title|escape:'html'}">
  6. {if $item.iconurl}<img src="/images/menuicons/{$item.iconurl}" alt="{$item.title|escape:'html'}" />{/if} {$item.title}
  7. </a>
  8. {else}
В файле style.css клонируем следующую строчку:
  1. #topmenu .menu li.selected{
  2. background:url(../images/menubg.jpg) repeat-x left top #375E93;
  3. }
и редактируем под себя, например:
  1. #topmenu .menu li.selected_10{
  2. background:#000000;
  3. }
  4. #topmenu .menu li.selected_13{
  5. background:#ffffff;
  6. }
Сохраняем и проверяем:)
3. Не разобрался как сделать у каждого пункта меню свой стиль "a:hover" кто сможет подсказать где копать, буду весьма благодарен:)
#4 30 августа 2012 в 18:38
Правильно понимаю что копать нужно здесь(?):
  1. {foreach key=key item=item from=$items}
  2.  
  3. {if $item.NSLevel == $last_level}</li>{/if}
  4. {math equation="x - y" x=$last_level y=$item.NSLevel assign="tail"}
  5. {section name=foo start=0 loop=$tail step=1}
  6. </li></ul>
  7. {/section}
  8.  
Почему здесь нигде не открывается тег "<li>", а только закрывается?
Хотел привязать li к id меню и создать соответствующие стили. Подскажите как это реализовать.
#5 30 августа 2012 в 18:46
Не разобрался как сделать у каждого пункта меню свой стиль "a:hover" кто сможет подсказать где копать, буду весьма благодарен:)
  1. #topmenu .menu li.selected_10:hover{
  2. background:#000000;
  3. }
  4. #topmenu .menu li.selected_13:hover{
  5. background:#ffffff;
  6. }
можно задать !important если стили перебиваются, также для тега а тоже не мешало бы стили пробить
  1. #topmenu .menu li.selected_10:hover a{
  2. background:#000000;
  3. }
  4. #topmenu .menu li.selected_10:hover a:hover{
  5. background:#ffffff;
#6 30 августа 2012 в 19:01


Не разобрался как сделать у каждого пункта меню свой стиль "a:hover" кто сможет подсказать где копать, буду весьма благодарен:)

  1. #topmenu .menu li.selected_10:hover{
  2. background:#000000;
  3. }
  4. #topmenu .menu li.selected_13:hover{
  5. background:#ffffff;
  6. }
можно задать !important если стили перебиваются, также для тега а тоже не мешало бы стили пробить
  1. #topmenu .menu li.selected_10:hover a{
  2. background:#000000;
  3. }
  4. #topmenu .menu li.selected_10:hover a:hover{
  5. background:#ffffff;

Dezerit

Я видимо не правильно выразился, то что вы выше написали работает только для пунктов меню с классом "selected", а как сделать тоже самое для пунктов меню без класса "selected"?
Не могу найти где формируется пункт меню, т.е. где открывается тег <li>, нашел где закрывается:
  1. {foreach key=key item=item from=$items}
  2.  
  3. {if $item.NSLevel == $last_level}[b]</li>[/b]{/if}
  4. {math equation="x - y" x=$last_level y=$item.NSLevel assign="tail"}
  5. {section name=foo start=0 loop=$tail step=1}
  6. [b]</li>[/b]</ul>
  7. {/section}
Помогите разобраться в коде.
#7 3 сентября 2012 в 17:34
неужели никто не знает?:)
#8 3 сентября 2012 в 19:28
По моему скромному мнению вы все усложняете. Сделайте просто слой-подложку нужным градиентом, а верхний слой-маску по hover или active хоть убирайте вовсе, хоть сдвигайте. Все зависит от конкретного дизайна. С помощью transition можно плавность перехода обеспечить… Ну где-то так…
#9 4 сентября 2012 в 01:31
braincord, в mod_menu.tpl найдите строку

  1. <li {if ($menuid==$item.id || ($currentmenu.NSLeft > $item.NSLeft && $currentmenu.NSRight < $item.NSRight)) && $item.NSLevel<=1}class="selected"{/if}>
Измените ее на


  1. <li class="color{$item.id} {if ($menuid==$item.id || ($currentmenu.NSLeft > $item.NSLeft && $currentmenu.NSRight < $item.NSRight)) && $item.NSLevel<=1}selected{/if}>"
пункты пронумерует по их id, точный id можно посмотреть в конце урла в админке при наведении на конкретный пункт меню. Ваши менюшки будут иметь классы color7, color8 и.т.п. в зависимости от их id. Советую обзавестись firebug-ом для удобного просмотра. Далее в файле стиле вам нужно указать правила для этих класов

  1.  
  2. /*Для всех остальных*/
  3. .menu li{background: blue;}
  4. .menu li:hover{background: black;}
  5.  
  6. /*Для главной*/
  7. .menu > li:first-child{background-color: red;}
  8. .menu > li:first-child:hover{background-color: black;}
  9.  
  10. /*Определенные цвета*/
  11. .menu > li.color7{background-color: orange;}
  12. .menu > li.color7:hover{background-color: black;}
  13.  
  14. .menu > li.color8{background-color: pink;}
  15. .menu > li.color8:hover{background-color: black;}
  16.  
для отметки текущего нужно написать стили для класса selected, например
  1.  
  2. .menu > li.color7.selected{background-color: black;}
  3.  
#10 5 сентября 2012 в 18:59

Измените ее на


Код PHP:
<li class="color{$item.id} {if ($menuid==$item.id || ($currentmenu.NSLeft > $item.NSLeft && $currentmenu.NSRight < $item.NSRight)) && $item.NSLevel<=1}selected{/if}>"

Dezerit

Все работает, спасибо большое, только пункты меню, кроме "Главная" стали некликабельными.
Ковычки надо было поставить перед знаком — ">" т.е. так:
  1. <li class="color{$item.id} {if ($menuid==$item.id || ($currentmenu.NSLeft > $item.NSLeft && $currentmenu.NSRight < $item.NSRight)) && $item.NSLevel<=1}selected{/if}">
но тогда hover снова не работает sad
Нашел в чем причина: в style.css
  1. #topmenu .menu li a:hover,
  2. {
  3. background:url(../images/menubg-hover.jpg) repeat-x center top #375E93;
  4. color:#000 !important;
  5. text-shadow:0 1px 0px #FFF !important;
  6. }
!important — перекрывал новые стили.
Удалил эту запись и добавил в
.menu > li.color8:hover{background-color: black !important;}
Теперь все работает! Спасибо+ dance
#11 5 сентября 2012 в 19:36
а кстати задачка решена:) тему закрываю.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.