200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 使用CSS实现圆角渐变边框

使用CSS实现圆角渐变边框

时间:2020-03-29 15:00:32

相关推荐

使用CSS实现圆角渐变边框

web前端|css教程

CSS,圆角,渐变边框

web前端-css教程

微信小程序 上墙源码,vscode 编译工具链路径,ubuntu 安装 迅雷,tomcat无法用ip,爬虫json数据,asp在线转php,品牌seo优化代理项目平台,仿快乐麻花手机版wap网站模板,3d翻页效果js模板lzw

CSS如何实现带圆角的渐变边框?下面本篇文章给大家介绍一下使用CSS巧妙实现带圆角的渐变边框的几种方法

uu跑腿源码,vscode 工具链,ubuntu 写c语言,tomcat设备,C 打开sqlite,win设置ftp服务器,好的上传插件,铝型材前端框架,天天基金 爬虫,php微服务框架有哪些,英文黑帽seo,h5响应式网站模板下载,在线制作表白网页,dz论坛模板怎么做,h5 简单页面实例,员工信息管理系统代码,失业的程序员 pdflzw

如何实现下面这个渐变的边框效果:

化妆品展示网站源码,vscode1.23.1,ubuntu 分区格式化,tomcat end,sqlite sum错误,阿里云服务器 石家庄,手机3d轮播插件,bui前端框架教程,免费开源的爬虫软件,PHP粽子,seo黑帽方法,网站系统jsp模板,大学班级网页代码,个人网站制作模板图片,多级多选 页面,mvc cms 后台管理系统,vc获取程序名称lzw

这个问题本身不难,实现的方法也有一些,主要是有一些细节需要注意。

border-image

border-image是 CSS 规范 CSS Backgrounds and Borders Module Level 3 (最新一版的关于 background 和 border 的官方规范) 新增的一个属性值。

顾名思义,我们可以给 border 元素添加 image,类似于background-image,可以是图片也可以是渐变,不再局限于纯色。

使用 border-image 实现渐变边框

有了border-image之后,实现渐变边框变得很方便

实现如下:

.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;

得到如下结果:

border-radius 失效

仔细看上面的 Demo,设置了border-radius: 10px但是实际表现没有圆角。使用border-image最大的问题在于,设置的border-radius会失效。

我们无法得到一个带圆角的渐变边框。原因,查看官方规范 W3C 解释如下:

为此,我们得另辟蹊径或者稍加改进,得到带圆角的渐变边框。

法一:background-image + 伪元素

第一种方法,我们不再使用border-image,而是使用background-image+ 伪元素 的方案,这也是在border-image规范没有出现最常用的方法。

非常简单,简单的示意图如下:

利用background-image实现一个渐变背景,再通过叠加一个白色背景使之形成一个渐变边框。

缺点

这个方案有两个问题,第一个是多使用了两个元素(当然在这里是 ::before 和 ::after),其次最致命的是,如果要求边框內的背景是透明的,此方案便行不通了。

法二,使用 background-clip 实现

第二种方法,使用background-clip: content-box以及background-clip: border-box配合使用。

background-clip:background-clip 设置元素的背景(背景图片或颜色)是否延伸到边框下面。它的部分取值和box-sizing类似。其中,

background-clip: border-box表示设置的背景background-image将延伸至边框background-clip: content-box表示设置的背景background-image被裁剪至内容区(content box)外沿

这里,我们使用设置两个background-image,设置两个background-clip,并且将 border 设置为透明即可:

核心 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使图案完整显示,可以尝试下关掉这个属性,即可明白为什么需要这样做。

缺点

与第一种方法类似,如果要求边框內的背景是透明的,此方案便行不通了。

法三:border-image + overflow: hidden

这个方法也很好理解,既然设置了background-image的元素的border-radius失效。那么,我们只需要给它加一个父容器,父容器设置overflow: hidden+border-radius即可:

.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;}

效果如下:

当然,这里还是多借助了一个元素实现。还有一种方法,可以不使用多余元素实现:

法四:border-image + clip-path

设置了background-image的元素的border-radius失效。但是在 CSS 中,还有其它方法可以产生带圆角的容器,那就是借助clip-path

[clip-path](/zh-CN/docs/Web/CSS/clip-path),一个非常有意思的 CSS 属性。

clip-path CSS 属性可以创建一个只有元素的部分区域可以显示的剪切区域。区域内的部分显示,区域外的隐藏。剪切区域是被引用内嵌的URL定义的路径或者外部 SVG 的路径。

简而言之,这里,我们只需要在border-image的基础上,再利用clip-path裁剪出一个带圆角的矩形容器即可:

.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)

clip-path: inset() 是矩形裁剪inset() 的用法有多种,在这里inset(0 round 10px)可以理解为,实现一个父容器大小(完全贴合,垂直水平居中于父容器)且border-radius: 10px的容器,将这个元素之外的所有东西裁剪掉(即不可见)。

非常完美,效果如下:

当然,还可以利用filter: hue-rotate()顺手再加个渐变动画:

编程视频!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。