有可能在SVG填充中模拟以下CSS吗?
background-image: url(/* URL */);
background-position: 50%;
background-size: auto 100%;
background-repeat: repeat-x;
即一个背景图像可以保持其宽高比,具有与其容器相同的高度,居中,并且在水平方向上重复。 这个 JSBin 展示了我试图实现的行为,使用动画来展示背景对高度变化的响应。
这个方法并不完美,有些尴尬。作为最外层元素,我已经设置了一个 <div>
元素,但也可以是一个 <svg>
元素。关键在于记住,你需要一个内部的 <svg>
元素,并且带有 overflow: visible
,以及一个外部元素带有 overflow: hidden
(这对于 <svg>
元素来说是默认的)。
@keyframes shrink {
0% { height: 200px; }
100% { height: 50px; }
}
div {
animation: 2s ease-in-out 0s infinite alternate shrink;
border: 1px solid #000;
height: 200px;
width: 200px;
overflow: hidden;
}
<div>
<svg width="100%" height="100%" viewBox="-0.675 0 0.1 1"
preserveAspectRatio="xMidYMid meet" overflow="visible">
<pattern id="p1" viewBox="0 0 100 80" height="1" width="1.25"
patternUnits="userSpaceOnUse">
<image xlink:href="http://static.jsbin.com/images/dave.min.svg"
width="100" height="80" />
<rect width="100" height="80" fill="none" stroke="brown" />
</pattern>
<rect fill="url(#p1)" x="-500" y="0" width="1000" height="1" />
</svg>
</div>