下面如何实现渐变的边框效果:
这个问题本身并不难,实现的方法也是有一些的,主要是有一些细节需要注意。
边框图像
border-image是CSS规范(官方关于背景和边框规范的最新版本)中的一个新属性值。
顾名思义,我们可以在border元素中添加图片,类似于background-image,可以是图片,也可以是渐变色,不再局限于黑色。
使用border-image实现渐变边框
有了border-image,就可以很方便的实现渐变边框
但要介绍border-image的句型,还需要读者自己去理解。
实现如下:
<div class="border-image"></div>
.border-image {
width: 200px;
height: 100px;
border-radius: 10px;
border-image-source: linear-gradient(45deg, gold, deeppink);
border-image-slice: 1;
border-image-repeat: stretch;
}
上面关于border-image的三个属性可以简写为border-image: Linear-gradient(45deg, gold, deeppink) 1;
得到以下结果:
边界半径失效
仔细看看里面的demo,设置border-radius:10px但是实际表现没有圆角。 使用border-image最大的问题是设置的border-radius会失效。
我们无法获得带圆角的渐变边框。 原因,参见W3C官方规范解释如下:
框的背景(但不是其边框图像)被剪切到适当的曲线(由“background-clip”确定)。 剪裁到边框或填充边缘的其他效果(例如除“可见”之外的“溢出”)也必须剪裁到曲线。 被替换元素的内容总是被修剪到内容边缘曲线。 另外,边框边缘曲线以外的区域代表元素不接受鼠标事件。
为此,我们必须寻找另一种方法或者稍微改进一下,以获得带有圆角的渐变边框。
方法一:背景图片+伪元素
第一种方式,我们不再使用border-image,而是使用background-image + 伪元素的方案,这也是最常用但没有出现在border-image规范中的技术。
很简单,简单的原理图如下:
使用background-image实现渐变背景,然后通过叠加蓝色背景创建渐变边框。
CodePen Demo——bg+overflow实现渐变边框
缺点
该解决方案有两个问题。 第一个是多用了两个元素(当然就是这里的::before和::after),第二个最致命的是如果要求边框内部的背景是透明的,这个方案就行不通了不再了。
方法二、使用background-clip实现
第二种方法是同时使用background-clip: content-box 和background-clip: border-box。
background-clip:background-clip设置元素的背景(背景图像或颜色)是否延伸到边框以下。 它的一些值与 box-sizing 类似。 在,
这里,我们用来设置两个background-image,设置两个background-clips,并将边框设置为透明:
核心CSS:
div {
width: 200px;
height: 100px;
border: solid 10px transparent;
border-radius: 10px;
background-image: linear-gradient(#fee, #fee),
linear-gradient(to right, green, gold);
background-origin: border-box;
background-clip: content-box, border-box;
}
因为使用了background-clip: border-box,所以还需要background-origin: border-box才能让图案完整显示。 您可以尝试关闭此属性以了解为什么需要这样做。
CodePen Demo --background-clip实现渐变边框
缺点
与第一种方法类似,如果要求边框内的背景是透明的,则此方案不起作用。
方法三:border-image+overflow:hidden
这种方法也很容易理解css3透明渐变,因为设置了背景图像的元素的边框半径是无效的。 然后,我们只需要给它添加一个父容器即可,父容器设置为overflow:hidden+border-radius即可:
<div class="border-image-overflow"></div>
.border-image-pesudo {
position: relative;
width: 200px;
height: 100px;
border-radius: 10px;
overflow: hidden;
}
.border-image-pesudo::before {
content: "";
position: absolute;
width: 200px;
height: 100px;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
border: 10px solid;
border-image: linear-gradient(45deg, gold, deeppink) 1;
}
效果如下:
当然,这里还使用了一个元素。 还有另一种方法css3透明渐变,无需使用额外的元素即可实现:
方法四:边框图像+剪辑路径
设置了背景图像的元素的边框半径无效。 但在CSS中,还有另一种方法可以形成圆角容器,那就是使用clip-path。
Clip-path,一个特别有趣的 CSS 属性。
Clip-path CSS 属性创建一个剪切区域,其中只能显示元素的一部分。 显示区域内的部分,隐藏区域外的部分。 剪切区域是通过引用嵌入的 URL 或外部 SVG 路径来定义的。
总之,这里我们只需要在border-image的基础上,使用clip-path剪出一个圆角的圆形容器即可:
<div class="border-image-clip-path"></div>
.border-image-clip-path {
position: relative;
width: 200px;
height: 100px;
border: 10px solid;
border-image: linear-gradient(45deg, gold, deeppink) 1;
clip-path: inset(0 round 10px);
}
解释一下:clip-path: inset(0 round 10px) 。
就完美了,效果如下:
当然,你也可以借助滤镜添加渐变动画:hue-rotate():
你可以在我身上听到这样的例子:
终于
好了,这篇文章就到此结束了,希望对你有帮助:)
更多精彩CSS技术文章汇总在我的Github——iCSS中,持续更新。 欢迎点击星星订阅合集。
更多精彩有趣的CSS效果,欢迎大家来这里看看。
如果还有疑问或者建议,可以多沟通。 原创文章写作水平有限,知识匮乏。 如果文章中有任何不准确的地方,请告诉我。
在CSS中,可以使用background-image属性来实现颜色渐变到透明的效果。
具体方式是使用线性渐变函数,该函数接受两种或多种颜色作为参数,并在这些颜色之间执行线性渐变。
例如,要从黄色淡入透明,可以使用以下代码:
.my-element { background-image: linear-gradient(to bottom, blue, transparent); }
这会在 .my-element 元素的背景上创建从黄色到透明的渐变。
您还可以使用 rgba 颜色表示法指定透明度。 例如,要从半透明黄色渐变为完全透明,可以使用以下代码:
.my-element { background-image: linear-gradient(to bottom,
在CSS中,可以使用background-image属性来实现颜色渐变到透明的效果。 具体方式是使用线性渐变函数,该函数接受两种或多种颜色作为参数,并在这些颜色之间执行线性渐变。 例如,要获得从黄色到透明的渐变,请使用以下代码: .my-element{background-image:linear-gradient(tobottom,blue,transparent);} 这将在背景上创建从黄色到底部的渐变.my-element 元素的渐变效果为透明。 您还可以使用 rgba 颜色表示法指定透明度。 例如,要从半透明黄色渐变到完全透明css3 透明渐变,可以使用以下代码: .my-element{background-image:linear-gradient(tobottom,
在CSS中,可以使用background-image属性来实现颜色渐变到透明的效果。 具体方式是使用线性渐变函数,该函数接受两种或多种颜色作为参数,并在这些颜色之间执行线性渐变。 例如,要获得从黄色到透明的渐变,请使用以下代码: .my-element{background-image:linear-gradient(tobottom,blue,transparent);} 这将在背景上创建从黄色到底部的渐变.my-element 元素的渐变效果为透明。 您还可以使用 rgba 颜色表示法指定透明度。 例如css3 透明渐变,要从半透明黄色渐变到完全透明,可以使用以下代码: .my-element{background-image:linear-gradient(tobottom,