Переопределить: навести на элементы под псевдоэлементом

0

В нашем меню у меня есть родительский пункт меню, и его дети становятся оранжевыми: наведите указатель мыши. Я также использую 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'>&nbsp;</span>");
      $(".front .menu__item.is-expanded.last.expanded span").after("<span class='menu__link nolink expand collapse'>&nbsp;</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;
  }
}
  • 1
    И Sass, который вы получили в приведенном выше примере, не меняет цвета дочерних тегов a и span на $orange на .menu__item ?
  • 0
    Эта часть работает, я просто хочу иметь возможность переопределить или предотвратить ее, когда кнопка переключения включена.
Показать ещё 1 комментарий
Теги:
sass
compass-sass

1 ответ

1
Лучший ответ

Возможно, вы могли бы попытаться прекратить распространение события на элементах 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'>&nbsp;</span>");
  jQuery(".front .menu__item.is-expanded.last.expanded span").after("<span class='menu__link nolink expand collapse'>&nbsp;</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 переключается.

  • 0
    Спасибо! Но тот, который мне не нужен оранжевый (когда курсор находится на переключателе) - это диапазон первого поколения.
  • 0
    Может быть, это по-другому?
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню