SVG 剪切路径无法与 CSS 动画一起正常工作

SVG clipping path not working correctly with CSS animation

剪切路径与我屏蔽的对象一起动画。我希望剪切路径保留在原处,以便我可以为下面的对象设置动画。

Here's how the image looks in Illustrator

It outputs properly in the browser. However, when I go to move the reflection position, the mask moves with it.

我已经定位了#Reflection ID,但它也在移动剪切路径。

<g>
    <defs>
        <path id="SVGID_7_" d="M775.58,676.03h69.62V552.34h-69.62V676.03z M871.16,552.34l0,123.69l69.63,0l0-123.69L871.16,552.34z
             M967.23,552.34l0,123.69l69.63,0l0-123.69L967.23,552.34z M1132.94,552.34l-69.63,0l0,123.69l69.63,0L1132.94,552.34z"/>
    </defs>

    <clipPath id="SVGID_8_">
        <use xlink:href="#SVGID_7_"  overflow="visible"/>
    </clipPath>

    <g id="Reflection" clip-path="url(#SVGID_8_)">
            <rect x="702.5" y="601.74" transform="matrix(0.395 -0.9187 0.9187 0.395 -81.7378 1094.6456)" fill="#FFFFFF" width="175.45" height="15.28"/>
            <rect x="732.3" y="601.74" transform="matrix(0.395 -0.9187 0.9187 0.395 -63.7121 1122.0173)" fill="#FFFFFF" width="175.45" height="15.28"/>
    </g>
</g>

您可以将 rects 包装在一个额外的 g 元素中,并将转换应用于该组。在下一个示例中,我将使用 SMIL 动画来完成它:

body{background:black;}
#SVGID_7_{stroke:red; fill="none"}
<svg viewBox = "740 520 130 180">
<g>
    <defs>
        <path id="SVGID_7_" d="M775.58,676.03h69.62V552.34h-69.62V676.03z M871.16,552.34l0,123.69l69.63,0l0-123.69L871.16,552.34z
             M967.23,552.34l0,123.69l69.63,0l0-123.69L967.23,552.34z M1132.94,552.34l-69.63,0l0,123.69l69.63,0L1132.94,552.34z"/>
    </defs>

    <clipPath id="SVGID_8_">
        <use xlink:href="#SVGID_7_" fill="black"/>
    </clipPath>
<use xlink:href="#SVGID_7_"/>
    <g id="Reflection" clip-path="url(#SVGID_8_)">
      <g transform="translate(-80,0)">
            <rect x="702.5" y="601.74" transform="matrix(0.395 -0.9187 0.9187 0.395 -81.7378 1094.6456)" fill="#FFFFFF" width="175.45" height="15.28"/>
            <rect x="732.3" y="601.74" transform="matrix(0.395 -0.9187 0.9187 0.395 -63.7121 1122.0173)" fill="#FFFFFF" width="175.45" height="15.28"/>
        <animateTransform 
       attributeType="XML" 
        attributeName="transform" 
        type="translate"
        values="-80,0; 200,0" 
        calcMode="linear" 
        dur="4s" 
        repeatCount="indefinite" />
        </g>
    </g>
  
</g>
</svg>

以及使用 css 动画的相同示例:

body{background:black;}
#SVGID_7_{stroke:red; fill="none"}

#Reflection g{animation: anim 4s infinite;}

@keyframes anim {   
     from { transform:translate(-80px,0)}   
     to   { transform:translate(200px,0)}  
  }
<svg viewBox = "740 520 130 180">
<g>
    <defs>
        <path id="SVGID_7_" d="M775.58,676.03h69.62V552.34h-69.62V676.03z M871.16,552.34l0,123.69l69.63,0l0-123.69L871.16,552.34z
             M967.23,552.34l0,123.69l69.63,0l0-123.69L967.23,552.34z M1132.94,552.34l-69.63,0l0,123.69l69.63,0L1132.94,552.34z"/>
    </defs>

    <clipPath id="SVGID_8_">
        <use xlink:href="#SVGID_7_" fill="black"/>
    </clipPath>
<use xlink:href="#SVGID_7_"/>
    <g id="Reflection" clip-path="url(#SVGID_8_)">
      <g>
            <rect x="702.5" y="601.74" transform="matrix(0.395 -0.9187 0.9187 0.395 -81.7378 1094.6456)" fill="#FFFFFF" width="175.45" height="15.28"/>
            <rect x="732.3" y="601.74" transform="matrix(0.395 -0.9187 0.9187 0.395 -63.7121 1122.0173)" fill="#FFFFFF" width="175.45" height="15.28"/>        
      </g>
    </g>
  
</g>
</svg>