当前位置: 首页 > news >正文

前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶

图片描述

效果预览

按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。

https://codepen.io/comehope/pen/ZRjGGy

可交互视频

此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。

请用 chrome, safari, edge 打开观看。

https://scrimba.com/p/pEgDAM/cLQPgSE

源代码下载

每日前端实战系列的全部源代码请从 github 下载:

https://github.com/comehope/front-end-daily-challenges

代码解读

定义 dom,容器中包含 1 个元素表示壶体,其中再包含 1 个元素表示壶把手:

<div class="container">
      <div class="pot">
          <div class="handle"></div>
      </div>
</div>

居中显示:

body {
    margin: 0;
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background: linear-gradient(to right bottom, silver, dimgray);
}

重定义盒模型:

*,
*::before,
*::after {
    box-sizing: border-box;
}

定义容器尺寸:

.container {
    width: 150px;
    height: 150px;
    background-color: snow;
    border-radius: 50%;
}

画出壶的最大的部分:

.container {
    display: flex;
    align-items: center;
    justify-content: center;
}

.pot {
    width: 85px;
    height: 85px;
    background-color: deepskyblue;
    border-radius: 50%;
}

用伪元素画出壶的上半部分:

.pot {
    position: relative;
}

.pot::before {
    content: '';
    position: absolute;
    width: 85px;
    height: 43px;
    background-color: hotpink;
    border-radius: 43px 43px 0 0;
}

用伪元素画出壶嘴:

.pot::after {
    content: '';
    position: absolute;
    width: 43px;
    height: 10px;
    background-color: hotpink;
    left: 21px;
    top: -3px;
}

画出把手横向的部分:

.pot .handle {
    width: 83px;
    height: 7px;
    background-color: black;
    border-radius: 7px;
    position: absolute;
    left: 13px;
    top: 12px;
}

用伪元素画出把手竖向的部分:

.pot .handle::before {
    content: '';
    position: absolute;
    width: 7px;
    height: 50px;
    background-color: black;
    border-radius: 7px;
    left: calc(85px - 7px);
}

接下来润色一下。

给壶加上阴影:

.pot {
    border-right: 5px solid steelblue;
}

.pot::before {
    border-right: 5px solid palevioletred;
}

再用伪元素给壶加上光影:

.container::after {
    content: '';
    position: absolute;
    width: 70px;
    height: 70px;
    border: 3px solid transparent;
    border-left-color: white;
    border-radius: 50%;
    left: 40px;
    top: 40px;
    transform: rotate(-10deg);
}

最后,加上动画:

.container {
    animation: pouring 3s linear infinite alternate;
}

@keyframes pouring {
    0%, 25% {
        transform: rotate(0deg);
    }

    75%, 100% {
        transform: rotate(-45deg);
    }
}

大功告成!

相关文章:

  • Mantis 1.3.13报表显示问题
  • SQL Server 与 DSN
  • 关于怎么在手机端实现一个拖拽的操作
  • 每日笔记之2018-06-26之小总结
  • emoji web端处理
  • libvirt-qemu-虚拟机设备热插拔
  • 【刷算法】从上往下打印二叉树
  • 温故之.NET 中的并行并发概念解析
  • 命名实体识别从数据集到算法实现
  • 过滤器的功能实现
  • ps:建立规则选区
  • 巴克莱银行聚焦于业务产出的做法
  • Scala学习笔记(1)
  • Ubuntu 下解压tar.xz方法
  • Java深究之String、StringBuffer、StringBuilder的区别
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 〔开发系列〕一次关于小程序开发的深度总结
  • ES6系统学习----从Apollo Client看解构赋值
  • github指令
  • JAVA多线程机制解析-volatilesynchronized
  • Objective-C 中关联引用的概念
  • ReactNative开发常用的三方模块
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • SpringCloud集成分布式事务LCN (一)
  • 官方解决所有 npm 全局安装权限问题
  • 聊聊redis的数据结构的应用
  • 前端存储 - localStorage
  • 设计模式 开闭原则
  • 正则表达式
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (33)STM32——485实验笔记
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (附源码)ssm码农论坛 毕业设计 231126
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (一)WLAN定义和基本架构转
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)visual stdio 书签功能介绍
  • (转)创业的注意事项
  • .bashrc在哪里,alias妙用
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET 的程序集加载上下文
  • .Net 知识杂记
  • .NET大文件上传知识整理
  • .NET开发人员必知的八个网站
  • ??如何把JavaScript脚本中的参数传到java代码段中