svg+css实现立体表情选择动画效果代码
代码语言:html
所属分类:动画
代码描述:svg+css实现立体表情选择动画效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style>
.feedback {
--normal: #414052;
--normal-shadow: #313140;
--normal-shadow-top: #4c4b60;
--normal-mouth: #2e2e3d;
--normal-eye: #282734;
--active: #f8da69;
--active-shadow: #f4b555;
--active-shadow-top: #fff6d3;
--active-mouth: #f05136;
--active-eye: #313036;
--active-tear: #76b5e7;
--active-shadow-angry: #e94f1d;
--hover: #454456;
--hover-shadow-top: #59586b;
margin: 0;
padding: 0;
list-style: none;
display: flex;
}
.feedback label {
position: relative;
transition: transform 0.3s;
cursor: pointer;
}
.feedback label:not(:last-child) {
margin-right: 20px;
}
.feedback label input {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
outline: none;
border: none;
display: block;
position: absolute;
width: 40px;
height: 40px;
left: 0;
top: 0;
margin: 0;
padding: 0;
border-radius: 50%;
background: var(--sb, var(--normal));
box-shadow: inset 3px -3px 4px var(--sh, var(--normal-shadow)), inset -1px 1px 2px var(--sht, var(--normal-shadow-top));
transition: background 0.4s, box-shadow 0.4s, transform 0.3s;
-webkit-tap-highlight-color: transparent;
}
.feedback label div {
width: 40px;
height: 40px;
position: relative;
transform: perspective(240px) translateZ(4px);
}
.feedback label div svg, .feedback label div:before, .feedback label div:after {
display: block;
position: absolute;
left: var(--l, 9px);
top: var(--t, 13px);
width: var(--w, 8px);
height: var(--h, 1px);
transform: rotate(var(--r, 0deg)) scale(var(--sc, 1)) translateZ(0);
}
.feedback label div svg {
fill: none;
stroke: var(--s);
stroke-width: 1.5px;
stroke-linecap: round;
stroke-linejoin: round;
transition: stroke 0.4s;
}
.feedback label div svg.eye {
--s: var(--e, var(--normal-eye));
--t: 17px;
--w: 7px;
--h: 4px;
}
.feedback label div svg.eye.right {
--l: 23px;
}
.feedback label div svg.mouth {
--s: var(--m, var(--normal-mouth));
--l: 11px;
--t: 23px;
--w: 18px;
--h: 7px;
}
.feedback label div:before, .feedback label div:after {
content: "";
z-index: var(--zi, 1);
border-radius: var(--br, 1px);
background: var(--b, var(--e, var(--normal-eye)));
transition: background 0.4s;
}
.feedback label.angry {
--step-1-rx: -24deg;
--step-1-ry: 20deg;
--step-2-rx: -24deg;
--step-2-ry: -20deg;
}
.feedback label.angry div:before {
--r: 20deg;
}
.feedback label.angry div:after {
--l: 23px;
--r: -20deg;
}
.feedback label.angry div svg.eye {
stroke-dasharray: 4.55;
stroke-dashoffset: 8.15;
}
.feedback label.angry input:checked {
-webkit-animation: angry 1s linear;
animation: angry 1s linear;
}
.feedback label.angry input:checked + div:before {
--middle-y: -2px;
--middle-r: 22deg;
-webkit-animation: toggle 0.8s linear forwards;
animation: toggle 0.8s linear forwards;
}
.feedback label.angry input:checked + div:after {
--middle-y: 1px;
--middle-r: -18deg;
-webkit-animation: toggle 0.8s linear forwards;
animation: toggle 0.8s linear forwards;
}
.feedback label.sad {
--step-1-rx: 20deg;
--step-1-ry: -12deg;
--step-2-rx: -18deg;
--step-2-ry: 14deg;
}
.feedback label.sad div:before, .feedback label.sad div:after {
--b: var(--active-tear);
--sc: 0;
--w: 5px;
--h: 5px;
--t: 15px;
--br: 50%;
}
.feedback label.sad div:after {
--l: 25px;
}
.feedback label.sad div svg.eye {
--t: 16px;
}
.feedback label.sad div svg.mouth {
--t: 24px;
stroke-dasharray: 9.5;
stroke-dashoffset: 33.25;
}
.feedback label.sad input:checked + div:before, .feedback label.sad input:checked + div:after {
-webkit-animation: tear 0.6s linear forwards;
animation: tear 0.6s linear forwards;
}
.feedback label.ok {
--step-1-rx: 4deg;
--step-1-ry: -22deg;
--step-1-rz: 6deg.........完整代码请登录后点击上方下载按钮下载查看
网友评论0