Анимация от оранжевого до бирюзового не вступает в силу

#css #animation #svg #css-animations

Вопрос:

Я хотел бы анимировать изображение .svg с помощью css, переключаясь между двумя цветами. Я попытался прочитать здесь учебник и css-трюки, но безуспешно. Я считаю, что моя проблема (или одна из них) может заключаться в том, что я не нацелен на правильный элемент в файле .svg. Но я перепробовал множество различных элементов, идентификаторов, тегов, пробовал использовать разные изображения и даже пытался создать свое собственное изображение. Я поделюсь соответствующим кодом ниже, используя свой первый файл .svg.:

  @keyframes color-change {
            from {
                fill: #f4f00;
            }
            to {
                fill: #a4f4f4;
            }
        }
        #Layer_1, #adobe_illustrator_pgf {
            animation: color-change 4s infinite alternate linear;}
 
 <svg version="1.1" 
            id="Layer_1" 
            xmlns:x="amp;ns_extend;" 
            xmlns:i="amp;ns_ai;" 
            xmlns:graph="amp;ns_graphs;"
            xmlns="http://www.w3.org/2000/svg" 
            xmlns:xlink="http://www.w3.org/1999/xlink" 
            x="0px" y="0px" 
            viewBox="0 0 750 750"
            style="enable-background:new 0 0 750 750;" 
            xml:space="preserve">
        <switch>
            <foreignObject 
                requiredExtensions="amp;ns_ai;" 
                x="0" 
                y="0" 
                width="1" 
                height="1">
                <i:pgfRef  
                    xlink:href="#adobe_illustrator_pgf">
                </i:pgfRef>
            </foreignObject>
 

Спасибо!

Обновление: Я создал svg, который хотел, и определенно смог выбрать правильный идентификатор-я смог изменить цвет на оранжевый. Но анимация от оранжевого до бирюзового все еще не вступает в силу.

svg:

   @keyframes color-change {
        from {
            fill: var(--secondary-color);
        }
        to {
            fill: var(--primary-color-lighter);
        }
    }
    #about__main--img__fleur {
        animation: color-change 4s infinite alternate linear;
    } 
 <svg  xmlns="http://www.w3.org/2000/svg"  xmlns:xlink="http://www.w3.org/1999/xlink"
          viewBox="0 0 750 750" >  
<path style="fill:#ff4f00" d="m 158.31488,-2.2022728 c 91.01571,130.5628628  43.85069,121.0522128 12.21,230.0500028 h 8.42 c  82.76816,-249.50584 171.87632,-54.87233 123.86,-12.24  -51.62689,-90.80719 -96.81,12.24 -96.81,12.24 14.30301,2.24628  34.92456,17.33855 -5.51,23.74 -5.67801,35.22547  14.97807,58.61711 40.68,19.78 21.9137,62.34493  -56.60711,108.84523 -64.69,-19.78 h -9.64 c -5.46371,42.41119  45.01408,82.24554 -8.45,115.11 -45.63648,-28.05726  -15.31394,-61.97543 -8.59,-115.11 h -10.45 c  -11.44247,151.90592 -92.587302,60.58808 -64.690002,19.78  32.374092,54.98005 40.680002,-19.78 40.680002,-19.78  -34.128832,-6.82614 -22.687672,-19.12856 -5.51,-23.74  -43.888082,-101.86884 -96.816002,-12.24 -96.816002,-12.24  -48.014316,-52.93652 50.97435,-223.7694488 123.866002,12.24 h  9.23 c -11.49629,-82.82875 -92.252982,-101.39727  12.21,-230.0500028" id="about__main--img__fleur" sodipodi:nodetypes="ccccccccccccccccccc" />
</svg> 

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

1. Да, извините, только что исправил. Я попытался поэкспериментировать с другими свойствами, чтобы посмотреть, смогу ли я заставить их работать. Однако заполнение-это то, что я хотел бы изменить.

2. Так что же такое pgfRef? На данный момент, похоже, нет ничего, что было бы нарисовано с заливкой, которая изменила бы цвет, т. Е. вы не нацеливаетесь ни на что, что реагирует на цвет заливки.

3. Я выбрал идентификаторы из файла .svg. Итак, если ни один из них не будет реагировать на цвет заливки, есть ли в файле что-то, чему, возможно, я мог бы присвоить идентификатор? Или мне следует полностью изменить свой подход или найти другое изображение с более простой заливкой?

4. Формы или текст Mot будут реагировать на цвет заливки. Формы будут прямыми, кругом, эллипсом, контуром, многоугольником, полилинией (вместе с линией, но линии не заполнены).

5. Понял, я посмотрю, смогу ли я найти или создать изображение, состоящее из фигур, и отчитаюсь. Спасибо!

Ответ №1:

Я удалил из svg style =" fill: # ff4f00 " , так как этот стиль имеет больший вес, чем стили одного и того же элемента в CSS

Присвоен идентификатор пути — id =" Layer_1 "

Остальное сделано более или менее правильно. Довольно хорошо для твоей первой попытки.

Анимация изменения цвета происходит при наведении курсора мыши на фигуру

 #Layer_1 {
     fill:#ff4f00;
    }
    #Layer_1:hover {
    animation: color-change 2s infinite alternate linear;
    }
    @keyframes color-change {
        from {
            fill: #ff4f00;
        }
        to {
            fill: #a4f4f4;
        }
    } 
 <svg  xmlns="http://www.w3.org/2000/svg"  xmlns:xlink="http://www.w3.org/1999/xlink"
          viewBox="0 0 750 750" >  
         <path id="Layer_1"  d="m 158.31488,-2.2022728 c 91.01571,130.5628628  43.85069,121.0522128 12.21,230.0500028 h 8.42 c  82.76816,-249.50584 171.87632,-54.87233 123.86,-12.24  -51.62689,-90.80719 -96.81,12.24 -96.81,12.24 14.30301,2.24628  34.92456,17.33855 -5.51,23.74 -5.67801,35.22547  14.97807,58.61711 40.68,19.78 21.9137,62.34493  -56.60711,108.84523 -64.69,-19.78 h -9.64 c -5.46371,42.41119  45.01408,82.24554 -8.45,115.11 -45.63648,-28.05726  -15.31394,-61.97543 -8.59,-115.11 h -10.45 c  -11.44247,151.90592 -92.587302,60.58808 -64.690002,19.78  32.374092,54.98005 40.680002,-19.78 40.680002,-19.78  -34.128832,-6.82614 -22.687672,-19.12856 -5.51,-23.74  -43.888082,-101.86884 -96.816002,-12.24 -96.816002,-12.24  -48.014316,-52.93652 50.97435,-223.7694488 123.866002,12.24 h  9.23 c -11.49629,-82.82875 -92.252982,-101.39727  12.21,-230.0500028" />
</svg>        

Обновить

Я оптимизировал ваш SVG-код с помощью утилиты SVGOMG. Размер файла уменьшился в несколько раз. Это делается для того, чтобы SVG занимал меньше места на HTML-странице.
Приложение отзывчиво. Вы можете изменить его начальные размеры, используя относительные единицы vw vh в родительском контейнере

 .container {
    width:50vw;
    height:50vh;
    }
    #Layer_1 {
     fill:#ff4f00;
    }
    #Layer_1:hover {
    animation: color-change 2s infinite alternate linear;
    }
    @keyframes color-change {
        from {
            fill: #ff4f00;
        }
        to {
            fill: #a4f4f4;
        }
    } 
 <div class="container">     
<svg  xmlns="http://www.w3.org/2000/svg"  xmlns:xlink="http://www.w3.org/1999/xlink"
          viewBox="0 0 750 750" >  
         <path id="Layer_1"  d="M158-2c91 130 44 121 13 230h8c83-250 172-55 124-12-52-91-97 12-97 12 14 2 35 17-6 24-5 35 15 58 41 19 22 63-56 109-65-19h-9c-6 42 45 82-9 115-45-28-15-62-8-115h-11c-11 151-92 60-64 19 32 55 40-19 40-19-34-7-22-20-5-24-44-102-97-12-97-12-48-53 51-224 124 12h9c-11-83-92-102 12-230" />
</svg>       
</div> 

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

1. Предложения Роберта и Александра помогли, но не полностью решили проблему. В конечном счете, размещение всего svg-кода в html, а не связанного в виде img, стало последним шагом к успешной анимации.

2. @Scaramouche Я еще раз внимательно прочитал ваш вопрос и нигде не нашел, что вы пытались добавить svg-код в html с помощью тегов <img>. Ваш вопрос выглядит точно так же, как добавление встроенного svg, Работает ли приложение? Поэтому было бы хорошо принять мой ответ в качестве решения.

3. Дев ка нишу иди, а вопрос такси будь. Но ответ действительно потрясающий!