svg:简笔画猫头
<style>#wrap { margin: 60px auto; width: fit-content; height: fit-content; }
#precode { background: #eee; padding: 2px 10px; font-size: 16px; white-space: pre-wrap; word-break: break-word; tab-size: 4; display: none; }
</style>
<div id="wrap">
<svg width="200" height="200" viewBox="-100 -100 200 200">
<defs>
<g id="face" fill="white" stroke="black">
<circle cx="0" cy="0" r="50" />
</g>
<g id="eye">
<circle cx="0" cy="0" r="5" fill="black" stroke="none" />
</g>
<g id="ear" stroke="black" fill="none">
<polyline points="-10 20,0 -20,10 20" />
</g>
<g id="nose" fill="black" stroke="none">
<ellipse cx="0" cy="0" rx="5" ry="8" />
</g>
<g id="mouse" stroke="black" fill="none">
<polyline points="-30 -3,-27 3,27 3,30 -3" />
</g>
</defs>
<use x="-10" y="-65" href="#ear" />
<use x="10" y="-65" href="#ear" />
<use x="0" y="0" href="#face" />
<use x="-15" y="-15" href="#eye" />
<use x="15" y="-15" href="#eye" />
<use x="0" y="0" href="#ear" transform="translate(-36) scale(1.5,0.8) rotate(90)" />
<use x="0" y="0" href="#ear" transform="translate(36) scale(1.5,0.8) rotate(-90)" />
<use x="0" y="0" href="#nose" />
<use x="0" y="20" href="#mouse" />
</svg>
</div>
<p><button id="btnCode" type="button" value="btn">查看代码</button></p>
<p><pre id="precode"></pre></p>
<script>
btnCode.onclick = () => {
precode.innerText = wrap.innerHTML;
precode.style.display = 'inline-block';
btnCode.disabled = true;
};
</script> 别说,还真挺像的呢,有趣{:4_187:} 原来是设定好元素,然后用use一点点分配这些元素啊。 技法:
(一)viewBox的设置,使得各元素可基于圆心坐标绘制,亦即,令元素在绘制时元素的中心点都基于 {0,0};
(二)用defs标签包裹猫咪头的所有部件,分组(g)一一绘制,脸、眼睛、耳朵(胡须)、鼻子、嘴,都只画一个。其中,脸、眼睛是圆,耳朵(胡须)和嘴是折线、鼻子是椭圆;
(三)实例化(use)defs标签里的各组元素,先画耳朵,改变use标签的x和y就得到左右两只。再画脸,use标签xy都是0。这个次序是为了让脸挡住耳朵的根部线段、从而呈现出齐整的外观。然后画余下的,因为都在脸上布局,顺序不重要。值得注意的是胡须,跟耳朵用一个形状,通过形变(transform)安排它们的位置与尺寸。
红影 发表于 2024-9-20 20:03
原来是设定好元素,然后用use一点点分配这些元素啊。
这个看一下地板楼 #ear这个没看懂,为什么设定后再设定呢? 马黑黑 发表于 2024-9-20 20:05
这个看一下地板楼
知道了,原来胡须用了跟#ear同样名称的元素,我说怎么对耳朵设定了又设定{:4_173:} 完了,我抢楼了,不好意思{:4_173:} 红影 发表于 2024-9-20 20:15
完了,我抢楼了,不好意思
没事的 红影 发表于 2024-9-20 20:10
#ear这个没看懂,为什么设定后再设定呢?
我不明白设定后再设定的意思。这是一个设计好的元素多次使用,每一次使用都要移位,可能还要旋转、拉伸 代码太强大了,它除了可以画出盛茶叶的簸箩,那些是有规律的线条
这样复杂的不规则的图案居然也能一笔一笔画出来。。
叹服一个。。
马黑黑 发表于 2024-9-20 20:05
技法:
(一)viewBox的设置,使得各元素可基于圆心坐标绘制,亦即,令元素在绘制时元素的中心点都基于...
代码画的圆,折线,椭圆这些基本形状,然后组合起来成一只小猫。。生了一只代码猫。
胡须跟耳朵是折线形状。。不说还真不知道。。
创意无限。。{:4_199:}
接下来是不是可以让它胡须位置动一动,眼睛大小瞪一瞪,也变成动画{:4_170:} 马黑黑 发表于 2024-9-20 20:57
没事的
谢谢{:4_190:} 马黑黑 发表于 2024-9-20 20:59
我不明白设定后再设定的意思。这是一个设计好的元素多次使用,每一次使用都要移位,可能还要旋转、拉伸
嗯嗯,看7楼,我看了地板的解说后已经明白了{:4_173:} 这个代码编辑的真的是厉害了{:4_203:} 老师早上好,这代码也能做表情包。这太厉害了!{:4_187:} 红影 发表于 2024-9-20 21:53
嗯嗯,看7楼,我看了地板的解说后已经明白了
厉害 花飞飞 发表于 2024-9-20 21:44
代码画的圆,折线,椭圆这些基本形状,然后组合起来成一只小猫。。生了一只代码猫。
胡须跟耳朵是折线形 ...
也可以单独画的 马黑黑 发表于 2024-9-21 11:46
厉害
我自己去做了一个,一会发出来{:4_173:}
页:
[1]
2