Устранение неполадок при создании выпадающего списка из SVG: наведение курсора мыши для отображения меню

#html #css

#HTML #css

Вопрос:

Пытаюсь использовать свойство .class:hover > .OtherClass в CSS, чтобы изменить непрозрачность другого класса с 0 на 1.

В этом примере .class — это SVG-файл bicycle, который я грубо отредактировал (код пути svg — это монстр speghetti, извините — не жаль, потому что это работает). .OtherClass — это свойство, связанное с div для отображения трех следующих элементов li в ul. (На самом деле меня не волнует, как они выглядят в данный момент, просто хочу правильно настроить таргетинг на группу в css).

Идея в том, что при наведении курсора мыши на SVG-файл bicycle откроется выпадающее меню — грубо. Код ниже:

В течение последних двух часов я пробовал разные методы таргетинга на вложенный .OtherClass безрезультатно.

HTML:

 <div ="nav">

<svg class = "bike" viewBox="0 0 625 355" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/"
        style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
        <g id="Bike"><path d="M108.706,153.568c51.739,0.588 93.266,43.071 92.678,94.81c-0.589,51.739 -43.072,93.266 -94.811,92.677c-51.738,-0.588 -93.266,-43.071 -92.677,-94.81c0.588,-51.739 43.071,-93.266 94.81,-92.677Z"
        style="fill:none;stroke:#000;stroke-width:12.5px;"/><path d="M107.758,236.896c5.749,0.065 10.363,4.785 10.298,10.534c-0.066,5.749 -4.786,10.363 -10.535,10.298c-5.748,-0.066 -10.363,-4.786 -10.297,-10.535c0.065,-5.749 4.785,-10.363 10.534,-10.297Z"/>
        <path d="M517.132,147.796c51.738,0.589 93.266,43.072 92.677,94.81c-0.588,51.739 -43.072,93.267 -94.81,92.678c-51.739,-0.588 -93.266,-43.072 -92.678,-94.81c0.589,-51.739 43.072,-93.266 94.811,-92.678Z"
        style="fill:none;stroke:#000;stroke-width:12.5px;"/><path d="M516.184,231.124c5.748,0.066 10.363,4.786 10.297,10.535c-0.065,5.748 -4.786,10.363 -10.534,10.297c-5.749,-0.065 -10.363,-4.786 -10.298,-10.534c0.066,-5.749 4.786,-10.363 10.535,-10.298Z"/>
        <path d="this path is absolutely massive, not including it"/>
  </g>

  <div class="drop">
  <ul>
    <li>
      <ul class="dropdown">
        <li><a href="#">Sub-1</a></li>
        <li><a href="#">Sub-2</a></li>
        <li><a href="#">Sub-3</a></li>
      </ul>
    </li>
  </ul>
  </div>

</svg>

</div>
  

CSS:

 .bike {
  top: 5%;
  left: 5%;
  z-index: 5;
  float: center;
  width: 15%;
  position: absolute;
}

.bike:hover, .bike:hover > .drop {
  fill: blue;
  opacity:1;
}


.drop {
  opacity:0;
}

ul{
  color: green;
  width: 100px;
  height: 100px;
}

li{
  color: blue;
  width: 100px;
  height: 50px;
}
  

При наведении курсора мыши на SVG значение выпадающего списка должно изменить свою непрозрачность с 0 на 1.

Ответ №1:

Частично проблема заключается в том, что у вас искаженный SVG. Вы не можете разместить HTML-код внутри SVG, не пометив его как посторонний объект… Это потому, что SVG является XML Namespace таким же, как HTML. (Именованные XML-узлы интерпретируются определенным образом).

Вот документация для SVG foreignObject .

Однако я бы избежал этого, просто переместив ваш .drop div ЗА пределы тега SVG.Затем используйте селектор «следующий брат» вместо «прямого дочернего элемента».

 .bike:hover {
  fill: blue;
}
.bike:hover   .drop {
  background-color: blue;
  opacity:1;
}
  

Также fill:color недопустимо для объектов HTML, используйте background-color вместо этого. Это может быть причиной того, что ваш браузер игнорирует CSS после ошибки.

Комментарии:

1. Следующий родственный селектор исправил ошибку. Извините за SVG-код, у Affinity Designer нет подходящего пути вывода, поэтому я преобразовал путь к коду SVG с помощью бесплатного онлайн-инструмента. Я повторяю эту концепцию с помощью scratchpad.io , но я последую вашему совету и вырежу HTML-часть следующим.