代码github仓库:https://github.com/shuirongsh...

应用形式

  1. 看名称效果图,有没有和本人想要的成果相似的
  2. 有的话,复制粘贴代码应用
  3. 也能够本人批改一下
  4. css成果并不是特地难,只是有时候咱们可能想不到
  5. 笔者闲暇工夫,会持续更新的哦,点赞关注不迷路^_^

留神:一些代码思路,笔者写在代码正文中去了

1_鼠标悬浮文字暗影跳动

效果图

代码

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <style>        h1 {            width: 80px;            color: cornflowerblue;        }        h1:hover {            animation: animate 0.5s linear infinite;        }        @keyframes animate {            0%,            25% {                text-shadow: 2px 2px 2px #ff6384;            }            50% {                text-shadow: 2px -2px 2px #ff6384;            }            75% {                text-shadow: -2px 2px 2px #ff6384;            }            100% {                text-shadow: -2px -2px 2px #ff6384;            }        }    </style></head><body>    <h1>hello</h1>    <!--         一说到暗影,咱们经常就会想到盒子的暗影,box-shadow。实际上css3另外提供了文字暗影text-shadow        text-shadow对应属性 text-shadow: h-shadow v-shadow blur color;                                         程度暗影 垂直暗影 含糊范畴 色彩值        本例中,当鼠标悬浮的时候,给文字加上动画。四个方向顺次都呈现文字暗影,就相似跳动的成果了    --></body></html>

2_鼠标悬浮文字底部呈现下划线并变宽

效果图

代码

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <style>        .box {            width: 160px;            /* 外盒子绝对定位,便于伪元素相对定位(使下划线在文字的最底下) */            position: relative;        }        h1::before {            content: '';            height: 4px;            background: red;            /* 伪元素默认款式 display: inline;所以须要转成inline-block宽高才会失效 */            display: inline-block;            /* 通过定位使下划线在最低层 */            position: absolute;            bottom: -6px;            width: 0;            /* 加上一个过渡成果,使之丝滑一些 */            transition: width 0.36s;        }        h1:hover::before {            /* 悬浮时候,让下划线伪元素宽度变成100%即可呈现成果 */            width: 100%;        }    </style></head><body>    <div class="box">        <h1>悬浮下划线</h1>    </div>    <!--         思路:            1. 应用伪元素创立下划线            2. 通过定位让下划线的地位在文字的底部            3. 初始下划线宽度为0            4. 悬浮时更改为100%即呈现成果     --></body></html>

3_文字色彩突变流光成果

效果图

代码

<!DOCTYPE html><html><head>    <meta charset="UTF-8">    <title></title>    <style>        /* 加上 -webkit- 留神兼容 */        h1 {            background: -webkit-linear-gradient(135deg,                    #0eaf6d,                    #ff6ac6 25%,                    #147b96 50%,                    #e6d205 55%,                    #2cc4e0 60%,                    #8b2ce0 80%,                    #ff6384 95%,                    #08dfb4);            /* 文字色彩填充设置为通明 */            -webkit-text-fill-color: transparent;            /* 背景裁剪,即让文字应用背景色 */            -webkit-background-clip: text;            /* 背景图放大一下,看着柔和一些 */            -webkit-background-size: 200% 100%;            /* 利用动画flowCss 12秒速度 有限循环 线性匀速动画*/            -webkit-animation: flowCss 12s infinite linear;        }        @-webkit-keyframes flowCss {            0% {                /* 挪动背景地位 */                background-position: 0 0;            }            100% {                background-position: -400% 0;            }        }        h1:hover {            -webkit-animation: flowCss 4s infinite linear;        }    </style></head><body>    <h1>文字色彩突变流光成果</h1>    <!-- 思路就是 文字色彩填充为通明、背景裁剪让文字应用背景色、而后设置一个突变背景色    再放大一下背景,最初通过动画挪动背景地位,于是成果就进去了 --></body></html>

4_打字机成果

效果图

代码

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <style>        h1 {            /* 本例12个文字(加标点符号);有多少个文字,width就是多少个em */            width: 12em;            /* 加上两个动画,一个是打字动画,应用steps让字一个一个的呈现,             留神step和字数保持一致,光标动画也是同理,*/            animation: typingWords 5s steps(12) infinite, cursor 0.5s steps(1) infinite;            /* 要设置不容许换行,且溢出暗藏 */            white-space: nowrap;            overflow: hidden;            /* 应用左边框作为打印的指针光标 */            border-right: 1px solid #000;        }        @keyframes typingWords {            0% {                width: 0;            }        }        @keyframes cursor {            50% {                border-color: transparent;            }        }    </style></head><body>    <h1>欢迎光临呐,各位访客们。</h1>    <!-- css大佬张鑫旭的实现形式:https://www.zhangxinxu.com/wordpress/2019/01/css-typewriter-effect/ --></body></html>

5_文字左右旋转晃动成果

效果图

代码

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <style>        span {            font-size: 48px;            font-weight: 600;            animation: rotate 0.3s ease infinite;            /* 留神,要开启相对定位哦 */            position: absolute;        }        /* 鼠标悬浮开启动画也能够的        span:hover {            animation: rotate 0.3s ease infinite;        } */        @keyframes rotate {            0% {                transform: rotate(0);            }            20% {                transform: rotate(-2deg);            }            60% {                transform: rotate(0);            }            80% {                transform: rotate(2deg);            }            100% {                transform: rotate(0);            }        }        span:nth-child(2) {            margin-left: 108px;        }        span:nth-child(3) {            margin-left: 216px;        }    </style></head><body>    <span>代码</span>    <span>修仙</span>    <span>之路</span></body></html>

6_圆圈呼吸扩散成果

效果图

代码

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <style>        body {            margin: 120px;        }        .circle-breath {            background: pink;            box-shadow: 0 0 0 0 rgb(204, 73, 152);            height: 36px;            width: 36px;            border-radius: 50%;            animation: donghua 2.4s infinite;        }        @keyframes donghua {            0% {                transform: scale(0.60);                /* 留神rgba中的a的设置 */                box-shadow: 0 0 0 0 rgba(204, 73, 152, 60%);            }            60% {                transform: scale(1);                box-shadow: 0 0 0 36px rgba(204, 73, 152, 0%);            }            100% {                transform: scale(0.60);                box-shadow: 0 0 0 0 rgba(204, 73, 152, 0%);            }        }    </style></head><body>    <div class="circle-breath"></div>    <!--         动画中利用背景色暗影,背景色暗影初始透明度为60%,后续为0        搭配应用scale进行缩放,便能够达到圆圈呼吸扩散成果     --></body></html>

7_音频波纹加载成果

效果图

代码

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <style>        body {            padding: 120px;        }        .music {            width: 175px;            height: 100px;            display: flex;        }        .music span {            width: 6px;            border-radius: 18px;            margin-right: 6px;        }        .music span:nth-child(1) {            /* 工夫递增,参差不齐的成果 */            animation: bar1 2s 0.2s infinite linear;        }        .music span:nth-child(2) {            animation: bar2 2s 0.4s infinite linear;        }        .music span:nth-child(3) {            animation: bar3 2s 0.6s infinite linear;        }        .music span:nth-child(4) {            animation: bar4 2s 0.8s infinite linear;        }        .music span:nth-child(5) {            animation: bar5 2s 1.0s infinite linear;        }        .music span:nth-child(6) {            animation: bar6 2s 1.2s infinite linear;        }        .music span:nth-child(7) {            animation: bar7 2s 1.4s infinite linear;        }        .music span:nth-child(8) {            animation: bar8 2s 1.6s infinite linear;        }        .music span:nth-child(9) {            animation: bar9 2s 1.8s infinite linear;        }        @keyframes bar1 {            0% {                background: #f677b0;                margin-top: 25%;                height: 10%;            }            50% {                background: #f677b0;                height: 100%;                margin-top: 0%;            }            100% {                background: #f677b0;                height: 10%;                margin-top: 25%;            }        }        @keyframes bar2 {            0% {                background: #df7ff2;                margin-top: 25%;                height: 10%;            }            50% {                background: #df7ff2;                height: 100%;                margin-top: 0%;            }            100% {                background: #df7ff2;                height: 10%;                margin-top: 25%;            }        }        @keyframes bar3 {            0% {                background: #8c7ff2;                margin-top: 25%;                height: 10%;            }            50% {                background: #8c7ff2;                height: 100%;                margin-top: 0%;            }            100% {                background: #8c7ff2;                height: 10%;                margin-top: 25%;            }        }        @keyframes bar4 {            0% {                background: #7fd0f2;                margin-top: 25%;                height: 10%;            }            50% {                background: #7fd0f2;                height: 100%;                margin-top: 0%;            }            100% {                background: #7fd0f2;                height: 10%;                margin-top: 25%;            }        }        @keyframes bar5 {            0% {                background: #7ff2d3;                margin-top: 25%;                height: 10%;            }            50% {                background: #7ff2d3;                height: 100%;                margin-top: 0%;            }            100% {                background: #7ff2d3;                height: 10%;                margin-top: 25%;            }        }        @keyframes bar6 {            0% {                background: #7ff2a0;                margin-top: 25%;                height: 10%;            }            50% {                background: #7ff2a0;                height: 100%;                margin-top: 0%;            }            100% {                background: #7ff2a0;                height: 10%;                margin-top: 25%;            }        }        @keyframes bar7 {            0% {                background: #adf27f;                margin-top: 25%;                height: 10%;            }            50% {                background: #adf27f;                height: 100%;                margin-top: 0%;            }            100% {                background: #adf27f;                height: 10%;                margin-top: 25%;            }        }        @keyframes bar8 {            0% {                background: #e7f27f;                margin-top: 25%;                height: 10%;            }            50% {                background: #e7f27f;                height: 100%;                margin-top: 0%;            }            100% {                background: #e7f27f;                height: 10%;                margin-top: 25%;            }        }        @keyframes bar9 {            0% {                background: #ecaa64;                margin-top: 25%;                height: 10%;            }            50% {                background: #ecaa64;                height: 100%;                margin-top: 0%;            }            100% {                background: #ecaa64;                height: 10%;                margin-top: 25%;            }        }    </style></head><body>    <div class="music">        <span></span>        <span></span>        <span></span>        <span></span>        <span></span>        <span></span>        <span></span>        <span></span>        <span></span>    </div>    <!-- 给每一个bar指定margin-top和height的动画的变动    为了成果更好看,让每一个bar的背景色都不一样,便是五彩斑斓了 --></body></html>

8_周围线条盘绕流动成果

效果图

代码

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <style>        body {            padding: 120px;        }        .mainbox {            width: 320px;            height: 320px;            position: relative;            /* 超出暗藏须要加上 */            overflow: hidden;        }        .content {            width: 320px;            height: 320px;            line-height: 320px;            text-align: center;            background-color: #cde;        }        .line {            /* 联合外层元素的绝对定位 */            position: absolute;        }        .line:nth-child(1) {            top: 0;            left: 0;            width: 100%;            height: 3px;            /* 加上突变成果,方可造成拖尾成果 */            background: linear-gradient(90deg, transparent, orange);            animation: animate1 8s linear infinite;        }        /* 别离管制其上下左右的定位间隔,从而造成线条追随成果 */        @keyframes animate1 {            0% {                left: -100%;            }            50%,            100% {                left: 100%;            }        }        .line:nth-child(2) {            top: -100%;            right: 0;            width: 3px;            height: 100%;            background: linear-gradient(180deg, transparent, red);            animation: animate2 8s linear infinite;            /* 留神要加上延时触发动画成果,这样线条才会顺次触发 */            animation-delay: 2s;        }        @keyframes animate2 {            0% {                top: -100%;            }            50%,            100% {                top: 100%;            }        }        .line:nth-child(3) {            bottom: 0;            right: 0;            width: 100%;            background: linear-gradient(270deg, transparent, green);            animation: animate3 8s linear infinite;            animation-delay: 4s;        }        @keyframes animate3 {            0% {                right: -100%;                height: 3px;            }            50%,            100% {                height: 2px;                right: 100%;            }        }        .line:nth-child(4) {            bottom: -100%;            left: 0;            width: 3px;            height: 100%;            background: linear-gradient(360deg, transparent, #3a86ff);            animation: animate4 8s linear infinite;            animation-delay: 6s;        }        @keyframes animate4 {            0% {                bottom: -100%;            }            50%,            100% {                bottom: 100%;            }        }    </style></head><body>    <div class="mainbox">        <span class="line"></span>        <span class="line"></span>        <span class="line"></span>        <span class="line"></span>        <div class="content">线条盘绕</div>    </div></body></html>

9_鼠标悬浮开门关门成果

效果图

代码

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <style>        body {            box-sizing: border-box;            padding: 160px 0 0 240px;        }        /* 门容器款式 */        .doorWrap {            width: 320px;            height: 320px;            border: 1px solid #666;            perspective: 500px;            position: relative;            display: flex;        }        /* 左门右门的共有款式 */        .leftDoor,        .rightDoor {            width: 50%;            height: 100%;            background-color: rgb(194, 37, 37);            transition: 1.2s;            z-index: 2;            display: flex;            justify-content: center;            align-items: center;            border: 1px solid #333;        }        /* 设置旋转元素的基点,右边大门以左侧为基准点旋转 */        .leftDoor {            transform-origin: left;        }        /* 设置旋转元素的基点,左边大门以右侧为基准点旋转 */        .rightDoor {            transform-origin: right;        }        /* 当鼠标悬浮的时候,设置开门的幅度,左门往左侧开 */        .doorWrap:hover .leftDoor {            transform: rotateY(-130deg);        }        /* 右门往右侧开 */        .doorWrap:hover .rightDoor {            transform: rotateY(130deg);        }        /* 内容区的定位层级略微低一些 */        .content {            position: absolute;            z-index: 1;            width: 100%;            height: 100%;            background-color: #abf;            display: flex;            justify-content: center;            align-items: center;        }    </style></head><body>    <div class="doorWrap">        <div class="leftDoor">左门</div>        <div class="rightDoor">右门</div>        <div class="content">欢迎光临,客官里边请...</div>    </div></body></html>

10_吃豆人成果

效果图

代码

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <style>        .pacMan {            display: inline-block;            position: relative;            margin: 120px;        }        /* 应用伪元素创立吃豆人的眼睛 */        .pacMan::before {            content: '';            width: 0.4em;            height: 0.4em;            border-radius: 50%;            background-color: #333;            position: absolute;            top: 6px;            left: 21px;            z-index: 2000;        }        /* mouth1搭配mouth2组成吃豆人张嘴闭嘴的动画 */        .mouth1 {            width: 0;            height: 0;            border: 25px solid #E1B204;            border-radius: 50%;            border-right-color: transparent;            animation: upup .32s 0s infinite;            position: relative;            z-index: 3;        }        @keyframes upup {            0% {                transform: rotate(270deg);            }            50% {                transform: rotate(1turn);            }            100% {                transform: rotate(270deg);            }        }        .mouth2 {            width: 0;            height: 0;            border: 25px solid #E1B204;            border-right-color: transparent;            border-radius: 25px;            margin-top: -50px;            animation: downdown .32s 0s infinite;            position: relative;            z-index: 3;        }        @keyframes downdown {            0% {                transform: rotate(90deg);            }            50% {                transform: rotate(0);            }            100% {                transform: rotate(90deg);            }        }        /* 豆子一直挪动 */        .beanOne {            background-color: #E1B204;            border-radius: 50%;            width: 10px;            height: 10px;            position: absolute;            transform: translateY(-6px);            top: 25px;            left: 100px;            animation: beanAnimation 1s linear .52s infinite;        }        .beanTwo {            background-color: #E1B204;            border-radius: 50%;            width: 10px;            height: 10px;            position: absolute;            transform: translateY(-6px);            top: 25px;            left: 100px;            animation: beanAnimation 1s linear 1.1s infinite;        }        @keyframes beanAnimation {            75% {                opacity: .72;            }            100% {                transform: translate(-100px, -6px);            }        }    </style></head><body>    <div class="pacMan">        <div class="eye"></div>        <div class="mouth1"></div>        <div class="mouth2"></div>        <div class="beanOne"></div>        <div class="beanTwo"></div>    </div></body></html>

11_背景色彩流动成果

效果图

代码

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <style>        .bg {            margin: 60px;            width: 32%;            height: 48vh;            background: linear-gradient(-45deg, #dae, #f66, #3c9, #09f, #66f);            background-size: 200% 200%;            animation: gradient 8s ease infinite;        }        @keyframes gradient {            0% {                background-position: 0 12%;            }            50% {                background-position: 100% 100%;            }            100% {                background-position: 0 12%;            }        }    </style></head><body>    <div class="bg"></div></body></html>

12_小球转圈加载成果

效果图

代码

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <meta http-equiv="X-UA-Compatible" content="ie=edge">    <title>Document</title>    <style>        .wrap {            margin: 120px 0 0 240px;            width: 75px;            height: 75px;            position: relative;            /* transform-origin: 设置的成果搭配边框看,成果更加显著 */            /* border: 1px solid #e9e9e9; */        }        .round {            position: absolute;            width: 13px;            height: 13px;            border-radius: 50%;            background-color: rgb(241, 141, 157);            /* 加上动画成果 */            animation: circleRound 2.8s ease infinite;            /* 设置旋转核心,搭配.wrap的border看 */            transform-origin: 50% 75px;        }        /* 留神z-index层级关系,顺次递加 */        .round:nth-child(1) {            z-index: 7;        }        /* 留神动画延后animation-delay播放,顺次递增 */        /* 至于小圆球则越来越小 */        .round:nth-child(2) {            height: 12px;            width: 12px;            background-color: rgb(199, 136, 185);            animation-delay: .2s;            z-index: 6;        }        .round:nth-child(3) {            height: 11px;            width: 11px;            background-color: rgb(153, 69, 223);            animation-delay: .4s;            z-index: 5;        }        .round:nth-child(4) {            height: 10px;            width: 10px;            background-color: rgb(69, 141, 223);            animation-delay: .6s;            z-index: 4;        }        .round:nth-child(5) {            height: 9px;            width: 9px;            background-color: rgb(69, 223, 203);            animation-delay: .8s;            z-index: 3;        }        .round:nth-child(6) {            height: 8px;            width: 8px;            background-color: rgb(100, 223, 69);            animation-delay: 1s;            z-index: 2;        }        .round:nth-child(7) {            height: 7px;            width: 7px;            background-color: rgb(223, 200, 69);            animation-delay: 1.2s;            z-index: 1;        }        @keyframes circleRound {            to {                transform: rotate(1turn);            }        }    </style></head><body>    <div class="wrap">        <div class="round"></div>        <div class="round"></div>        <div class="round"></div>        <div class="round"></div>        <div class="round"></div>        <div class="round"></div>        <div class="round"></div>    </div></body></html>

13_钟摆成果

效果图

代码

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <meta http-equiv="X-UA-Compatible" content="ie=edge">    <title>Document</title>    <style>        /* 画一条钟摆线条 */        .line {            margin: 24px 0 0 320px;            width: 6px;            height: 320px;            background: #baf;            border-radius: 8px;            /* 钟摆动画周期两秒、匀速运动、有限循环 */            animation: pendulum 3s linear infinite;            /* 旋转以上方两头为核心进行旋转,因为默认是两头核心旋转 */            transform-origin: top;            /* 留神因为钟摆的小球是应用伪元素画的,故这里要加上定位 */            position: relative;        }        /* 应用伪元素画钟摆小球,这样在旋转的时候,小球就统一跟着钟摆线了 */        .line::after {            content: '';            width: 32px;            height: 32px;            border-radius: 50%;            background-color: #faa;            /* 伪元素搭配定位不便调整小球的地位 */            position: absolute;            bottom: 0;            left: -12px;        }        /* 钟摆动画rotate旋转起来 */        @keyframes pendulum {            0% {                transform: rotate(0deg);            }            25% {                transform: rotate(45deg);            }            50% {                transform: rotate(0deg);            }            75% {                transform: rotate(-45deg);            }            100% {                transform: rotate(0deg);            }        }    </style></head><body>    <div class="line"></div></body></html>

14_文字烟雾消散成果

效果图

代码

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <style>        /* 次要是text-shadow和transform搭配动画的奇妙使用 */        .wrap {            width: 600px;            height: 480px;            box-sizing: border-box;            padding: 120px;            background-color: #000;            color: transparent;            display: flex;        }        h3 {            text-shadow: 0 0 0 #fff;            animation: smoky 6s infinite;        }        @keyframes smoky {            60% {                text-shadow: 0 0 40px #fff;            }            100% {                text-shadow: 0 0 20px #fff;                /* 这里是重点 */                transform: translate3d(15rem, -8rem, 0) rotate(-40deg) skew(70deg) scale(1.5);                opacity: 0;            }        }        h3:nth-child(1) {            animation-delay: 1s;        }        h3:nth-child(2) {            animation-delay: 1.4s;        }        h3:nth-child(3) {            animation-delay: 1.8s;        }        h3:nth-child(4) {            animation-delay: 2.2s;        }        h3:nth-child(5) {            animation-delay: 2.6s;        }    </style></head><body>    <div class="wrap">        <h3>代码</h3>        <h3>修仙</h3>        <h3>之路</h3>        <h3>道阻</h3>        <h3>且长...</h3>    </div></body></html>

15_程度左右抖动成果

效果图

代码

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <style>        body {            box-sizing: border-box;            padding: 120px;        }        .target {            width: 48px;            height: 48px;            line-height: 48px;            text-align: center;            font-weight: bold;            color: red;            background: #baf;            transform-origin: bottom;            animation: shaking 1.2s ease-in-out infinite;            /* 初始暂停播放,后续通过js管制播放 */            animation-play-state: paused;        }        /* 通过translate3d的x轴挪动去管制程度挪动抖动成果 */        @keyframes shaking {            10%,            90% {                transform: translate3d(-1.2px, 0, 0);            }            20%,            80% {                transform: translate3d(2px, 0, 0);            }            30%,            70% {                transform: translate3d(-4.8px, 0, 0);            }            40%,            60% {                transform: translate3d(4.8px, 0, 0);            }            50% {                transform: translate3d(-4.8px, 0, 0);            }        }    </style></head><body>    <div class="target">^_^</div>    <br>    <button class="start">动画开始</button>    <button class="pause">动画暂停</button>    <script>        // js去设置animationPlayState属性值从而管制动画播放        let startBtn = document.querySelector('.start')        let pauseBtn = document.querySelector('.pause')        let target = document.querySelector('.target')        startBtn.onclick = () => {            target.style.animationPlayState = 'running'        }        pauseBtn.onclick = () => {            target.style.animationPlayState = 'paused'        }    </script></body></html>

16_垂直方向坠落弹跳成果

效果图

代码

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <style>        body {            box-sizing: border-box;            padding: 120px;        }        .target {            background: #666;            width: 108px;            height: 60px;            border-radius: 60px;            color: aliceblue;            font-weight: bolder;            line-height: 60px;            text-align: center;        }        .animationClass {            animation: 1.2s ease 0s infinite backwards bounce;        }        /* 次要是通过管制translateY的值来操作y轴的间隔实现弹跳成果 */        @keyframes bounce {            0% {                transform: translateY(-64px);                animation-timing-function: ease-in;                opacity: 1;            }            24% {                opacity: 1;            }            40% {                transform: translateY(-32px);                animation-timing-function: ease-in;            }            62% {                transform: translateY(-16px);                animation-timing-function: ease-in;            }            82% {                transform: translateY(-8px);                animation-timing-function: ease-in;            }            92% {                transform: translateY(-4px);                animation-timing-function: ease-in;            }            25%,            55%,            75%,            90% {                transform: translateY(0);                animation-timing-function: ease-out;            }            100% {                transform: translateY(0);                animation-timing-function: ease-out;                opacity: 1;            }        }    </style></head><body>    <div class="target">O__O</div>    <br>    <button class="start">动画开始</button>    <button class="end">动画完结</button>    <script>        let startBtn = document.querySelector('.start')        let endBtn = document.querySelector('.end')        let targetBox = document.querySelector('.target')        // 通过dom的classList的API去管制动画的开始和完结(增加类移除类)        startBtn.onclick = () => {            targetBox.classList.add('animationClass')        }        endBtn.onclick = () => {            targetBox.classList.remove('animationClass')        }    </script></body></html>

17_仿figma加载中盒子转圈成果

效果图

代码

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <style>        body {            padding: 120px;        }        .borderDom {            position: relative;            width: 18px;            height: 10px;            border-radius: 10px;            border: 2px solid #333;            animation: oneAnimation 4s cubic-bezier(.12, 0, .39, 0) infinite;        }        /* 两头的线应用定位调整到两头地位 */        .middleLine {            position: absolute;            left: 8px;            width: 2px;            height: 10px;            background-color: #333;            animation: twoAnimation 4s cubic-bezier(.12, 0, .39, 0) infinite;        }        /* 外边框应用X轴方向的缩放 */        @keyframes oneAnimation {            0% {                transform: scaleX(.5);            }            5% {                transform: scaleX(1);            }            10% {                transform: scaleX(.5);            }            15% {                transform: scaleX(1);            }            20% {                transform: scaleX(.5);            }            25% {                transform: scaleX(1);            }            75% {                transform: scaleX(1);            }            80% {                transform: scaleX(.5);            }            85% {                transform: scaleX(1);            }            90% {                transform: scaleX(.5);            }            95% {                transform: scaleX(1);            }            100% {                transform: scaleX(.5);            }        }        /* 中间线应用translate挪动达到成果 */        @keyframes twoAnimation {            0% {                transform: translate(-9px);            }            5% {                transform: translate(0);            }            10% {                transform: translate(9px);            }            10.1% {                transform: translate(-9px);            }            15% {                transform: translate(0);            }            20% {                transform: translate(9px);            }            20.1% {                transform: translate(-9px);            }            25% {                transform: translate(0);            }            75% {                transform: translate(0);            }            80% {                transform: translate(9px);            }            80.1% {                transform: translate(-9px);            }            85% {                transform: translate(0);            }            90% {                transform: translate(9px);            }            90.1% {                transform: translate(-9px);            }            95% {                transform: translate(0);            }            100% {                transform: translate(9px);            }        }    </style></head><body>    <div class="borderDom">        <div class="middleLine"></div>    </div></body></html>

18_文字横向舒展含糊淡入淡出成果

效果图

代码

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <style>        .enter {            margin-top: 120px;            text-align: center;            /* 贝塞尔曲线动画 */            animation: enterenter 1.8s infinite cubic-bezier(0.250, 0.460, 0.450, 0.940) both;        }        @keyframes enterenter {            0% {                /* 加上文字间距 */                letter-spacing: 1em;                /* Z轴变换 */                transform: translateZ(300px);                /* filter: blur(); 像素含糊成果 */                filter: blur(12px);                /* 透明度也要扭转 */                opacity: 0;            }            100% {                transform: translateZ(12px);                filter: blur(0);                opacity: 1;            }        }        .leave {            text-align: center;            animation: leaveleave 1.8s infinite cubic-bezier(0.250, 0.460, 0.450, 0.940) both;        }        @keyframes leaveleave {            0% {                transform: translateZ(0);                filter: blur(0.01);            }            100% {                letter-spacing: 1em;                transform: translateZ(300px);                filter: blur(12px) opacity(0%);            }        }    </style></head><body>    <h2 class="enter">早上好,程序猿兽们</h2>    <br>    <h2 class="leave">早晨好,程序猿兽们</h2></body></html>

19_四个方向盒子旋转挪动进入成果

效果图

代码

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <style>        body {            overflow: hidden;        }        .target1 {            width: 72px;            height: 72px;            background-color: #baf;            /* 左侧滚动旋转进入 */            animation: leftEnter 1.5s infinite ease-out both;            position: absolute;            left: 45%;            top: 30%;        }        @keyframes leftEnter {            0% {                transform: translateX(-1000px) rotate(-540deg);                opacity: 0;            }            100% {                transform: translateX(0) rotate(0deg);                opacity: 1;            }        }        .target2 {            width: 72px;            height: 72px;            background-color: #abf;            /* 右侧滚动旋转进入 */            animation: rightEnter 1.5s infinite ease-out both;            position: absolute;            left: 45%;            top: 40%;        }        @keyframes rightEnter {            0% {                transform: translateX(1000px) rotate(540deg);                opacity: 0;            }            100% {                transform: translateX(0) rotate(0deg);                opacity: 1;            }        }        .target3 {            width: 72px;            height: 72px;            background-color: pink;            /* 上方滚动旋转进入 */            animation: topEnter 1.5s infinite ease-out both;            position: absolute;            left: 45%;            top: 50%;        }        @keyframes topEnter {            0% {                transform: translateY(-800px) rotate(540deg);                opacity: 0;            }            100% {                transform: translateX(0) rotate(0deg);                opacity: 1;            }        }        .target4 {            width: 72px;            height: 72px;            background-color: rgb(211, 140, 233);            /* 下方滚动旋转进入 */            animation: bottomEnter 1.5s infinite ease-out both;            position: absolute;            left: 45%;            top: 20%;        }        @keyframes bottomEnter {            0% {                transform: translateY(1200px) rotate(540deg);                opacity: 0;            }            100% {                transform: translateX(0) rotate(0deg);                opacity: 1;            }        }    </style></head><body>    <div class="target1"></div>    <div class="target2"></div>    <div class="target3"></div>    <div class="target4"></div></body></html>

20_按钮点击波纹成果

效果图

代码

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <style>        body {            padding: 120px;            background-color: #999;        }        button {            margin: 8px;            width: 120px;            height: 48px;            background-color: #faa;            color: #fff;            border: none;            border-radius: 12px;            cursor: pointer;            /* 开启定位是为了给波纹动画元素应用 */            position: relative;            /* 必须加上超出暗藏,正文掉当前成果很显著 */            overflow: hidden;            /* hover过渡一下 */            transition: all 0.3s;        }        button:hover {            box-shadow: 0 0 18px rgba(255, 255, 255, 0.36);        }        .btn2 {            background-color: violet;        }        .btn3 {            background-color: rgb(231, 116, 164);        }        .btn4 {            background-color: rgb(116, 204, 231);        }        .btn5 {            background-color: rgb(54, 134, 58);        }        .btn6 {            background-color: rgb(224, 126, 45);        }        .ripple {            position: absolute;            border-radius: 50%;            background-color: rgba(255, 255, 255, 0.48);            transform: scale(0);            animation: ripple 240ms linear;        }        @keyframes ripple {            to {                transform: scale(2.4);                opacity: 0.12;            }        }    </style></head><body>    <button class="targetBtn">点击波纹成果</button>    <button class="targetBtn btn2">点击波纹成果</button>    <button class="targetBtn btn3">点击波纹成果</button>    <button class="targetBtn btn4">点击波纹成果</button>    <button class="targetBtn btn5">点击波纹成果</button>    <button class="targetBtn btn6">点击波纹成果</button>    <script>        // 创立波纹函数,只有一点击就创立一个波纹        function createRipple(event) {            const button = event.target; // 获取事件对象button按钮            const circle = document.createElement("div"); // 创立一个div标签用于示意一个波纹(波纹就是一个圆)            const diameter = Math.max(button.clientWidth, button.clientHeight); // 取dom宽度和高度中的一个最大值,以最大值做直径            const radius = diameter / 2; // 直径除以2即为半径 (若不了解这几行,可正文掉overflow: hidden;再点击按钮即明确)            circle.style.width = circle.style.height = `${diameter}px`; // 以直径作为宽高            circle.style.left = `${event.clientX - button.offsetLeft - radius}px`; // 设置定位的地位            circle.style.top = `${event.clientY - button.offsetTop - radius}px`;            circle.classList.add("ripple"); // classList加上类名既有动画成果了            // 若有这个波纹动画圆dom当前,就移除这个dom再追加。若没有间接追加            let ripple = button.querySelector('.ripple')            if (ripple) {                ripple.remove();            }            button.appendChild(circle); // 将这个波纹动画圆作为子元素追加到父元素button上(这样父元素绝对定位,子元素相对定位就失效了)        }        // 1. 获取将要点击的按钮dom数组        const targetBtnArr = document.querySelectorAll('.targetBtn')        // 2. 给数组中的每一项,即要点击的按钮dom绑定点击监听事件        for (let i = 0; i < targetBtnArr.length; i++) {            let targetBtn = targetBtnArr[i]            targetBtn.addEventListener("click", createRipple);        }    </script></body></html>

21_鼠标悬浮按钮边框线条动画成果

效果图

代码

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <style>        body {            background: #faa;            padding: 120px;        }        button {            display: inline-block;            border: none;            color: #fff;            cursor: pointer;            margin: 12px 18px;            background: rgb(201, 108, 234);            position: relative;        }        span {            display: block;            padding: 18px 60px        }        button::before,        button::after {            content: "";            width: 0;            height: 2px;            position: absolute;            transition: all .2s linear;            background: #fff        }        span::before,        span::after {            content: "";            width: 2px;            height: 0;            position: absolute;            transition: all .2s linear;            background: #fff        }        button:hover::before,        button:hover::after {            width: 100%        }        button:hover span::before,        button:hover span::after {            height: 100%        }        .btn1::before,        .btn1::after {            transition-delay: .2s        }        .btn1 span::before,        .btn1 span::after {            transition-delay: 0s        }        .btn1::before {            right: 0;            top: 0        }        .btn1::after {            left: 0;            bottom: 0        }        .btn1 span::before {            left: 0;            top: 0        }        .btn1 span::after {            right: 0;            bottom: 0        }        .btn1:hover::before,        .btn1:hover::after {            transition-delay: 0s        }        .btn1:hover span::before,        .btn1:hover span::after {            transition-delay: .2s        }        .btn2::before,        .btn2::after {            transition-delay: 0s        }        .btn2 span::before,        .btn2 span::after {            transition-delay: .2s        }        .btn2::before {            right: 0;            top: 0        }        .btn2::after {            left: 0;            bottom: 0        }        .btn2 span::before {            left: 0;            top: 0        }        .btn2 span::after {            right: 0;            bottom: 0        }        .btn2:hover::before,        .btn2:hover::after {            transition-delay: .2s        }        .btn2:hover span::before,        .btn2:hover span::after {            transition-delay: 0s        }        .btn3::after {            left: 0;            bottom: 0;            transition-delay: .6s        }        .btn3 span::after {            transition-delay: .4s;            right: 0;            bottom: 0        }        .btn3::before {            right: 0;            top: 0;            transition-delay: .2s        }        .btn3 span::before {            transition-delay: 0s;            left: 0;            top: 0        }        .btn3:hover::after {            transition-delay: 0s        }        .btn3:hover span::after {            transition-delay: .2s        }        .btn3:hover::before {            transition-delay: .4s        }        .btn3:hover span::before {            transition-delay: .6s        }        .btn4::after {            right: 0;            bottom: 0;            transition-duration: .4s        }        .btn4 span::after {            right: 0;            bottom: 0;            transition-duration: .4s        }        .btn4::before {            left: 0;            top: 0;            transition-duration: .4s        }        .btn4 span::before {            left: 0;            top: 0;            transition-duration: .4s        }        .btn5::after {            left: 0;            bottom: 0;            transition-duration: .4s        }        .btn5 span::after {            right: 0;            top: 0;            transition-duration: .4s        }        .btn5::before {            right: 0;            top: 0;            transition-duration: .4s        }        .btn5 span::before {            left: 0;            bottom: 0;            transition-duration: .4s        }        .btn6::before {            left: 50%;            top: 0;            transition-duration: .4s        }        .btn6::after {            left: 50%;            bottom: 0;            transition-duration: .4s        }        .btn6 span::before {            left: 0;            top: 50%;            transition-duration: .4s        }        .btn6 span::after {            right: 0;            top: 50%;            transition-duration: .4s        }        .btn6:hover::before,        .btn6:hover::after {            left: 0        }        .btn6:hover span::before,        .btn6:hover span::after {            top: 0        }    </style></head><body>    <main>        <button class="btn1"><span>悬浮上左、下右</span></button>        <button class="btn2"><span>悬浮右上、左下</span></button>        <button class="btn3"><span>悬浮之一圈线条</span></button>        <button class="btn4"><span>悬浮右下角和左上角两个方向延长</span></button>        <button class="btn5"><span>悬浮右上角和左下角两个方向延长</span></button>        <button class="btn6"><span>悬浮四个方向两头点往两端延长</span></button>    </main></body></html>

22_灯泡开关成果

效果图

代码

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <style>        /* :root全局css变量搭配var()函数应用 */        :root {            --light-color: #fff        }        * {            margin: 0;            padding: 0;            box-sizing: border-box;        }        body {            width: 100%;            height: 100vh;        }        .container {            width: 100%;            height: 100%;            display: flex;        }        .light-container {            width: 100%;            display: flex;            justify-content: center;            align-items: center;            background-color: #333;        }        .light {            position: absolute;            width: 80px;            height: 80px;            border-radius: 50%;            background-color: var(--light-color);            transition: all 0.24s;        }        .light::before {            content: '';            position: absolute;            width: 35px;            height: 80px;            border-radius: 10px;            background: var(--light-color);            left: 27.5%;            top: -50px;            border-top: 30px solid black;        }        .light span:nth-child(1) {            position: absolute;            width: 30px;            height: 30px;            background: transparent;            box-shadow: 20px 20px 0 10px var(--light-color);            border-bottom-right-radius: 40px;            left: -4px;            top: -16px;            transform: rotate(342deg);        }        .light span:nth-child(2) {            position: absolute;            width: 30px;            height: 30px;            background: transparent;            box-shadow: -20px 20px 0 10px var(--light-color);            border-bottom-left-radius: 40px;            right: -3.4px;            top: -16px;            transform: rotate(16deg);        }        .wire {            width: 4px;            height: 400px;            background-color: #8f8e8e;            top: -18%;            position: absolute;            transition: all 0.24s;        }        .light::after {            position: absolute;            content: '';            width: 140px;            height: 140px;            background: var(--light-color);            border-radius: 50%;            top: 50%;            left: 0;            filter: blur(40px);            transform: translate(-18%, -40px);            box-shadow: 0 0 10px var(--light-color),                0 0 30px var(--light-color),                0 0 60px var(--light-color),                0 0 120px var(--light-color),                0 0 200px var(--light-color),            ;        }        button {            position: absolute;            bottom: 240px;            right: 240px;            width: 120px;            height: 36px;        }    </style></head><body>    <div class="container">        <div class="light-container">            <div class="wire"></div>            <div class="light">                <span></span>                <span></span>            </div>        </div>    </div>    <button>开关按钮</button>    <script>        let switchOn = true        let btn = document.querySelector('button')        let light = document.querySelector('.light')        let wire = document.querySelector('.wire')        btn.onclick = () => {            switchOn = !switchOn            if (switchOn) {                document.documentElement.style.setProperty('--light-color', '#fff')                wire.style.background = '#8f8e8e'                document.styleSheets[0].addRule('.light::before', 'border-top: 30px solid #000');            } else {                document.documentElement.style.setProperty('--light-color', '#333')                wire.style.background = '#333'                document.styleSheets[0].addRule('.light::before', 'border-top: 30px solid #333');            }        }        // 应用js动静给伪元素设置款式,参见文章:http://t.zoukankan.com/kunmomo-p-12358005.html        // 另外样式表也是一个对象,也能够打印 document.querySelector('style') 可拜访其上的css属性    </script></body></html>

23_鼠标悬浮手风琴款式开展图标效果图

效果图

代码

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <style>        body {            padding: 180px;            background-color: #ddd;        }        .item {            box-sizing: border-box;            display: inline-flex;            align-items: center;            height: 60px;            /* 手风琴成果就是鼠标悬浮宽度过渡 */            width: 60px;            margin: 4px 8px;            /* 超出暗藏,因为要把伪元素文字遮挡住 */            overflow: hidden;            background: #fff;            border-radius: 30px;            box-shadow: 0px 10px 10px rgba(0, 0, 0, 0.24);            transition: all 0.5s;        }        .item:hover {            width: 180px;            border: none;        }        /* 悬浮加背景色 */        .first:hover .icon {            background-color: pink;        }        .second:hover .icon {            background-color: #e9e9e9;        }        .third:hover .icon {            background-color: pink;        }        .fouth:hover .icon {            background-color: #e9e9e9;        }        .icon {            width: 60px;            height: 60px;            display: flex;            justify-content: center;            align-items: center;            border-radius: 30px;            font-size: 28px;            position: relative;            transition: all 0.5s;            /* 实在元素阻止鼠标事件,伪元素主动鼠标事件 */            pointer-events: none;        }        /* 通过伪元素增加内容介绍文字 */        .item:nth-child(1) .icon::after {            position: absolute;            content: '我是红桃';            /* 宽度随着内容自适应 */            width: fit-content;            /* 文字不换行 */            word-break: keep-all;            /* 设置伪元素文字大小为中等大小 */            font-size: medium;            left: 72px;            /* 实在元素阻止鼠标事件,伪元素主动鼠标事件 */            pointer-events: auto;            cursor: pointer;        }        .item:nth-child(2) .icon::after {            position: absolute;            content: '我是黑桃';            width: fit-content;            word-break: keep-all;            font-size: medium;            left: 72px;            pointer-events: auto;            cursor: pointer;        }        .item:nth-child(3) .icon::after {            position: absolute;            content: '我是方块';            width: fit-content;            word-break: keep-all;            font-size: medium;            left: 72px;            pointer-events: auto;            cursor: pointer;        }        .item:nth-child(4) .icon::after {            position: absolute;            content: '我是梅花';            width: fit-content;            word-break: keep-all;            font-size: medium;            left: 72px;            pointer-events: auto;            cursor: pointer;        }        /* 鼠标悬浮加文字下划线(给伪元素增加hover款式) */        .icon:hover::after {            text-decoration: underline;        }    </style></head><body>    <div class="item first">        <div onclick="clickAfter('红桃')" style="color: #DD3B32;" class="icon">♥</div>    </div>    <div class="item second">        <div onclick="clickAfter('黑桃')" style="color: #1A1A1A;" class="icon">♠</div>    </div>    <div class="item third">        <div onclick="clickAfter('方块')" style="color: #FB1C17;" class="icon">♦</div>    </div>    <div class="item fouth">        <div onclick="clickAfter('梅花')" style="color: #090B0A;" class="icon">♣</div>    </div>    <script>        /**         * 留神伪元素也能够绑定事件         *      只需:实在元素 pointer-events: none;         *            伪元素 pointer-events: auto;         * 参见文章:https://www.cnblogs.com/letgofishing/p/15987190.html         * */        function clickAfter(who) {            console.log(who);        }    </script></body></html>