前端每日实战:132# 视频演示如何用纯 CSS 创作一只思考的手
效果预览
按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。
https://codepen.io/comehope/pen/WgdVyx/
可交互视频
此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。
请用 chrome, safari, edge 打开观看。
https://scrimba.com/p/pEgDAM/c23zLuN
源代码下载
每日前端实战系列的全部源代码请从 github 下载:
https://github.com/comehope/front-end-daily-challenges
代码解读
定义 dom,容器中的 5 个 .finger
元素代表 5 根手指,.thumb
元素代表大拇指,.palm
元素代表手掌:
<div class="hand">
<span class="finger thumb"></span>
<span class="finger"></span>
<span class="finger"></span>
<span class="finger"></span>
<span class="finger"></span>
<span class="palm"></span>
</div>
居中显示:
body {
margin: 0;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background: radial-gradient(white, lightcyan);
}
定义容器尺寸,其中 outline
属性是辅助线:
.hand {
width: 16em;
height: 8em;
font-size: 10px;
outline: 1px dashed black;
}
画出手掌:
.hand {
position: relative;
color: darksalmon;
}
.palm {
position: absolute;
width: 8em;
height: 6em;
background-color: currentColor;
border-radius: 1em 4em;
right: 0;
}
画出大拇指的轮廓:
.thumb {
position: absolute;
width: 9.6em;
height: 3.2em;
background-color: currentColor;
border-radius: 3em 2em 2em 1em;
right: 0;
bottom: 1em;
transform-origin: calc(100% - 2em) 2em;
transform: rotate(-20deg);
border-bottom: 0.2em solid rgba(0, 0, 0, 0.1);
border-left: 0.2em solid rgba(0, 0, 0, 0.1);
}
画出大拇指上的指甲:
.thumb::before {
content: '';
position: absolute;
width: 1.9em;
height: 1.9em;
background-color: rgba(255, 255, 255, 0.3);
border-radius: 60% 10% 10% 30%;
bottom: -0.3em;
left: 0.5em;
border-right: 0.1em solid rgba(0, 0, 0, 0.1);
}
画出食指靠近手掌的后半部分:
.finger:not(:first-child) {
position: absolute;
width: 6.4em;
height: 3.5em;
background-color: currentColor;
right: 5.2em;
bottom: 4em;
transform-origin: 100% 2em;
transform: rotate(10deg);
}
画出食指的前半部分:
.finger:not(:first-child)::before {
content: '';
position: absolute;
width: 9em;
height: 3em;
background-color: currentColor;
right: 4.2em;
top: 0.2em;
border-radius: 2em;
transform-origin: calc(100% - 2em) 2em;
transform: rotate(-60deg);
}
为除大拇指以外其他 4 根手指设置下标变量,从食指到小指逐渐缩小并且颜色加深:
.finger:not(:first-child) {
--scale: calc(1 - (5 - var(--n)) * 0.2);
transform: rotate(10deg) scale(var(--scale));
filter: brightness(calc(100% - (5 - var(--n)) * 10%));
}
.finger:nth-child(2) { --n: 2; }
.finger:nth-child(3) { --n: 3; }
.finger:nth-child(4) { --n: 4; }
.finger:nth-child(5) { --n: 5; }
用伪元素画出手的阴影:
.hand::before {
content: '';
position: absolute;
width: 14em;
height: 4.5em;
background-color: black;
border-radius: 4em 1em;
top: 4em;
filter: blur(1em) opacity(0.3);
}
增加手指敲击桌面的动画效果:
.finger:not(:first-child) {
animation: tap-upper 1.2s ease-in-out infinite;
animation-delay: calc((var(--n) - 2) * 0.1s);
}
@keyframes tap-upper {
0%, 50%, 100% {
transform: rotate(10deg) scale(var(--scale));
}
40% {
transform: rotate(50deg) scale(var(--scale));
}
}
最后,不要忘记删掉辅助线。
大功告成!
前端每日实战:132# 视频演示如何用纯 CSS 创作一只思考的手的更多相关文章
- 前端每日实战:98# 视频演示如何用纯 CSS 创作一只愤怒小鸟中的绿猪
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/VBGWqX 可交互视频 此视频是可 ...
- 前端每日实战:124# 视频演示如何用纯 CSS 创作一只纸鹤
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/xagoYb 可交互视频 此视频是可 ...
- 前端每日实战:103# 视频演示如何用纯 CSS 创作一只监视眼
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/GBzLdy 可交互视频 此视频是可 ...
- 前端每日实战:58# 视频演示如何用纯 CSS 创作一只卡通鹦鹉
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/vrRmWy 可交互视频 此视频是可 ...
- 前端每日实战:73# 视频演示如何用纯 CSS 创作一只卡通狐狸
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/OEKZed 可交互视频 此视频是可 ...
- 前端每日实战:111# 视频演示如何用纯 CSS 创作一只艺术的鸭子
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/aaoveW 可交互视频 此视频是可 ...
- 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/VdOKQG 可交互视频 此视频是可 ...
- 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/ZRjGGy 可交互视频 此视频是可 ...
- 前端每日实战:62# 视频演示如何用纯 CSS 创作一只蒸锅
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/YvOzNy 可交互视频 此视频是可 ...
随机推荐
- LootCode-链表排序-Java
链表排序 0.来源 来源:力扣(LeetCode) 题目链接:https://leetcode-cn.com/problems/sort-list 1.题目描述 在 O(n log n) 时间复杂度和 ...
- [LC] 5. Longest Palindromic Substring
Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...
- [2015普及组-D]推销员 思维que
题:https://www.cometoj.com/problem/0221 #include<iostream> #include<cstring> #include< ...
- springboot学习笔记:3.配置文件使用概要
Spring Boot允许外化(externalize)你的配置,这样你能够在不同的环境下使用相同的代码. 你可以使用properties文件,YAML文件,环境变量和命令行参数来外化配置.使用@Va ...
- C++中stoi函数
作用: 将 n 进制的字符串转化为十进制 头文件: #include <string> 用法: stoi(字符串,起始位置,n进制),将 n 进制的字符串转化为十进制 示例: stoi(s ...
- [LC] 54. Spiral Matrix
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...
- cashier|gasoline|reservoir
N-COUNT 出纳(员);收银员A cashier is a person who customers pay money to or get money from in places such a ...
- GUI-猜字游戏
# 设计思想先定义输入,输入,然后设计逻辑 # GUI from tkinter # 逻辑层 # 设计GUI(用户界面) from tkinter import * import tkinter.si ...
- python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
人生苦短,我用python!为什么很多人喜欢用python,因为包多呀,各种调包.但是调包有的时候也调的闹心,因为安装包不是失败就是很慢,很影响自己的工作进度,这里给出一个pip快速安装工具包的办法, ...
- 原创:CentOS 环境中 Zabbix 3.4 的安装部署实践
IT管理工作中,如果没有对服务器.网络设备.服务.进程.应用等的监控,往往是用户发送问题报告后才知道出了问题.事后救火显得被动,不能从容面对问题. 才有了部署一套网络监控系统的想法,机缘巧合下结识了Z ...