Анимация заполнения SVG с помощью синтаксиса CSS?

У меня есть SVG-графика, и я хочу анимировать заливку одного из ее элементов с идентификатором screen.

#screen {
  animation: bgAnimation 1s linear infinite;
}

@keyframes bgAnimation { 
  0% { fill: #000 !important; }
  10% { fill: #fff !important; }
  20% { fill: #000 !important; }
  30% { fill: #f33 !important; }
  40% { fill: #000 !important; }
  50% { fill: #3f3 !important; }
  60% { fill: #000 !important; }
  70% { fill: #33f !important; }
  80% { fill: #000 !important; }
  90% { fill: #f3f !important; }
  100% { fill: #000 !important; }
}

Используя инструменты разработчика Chrome, чтобы проверить, почему это не работает, я вижу, что мой CSS для применения анимации, кажется, в порядке, но фактические правила заполнения анимации, похоже, отсутствуют.

Снимок экрана инструментов разработчика Chrome

Что еще более странно, если я ввожу правила заполнения в инструменты разработчика, они начинают работать. Я уверен, что это простая проблема с синтаксисом, которую я просто не вижу, может ли кто-нибудь помочь указать, что это такое?

Вот скрипка, если она будет полезна: https://jsfiddle.net/cn54501f/

Также обратите внимание, что я могу использовать этот SVG в элементе <img> или просто вставлять непосредственно в документ HTML5. В любом случае меня устраивает.


person Brad    schedule 06.02.2017    source источник


Ответы (1)


Источник: MDN

Объявления в ключевом кадре с указанием !important игнорируются.

Удаление !important исправит это:

    #screen {
      -webkit-animation: bgAnimation 1s linear infinite;
      -moz-animation: bgAnimation 1s linear infinite;
      animation: bgAnimation 1s linear infinite;
    }
    
    @-webkit-keyframes bgAnimation {
      0% { fill: #000 }
      10% { fill: #fff }
      20% { fill: #000}
      30% { fill: #f33 }
      40% { fill: #000 }
      50% { fill: #3f3 }
      60% { fill: #000 }
      70% { fill: #33f }
      80% { fill: #000 }
      90% { fill: #f3f }
      100% { fill: #000 }
    }
    @-moz-keyframes bgAnimation {
      0% { fill: #000 }
      10% { fill: #fff }
      20% { fill: #000 }
      30% { fill: #f33 }
      40% { fill: #000 }
      50% { fill: #3f3 }
      60% { fill: #000 }
      70% { fill: #33f }
      80% { fill: #000 }
      90% { fill: #f3f }
      100% { fill: #000 }
    }
    @keyframes bgAnimation { 
      0% { fill: #000 }
      10% { fill: #fff}
      20% { fill: #000}
      30% { fill: #f33 }
      40% { fill: #000 }
      50% { fill: #3f3 }
      60% { fill: #000 }
      70% { fill: #33f }
      80% { fill: #000 }
      90% { fill: #f3f }
      100% { fill: #000 }
    }
          <svg
             xmlns:dc="http://purl.org/dc/elements/1.1/"
             xmlns:cc="http://creativecommons.org/ns#"
             xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
             xmlns:svg="http://www.w3.org/2000/svg"
             xmlns="http://www.w3.org/2000/svg"
             xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
             xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
             width="79.715981mm"
             height="142.66949mm"
             viewBox="0 0 282.4582 505.52183"
             id="svg2"
             version="1.1"
             inkscape:version="0.91 r13725"
             sodipodi:docname="phone-in-hand.svg">
          
            <defs
               id="defs4">
              <linearGradient
                 id="linearGradient4192"
                 spreadMethod="pad"
                 gradientTransform="matrix(3.3567808,21.193882,21.193882,-3.3567808,176.74928,87.394737)"
                 gradientUnits="userSpaceOnUse"
                 y2="0"
                 x2="1"
                 y1="0"
                 x1="0">
                <stop
                   id="stop4194"
                   offset="0"
                   style="stop-opacity:1;stop-color:#f7b97e" />
                <stop
                   id="stop4196"
                   offset="0.47363434"
                   style="stop-opacity:1;stop-color:#f7b97e" />
                <stop
                   id="stop4198"
                   offset="1"
                   style="stop-opacity:1;stop-color:#d08b47" />
              </linearGradient>
            </defs>
            <sodipodi:namedview
               id="base"
               pagecolor="#ffffff"
               bordercolor="#666666"
               borderopacity="1.0"
               inkscape:pageopacity="0.0"
               inkscape:pageshadow="2"
               inkscape:zoom="1.4"
               inkscape:cx="-46.82489"
               inkscape:cy="306.80371"
               inkscape:document-units="px"
               inkscape:current-layer="g4146"
               showgrid="false"
               inkscape:window-width="1920"
               inkscape:window-height="1018"
               inkscape:window-x="1912"
               inkscape:window-y="-8"
               inkscape:window-maximized="1"
               fit-margin-top="0"
               fit-margin-left="0"
               fit-margin-right="0"
               fit-margin-bottom="0" />
            <metadata
               id="metadata7">
              <rdf:RDF>
                <cc:Work
                   rdf:about="">
                  <dc:format>image/svg+xml</dc:format>
                  <dc:type
                     rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
                  <dc:title></dc:title>
                </cc:Work>
              </rdf:RDF>
            </metadata>
            <g
               inkscape:label="Layer 1"
               inkscape:groupmode="layer"
               id="layer1"
               transform="translate(-204.48793,-366.20612)">
              <g
                 transform="matrix(1.25,0,0,-1.25,197.665,874.95008)"
                 inkscape:label="AdobeStock_90040969 [Converted]"
                 id="g4144">
                <g
                   id="g4146">
                  <g
                     id="g4154"
                     transform="matrix(0.97236992,-0.23344536,0.23344536,0.97236992,207.75484,379.75781)">
                    <path
                       d="m 0,0 -111.335,0 c -16.457,0 -23.035,-6.58 -23.035,-23.035 l 0,-240.352 c 0,-16.457 6.578,-23.033 23.035,-23.033 l 111.335,0 c 16.454,0 23.034,6.576 23.034,23.033 l 0,240.352 C 23.034,-6.58 16.454,0 0,0"
                       style="fill:#2d2d2d;fill-opacity:1;fill-rule:nonzero;stroke:none"
                       id="path4156"
                       inkscape:connector-curvature="0" />
                  </g>
                  <g
                     id="g4158"
                     transform="matrix(0.97236992,-0.23344536,0.23344536,0.97236992,140.14864,385.14604)">
                    <path
                       d="m 0,0 22.657,0 c 1.257,0 2.28,-1.022 2.28,-2.282 0,-1.26 -1.023,-2.28 -2.28,-2.28 L 0,-4.562 c -1.26,0 -2.281,1.02 -2.281,2.28 C -2.281,-1.022 -1.26,0 0,0"
                       style="fill:#58595b;fill-opacity:1;fill-rule:nonzero;stroke:none"
                       id="path4160"
                       inkscape:connector-curvature="0" />
                  </g>
                  <g
                     id="g4162"
                     transform="matrix(0.97236992,-0.23344536,0.23344536,0.97236992,106.70625,124.27441)">
                    <path
                       d="m 0,0 c 0,-1.539 -1.248,-2.785 -2.786,-2.785 l -28.533,0 c -1.538,0 -2.785,1.246 -2.785,2.785 l 0,5.623 c 0,1.54 1.247,2.785 2.785,2.785 l 28.533,0 C -1.248,8.408 0,7.163 0,5.623 L 0,0 Z"
                       style="fill:#58595b;fill-opacity:1;fill-rule:nonzero;stroke:none"
                       id="path4164"
                       inkscape:connector-curvature="0" />
                  </g>
                  <path
                     d="M 157.86682,130.61552 30.781963,161.12589 84.389189,384.41606 211.47405,353.90568 157.86682,130.61552 Z"
                     style="fill:#ff00ff;fill-opacity:1;fill-rule:nonzero;stroke:none"
                     id="screen"
                     inkscape:connector-curvature="0" />
                  <g
                     id="g4168"
                     transform="matrix(0.97236992,-0.23344536,0.23344536,0.97236992,27.899548,199.68877)">
                    <path
                       d="m 0,0 c -0.783,7.52 -0.927,11.088 -1.331,13.854 2.153,5.16 1.75,16.684 0.783,21.146 -0.702,3.238 -0.973,7.691 -0.973,7.691 l 0,5.986 0,26.126 c -8.051,-6.367 -25.708,-13.685 -28.119,-19.32 -2.552,-5.969 10.699,-12.77 23.704,-11.609 -4.318,-3.719 -4.026,-5.612 -10.249,-15.738 -1.768,-2.877 -7.828,-7.951 -6.587,-12.2 0.962,-3.298 7.08,-5.665 10.798,-7.448 -1.865,-2.301 -7.491,-12.98 -8.801,-16.433 -1.428,-3.762 8.886,-11.618 14.804,-8.444 C 0.235,-13.059 0.528,-5.075 0,0"
                       style="fill:#f7b97e;fill-opacity:1;fill-rule:nonzero;stroke:none"
                       id="path4170"
                       inkscape:connector-curvature="0" />
                  </g>
                  <path
                     inkscape:connector-curvature="0"
                     id="path4174"
                     style="fill:#f7b97e;fill-opacity:1;fill-rule:nonzero;stroke:none"
                     d="m 215.95953,87.688567 c 1.11499,15.263443 3.6718,44.298813 9.42491,72.400223 5.24965,25.6317 12.75139,40.8921 -8.56514,81.43453 -11.26581,21.43315 -4.48841,43.5974 -14.73983,42.91983 -12.79995,-0.84938 -23.09864,-29.8032 -20.28495,-42.51733 11.92344,-53.91413 -1.70608,-59.60255 -16.05556,-97.20879 -6.74661,-17.67952 -7.08413,-30.05157 -5.0003,-41.41501 -5.77171,-4.34466 -12.85862,-3.728222 -19.84704,-2.05045 l -42.934996,10.30778 -12.015575,2.88468 -19.514492,4.68502 C 71.107935,105.9912 83.795223,91.459914 97.373163,79.310518 104.58132,72.113965 111.1059,36.835074 115.89485,2.6413397 L 231.4249,2.5777195 C 215.27945,44.234789 215.96354,87.675264 215.95953,87.688567"
                     sodipodi:nodetypes="cccccccsccccccc" />
                  <g
                     id="g4176"
                     transform="matrix(0.97236992,-0.23344536,0.23344536,0.97236992,56.170752,323.96012)">
                    <path
                       d="M 0,0 C -8.169,-0.046 -17.43,-1.656 -18.94,-8.479 -21.874,-21.729 -11.047,-24.401 0,-27.562 L 0,0 Z"
                       style="fill:#f7b97e;fill-opacity:1;fill-rule:nonzero;stroke:none"
                       id="path4178"
                       inkscape:connector-curvature="0" />
                  </g>

                </g>
                <g
                   id="g4180"
                   transform="translate(-20.857143,-4)">
                  <g
                     id="g4182">
                    <g
                       id="g4188">
                      <g
                         id="g4190">
                        <path
                           inkscape:connector-curvature="0"
                           id="path4200"
                           style="fill:url(#linearGradient4192);stroke:none"
                           d="m 181.622,108.347 c -3.615,-4.602 -9.695,-6.626 -18.815,-6.626 l 0,0 -11.659,0 c 21.311,-22.675 53.531,-13.957 53.531,-13.957 l 0,0 c -10.68,3.837 -23.051,20.583 -23.051,20.583 l 0,0 -0.006,0 z" />
                      </g>
                    </g>
                  </g>
                </g>
              </g>
            </g>
          </svg>

person tao    schedule 06.02.2017
comment
Ха, да, это исправило это. Я добавил это, потому что отчаянно пытался что-то сделать. Я думал, что тестировал без него, но кто знает. Теперь это работает. Спасибо. :-) Я предполагаю, что !important нельзя анимировать? - person Brad; 06.02.2017
comment
Я не тестировал полностью. Я не ожидал, что это сработает после их удаления, но я знал, что с ними нельзя отлаживать. Я могу поискать почему. они могут быть только проблемой синтаксиса. Не уверен на данный момент. - person tao; 06.02.2017
comment
Этот ответ в порядке. Мы оставим это на этом. Спасибо за помощь! - person Brad; 06.02.2017
comment
@Brad Глядя на сложность вашего svg, я просто должен спросить: почему бы не попробовать УЛЫБАТЬСЯ? Удачного кодирования! :: }‹(((*› :: - person tao; 06.02.2017
comment
SMIL было бы здорово, но он уже давно устарел. - person Brad; 06.02.2017
comment
Приятно знать, но плохие новости для меня. Мне нужно обновить некоторые старые вещи. Спасибо. - person tao; 06.02.2017
comment
Однако @Brad SMIL не устарел, команда Chrome передумала. - person Robert Longson; 06.02.2017