起因是接口超时了,导致项目页面进不去,一直转圈,我于是注意到了这个小东西:
还挺可爱哈,转起来眼睛都快晃瞎了。
于是我出于 无聊 旺盛的学习欲,照着antd的样式和速度改造了一下,做出来的……怎么说呢,好像也差不多吧:
嘎嘎真牛批啊我!
所以把代码贴一下,万一以后要做类似的,直接拿去用,舒服~
<!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> #preloader{ position:relative; 28px; height: 28px; transform: rotate(45deg); animation: preloader 1.2s infinite linear; } #preloader span{ 10px; height: 10px; position:absolute; background:#1890ff; border-radius: 100%; display:block; transform-origin: 50% 50%; opacity: .3; animation: preloader_span 1.2s infinite linear; } #preloader span:nth-child(1){ top: 0; left: 0; } #preloader span:nth-child(2){ top: 0; right: 0; animation-delay: 0.4s; } #preloader span:nth-child(3){ right: 0; bottom: 0; animation-delay: 0.8s; } #preloader span:nth-child(4){ bottom: 0; left: 0; animation-delay: 1.2s; } @keyframes preloader { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } @keyframes preloader_span { 0% { opacity: .3; } 50% { opacity: 1; } 100% { opacity: .3; } } </style> </head> <body> <div id="preloader"> <span></span> <span></span> <span></span> <span></span> </div> </body> </html>
写完我又突发奇想想去看下antd怎么写的,总之万变不离其宗,,css3玩出花就对了,先记录下来吧:
这是html:
<div class="ant-spin ant-spin-lg ant-spin-spinning"> <span class="ant-spin-dot ant-spin-dot-spin"> <i class="ant-spin-dot-item"></i> <i class="ant-spin-dot-item"></i> <i class="ant-spin-dot-item"></i> <i class="ant-spin-dot-item"></i> </span> </div>
这是css:
/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */ /* stylelint-disable no-duplicate-selectors */ /* stylelint-disable */ /* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */ .ant-spin { box-sizing: border-box; margin: 0; padding: 0; color: rgba(0, 0, 0, 0.85); font-size: 14px; font-variant: tabular-nums; line-height: 1.5715; list-style: none; font-feature-settings: 'tnum', "tnum"; position: absolute; display: none; color: #1890ff; text-align: center; vertical-align: middle; opacity: 0; transition: transform 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86); } .ant-spin-spinning { position: static; display: inline-block; opacity: 1; } .ant-spin-nested-loading { position: relative; } .ant-spin-nested-loading > div > .ant-spin { position: absolute; top: 0; left: 0; z-index: 4; display: block; 100%; height: 100%; max-height: 400px; } .ant-spin-nested-loading > div > .ant-spin .ant-spin-dot { position: absolute; top: 50%; left: 50%; margin: -10px; } .ant-spin-nested-loading > div > .ant-spin .ant-spin-text { position: absolute; top: 50%; 100%; padding-top: 5px; text-shadow: 0 1px 2px #fff; } .ant-spin-nested-loading > div > .ant-spin.ant-spin-show-text .ant-spin-dot { margin-top: -20px; } .ant-spin-nested-loading > div > .ant-spin-sm .ant-spin-dot { margin: -7px; } .ant-spin-nested-loading > div > .ant-spin-sm .ant-spin-text { padding-top: 2px; } .ant-spin-nested-loading > div > .ant-spin-sm.ant-spin-show-text .ant-spin-dot { margin-top: -17px; } .ant-spin-nested-loading > div > .ant-spin-lg .ant-spin-dot { margin: -16px; } .ant-spin-nested-loading > div > .ant-spin-lg .ant-spin-text { padding-top: 11px; } .ant-spin-nested-loading > div > .ant-spin-lg.ant-spin-show-text .ant-spin-dot { margin-top: -26px; } .ant-spin-container { position: relative; transition: opacity 0.3s; } .ant-spin-container::after { position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: 10; display: none 9; 100%; height: 100%; background: #fff; opacity: 0; transition: all 0.3s; content: ''; pointer-events: none; } .ant-spin-blur { clear: both; overflow: hidden; opacity: 0.5; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; pointer-events: none; } .ant-spin-blur::after { opacity: 0.4; pointer-events: auto; } .ant-spin-tip { color: rgba(0, 0, 0, 0.45); } .ant-spin-dot { position: relative; display: inline-block; font-size: 20px; 1em; height: 1em; } .ant-spin-dot-item { position: absolute; display: block; 9px; height: 9px; background-color: #1890ff; border-radius: 100%; transform: scale(0.75); transform-origin: 50% 50%; opacity: 0.3; animation: antSpinMove 1s infinite linear alternate; } .ant-spin-dot-item:nth-child(1) { top: 0; left: 0; } .ant-spin-dot-item:nth-child(2) { top: 0; right: 0; animation-delay: 0.4s; } .ant-spin-dot-item:nth-child(3) { right: 0; bottom: 0; animation-delay: 0.8s; } .ant-spin-dot-item:nth-child(4) { bottom: 0; left: 0; animation-delay: 1.2s; } .ant-spin-dot-spin { transform: rotate(45deg); animation: antRotate 1.2s infinite linear; } .ant-spin-sm .ant-spin-dot { font-size: 14px; } .ant-spin-sm .ant-spin-dot i { 6px; height: 6px; } .ant-spin-lg .ant-spin-dot { font-size: 32px; } .ant-spin-lg .ant-spin-dot i { 14px; height: 14px; } .ant-spin.ant-spin-show-text .ant-spin-text { display: block; } @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { /* IE10+ */ .ant-spin-blur { background: #fff; opacity: 0.5; } } @keyframes antSpinMove { to { opacity: 1; } } @keyframes antRotate { to { transform: rotate(405deg); } } .ant-spin-rtl { direction: rtl; } .ant-spin-rtl .ant-spin-dot-spin { transform: rotate(-45deg); animation-name: antRotateRtl; } @keyframes antRotateRtl { to { transform: rotate(-405deg); } }
顺便附上一篇博文里贴的另外几种常用加载动画~
https://www.cnblogs.com/lhb25/p/loading-spinners-animated-with-css3.html