使用CSS实现圆角渐变边框

使用CSS实现圆角渐变边框

CSS如何实现带圆角渐变边框?下面本篇文章给大家介绍一下使用CSS巧妙实现带圆角的渐变边框的几种方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

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

1.png

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

立即学习“前端免费学习笔记(深入)”;

border-image

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

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

使用 border-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;

得到如下结果:

2.png

border-radius 失效

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

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

A box’s backgrounds, but not its border-image, are clipped to the appropriate curve (as determined by ‘background-clip’). Other effects that clip to the border or padding edge (such as ‘overflow’ other than ‘visible’) also must clip to the curve. The content of replaced elements is always trimmed to the content edge curve. Also, the area outside the curve of the border edge does not accept mouse events on behalf of the element.

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

法一:background-image + 伪元素

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

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

3.gif

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

CSS Backgrounds and Borders Module Level 3

缺点

这个方案有两个问题,第一个是多使用了两个元素(当然在这里是 ::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;}

登录后复制

4.png

因为用到了 background-clip: border-box,所以还需要 background-origin: border-box 使图案完整显示,可以尝试下关掉这个属性,即可明白为什么需要这样做。

CSS Backgrounds and Borders Module Level 3

缺点

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

法三: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;}

登录后复制

效果如下:

5.png

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

法四:border-image + clip-path

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

[clip-path](https://developer.mozilla.org/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 的容器,将这个元素之外的所有东西裁剪掉(即不可见)。

非常完美,效果如下:

6.png

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

7.gif

你可以在我 CSS-Inspiration 看到这个例子:

CSS Backgrounds and Borders Module Level 3

更多编程相关知识,请访问:CSS Backgrounds and Borders Module Level 3!!

以上就是使用CSS实现圆角渐变边框的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2880706.html

(0)
上一篇 2025年3月10日 19:56:20
下一篇 2025年2月25日 12:10:43

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 怎样清除内嵌css样式

    清除内嵌css样式的方法:首先打开css项目并查看包含的一些内嵌css样式;然后打开编辑器;接着利用“style=”(.*?)””正则表达式匹配所有内嵌的样式;最后使用替换工具,替换掉所有内容即可。 本教程操作环境:…

    2025年3月10日
    200
  • CSS如何让鼠标放上时的小手样式

    CSS实现让鼠标放上时出现小手样式的方法:首先创建一个HTML示例文件;然后在body中添加一个span标签;接着给该标签添加“cursor:pointer;”样式来实现让鼠标放上时出现小手样式即可。 本教程操作环境:windows7系统、…

    2025年3月10日
    200
  • 怎样在外连接css文件

    外链接css文件的方法:1、使用link标签链接外部css文件,语句如“”;2、使用@import规则导入外部css文件。 本教程操作环境:windows7系统、HTML5&&CSS3版本,DELL G3电脑。 推荐:css…

    2025年3月10日
    200
  • eclipse css中文乱码怎么办

    eclipse css中文乱码是因为文件编码与字符编码等不匹配造成的,其解决办法:首先打开eclipse;然后在properties中,找到并选择UTF-8;最后点击Apply应用新设置即可。 本教程操作环境:windows7系统、Ecli…

    2025年3月10日 编程技术
    200
  • css如何滚动图片

    css滚动图片的方法:首先设置主体代码各处两组一样的图片;然后设置nav的大小和ul大小;接着定义动画,并增加鼠标悬停和动画暂停的效果;最后给nav增加“overflow:hidden”使得超出的部分隐藏即可。 本教程操作环境:window…

    2025年3月10日
    200
  • 怎么下载网页的css文件

    下载网页css文件的方法:首先按下键盘上的“F12”键打开浏览器的控制台;然后点击控制台顶部导航栏上的“Network”按钮;接着点击控制台上的“CSS”按钮;最后右击需要获取的css文件并进行另存为即可。 本教程操作环境:windows7…

    2025年3月10日 编程技术
    200
  • css 怎么设置div不可点击

    css设置div不可点击的方法:1、通过“event.preventDefault()”方法取消事件的默认动作;2、通过“event.stopPropagation()”方法停止事件的传播。 本教程操作环境:windows7系统、css3版…

    2025年3月10日
    200
  • css怎么让超链接不加下划线

    css让超链接不加下划线的方法:首先创建一个HTML示例文件;然后添加一个a标签;最后给a标签添加“text-decoration:none;”属性即可让超链接去掉下划线。 本教程操作环境:windows7系统、HTML5&&amp…

    2025年3月10日
    200
  • css怎么设置虚线

    css设置虚线的方法:1、创建一个标签,然后给div添加css样式为“border-bottom:red 1px dashed;”;2、通过hr标签设置水平线,然后给hr标签添加border属性即可实现虚线效果。 文中演示环境:宏基s40-…

    2025年3月10日
    200
  • css鼠标样式

    在css中可以通过cursor属性来设置鼠标样式,其实现方法如:首先创建一个HTML示例文件;然后定义一些span标签,并给span标签分别添加style属性;最后通过设置不同的cursor属性值来实现不同的鼠标样式即可。 本文操作环境:宏…

    2025年3月10日
    200

发表回复

登录后才能评论