使用 HTML 和 CSS 绘制卡哇伊鲨鱼和海洋生物

boyanx4个月前技术教程25

这个过程是这样进行的(或多或少):

首先,我创建了一个用作画布的容器(绘画画布而不是 HTML <canvas>),并通过添加适用于该容器内所有元素的样式来设置舞台。

然后我为身体添加了一个椭圆,很简单:

.body {
  width: 80%;
  height: 60%;
  background: #369;
  border-radius: 50%;
  top: 50%;
  left: 0;
  transform: translateY(-50%);
}

稍后我会更新其中一些值以使主体具有不同的颜色。

下一步是在身体中添加元素:眼睛、嘴巴、脸颊、鳃、尾巴、鳍……

为了让它看起来卡哇伊,我需要大而圆的眼睛,眼睛里闪闪发光,嘴巴之间有一条半圆形的线。 此外,眼睛下方还有一些椭圆形的粉红色脸颊。

.eye {
  width: 8%;
  aspect-ratio: 1;
  border-radius: 50%;
  top: 45%;
  left: 4%;
  background: radial-gradient(circle at 32% 32%, white 14%, black 0);
}

.eye + .eye {
  left: 35%;
}

.mouth {
  border-radius: 50%;
  border: 0.5vmin solid #0000;
  border-bottom: 0.75vmin solid #000;
  border-left: 0.75vmin solid #000;
  width: 10%;
  aspect-ratio: 1;
  top: 50%;
  left: 18%;
  transform: rotate(-45deg);
}

.cheek {
  width: 10%;
  height: 7%;
  background: #fcc6;
  border-radius: 50%;
  left: 3%;
  top: 57%;
}

.cheek + .cheek {
  left: 34.5%;
}

鳍很简单:一个元素的一侧具有 100% 的边界半径,而其他侧的边界半径为 0。这样,如果具有典型的鱼翅形状。 稍后我也会将这种形状重新用于尾巴和鳍状肢! 改变大小和变换(旋转和倾斜)会使它们不同。

.fin {
  border-radius: 100% 0 0 0;
  background: #369;
  width: 25%;
  height: 35%;
}

最后,我用多个 drop-shadow() 向 body 元素(不是 <body> 标签)添加了一个过滤器,这样鲨鱼周围就会有或多或少一致的边框。

背景也很容易改变。 在其他版中,我只有一种普通的浅绿色。 后来,我添加了一些额外的背景来模拟阳光和从浅色(表面)到深色(海洋深处)的渐变。

添加更多细节

回到绘图,我决定在其中添加一些细节:

底部的阴影

顶部高光部件

脸颊上有些纹理

添加更好的背景

就凭这些小东西,插画收获颇丰。 真正决定成败的是小细节。 这是最终结果:

变化

因为是代码,使用了变量/自定义属性,所以相对容易自定义和转换成不同的版本。 这些是绘图的一些变体,代码更改很少。

一条大白鲨(同一条鲨鱼,但是使用灰色):

蓝鲸(更大,没有鳍,身体和背景不同):

独角鲸(颜色较浅,无鳍和长牙):

我喜欢它们的样子,所以我把它们拿给我的孩子们看,他们看了一秒钟屏幕,然后说:“嗯! 它们看起来像鱼……。” 孩子们有办法让我们保持谦虚。

标签: html转canvas

相关文章

利用JavaScript在canvas中画一棵树

看到这个网页中在canvas里绘制一棵树,感到很有趣,于是仿照他的源代码,同样也利用JavaScript生成了一棵树。在程序中需要两个对象Branch, BranchCollection。Branch...

好程序员:前端JavaScript全解析——Canvas绘制形状(下)

接着上一篇,好程序员继续讲解前端技术文章!绘制椭圆●canvas 也提供了绘制椭圆的 API●语法 : 工具箱.ellipse( x, y, radiusX, radiusY, rotation, s...

一个解决支持HTML/CSS/JS网页转PDF(高质量)的终极解决方案

(坑给你踩完,可行的结果给你探明,让你的方向明确,存在的小问题自行解决)1、不要考虑前端转pdf了,我已经帮您爬过坑了。前端转PDF,本质就是把网页通过canvas转成图片,图片转成PDF。坑1:PD...

js 调用本地摄像头通过canvas进行截图

如何通过js调用本地摄像头呢?获取后如何对视频进行截图呢?在这里跟大家做一个简易的Demo来实现以上几个功能。涉及到的知识点navigator.getUserMedia 可以通过该函数来打开摄像头获得...

安利一款基于canvas/svg的富文本编辑器-支持在线导出PDF、DOCX

Canvas-Editor是一个基于Canvas和SVG的富文本编辑器,它提供了丰富的文本编辑功能,并支持通过Canvas和SVG进行渲染。以下是对Canvas-Editor的详细介绍:一、主要特点高...

将你的 Virtual dom 渲染成 Canvas

来源:https://zhuanlan.zhihu.com/p/39886896项目概述一个基于 vue 的 virtual dom 插件库,按照Vue render 函数的写法,直接将 Vue 生成...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。