В нашем меню у меня есть родительский пункт меню, и его дети становятся оранжевыми: наведите указатель мыши. Я также использую JS для добавления переключателя в меню collapse/expand, но поскольку элемент span расположен поверх элемента родительского списка, зависание на переключателе вызывает изменение цвета. Я пытаюсь выяснить способ (с компасом или jQuery), чтобы переопределить стиль наведения в списке, если переключатель включен.
Мы используем Drupal, поэтому HTML довольно запутанный, но здесь урезанная версия:
<li class="menu__item is-expanded last-expanded">
<span class="menu__link nolink">About</span>
<span class="menu__link nolink expand"> </span> <!--put here by jQuery for the collapse and expand icon -->
<ul class="menu">
<li><a href="mission.html">Mission</a></li>
<li><a href="team.html">Team</a></li>
</ul>
</li>
Здесь jQuery:
jQuery(document).ready(function(){
$(".not-front .menu__item.is-expanded.last.expanded span").after("<span class='menu__link nolink expand'> </span>");
$(".front .menu__item.is-expanded.last.expanded span").after("<span class='menu__link nolink expand collapse'> </span>");
$("#block-menu-block-1 ul li li").css({ display: "block" });
$(".not-front #block-menu-block-1 ul li li").css({ display: "none" });
$('#block-menu-block-1 .menu__link.nolink').click(function(){
$('#block-menu-block-1 ul li li').toggle('fast');
$( ".menu__item.is-expanded.last.expanded span.menu__link.nolink.expand" ).toggleClass( "collapse" );
});
});
И здесь Сасс:
.menu__item:hover a,
.menu__item:hover span {
color: $orange;
}
Изменение: Извините! Я хотел опубликовать Sassmeister раньше, но их сайт был опущен. Имел ссылку на сайт dev, но удалил один раз.
Edit: Я думал, что-то вроде этого будет работать, но это не так:
jQuery(".menu__item span.expand").mouseover(function(e) {
jQuery("menu__item:hover a, .menu__item:hover span").toggleClass( "stay-gray" );
});
наряду с этим является sass:
.menu__item:hover a,
.menu__item:hover span {
color: $orange;
border-color: $orange;
&.stay-gray {
color: $darkGray;
border-color: $darkGray;
}
}
Возможно, вы могли бы попытаться прекратить распространение события на элементах span.expand
:
$("span.expand").mouseover(function(e) {
e.stopPropagation();
});
EDIT: stopPropagating
не работает. Итак, вернув идею, предложенную OP, мы выяснили это решение:
Добавьте два новых правила CSS:
.stay-gray a.menu__link {
border-bottom-color: #474E51 !important;
}
.stay-gray, .stay-gray a.menu__link {
color: #474E51 !important;
}
А затем добавьте эти строки в конец jQuery(document).ready(function(){...
:
toggleStayGray=function(e){ jQuery(e.target).siblings().toggleClass('stay-gray') };
jQuery('.menu span.expand').mouseover(toggleStayGray).mouseout(toggleStayGray);
Сюда:
jQuery(document).ready(function(){
jQuery(".not-front .menu__item.is-expanded.last.expanded span").after("<span class='menu__link nolink expand'> </span>");
jQuery(".front .menu__item.is-expanded.last.expanded span").after("<span class='menu__link nolink expand collapse'> </span>");
jQuery("#block-menu-block-1 ul li li").css({ display: "block" });
jQuery(".not-front #block-menu-block-1 ul li li").css({ display: "none" });
jQuery('#block-menu-block-1 .menu__item.is-expanded').click(function(){
jQuery('#block-menu-block-1 ul li li').toggle('fast');
jQuery( ".menu__item.is-expanded.last.expanded span.menu__link.nolink.expand" ).toggleClass( "collapse" );
});
toggleStayGray=function(e){ jQuery(e.target).siblings().toggleClass('stay-gray') };
jQuery('.menu span.expand').mouseover(toggleStayGray).mouseout(toggleStayGray);
});
Таким образом, когда вы span.expand
курсор на элемент span.expand
, класс stay-gray
переключается на своих братьев и сестер, а новые стили применяются к ним и его потомкам a.menu__link
. Когда мышь отсутствует, класс stay-gray
переключается.
a
иspan
на$orange
на.menu__item
?