html 怎么让div和div中svg的高度一样_用SVG教你画宇智波鼬的万花筒写轮眼

不知道大家有没有看过火影忍者这部动漫。相信即使没有看过的小伙伴们也都听说过宇智波一族的写轮眼。在动漫中相比拥有主角光环但是脑回路奇葩的“二柱子”,我更欣赏宇智波鼬。

6c612f99376f8930515dd6680d69abea.png

如果说火影中奈良鹿丸是战术大师,那鼬一定就是最强预言家,他的大局观在岸本笔下体现的淋漓尽致:自己背上灭族叛忍的骂名,孤身潜入晓组织暗中保护村子,为的就是给弟弟佐助铺好了一条复兴家族、保护村子的英雄之路,只可惜“二柱子”没脑子。为了让佐助开启万花筒写轮眼,不惜死在弟弟手下,在自己死前将自己的天照留给佐助,将止水的别天神留给鸣人,忍界大战击败兜这些都为村子甚至是忍界作出了巨大贡献。

05459c4455204f5484fb35cbc409a6c3.png

岸本用“忍者,是在黑暗中支撑和平的无名者”来形容忍者,正如鼬即使背上叛忍骂名后仍然说自己是木叶村忍者的宇智波鼬,所做的一切也都是为了保护村子。

dff82211cf8354e6ae0b9c47befa1f58.png

说的有点多了接下来我们就看一下鼬神的万花筒写轮眼如何用代码来画。

首先我们先了解一下今天主要用到的技术:SVG

SVG 意为可缩放矢量图形(Scalable Vector Graphics)

何为矢量图,也就是无论如何放大或缩小都不会影响图片的质量也就是俗称的失真。

先说一下SVG的基本用法。相比UI设计师使用专业软件设计后生成的SVG图片不同,我们这里完全是通过代码来实现的。

构造:SVG图片顾名思义文件以.svg拓展名结尾。文件内容由标签括起来。

"http://www.w3.org/2000/svg" xmlns:xlink=svg>

这样就定义了一个svg的文件,就如同是html文件的html标签一样

然后我们设置一下这个图片文件的大小(这里说的大小只是说在编辑时展示的默认大小,你依然可以通过画布放大或者比例放大的方式改变图片的大小而不失真)

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="800" height="800">svg>

然后我们先看一下鼬神的万花图写轮眼是什么样子的

0f3b30ade473b94bc43b7eb47b3529fb.png

这个图给我我是怎么分析的呢,首先他有两个圆(或者说圆环)组成,然后由一个三等分的不规则图案填充在里面,中间又是一个空心的圆,不规则图案和外面的两个圆环都是黑色背景,其他背景为暗红色。

这样我们就可以开始动手画了

我们先画两个圆

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="800" height="800"><circle cx="400" cy="400" r="280" fill="hsla(356, 100%, 41%, 1)" stroke="black" stroke-width="10">circle><circle cx="400" cy="400" r="200" fill="hsla(356, 100%, 41%, 1)" stroke="black" stroke-width="5">circle>svg>

标签为圆形标签

cx、cy分别为圆心坐标属性

r为半径

fill为填充颜色属性

stroke为线条颜色属性

stroke-width为线条粗细属性

然后我们看一下效果,用浏览器就可以直接打开svg文件调试

ecb82961bc7d81ec845b865b808f1eaf.png

现在眼睛的轮廓有了,下面就是画瞳体的过程了。

瞳体由于是不规则图形所以我们需要用到轨迹标签

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="800" height="800"><defs><g id="xly"><path d="M400 125A 150 150 0 0 0 320 370L 335 375A 70 70 0 0 1 455 355L475 345C 400 330 320 170 400 125" stroke="black"/>g>defs><circle cx="400" cy="400" r="280" fill="hsla(356, 100%, 41%, 1)" stroke="black" stroke-width="10">circle><circle cx="400" cy="400" r="200" fill="hsla(356, 100%, 41%, 1)" stroke="black" stroke-width="5">circle><circle cx="400" cy="400" r="70" fill="hsla(356, 100%, 41%, 1)" stroke="black" stroke-width="5">circle><g id="dou" ><use xlink:href="#xly" />g>svg>

因为这里瞳孔中心是一个小圆所以我们再画一个小圆,然后因为瞳体是由三个等分的图形组合的所以我们用轨迹标签将其中一个瞳体部分画出,效果如下:

9df5f33c78f9d6ea7d6fbf13658f2950.png

这里我简单解释一下一些标签的用法,如果解释的不够详细,如果感兴趣的小伙伴可以自学一下svg的语法。

为轨迹标签,顾名思义就是像我们用笔在纸上随意绘画一样。

d属性为轨迹属性

M为落笔移动点:以画布最坐上放坐标为(0,0)坐标分别向下为y轴正方向向右为x轴正方向,代码中M400 125就相当于我们将落笔点移到了画布坐标为(400,125)

A为圆弧、L为直线、C为贝塞尔曲线(这里这些专业用法由于篇幅过长下期详细解释一下)

然后我们复制这个部分分别旋转120度、240度即可得到另两部分瞳体。

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="800" height="800"><defs><g id="xly"><path d="M400 125A 150 150 0 0 0 320 370L 335 375A 70 70 0 0 1 455 355L475 345C 400 330 320 170 400 125" stroke="black"/>g>defs><circle cx="400" cy="400" r="280" fill="hsla(356, 100%, 41%, 1)" stroke="black" stroke-width="10">circle><circle cx="400" cy="400" r="200" fill="hsla(356, 100%, 41%, 1)" stroke="black" stroke-width="5">circle><circle cx="400" cy="400" r="70" fill="hsla(356, 100%, 41%, 1)" stroke="black" stroke-width="5">circle><g id="dou" ><use xlink:href="#xly" /><use xlink:href="#xly" transform="translate(947,251) rotate(120)" /><use xlink:href="#xly" transform="translate(255,945) rotate(240)" />g>svg>

看一下效果:

32e047dd50f1e6165d7a219cb9224b2e.png

这样整个眼睛就绘制完成了,是不是很简单。

如果到了这里你就觉得结束了那就错了,写轮眼不动你怎么能中幻术呢?

接下来我们让他动起来

在眼睛分组标签中添加动画标签属性,如下面的代码:

    attributeType="XML"    attributeName="transform"    begin="0s"    type="rotate"    from="0 400 400"    to="360 400 400"    dur="3s"    repeatCount="indefinite"    >animateTransform>

我们看一下效果

这样整个宇智波鼬万花筒写轮眼的svg就全部完成了。

通过这种方式你可以绘制很多较为简单的矢量图

例如这些:

4ad551d85523192bc5f81eba5f9583cf.png

cfca6b95f5396676bbf8cc8046b6478d.png

d338077e0deaaac24e15c930649c9298.png

234c25e9f7ca1d6535d5600bbc61b74d.png

e75c8b30ccc69a52430d9445490cc0ea.png

还有很多很多就要看你的想象力和创造力了。

怎么样是不是很有趣,没有用任何PS工具和画图板工具完全用代码来绘制的图片而且还是矢量图还能动。

你也快来动手用代码绘制一个你自己喜欢的SVG吧!

扫码关注或打开微信公众号搜索“二进制艺术”!感谢订阅!

f8d6a05aab8b23bb5dcf71e0e2321cfc.png

【原创,转载请注明来源,作者】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用以下 HTML、CSS 和 SVG 代码来两个长方形间用箭头线连接: ```html <div style="position: relative; width: 200px; height: 100px;"> <!-- 第一个长方形 --> <svg viewBox="0 0 100 100" style="position: absolute; left: 20px; top: 20px;"> <rect x="0" y="0" width="100" height="100" fill="#f00" /> </svg> <!-- 第二个长方形 --> <svg viewBox="0 0 100 100" style="position: absolute; left: 120px; top: 20px;"> <rect x="0" y="0" width="100" height="100" fill="#0f0" /> </svg> <!-- 箭头线 --> <svg viewBox="0 0 200 100" style="position: absolute; left: 0; top: 0;"> <line x1="80" y1="50" x2="120" y2="50" stroke="#00f" stroke-width="2" marker-end="url(#arrow)" /> <!-- 定义箭头 --> <defs> <marker id="arrow" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto" markerUnits="strokeWidth"> <path d="M0,0 L0,10 L8,5 z" fill="#00f" /> </marker> </defs> </svg> </div> ``` 其,`div` 元素用来创建包裹 SVG 元素的容器,`position: relative;` 属性用来指定容器的定位方式,`width` 和 `height` 属性用来指定容器的大小。每个 SVG 元素用来创建长方形或箭头线,`viewBox` 属性用来指定 SVG 的视口大小和位置,`style` 属性用来指定 SVG 元素的定位方式和位置。箭头线的 SVG 元素需要放在最后面,以便覆盖前面的 SVG 元素。 需要注意的是,SVG 元素默认是 inline 元素,无法设置宽度和高度,需要用 CSS 的 `position` 属性和 `left`、`top` 属性来控制位置和大小。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值