CSS 绘制一只思否猫

网站建设4年前发布
49 0 0

练习 CSS 有一个比较有趣的方式,就是发挥想象,绘制各式各样的图案,比如来绘制一只思否猫?,思否猫,SegmentFault 思否[1]的吉祥物,是一只独一无二、特立独行、热爱自由的(>^ω^<)独角猫,也是社区的首席摸鱼官。,20230306005421563cae0992b3d63e329283a20caa9b2ccf9375479,你也可以提前查看完整代码:CSS sifou cat (codepen.io)[2] 或者 CSS sifou cat (runjs.work)[3]。,其实还是有点小复杂的,不要慌,根据结构,可以拆分成头、眼睛、眉毛、耳朵、鼻子、嘴巴、角这几个部分,一起来看看如何实现的吧,有超级多的 CSS 绘制小技巧~,首先是最外层头的形状,是一个不太规则的椭圆,可以用border-radius实现,直接手写可能会有点不太准确,可以借助这个圆角生成工具进行微调。,https://9elements.github.io/fancy-border-radius[4],2023030600572713375f021d53fc417b0854a9f911d171f8d3ac335,假设 HTML是这样的。,那么,脸的形状可以这样来实现。,效果如下:,2023030600584518bcc5a197f858d4293123dc3b274b9687d2b2482,然后脸上还有两个圆形的花纹,通过两个径向渐变绘制。,对径向渐变不太熟悉的可以参考张鑫旭老师的这篇文章:10个demo示例学会CSS3 radial-gradient径向渐变[5]。,效果如下:,20230306005846455343200f8606aeb2501278dd2fa0e09e6604970,哈哈,是不是有点像小孩头发?,接着来绘制眼睛,可以单独用一个标签,然后用两个伪元素绘制。,眼睛比较简单,一个圆形加一个边框,边框可以用border或者box-shadow生成,然后通过绝对定位定位就行了。,效果如下:,20230306005424f94b541245df071853b44055b811793035ca8d822,现在有点傻乎乎的,需要加点高光,和前面一样,用径向渐变绘制两个白色的圆就行了。,效果如下:,2023030600542585a567417b6b9b01146017dfd65c2cebb723fa600,看,有了高光立刻就不一样了,炯炯有神。,然后给眼睛上加点眉毛,左右两侧的眉毛是三根白色的弧线,弧线可以用border-radius加上border来绘制,只保留一个方向上的border,原理是这样的。,2023030600542515cc35308d716219aca135a491a82e46964100255,由于一个元素只能绘制一条这样的弧线,加上伪元素也只能绘制三条,所以这里用两个标签。,然后借助伪元素,适当旋转调整。,效果如下:,20230306005425c263b7c4057a036c12c382f6bc21ba8bb53eae613,现在有点可爱了吧~,现在加上耳朵,这个相对比较容易,首先通过border-radius生成工具调整为一个弧形三角的形状,如下:,20230306005731580f0e8511aeed850c8111eac3a68de8c001d3635,HTML 中需要添加一个标签。,耳朵的轮廓可以用不同的border绘制,实现如下:,效果如下:,20230306005427739f0042685ec67eb1e753e539255f9d565f35554,现在耳朵里只有一种颜色,没有层次感,可以通过内阴影生成。,这样就得到了层次分明的耳朵。,20230306005734b12785b756d18ff3753605a1c9cd3e31328b11663,右耳朵也是同样的方法,可以用::after来生成,代码就不重复了,效果如下:,20230306005734a58180d21d544adbbcb561ac2a557cb4fe3281385,有了耳朵,这样是不是就有点像一只猫了?,接下来是鼻子,鼻子可以看成是一个半椭圆和一个圆三角,HTML如下,只需一个标签就行了。,半椭圆可以通过border-radius实现,注意鼻子上的高光,圆角三角可以用一个圆角矩形旋转45deg然后配合横向缩放得到,圆角三角绘制过程如下:,20230306005428f381664925cfd35d3af610a938065a533c2414934,具体实现如下:,这样就得到了小巧玲珑的鼻子~,2023030600573533f3a0e83764ac1bd315534caf3900d8b8605a285,嘴巴其实就是几条弧线,和前面画眉毛的方式类似,通过用border-radius加上border来绘制,由于弯曲程度比较大,可以保留两个方向上的border,绘制过程如下:,2023030600542961de57455374e34977b2586475e8ab1df76ff5374,所以只需要一个标签,然后用两个伪元素画出嘴巴的两条弧线。,具体实现如下,注意一下旋转中心轴:,嗯,一只可爱的小猫咪就出现了。,20230306005429963acb829bec347e8a3772d55d455fd6c064cc398,最后,加上思否猫独特的标识,独角。,这部分算是这里面最复杂的一块了,整体外形是一个圆锥形,同样可以借助border-radius生成工具调整出来。,2023030600543066fbe1256d381da44bb777f8d67b6d81a62b14199,然后左侧的高光可以用内阴影模拟,螺纹形状可以用径向渐变绘制,绘制过程如下:,202303060054302648a713969a65ec3d81188e57b4e3b070188a756,角的下面还有三个彩色的小标记(暂时还不知道叫什么)(官方介绍叫代码缩影>代码光波?)。,20230306005430596b976709e0061e6566468f489ac2112dd979392,由于形状相同,只需绘制一个,其他两个可以直接用​box-shadow生成,向两个方向投射。,2023030600573543caae796ac4d4da1cb315daf1214e8b30f4f4223,同样只需要一个标签:,具体实现如下:,完成!,20230306005435c98c2aa68cf6f47e3d58187a21561ed07fb7f3393,完整代码可以查看:CSS sifou cat (codepen.io)[6] 或者 CSS sifou cat (runjs.work)[7],哦对了,本文绘制的效果并不是完全和原图一致,很多地方做了改动,主要是原图偏手绘风格,很多线条都比较随意,尤其是头上的角,思索半天,简化成了本文的效果,下方是官方原图:,20230306005435c6e8698986edd6c591f284b834cab808834d58857,不过,从整体神情上还是有八九分相似的下面总结一下绘制的几个小技巧:,当然实际工作中,我是不推荐绘制这么复杂的图形的,主要是了解 CSS 绘制的相关技巧,碰到一些简单的图标、自适应尺寸、颜色可变的图形就绰绰有余了。

© 版权声明

相关文章