首先看下这个 纯CSS实现的很酷的光圈沿着按钮轮廓旋绕的按钮 特效图:
【纯CSS实现的很酷的光圈沿着按钮轮廓旋绕的按钮】源码下载点这里
感兴趣的同学,咱们继续往下看。不感兴趣的,请绕过。。。
代码布局:
<div class="wrap">
<div class="btn">我是初始设定的蓝色button</div>
<div class="btn btn1">我是颜色旋转色相180度的按钮</div>
<div class="btn btn2">270度的我</div>
<div class="btn btn3">我只转了90度</div>
</div>
按钮的样式:
.wrap{
position: fixed;
display: flex;
width: 70%;
height: auto;
padding:0px;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
justify-content: center;
align-items: center;
}
:root {
--color: #0ebeff; /* 定义 --color颜色,这里是个蓝色 */
}
*, *::before, *::after {
box-sizing: border-box;
}
@keyframes rotate {
100% {
transform: translate(-50%, -50%) rotate(1turn);
}
}
.btn {
position: relative;
float:left;
z-index: 0; /* 按钮顶层 */
width: auto; /* 宽度自适应,以容纳更多的文字 */
height: 60px;
line-height: 60px; /* line-height 与容器 height 相等,使文字垂直居中 */
color: var(--color); /* 设置文字颜色,通过var函数获取--color的值 */
font-size: 24px;
border-radius: 50px;
text-align: center;
margin: 15px;
overflow: hidden;
padding: 0px 40px;
cursor: pointer;
transition: .3s;
white-space: nowrap; /* 按钮上的文字可不能换行,尤其是中英文混用时 */
-webkit-box-reflect: below 20px linear-gradient(transparent, rgba(0, 0, 0, .2)); /* 实现本体的倒影,-box-reflect: below 20px,表示与本体之间的偏移量为20px,数值越小,越靠近。 linear-gradient(transparent, rgba(0, 0, 0, .2)); 定义倒影的效果为:线性渐变,从本体逐渐过渡到黑色。本体的起始透明度为20%。可以通过修改这一行参数调整倒影效果 */
&:hover {
color: #fff;
box-shadow: 0 0 5px var(--color),0 0 25px var(--color); /* 外发光效果 */
&::after,
&::before {
transition: .3s;
background: var(--color); /* 填充按钮颜色 */
}
}
&::before { /* 通过伪类的背景色填充实现边框效果, 先用before伪类设置颜色填充,如果背景色也是渐变色,那就可以实现一个渐变的边框了 */
content: '';
position: absolute;
z-index: -2; /* 按钮底层 */
left: 50%;
top: 50%;
transform: translate(-50%, -50%); /* left:50%,top:50%,translate(-50%, -50%); 确保底层与顶层同心居中 */
width: 1500%; /* 扩大填充范围 ,确保当按钮的宽度高度过大时背景色全覆盖,*/
height: 3000%;
background: #000;
background-repeat: no-repeat;
background-size: 50% 50%; /* 背景填充色同时缩放为原来的50% background-size: length|percentage|cover|contain; */
background-position: 0 0; /* 设置背景填充的起始位置 */
background-image: conic-gradient(var(--color), var(--color)); /* conic-gradient: 设置背景颜色的渐变:围绕中心进行圆锥形渐变,这样就形成了看似一条线沿着border旋转的效果 */
animation: rotate 2s linear infinite; /* 让动画匀速动起来,时间周期为2秒 */
}
&::after { /* 在before的上面,遮挡一层黑色,通过层叠遮挡中间部分,四周露出的部分模拟边框效果 */
content: '';
position: absolute;
z-index: -1; /* 按钮中间层 */
left: 4px;
top: 4px;
width: calc(100% - 8px); /* 计算填充宽度,因为要实现填充的黑色背景遮挡住before的背景色,又要模拟出border的效果,所以要减去宽度值等于要模拟的border的宽度值的2倍。 */
height: calc(100% - 8px); /* 填充高度 */
background: #000;
border-radius: 50px;
}
}
.btn1 {
filter: hue-rotate(180deg); /* hue-rotate(deg): 给图像应用色相旋转,改变填充颜色。若值未设置,默认值是0deg,图像无变化。一圈:360deg */
}
.btn2 {
filter: hue-rotate(270deg);
}
.btn3 {
filter: hue-rotate(90deg);
}
本例的重点我都写在了css的注释里了,感兴趣的同学可以仔细分析一下。【纯CSS实现的很酷的光圈沿着按钮轮廓旋绕的按钮】源码下载点这里
接下来还是要把知识点稍微说明一下。
相关知识点:
知识点1:CSS var() 函数
var() 函数用于插入自定义的属性值,如果一个属性值在多处被使用,该方法就很有用。
custom-property-name | 必需。自定义属性的名称,必需以 -- 开头。 |
value | 可选。备用值,在属性不存在的时候使用。 |
知识点2:box-reflect
设置或检索对象倒影。
语法如下:
box-reflect:none | <direction> <offset>? <mask-box-image>?
<direction> = above | below | left | right
<offset> = <length> | <percentage>
<mask-box-image> = none | <url> | <linear-gradient> | <radial-gradient> | <repeating-linear-gradient> | <repeating-radial-gradient>
默认值:none:无倒影
above:指定倒影在对象的上边
below:指定倒影在对象的下边
left:指定倒影在对象的左边
right:指定倒影在对象的右边
<offset>
<length>:用长度值来定义倒影与对象之间的间隔。可以为负值
<percentage>:用百分比来定义倒影与对象之间的间隔。可以为负值
<mask-box-image> none:无遮罩图像
<url>:使用绝对或相对地址指定遮罩图像。
<linear-gradient>:使用线性渐变创建遮罩图像。
<radial-gradient>:使用径向(放射性)渐变创建遮罩图像。
<repeating-linear-gradient>:使用重复的线性渐变创建背遮罩像。
<repeating-radial-gradient>:使用重复的径向(放射性)渐变创建遮罩图像。
知识点3:conic-gradient() 函数
conic-gradient() 函数创建一个由渐变组成的图像。
圆锥渐变是颜色过渡围绕中心点旋转(而不是从中心向外辐射)。
创建圆锥渐变,至少需要设置两个色标。
from angle | 可选。起始角度。默认值为 0deg |
at position | 可选。中心位置。默认居中。 |
color degree, ..., color degree | 角渐变断点。该值包含一个颜色值,后跟一个可选的停止位置( 0 到 360 之间的度数或 0% 到 100% 之间的百分比)。 |
比如下面实例,实现了三种颜色圆锥渐变的图形:
#grad {
background-image: conic-gradient(red, yellow, green)
;
}
知识点4:CSS3 filter(滤镜) 属性
filter 属性定义了元素(通常是)的可视效果(例如:模糊与饱和度)。
下面实例实现了:修改所有图片的颜色为黑白 (100% 灰度):
img {
-webkit-filter: grayscale(100%); /* Chrome, Safari, Opera */
filter: grayscale(100%);
}
基本语法:
filter: none | blur() | brightness() | contrast() | drop-shadow() | grayscale() | hue-rotate() | invert() | opacity() | saturate() | sepia() | url();
本例使用的滤镜:hue-rotate() 给图像应用色相旋转:
img {
-webkit-filter: hue-rotate(90deg); /* Chrome, Safari, Opera */
filter: hue-rotate(90deg);
}
其他支持的滤镜效果:
Filter | 描述 |
none | 默认值,没有效果。 |
blur(px) | 给图像设置高斯模糊。"radius"一值设定高斯函数的标准差,或者是屏幕上以多少像素融在一起, 所以值越大越模糊; 如果没有设定值,则默认是0;这个参数可设置css长度值,但不接受百分比值。 |
brightness(%) | 给图片应用一种线性乘法,使其看起来更亮或更暗。如果值是0%,图像会全黑。值是100%,则图像无变化。其他的值对应线性乘数效果。值超过100%也是可以的,图像会比原来更亮。如果没有设定值,默认是1。 |
contrast(%) | 调整图像的对比度。值是0%的话,图像会全黑。值是100%,图像不变。值可以超过100%,意味着会运用更低的对比。若没有设置值,默认是1。 |
drop-shadow(h-shadow v-shadow blur spread color) | 给图像设置一个阴影效果。阴影是合成在图像下面,可以有模糊度的,可以以特定颜色画出的遮罩图的偏移版本。 函数接受(在CSS3背景中定义)类型的值,除了"inset"关键字是不允许的。该函数与已有的box-shadow box-shadow属性很相似;不同之处在于,通过滤镜,一些浏览器为了更好的性能会提供硬件加速。参数如下: (必须) 这是设置阴影偏移量的两个 值. 设定水平方向距离. 负值会使阴影出现在元素左边. 设定垂直距离.负值会使阴影出现在元素上方。查看可能的单位. 如果两个值都是0, 则阴影出现在元素正后面 (如果设置了 and/or ,会有模糊效果). (可选) 这是第三个code>值. 值越大,越模糊,则阴影会变得更大更淡.不允许负值 若未设定,默认是0 (则阴影的边界很锐利). (可选) 这是第四个 值. 正值会使阴影扩张和变大,负值会是阴影缩小.若未设定,默认是0 (阴影会与元素一样大小). 注意: Webkit, 以及一些其他浏览器 不支持第四个长度,如果加了也不会渲染。 (可选) 查看 该值可能的关键字和标记。若未设定,颜色值基于浏览器。在Gecko (Firefox), Presto (Opera)和Trident (Internet Explorer)中, 会应用colorcolor属性的值。另外, 如果颜色值省略,WebKit中阴影是透明的。 |
grayscale(%) | 将图像转换为灰度图像。值定义转换的比例。值为100%则完全转为灰度图像,值为0%图像无变化。值在0%到100%之间,则是效果的线性乘子。若未设置,值默认是0; |
hue-rotate(deg) | 给图像应用色相旋转。"angle"一值设定图像会被调整的色环角度值。值为0deg,则图像无变化。若值未设置,默认值是0deg。该值虽然没有最大值,超过360deg的值相当于又绕一圈。 |
invert(%) | 反转输入图像。值定义转换的比例。100%的价值是完全反转。值为0%则图像无变化。值在0%和100%之间,则是效果的线性乘子。 若值未设置,值默认是0。 |
opacity(%) | 转化图像的透明程度。值定义转换的比例。值为0%则是完全透明,值为100%则图像无变化。值在0%和100%之间,则是效果的线性乘子,也相当于图像样本乘以数量。 若值未设置,值默认是1。该函数与已有的opacity属性很相似,不同之处在于通过filter,一些浏览器为了提升性能会提供硬件加速。 |
saturate(%) | 转换图像饱和度。值定义转换的比例。值为0%则是完全不饱和,值为100%则图像无变化。其他值,则是效果的线性乘子。超过100%的值是允许的,则有更高的饱和度。 若值未设置,值默认是1。 |
sepia(%) | 将图像转换为深褐色。值定义转换的比例。值为100%则完全是深褐色的,值为0%图像无变化。值在0%到100%之间,则是效果的线性乘子。若未设置,值默认是0; |
url() | URL函数接受一个XML文件,该文件设置了 一个SVG滤镜,且可以包含一个锚点来指定一个具体的滤镜元素。 例如: filter: url(svg-url#element-id) |
好了,本篇关于 纯CSS实现的很酷的光圈沿着按钮轮廓旋绕的按钮 的效果实现的文章就写到这里了 ,希望对您有多帮助! 欢迎评论,收藏和点赞支持!