一个可爱卡比兽的HTML+CSS源码

使用纯 CSS 技巧,如 CSS 变量、clip-path、border-radius,创建一个可爱卡比兽的详细教程。
直达下载
回到上一页
clickgpt_line.png_noView
介绍

今天呢,我看到了一段非常有意思的代码,是一段用 HTML 和 CSS 实现的卡比兽形象,不得不说,看了之后简直让我有种“前端还能这么玩”的感叹。

【1】

作为一名前端开发人员,我们日常工作中用到 CSS 的地方大部分是布局、样式微调之类的操作,想不到还能用纯 CSS 搞出一个可爱的卡比兽!所以,今天就带大家一起来分析一下这段代码,看看它是如何用纯 CSS 实现这个效果的。

首先要说的就是,这段代码的实现方式主要依赖于 CSS 中的 box-sizingpositionclip-path 等属性,以及一些巧妙的边框和颜色的配合。核心思想其实就是通过不同的 CSS 样式组合,来把一个个简单的形状变成复杂的卡比兽形象。

1. CSS 变量的应用

一开始代码用了很多 CSS 变量,这是个不错的做法:

    
:root {
    --size: 60;
    --unit: calc((var(--size) / 300) * 1vmin);
    --belly: #f1debb;
    --dark-belly: #b59c78;
    --body: #355a50;
    --dark-body: #162c37;
    --foot: #965b3c;
    --claws: #fafafa;
}

这些变量让代码看起来更加整洁,同时便于维护。特别是 --unit 这个变量,它根据 --size 进行了一次动态计算,用于生成整个卡比兽形状的相对尺寸。这种方法使得你可以通过修改一个 --size 变量来轻松调整整个卡比兽的大小,非常方便。

2. 卡比兽身体的实现

卡比兽的身体其实是用一个带有边框的 div 来实现的:

    
.snorlax__body {
    border-radius: 50% 45% 50% 50%/68% 50% 28% 30%;
    height: 74%;
    width: 79%;
    border: calc(2 * var(--unit)) solid #000;
    background: var(--body);
    overflow: hidden;
    top: 60%;
    left: 47%;
    transform: translate(-50%, -50%);
}

这里的重点是 border-radius 属性。通过给 div 施加不对称的圆角半径,就能让这个 div 看起来不是一个简单的圆,而是有点像卡比兽那种圆滚滚的身体形状。另外,这里还用了 transform: translate(-50%, -50%),这招是用来让身体居中显示的,是前端开发中常见的技巧。

再说说这个 overflow: hidden;,这是为了确保身体内部的内容(比如肚子、手臂等)不会溢出到外面去,保证图形的完整性。

3. 头部和耳朵

卡比兽的头部和耳朵其实也是用 div 加边框和圆角做的,代码大致如下:

    
.snorlax__head-outline {
    background: var(--body);
    height: 100%;
    width: 100%;
    border: calc(2 * var(--unit)) solid #000;
    border-radius: 75% 75% 25% 25%/110% 110% 0% 0%;
    overflow: hidden;
}

这里的 border-radius 又一次展现了它的强大能力,这里定义了一个更为复杂的不对称圆角,成功地塑造了卡比兽那标志性的头部轮廓。

耳朵的实现也很有意思,采用了 clip-path 这个神奇的 CSS 属性:

    
.snorlax__ear {
    height: 64%;
    border: calc(2 * var(--unit)) solid #000;
    background: var(--body);
    top: -14%;
    width: 35%;
    position: absolute;
    border-radius: 15% 85% 0 10%/20% 100% 0 80%;
    clip-path: polygon(0 0, 100% 0, 100% 18%, 0 90%);
}

clip-path 用于裁剪元素,这里用它来切出耳朵的形状,结合不对称的 border-radius,让卡比兽的耳朵看起来非常生动。这也是前端开发中一个非常强大的工具,它能让我们不依赖图像素材,只通过代码就实现各种复杂形状。

4. 肚子的细节

卡比兽的肚子部分使用了多个层次来模拟出阴影效果和不同的色块:

    
.snorlax__belly-segment--one {
    height: 83%;
    width: 100%;
    bottom: 0%;
    left: 0%;
    background: var(--belly);
    transform-origin: 0 100%;
    transform: translate(6.5%, 13%) rotate(-20deg);
    border-radius: 40% 55% 0 17%/60% 100% 0% 40%;
}

通过 border-radiusclip-path,卡比兽的肚子被分成了不同的颜色区域,营造出一种立体感。transform 这个属性在这里被用来旋转和移动元素,制造出卡比兽那胖乎乎的肚皮。

5. 手臂和爪子

卡比兽的手臂和爪子部分是动画的重点,它们不仅要看起来可爱,还需要摇摆动画。这部分的代码使用了 @keyframes 来实现动画效果:

    
@keyframes wave {
    0%, 100% {
        transform: rotate(0deg);
    }
    50% {
        transform: rotate(-100deg);
    }
}

.snorlax__arm-wrapper {
    animation: wave 6s infinite ease;
    height: 100%;
    width: 100%;
    transform-origin: 56% 41%;
}

@keyframes 定义了一个简单的动画,从 0 度到 -100 度再回到 0 度,让卡比兽的手臂在页面中摆动,给人一种活力十足的感觉。

6. 脚部的细节

最后来说说卡比兽的脚。脚部的细节部分特别讲究,通过 clip-path 裁剪出脚趾形状,结合 border-radius 和阴影,成功模拟出了卡比兽脚的样子:

    
.snorlax__foot-claw {
    bottom: 0;
    width: 15%;
    height: 9%;
    background: #000;
    clip-path: polygon(0 0, 100% 0, 50% 100%);
}

polygonclip-path 的一种形状定义方法,可以让我们通过一系列点来画出复杂的形状。在这里,脚趾就是这么画出来的,细节十足。

这个效果最主要的技术难点在于如何利用 CSS 属性来模拟复杂的图形和动画效果。特别是 clip-pathborder-radius 的运用,极大地提高了可玩性。

另外,代码还使用了 CSS 变量来统一管理样式,比如颜色、大小等,简化了修改和维护的难度。这种方式不仅可以让代码更加灵活,还能大大减少重复劳动。

通过这些技巧,我们可以实现更加复杂且精细的前端效果,而不需要依赖图像资源。对于前端开发人员来说,这种思路非常值得学习和借鉴。

编程学习
编程学习 免费领取编程学习资料 进编程学习交流群
订阅号
视频号
公众号 关注公众号,回复关键字java领取大厂最新面试题
×
编程学习
免费领取编程学习资料 进编程学习交流群