У меня есть объект SVG, в котором я использую PNG в качестве шаблона, который я использую в качестве заливки для <rect>
, который выводится на экран. И тогда я применяю <mask>
к этому <rect>
. Я хочу, чтобы <rect>
был заполнен PNG без мозаики ... как будто к нему применен CSS background-size: cover;
.
У меня есть почти следующее:
html, body {
width: 100%;
}
div {
width: 100%;
height: 100%;
}
.outer {
text-align: right;
background: url(https://image.freepik.com/free-photo/wall-wallpaper-concrete-colored-painted-textured-concept_53876-31799.jpg);
background-size: cover;
height: 500px;
}
.inner {
width: 50%;
float: right;
}
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" style="height: 0;">
<defs>
<pattern id="imgpat2" patternUnits="userSpaceOnUse" height="200" width="100%">
<image xlink:href="https://png.pngtree.com/thumb_back/fh260/background/20190831/pngtree-cracked-wooden-texture-background-wood-plane-image_310870.jpg" x="0" y="0">
</image>
</pattern>
</defs>
</svg>
<div class="outer">
<div class="inner">
<svg id="right" height="100%" width="100%">
<defs>
<pattern id="imgpattern" x="0" y="0">
<image xlink:href="https://png.pngtree.com/thumb_back/fh260/background/20190831/pngtree-cracked-wooden-texture-background-wood-plane-image_310870.jpg" height="100%"/>
</pattern>
<linearGradient id="fadeGrad" y2="0" x2="1">
<stop offset="0" stop-color="white" stop-opacity="0"/>
<stop offset=".2" stop-color="white" stop-opacity="1"/>
</linearGradient>
<mask id="fade" maskContentUnits="objectBoundingBox">
<rect width="1" height="1" fill="url(#fadeGrad)"/>
</mask>
</defs>
<!--<rect fill="url(#imgpattern)" width="100%" height="100%" mask="url(#fade)" />-->
<rect fill="url(#imgpat2)" width="100%" height="100%" mask="url(#fade)" />
</svg>
</div>
</div>
<br/>
Просмотреть перо здесь
Но, как вы можете видеть, фон с правой стороны является мозаичным. Я почти уверен, что это где-то в этой строке:
<pattern id="imgpat2" patternUnits="userSpaceOnUse" height="200" width="100%">
, но я путаюсь со всеми атрибутами, особенно когда изменение высоты и ширины не делает ожидаемых изменений.
В реальном продукте высота и ширина этой строки будут различаться по размерам в разных сценариях, а также изменятся в размере при изменении размера браузера, поэтому эффект background-size: cover
действительно должен работать. И используемые текстурыс обеих сторон они полностью ориентированы на пользователя, поэтому они могут быть чем угодно и могут меняться в любое время, и им все равно нужно плавно сливаться друг с другом, поэтому я использую SVG с маской на правой стороне. не были бы для IE, я бы бросил SVG и просто использовал -webkit-mask-image
(и я все еще могу ... если это не может быть чисто выполнено).
Может кто-нибудь сказать, что нужно изменить в порядкедля фонового изображения, используемого в SVG, чтобы занять все пространство, а не мозаику? или есть более простой способ обойти это, что мне не хватает?