原来CSS可以这么酷:纯CSS实现的很酷的光圈沿着按钮轮廓旋绕的按钮

首先看下这个 纯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实现的很酷的光圈沿着按钮轮廓旋绕的按钮 的效果实现的文章就写到这里了 ,希望对您有多帮助! 欢迎评论,收藏和点赞支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼仰泳

码字不易,诚待支持,吾道不孤!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值