目录
- web前端之纯css实现的加载、steps、calc
web前端之纯css实现的加载、steps、calc
style
/* -------平滑加载------- */ .smooth_loading { background: linear-gradient(#333333 0 0) 0 / 0% no-repeat #f5f5f5; animation: smooth_loading_animation 2s infinite linear; } @keyframes smooth_loading_animation { 100% { background-size: 100%; } } /* -------按步加载------- */ .step_by_step_loading { border-radius: 20px; background: linear-gradient(#ffa500 0 0) 0 / 0% no-repeat #f5f5f5; animation: step_by_step_loading_animation 2s infinite steps(10); } @keyframes step_by_step_loading_animation { 100% { background-size: 110%; } } /* -------条纹加载------- */ .stripe_loading { border-radius: 20px; background: repeating-linear-gradient(135deg, #f03355 0 10px, #ffa516 0 20px) 0 / 0% no-repeat, repeating-linear-gradient(135deg, #f5f5f5 0 10px, #eeeeee 0 20px) 0 / 100%; animation: stripe_loading_animation 2s infinite; } @keyframes stripe_loading_animation { 100% { background-size: 100%; } } /* -------虚线加载------- */ .dashed_loading { -webkit-mask: linear-gradient(90deg, #333333 70%, #0000 0) 0 / 20%; background: linear-gradient(#333333 0 0) 0 / 0% no-repeat #ddd; animation: dashed_loading_animation 2s infinite steps(6); } @keyframes dashed_loading_animation { 100% { background-size: 120%; } } /* -------电池加载------- */ .battery_loading { position: relative; border: 2px solid #333333; background: repeating-linear-gradient(90deg, #333333 0 10px, #0000 0 16px) 0 / 0% no-repeat content-box content-box; animation: battery_loading_animation 2s infinite steps(6); } .battery_loading::before { position: absolute; content: ""; top: 50%; left: 100%; transform: translateY(-50%); width: 12px; height: 12px; border: 2px solid #333333; } @keyframes battery_loading_animation { 100% { background-size: 120%; } } /* -------内嵌加载------- */ .embedded_loading { position: relative; border-radius: 20px; color: #514b82; border: 2px solid #514b82; } .embedded_loading::before { position: absolute; content: ""; margin: 2px; inset: 0 100% 0 0; border-radius: inherit; background: #514b82; animation: embedded_loading_animation 2s infinite; } @keyframes embedded_loading_animation { 100% { inset: 0; } } /* -------珠链加载------- */ .bead_chain_loading { -webkit-mask: radial-gradient(circle closest-side, #333333 94%, #0000) 0 0 / 25% 100%, linear-gradient(#333333 0 0) center / calc(100% - 12px) calc(100% - 12px) no-repeat; background: linear-gradient(#25b09b 0 0) 0 / 0% no-repeat #f5f5f5; animation: bead_chain_loading_animation 2s infinite linear; } @keyframes bead_chain_loading_animation { 100% { background-size: 100%; } } /* -------斑马线加载------- */ .zebra_loading { border-radius: 50%; -webkit-mask: linear-gradient(0deg, #333333 55%, transparent 0) bottom / 100% 18.18%; background: linear-gradient(#f03355 0 0) bottom / 100% 0% no-repeat #f5f5f5; animation: zebra_loading_animation 2s infinite steps(7); } @keyframes zebra_loading_animation { 100% { background-size: 100% 115%; } } /* -------水柱加载------- */ .water_column_loading { --r1: 154%; --r2: 68.5%; border-radius: 50%; background: radial-gradient(var(--r1) var(--r2) at top, transparent 79.5%, #269af2 80%) center left, radial-gradient(var(--r1) var(--r2) at bottom, #269af2 79.5%, #0000 80%) center center, radial-gradient(var(--r1) var(--r2) at top, transparent 79.5%, #269af2 80%) center right, #cccccc; background-size: 50.5% 220%; background-position: -100% 0%, 0% 0%, 100% 0%; background-repeat: no-repeat; animation: water_column_loading_animation 2s infinite linear; } @keyframes water_column_loading_animation { 33% { background-position: 0% 33%, 100% 33%, 200% 33%; } 66% { background-position: -100% 66%, 0% 66%, 100% 66%; } 100% { background-position: 0% 100%, 100% 100%, 200% 100%; } } /* -------信号加载------- */ .signal_loading { border-radius: 200px 200px 0 0; -webkit-mask: repeating-radial-gradient(farthest-side at bottom, #0000 0, #000 1px 12%, #0000 calc(12% + 1px) 20%); background: radial-gradient(farthest-side at bottom, #514b82 0 95%, #0000 0) bottom / 0% 0% no-repeat #dddddd; animation: signal_loading_animation 2s infinite steps(6); } @keyframes signal_loading_animation { 100% { background-size: 120% 120%; } }
复制
html
<!-- 信号加载 --> <div class="signal_loading w_120 h_60"></div> <!-- 水柱加载 --> <div class="water_column_loading w_68 h_68"></div> <!-- 斑马线加载 --> <div class="zebra_loading w_68 h_68"></div> <!-- 珠链加载 --> <div class="bead_chain_loading w_120 h_24"></div> <!-- 内嵌加载 --> <div class="embedded_loading w_120 h_20"></div> <!-- 电池加载 --> <div class="battery_loading w_120 h_30 padding_2"></div> <!-- 虚线加载 --> <div class="dashed_loading w_120 h_20"></div> <!-- 条纹加载 --> <div class="stripe_loading w_120 h_20"></div> <!-- 按步加载 --> <div class="step_by_step_loading w_120 h_20"></div> <!-- 平滑加载 --> <div class="smooth_loading w_120 h_20"></div>
复制
calc
calc()此CSS函数允许在声明CSS属性值时执行一些计算。它可以用在如下场合:<length>、<frequency>、<angle>、<time>、<percentage>、<number>或<integer>。
此calc()函数用一个表达式作为它的参数,用这个表达式的结果作为值。这个表达式可以是任何如下操作符的组合,采用标准操作符处理法则的简单表达式。
steps
steps阶跃函数,是transition-timing-function和animation-timing-function两个属性的属性值,表示两个关键帧之间的动画效果,默认是ease。
steps有两个参数:
参数一是把这次过渡分成几段,这几段其实是在时间上分为几段去显示执行。
参数二是表示分成几段后,start还是end去执行动画。参数二有两个可选值start和end,默认是end。