Вопрос по hover, anchor, svg, transition, css – Почему этот переход CSS не работает на SVG внутри якоря

6

Я пытаюсь изменить заливку и путь внедренного объекта SVG, однако, похоже, это не работает (Code PenВот):

SVG:

<a class="simple-link svg-link" href="">
  Some Text
  <svg version="1.1" id="next-page-icon" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
      viewBox="0 0 25 25" enable-background="new 0 0 25 25" xml:space="preserve" preserveAspectRatio="xMinYMin meet">
    <circle class="the-background" cx="12.5" cy="12.5" r="12.5"/>
    <g>
      <path class="the-icon"  d="M16.088,11.421l-3.404,3.362l-3.418-3.362v-1.204l3.418,3.444l3.404-3.444V11.421z"/>
     </g>
  </svg>
</a>

Sass:

a
{
  width:200px;
  height:200px;
  overflow: hidden;

  @include transition(color, 1s);
  @include transition(background, 1s);

  svg
  {
    width:200px;
    height:200px;

    .the-background
    {
      @include transition(fill, 1s);
      fill: grey;
    }

    .the-icon
    {
      @include transition(fill, 2.5s);
    }
  }

  &:hover
  {
    color: red;
    background: black;
    .the-background
    {
      fill: black;
    }

    .the-icon
    {
      fill: red;
    } 

  }
}

Почему заливки не оживляют при наведении?

Ваш Ответ

3   ответа
12

fill="currentColor" на элемент пути SVG, который я хотел перейти. Потом я добавилcolor а такжеtransition свойства для окружающего тега привязки и выполняли переход CSS для тега привязки вместо самого пути svg. Ниже приведен очень урезанный пример:

HTML:

<a>
    <svg>
        <path fill="currentColor" />
    </svg>
</a>

SCSS:

a { color: black; transition: color .2s linear;
    &:hover { color: white; } }
6

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

Чтобы исправить это, поместите ссылку внутри SVG вместокак этот пост предлагает

ИЛИ ЖЕ

Сделайте SVG родственником ссылки и используйте селектор брата

/* This goes within `a { ...` */
&:hover + svg { /* Or use ~ to select all */
  .the-background
  {
    fill: black;
  }

  .the-icon
  {
    fill: red;
  } 
}
Спасибо Спасибо! Работал в Safari, в отличие от других вещей, которые я пробовал. Joel Farris
6

что для перехода к заполнению svg в элементе привязки он работает только с использованием цветовых кодов rgba. Я не исследовал, почему это так, но он работает над моими проектами - вот пример:http://rawesome.leveragenewagemedia.com/ (наведите значки социальных сетей).

Вот SASS, которую я использую:

.icon {
  display: inline-block;
  width: 20px;
  height: 20px;
  fill: rgba(0,0,0,.2);
  -webkit-transition: fill .5s;
  -moz-transition: fill .5s;
  -ms-transition: fill .5s;
  -o-transition: fill .5s;
  transition: fill .5s;

  &:hover {
    fill: rgba(0,0,0,.5);
  }
}
Это решение определенно работает для перехода между цветовыми состояниями. Спасибо за публикацию этого! Tim Hettler
Я только что попробовал это, и кажется, что это работает только для непрозрачности. Использование разных цветов по-прежнему не поможет при использовании этого метода. NerdCowboy
Интересно. Спасибо и добро пожаловать. Undistraction

Похожие вопросы