有svg
一个组包装器,旨在一次性将样式应用于内部组的所有 5 个元素。然而,径向梯度基本上不会应用于整个组,而是单独应用于 5 个组中的每一个。怎样才能一次性应用到所有人身上呢?我究竟做错了什么?
<svg width="800" height="100" viewBox="0 0 800 100" fill="none" xmlns="http://www.w3.org/2000/svg">
<defs>
<filter id="filter0_i_406_6193" x="0.0524902" y="0" height="41.5858" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB" width="100%">
<feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"></feColorMatrix>
<feOffset></feOffset>
<feGaussianBlur stdDeviation="1.5"></feGaussianBlur>
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"></feComposite>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.65 0"></feColorMatrix>
<feBlend mode="normal" in2="shape" result="effect1_innerShadow_406_6193"></feBlend>
</filter>
<radialGradient id="paint0_radial_406_6193" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(152 21.0001) rotate(-180) scale(154 1129.33)">
<stop stop-color="#738898" stop-opacity="0"></stop>
<stop offset="1" stop-color="#738898"></stop>
</radialGradient>
<radialGradient id="paint1_radial_406_6193" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(152) rotate(90) scale(42 520.249)">
<stop stop-color="#9B8474"></stop>
<stop offset="1" stop-color="#D5AF71" stop-opacity="0"></stop>
</radialGradient>
</defs>
<g filter="url(#filter0_i_406_6193)" fill-opacity="0.65" fill="url(#paint0_radial_406_6193)">
<!-- Левый блок с углами -->
<g transform="translate(0, 0)">
<path d="M14.9626 2.94761C16.8395 1.06082 19.391 0 22.0523 0H40V40H22.0523C19.391 40 16.8395 38.9392 14.9626 37.0524L1.50763 23.5262C-0.432568 21.5757 -0.432566 18.4243 1.50763 16.4738L14.9626 2.94761Z"></path>
</g>
<!-- Ровный участок между левым блоком и центром -->
<g transform="translate(40, 0)">
<rect height="40" width="216"></rect>
</g>
<!-- Центральный блок -->
<g transform="translate(256, 0)">
<path d="M 0 0 H 8 V 40 H 6.4142 C 6.149 40 5.8946 40.1054 5.7071 40.2929 L 4.7071 41.2929 C 4.3166 41.6834 3.6834 41.6834 3.2929 41.2929 L 2.2929 40.2929 C 2.1054 40.1054 1.851 40 1.5858 40 H 0"></path>
</g>
<!-- Ровный участок между центром и правым блоком -->
<g transform="translate(264, 0)">
<rect height="40" width="216"></rect>
</g>
<!-- Правый блок с углами -->
<g transform="translate(480, 0)">
<path d="M0 0H17.948C20.609 0 23.1605 1.06082 25.0374 2.94761L38.4924 16.4738C40.4326 18.4243 40.4326 21.5757 38.4924 23.5262L25.0374 37.0524C23.1605 38.9392 20.609 40 17.948 40H0V0Z"></path>
</g>
</g>
</svg>
特定组中的每个变换都会创建自己的渐变上下文。
为了避免这种情况,有必要将转换直接传输到元素属性(可能需要重新计算或转换)。例如:
然后我们就得到了想要的效果:
我不知道为什么你需要每个人物都在自己的组中,但如果你进一步缩短它......
我还建议仅以绝对值表示路径的开头(M);对于其他点,相对值(c、q、a、l、h...)是可取的。这将使移动图形变得更容易,而不会影响其尺寸并且仅更改坐标原点。