我被委托设计一个网站,在背景中使用这种图案
我认为 SVG 图案非常适合这种用途。我可以制作这些形状的单独一列,但我不确定是否可以用其他方式生成更好的形状。我的做法感觉不对而且效率低下,而且它无法扩展到整个屏幕作为背景图像。
svg {
border: 1px solid #CCC;
}
svg * {
transform-box: fill-box;
}
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100" height="780" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<path id="hex" fill="#D4C1DE" fill-opacity="0.3" d="M0 25.980762113533157L15 0L45 0L60 25.980762113533157L45 51.96152422706631L15 51.96152422706631Z">
</defs>
<use xlink:href="#hex" transform-origin="center" x="0" y="0" transform="scale(0.20)" />
<use xlink:href="#hex" transform-origin="center" x="0" y="400" transform="scale(0.30)" />
<use xlink:href="#hex" transform-origin="center" x="0" y="450" transform="scale(0.40)" />
<use xlink:href="#hex" transform-origin="center" x="0" y="500" transform="scale(0.50)" />
<use xlink:href="#hex" transform-origin="center" x="0" y="550" transform="scale(0.60)" />
<use xlink:href="#hex" transform-origin="center" x="0" y="600" transform="scale(0.70)" />
<use xlink:href="#hex" transform-origin="center" x="0" y="650" transform="scale(0.80)" />
<use xlink:href="#hex" transform-origin="center" x="0" y="700" transform="scale(0.90)" />
<use xlink:href="#hex" transform-origin="center" x="0" y="730" />
</svg>
有什么更实用的方法可以实现此处预期的效果?
您可以使用
<pattern>
元素来重复元素。此处的图案由一列元素组成
<use>
(就像您所做的一样)。该列由另外两个<use>
元素重复。每列都有一个变换/平移,因此图案中间有一列六边形,左边有半列,右边有半列。重复该图案,一半将对齐并形成一个六边形洞。我重构了你的六边形,使数字看起来更美观,并且六边形的中心是 0,0。这样你就不需要处理六边形的原点了。
更新
好的,这只是我的想法。图案应该覆盖 HTML 页面的背景。不用担心元素
<pattern>
。默认情况下,CSS 背景图像将重复。在下面的示例中,我使用此 SVG 图像:因此,与上面相同,只是没有图案。然后您可以将其插入为背景图像。它可以调整到高度(这里使用
background-size: contain;
),或者您可以忽略它,SVG 将使用定义的 50px 宽度重复。给克里斯一点小改变,他的回答很棒
现代浏览器接受原始 SVG 作为 dataURI,无需 Base64
Web
<svg-background>
组件允许编辑 SVG 并立即查看结果