前言:
此时你们对“css判断手机分辨率”大概比较看重,我们都想要知道一些“css判断手机分辨率”的相关知识。那么小编同时在网上汇集了一些关于“css判断手机分辨率””的相关文章,希望姐妹们能喜欢,各位老铁们快快来了解一下吧!今天就一起来看看一个十分炫酷的特效:手机充电,整体特效可在最下方看到
前置知识:
要想完成这个特效,就必须要知道一些前置的属性,简单介绍一下吧:
animation
animation : 动画属性,可连贯的书写,也可分开书写(前面加上animation-),如:
animation: name duration timing-function delay iteration-count direction fill-mode play-state;name: 绑定到选择器的关键帧的名称duration: 动画指定需要多少秒或毫秒完成timing-function: 设置动画将如何完成一个周期delay: 设置动画在启动前的延迟间隔。iteration-count: 定义动画的播放次数。direction: 指定是否应该轮流反向播放动画。fill-mode: 规定当动画不播放时(当动画完成时,或当动画有一个延迟未开始播放时),要应用到元素的样式。play-state: 指定动画是否正在运行或已暂停。
其中:name 需要调用 @keyframes 来自定义名称,可设置 0% ~ 100% 时的样子
transform
transform:用于元素的2D或3D转换。这个属性允许你将元素旋转,缩放,移动,倾斜等。
translate(x, y):定义2d图形的转换,分别为 x 和 yroate(90deg): 定义2d图形的旋转,参数为度数,如旋转90度filter
filter: 滤镜属性,可以让事物变得模糊
blur(5px):给图像设置高斯模糊。"radius"一值设定高斯函数的标准差,或者是屏幕上以多少像素融在一起, 所以值越大越模糊;contrast(%):调整图像的对比度。值是0%的话,图像会全黑。值是100%,图像不变。值可以超过100%,意味着会运用更低的对比。若没有设置值,默认是1。hue-rotate(deg):给图像应用色相旋转。给一定的旋角色环角充电小球
我们先弄一个小球,让他从最底下,像上面移动,以此循环,在给小球设置其间隔时间即可
.contrast { span{ animation: moveUp ease-in-out infinite; animation-duration: 4s; animation-delay: 2s; }}@keyframes moveUp { 0% { bottom: 0; } 100% { bottom: calc(100% - 265px); }}底坐
底座我们随便设置下就行,可以通过 border-radius属性两个角弄下
但我们发现如果这是这么弹出就会显得非常单调,感觉小球与底座并没有关联一般,这时后就需要一个效果:融合
融合效果
通过 filter 这个属性就能实现。在父元素添加:filter: contrast(), 子元素添加filter:blur() 就可以轻松实现
这里将底座和小球都添加上,同时创建多个小球,在改动下小球的位置,间隔时间,速度就行了
.contrast{ filter: contrast(15) hue-rotate(0); span{ filter: blur(5px); } .button{ filter: blur(5px); } }
来看看效果:
环
首先我们需要做个正方形,并在中间弄个圆出来,中间的圆把背景色弄的跟整体的北京市就可以了,像这样:
之后我们在通过 border-radius来改变下框的圆角,再加入上 filter的效果,让其变得模糊,并且可以与小球形成融合效果,像这样:
最后通过 设置一个动画,让其旋转起来就行了:
.circle { box-sizing: border-box; filter: blur(8px); animation: circleRotate 6s linear infinite;}@keyframes circleRotate { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); }}
效果:
加入颜色
我们为了好看,还可以价格颜色的控制,在把对应的文字移入到圈中,效果就完成了
.contrast{ animation: hueRotate 6s linear infinite;}@keyframes hueRotate { 0% { filter: contrast(15) hue-rotate(0); } 100% { filter: contrast(15) hue-rotate(360deg); }}详细代码index.tsx
import React from 'react';import './index.less'const Index:React.FC<any> = ({app, dispatch})=> { return ( <div className="Index"> <div className="text">73%</div> <div className="contrast"> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> {/* 底部的 */} <div className="circle"></div> {/* 下面的 */} <div className="button"></div> </div> </div> );}export default Index;index.less
.Index { width: 100vw; height: 100vh; background: #000; position: relative; .text{ width: 200px; height: 200px; text-align: center; z-index: 9; font-size: 30px; line-height: 200px; color: white; position: absolute; left: 50%; top: 10%; transform: translate(-50%, 0%); } .contrast{ width: 100%; height: 100%; background-color: #000; overflow: hidden; filter: contrast(15) hue-rotate(0); position: relative; animation: hueRotate 6s linear infinite; span{ background: #00ff6f; position: absolute; bottom: 0; border-radius: 100px 100px 0 0; filter: blur(5px); animation: moveUp ease-in-out infinite; &:nth-child(1) { width: 20px; height: 20px; left: 50%; animation-duration: 4s; animation-delay: 2s; } &:nth-child(2) { width: 22px; height: 22px; left: 54%; animation-duration: 4.2s; animation-delay: 4s; } &:nth-child(3) { width: 24px; height: 24px; left: 45%; animation-duration: 3s; animation-delay: 1s; } &:nth-child(4) { width: 20px; height: 22px; left: 54%; animation-duration: 5s; animation-delay: 0s; } &:nth-child(5) { width: 22px; height: 22px; left: 52%; animation-duration: 3.5s; animation-delay: 5s; } &:nth-child(6) { width: 20px; height: 20px; left: 50%; animation-duration: 4.7s; animation-delay: 1.2s; } &:nth-child(7) { width: 22px; height: 22px; left: 54%; animation-duration: 2.5s; animation-delay: 3.5s; } &:nth-child(8) { width: 24px; height: 24px; left: 51%; animation-duration: 5.6s; animation-delay: 4.2s; } &:nth-child(9) { width: 26px; height: 26px; left: 42%; animation-duration: 5.2s; animation-delay: 4s; } &:nth-child(10) { width: 26px; height: 22px; left: 54%; animation-duration: 3.8s; animation-delay: 4.3s; } &:nth-child(11) { width: 22px; height: 22px; left: 42%; animation-duration: 4.2s; animation-delay: 0.3s; } &:nth-child(12) { width: 24px; height: 24px; left: 46%; animation-duration: 4.6s; animation-delay: 2.0s; } &:nth-child(13) { width: 22px; height: 22px; left: 48%; animation-duration: 3.8s; animation-delay: 3.2s; } &:nth-child(14) { width: 26px; height: 22px; left: 55%; animation-duration: 5.2s; animation-delay: 2.9s; } &:nth-child(15) { width: 26px; height: 22px; left: 52%; animation-duration: 4.9s; animation-delay: 4.2s; } } .button { width: 150px; height: 50px; background: #00ff6f; position: absolute; left: 50%; bottom: 0; transform: translate(-50%, 0); border-radius: 100px 100px 0 0; filter: blur(5px); } } .circle { width: 300px; height: 300px; position: absolute; top: 10px; left: 50%; margin-left: -150px; box-sizing: border-box; filter: blur(8px); animation: circleRotate 6s linear infinite; &::before{ content: ""; height: 200px; width: 200px; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%) rotate(0); background: #00ff6f; border-radius: 42% 38% 62% 49% / 45%; } &::after { content: ""; width: 176px; height: 178px; background: #000; border-radius: 50%; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } }}@keyframes hueRotate { 0% { filter: contrast(15) hue-rotate(0); } 100% { filter: contrast(15) hue-rotate(360deg); }}@keyframes circleRotate { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); }}@keyframes moveUp { 0% { bottom: 0; } 100% { bottom: calc(100% - 265px); }}End
不得不说css真的很神奇,效果就如真的一般,喜欢的点个赞支持下吧(● ̄(エ) ̄●)
标签: #css判断手机分辨率