马黑黑 发表于 2024-9-21 18:45

使用svg渐变修饰rect做成的图案

<style>
.artbox { position: relative; }
.artbox > p { position: relative; margin: 10px 0; font: normal 18px / 26px sans-serif; }
#sbox { margin: 30px auto; position: relative; width: fit-content; height: fit-content; }
</style>

<div class="artbox">
        <p>以下代码,利用svg线性渐变对rect矩形勾勒出所需形状,存放在defs标签内待用,然后通过3个use标签实例化并各自旋转一定角度,最后加一个圆在中央。圆有鼠标指针移动交互,不过存为.svg文档后当做img或背景图片使用时该交互行为失效。</p>

<div class="hE"><pre id="code">
&lt;svg width="200" height="200" viewBox="-100 -100 200 200" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink"&gt;
        &lt;style&gt;
                #ct{ cursor:pointer;transition:1s; }
                #ct:hover{ r: 26px; }
        &lt;/style&gt;
        &lt;defs&gt;
                &lt;linearGradient id="lgd1" x1="1" x2="0" y1="0" y2="1"&gt;
                        &lt;stop offset="0%" stop-color="transparent" /&gt;
                        &lt;stop offset="45%" stop-color="transparent" /&gt;
                        &lt;stop offset="50%" stop-color="lightgreen" /&gt;
                        &lt;stop offset="55%" stop-color="transparent" /&gt;
                        &lt;stop offset="100%" stop-color="transparent" /&gt;
                &lt;/linearGradient&gt;
                &lt;g id="rect1"&gt;&lt;rect x="-70" y="-70" width="140" height="140" fill="url(#lgd1)" /&gt;&lt;/g&gt;
        &lt;/defs&gt;
        &lt;use x="0" y="0" href="#rect1" transform="rotate(0)" /&gt;
        &lt;use x="0" y="0" href="#rect1" transform="rotate(120)" /&gt;
        &lt;use x="0" y="0" href="#rect1" transform="rotate(240)" /&gt;
        &lt;circle id="ct" cx="0" cy="0" r="18" fill="#00800080" /&gt;
&lt;/svg&gt;
</pre></div>

        <p><button id="showcode" type="button" value="bnt">点击查看效果</button></p>
        <div id="sbox" class="showDiv"></div>
</div>

<script>
var sc = document.createElement('script');
sc.chartset = 'utf-8';
sc.src = 'https://638183.freep.cn/638183/web/js/helight.js';
document.body.appendChild(sc);

showcode.onclick = () => {
        showcode.disabled = true;
        sbox.innerHTML = code.innerText;
}
</script>

红影 发表于 2024-9-21 19:52

<rect x="-70" y="-70" width="140" height="140"。。。这个是为了把矩形画到原点用的吧。
<linearGradient id="lgd1" x1="1" x2="0" y1="0" y2="1">这个没看懂,为什么渐变的起点和终点这么小?

马黑黑 发表于 2024-9-21 19:55

红影 发表于 2024-9-21 19:52


第一个问题:看viewBox属性。这是将矩形画在中央;

第二个问题:0=0%,1=100%,这是浮点数表示法,可以使用百分比如果愿意。

红影 发表于 2024-9-21 20:01

哦,取一根看了看,大概知道点了,这个x1="1" x2="0" y1="0" y2="1"是为了取个方向,后面还有offset呢,通过颜色的设计,就可以让矩形呈现出棍的样子了。

红影 发表于 2024-9-21 20:02

哦,取一根看了看,大概知道点了,这个x1="1" x2="0" y1="0" y2="1"是为了取个方向,后面还有offset呢,通过颜色的设计,就可以让矩形呈现出棍的样子了。

红影 发表于 2024-9-21 20:09

哦,原来1是浮点数,知道了{:4_187:}还是写成百分比比较好理解点。

马黑黑 发表于 2024-9-21 20:38

红影 发表于 2024-9-21 20:09
哦,原来1是浮点数,知道了还是写成百分比比较好理解点。

百分比数值较长,有时候能短则短,不是啥都是越唱越好{:4_170:}

花飞飞 发表于 2024-9-21 21:02

这个结构乍一看跟之前的《西亚风光》组合小播有点像,十字旋转叠加,这个是一根旋转叠加。。

花飞飞 发表于 2024-9-21 21:03

用渐形绘形状是被老师用到极致了,200*200的方块渐变后成一条漂亮的线条,这个创意也是没谁了。{:4_173:}

花飞飞 发表于 2024-9-21 21:03

<svg width="200" height="200" viewBox="-100 -100 200 200" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink">
        <style>
                #ct{ cursor:pointer;transition:1s; }
                #ct:hover{ r: 26px; }
        </style>
        <defs>
                <linearGradient id="lgd1" x1="1" x2="0" y2="0" y1="1">
                        <stop offset="0%" stop-color="transparent" />
                        <stop offset="48%" stop-color="transparent" />
                        <stop offset="50%" stop-color="yellow" />
                        <stop offset="52%" stop-color="transparent" />
                        <stop offset="100%" stop-color="transparent" />
                </linearGradient>
                <g id="rect1"><rect x="-70" y="-70" width="140" height="140" fill="url(#lgd1)" /></g>
        </defs>
        <use x="0" y="0" href="#rect1" transform="rotate(0)" />
        <use x="0" y="0" href="#rect1" transform="rotate(10)" />
        <use x="0" y="0" href="#rect1" transform="rotate(20)" />
        <use x="0" y="0" href="#rect1" transform="rotate(30)" />
        <use x="0" y="0" href="#rect1" transform="rotate(40)" />
        <use x="0" y="0" href="#rect1" transform="rotate(50)" />
        <use x="0" y="0" href="#rect1" transform="rotate(60)" />
        <use x="0" y="0" href="#rect1" transform="rotate(70)" />
        <use x="0" y="0" href="#rect1" transform="rotate(80)" />
        <use x="0" y="0" href="#rect1" transform="rotate(90)" />
        <use x="0" y="0" href="#rect1" transform="rotate(100)" />
        <use x="0" y="0" href="#rect1" transform="rotate(110)" />
        <circle id="ct" cx="0" cy="0" r="18" fill="#DAA52090" />
</svg>

小辣椒 发表于 2024-9-21 21:09

{:4_199:}{:4_178:}

红影 发表于 2024-9-21 21:25

马黑黑 发表于 2024-9-21 20:38
百分比数值较长,有时候能短则短,不是啥都是越唱越好

真会偷懒{:4_172:}

马黑黑 发表于 2024-9-21 21:29

红影 发表于 2024-9-21 21:25
真会偷懒

哎呀,你还嫌svg代码不够长

马黑黑 发表于 2024-9-21 21:31

红影 发表于 2024-9-21 20:01
哦,取一根看了看,大概知道点了,这个x1="1" x2="0" y1="0" y2="1"是为了取个方向,后面还有offset呢,通 ...

大概如此

马黑黑 发表于 2024-9-21 21:31

花飞飞 发表于 2024-9-21 21:03
#ct{ cursor:pointer;transition:1s; }
                #ct:hover{ r: 26px; }
       


你这个也太漂亮了吧

马黑黑 发表于 2024-9-21 21:31

小辣椒 发表于 2024-9-21 21:09


谢顶

马黑黑 发表于 2024-9-21 21:32

花飞飞 发表于 2024-9-21 21:03
用渐形绘形状是被老师用到极致了,200*200的方块渐变后成一条漂亮的线条,这个创意也是没谁了。

哪里哪里,都有都有

红影 发表于 2024-9-21 21:44

马黑黑 发表于 2024-9-21 21:31
大概如此

原来这小棍的粗细也可以在offset的百分比里调的呢,刚才跑去试了半天,不过我都是单根试的,想看看都会出现什么效果。

红影 发表于 2024-9-21 21:48

马黑黑 发表于 2024-9-21 21:29
哎呀,你还嫌svg代码不够长

不管长短,写成习惯的多好,前面就不会那么懵了{:4_173:}

马黑黑 发表于 2024-9-21 21:58

红影 发表于 2024-9-21 21:48
不管长短,写成习惯的多好,前面就不会那么懵了

好吧
页: [1] 2 3
查看完整版本: 使用svg渐变修饰rect做成的图案