CSS样式:渐变色圆角边框

news2025/1/24 17:40:37

目录

    • 预期效果
    • 解决方法
      • 1.两层元素:外层渐变背景+圆角+内边距,里层圆角+背景色
      • 2.伪元素:background-clip属性+伪元素+定位+元素本身背景(以伪元素背景色做边框)
      • 3.单层元素: background-clip+background-iamge+background-origin
      • 番外:clip-path属性

预期效果

​​​​在这里插入图片描述
最近遇到一个css样式,最终需要实现渐变色+圆角的边框,最开始我的想法是通过border-image和border-radius实现这种效果,后来发现这两个属性竟然不兼容。
border-image
border-image与border-radius属性分别可以实现渐变或圆角,但是不能一起用于渐变圆角边框(如图)。
在这里插入图片描述
官方给了一长串的解释,总的来说就是如果通过border-image属性给边框填充颜色,那么border-radius的裁剪效果就失效了。

贴了一个在线演示的地址,有兴趣的童鞋可以看一下
codepen演示地址:https://codepen.io/szy018/pen/MWGavvM

解决方法

反手贴一个在线地址,所有方法的代码都在里面,请自取。
codepen演示地址:https://codepen.io/szy018/pen/oNdjogm

1.两层元素:外层渐变背景+圆角+内边距,里层圆角+背景色

还是贴个代码吧,防止被骂:

  <div class="example1 out">
    <div class="in">两层元素</div>
  </div>
  
.example1 {
  &.out {
    padding: 4px;
    border-radius: 99px;
    background: linear-gradient(to right, red, blue);
  }
  .in {
    width: 100%;
    height: 100%;
    background: #fff;
    border-radius: 99px;
  }
}
.box {
  width: 200px;
  height: 50px;
  line-height: 50px;
  text-align: center;
  margin-right: 20px;
}

这种方法其实是将外层元素的内边距当作边框,由于外层元素背景是渐变色,视觉上就做到了渐变色的圆角边框。
在这里插入图片描述
由于是用内边距做的边框,多少会有点瑕疵,像下图(左边为内边距做边框),可以看到内边距左边框的内角没有真正的边框内角丝滑。
是因为这是两个元素且大小不一样,所以需要分别计算两个元素的圆角大小才能百分百还原边框。
在这里插入图片描述
缺点:这种方法需要里外两个元素,而且内容背景不可以透明(否则会暴露出外层元素的背景色)。最最重要的是内外层元素圆角大小需要计算(多少有点麻烦)。总的来说,不推荐(因为我就是用的这个方法)。

2.伪元素:background-clip属性+伪元素+定位+元素本身背景(以伪元素背景色做边框)

所有方法的代码都贴在那个地址里了哦,所有box类的样式都是一样的,这里就不贴了

 <div class="example2 box">伪元素</div>
 
.example2 {
  border: 4px solid transparent;
  position: relative;
  border-radius: 99px;
  background-color: #fff;
  background-clip: padding-box;
  &::before {
    content: "";
    position: absolute;
    top: 0;
    right: 0;
    left: 0;
    bottom: 0;
    z-index: -1;
    margin: -4px;
    border-radius: 99px;
    background: linear-gradient(to right, red, blue);
  }
}

background-clip属性非常好用,译名背景剪辑,它可以决定显示那一部分的元素背景,默认为border-box(边框及边框以内)。还有两个属性padding-box(内边距及内边距以内),content-box(文本内容区域)。
我们可以通过伪元素,将伪元素全部显示,而元素本身使用padding-box属性值,元素本身给一个透明色的边框,防止伪元素因为超出元素区域显示不出来。
就可以实现以下效果(显示的是伪元素的背景,但是区域是元素本身真实的边框区域)
在这里插入图片描述
缺点:和方法以一样,内容背景不可以透明

background-clip兼容性还是很好的:

3.单层元素: background-clip+background-iamge+background-origin

这个方法强烈推荐,简洁优雅

.example3 {
  border: 4px solid transparent;
  border-radius: 99px;
  background-clip: padding-box, border-box;
  background-origin: padding-box, border-box;
  background-image: linear-gradient(to right, #fff, #fff),
  linear-gradient(to right, #8f41e9, #578aef);
}

背景属性都可以设置多个值,通过逗号分割。从左到右显示优先级依次递减,即先声明的背景会遮盖住后声明的背景。那我们就可以通过声明两个背景实现渐变色圆角边框,通过background-image设置两个背景色,然后使用background-clip属性设置第一个背景显示padding-box区域,第二个背景显示border-box区域(效果如图)。
在这里插入图片描述
缺点:还是内容背景不可以透明

以上三种方法都有个致命的缺点,由于都是背景填充作为边框,所以无法做到背景透明。

番外:clip-path属性

以上就是渐变色圆角边框的解决方法,由于这些方法都没法做到透明背景色,我查到了clip-path属性(裁剪属性)。

clip-path属性: 使用裁剪方式创建元素的可显示区域,区域内的部分显示,区域外的隐藏。

裁剪属性可以做到裁剪元素内容为自己想要的区域,他有一个inset()属性。例如,inset(0 round 10px),裁剪一个元素,大小为紧贴着这个元素(即0,相当于该元素相同大小),且边框为10px的圆角(round 10px)。
元素本身为矩形,但是因为裁剪属性只裁剪到10px的圆角边框,所以多余的部分就被隐藏掉了(如图)。
在这里插入图片描述
虽然无法实现全圆角边框渐变,但可以实现矩形圆角渐变+透明背景。

以下是clip-path属性兼容性(不太行,几乎所有浏览器都需要加前缀):

暂时还未发现有啥纯css方法可以实现 全圆角渐变色边框+内容背景透明
如果以后发现了,我会更新在下方。或者有大佬知道做法的,可以指导一下我,谢谢各位小伙伴。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/407880.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PDF.js 预览pdf文件流预览pdf,及ie浏览器兼容性问题,解决方案!!(开发笔记)

一、 官网下载pdf.js &#xff1a;Getting Started 注意&#xff1a; 这俩包 都不支持ie&#xff0c;因为用的是es6&#xff0c;ie解析不出来 下完以后引进去。下面为省事 找几个市面上常用的方法&#xff1a; 1、文件流转base64的 这是在自己的js请求里面 //PDFdata 是a…

Nginx超时配置

Nginx主要有四类超时设置&#xff1a;客户端超时设置、DNS解析超时设置、代理超时设置&#xff0c;如果使用ngx_lua&#xff0c;则还有lua相关的超时设置。 1&#xff0e;客户端超时设置 对于客户端超时主要设置有读取请求头超时时间、读取请求体超时时间、发送响应超时时间、…

vue项目 升级依赖包

项目维护过程中&#xff0c;可能会因为依赖包存在漏洞而升级依赖&#xff0c;或者因为需要高本版中提供的新特性而升级依赖。 在升级依赖之前&#xff0c;可以先执行 npm outdated 命令&#xff0c;查看当前哪些已安装软件包版本过时了。 标签释义current代表当前版本号want…

【面试】什么是网关/服务网关?网关/服务网关的作用是什么?

文章目录一、前言二、网关2.1 什么是网关&#xff1f;2.2 网关的作用是什么&#xff1f;2.3 网关的工作流程2.4 软件系统网关三、什么是服务网关四、为什么需要服务网关五、服务网关应用一、前言 对于网关&#xff0c;从专业角度&#xff0c;一般运维和网络管理员会比较了解一…

vant官网-vant ui 首页-移动端Vue组件库

Vant 是有赞前端团队开源的移动端vue组件库&#xff0c;适用于手机端h5页面。 鉴于百度搜索不到vant官方网址&#xff0c;分享一下vant组件库官网地址&#xff0c;方便新手使用 vant官网地址https://vant-contrib.gitee.io/vant/#/zh-CN/ 通过 npm 安装 在现有项目中使用 V…

【JavaScript】JS实用案例分享:输入智能提示 | 打字机输出效果

CSDN话题挑战赛第2期 参赛话题&#xff1a;学习笔记 &#x1f5a5;️ NodeJS专栏&#xff1a;Node.js从入门到精通 &#x1f5a5;️ 博主的前端之路&#xff08;源创征文一等奖作品&#xff09;&#xff1a;前端之行&#xff0c;任重道远&#xff08;来自大三学长的万字自述&am…

前端Vue之发布订阅模式

目录 1.什么是发布订阅模式 2.实现简单的发布订阅 3.收集更新函数 4.触发更新函数 5.总结 一个响应式数据可能会有多个视图部分都需要依赖&#xff0c;也就是响应式数据变化之后&#xff0c;需要执行的更新函数可能不止一个&#xff0c;对于这种情况&#xff0c;有必要学习…

node使用管理神器NVM安装配置超详细步骤(window10)

使用NVM对node进行版本管理前言一、什么是nvm&#xff1f;二、nvm下载安装配置1.下载2.nvm解压安装3.检查环境变量4.确认安装成功5.设置和安装node5.1 设置淘宝镜像5.2 安装node指定版本并使用5.2.1 执行以下命令自动安装指定版本的node和npm&#xff1a;5.2.2 查看已经安装的n…

Vue3.0项目——打造企业级音乐App(一)Tab栏、轮播图、歌单列表、滚动组件

系列文章目录 内容参考链接Vue3.0 项目启动Vue3.0 项目启动&#xff08;打造企业级音乐App&#xff09;Vue3.0项目——打造企业级音乐App&#xff08;一&#xff09;Tab栏、轮播图、歌单列表、滚动组件Vue3.0项目——打造企业级音乐App&#xff08;二&#xff09;图片懒加载、…

路由守卫的详解

路由守卫总共有7个 全局路由守卫: beforeEach 前置守卫 affterEach 后置守卫 beforeResolve 解析守卫 路由的守卫 beforeRouterEnter 进入组件之前触发,在Created前面 beforeRouterUpdated 路由更新但是内容不会改变 beforeRouterLeave 离开之前触发,在beforeDestory之前…

vue3 - ref和reactive的区别

文章搬运自wx60d4764eb475e 的vue3中ref和reactive的区别&#xff08;系列六&#xff09; 1. ref和reactive区别: 如果在template里使用的是ref类型的数据, 那么Vue会自动帮我们添加.value 如果在template里使用的是reactive类型的数据, 那么Vue不会自动帮我们添加.val…

ErrorCaptureStackTrace(err); Error [ERR_MODULE_NOT_FOUND]: Cannot find module

目录结构 main.js import { Name, say, Person } from ./testconsole.log(Name)test.js const Name life function say() {console.log(Mine) } let Person { name: good }export { Name, say, Person }问题分析 步骤有点啰嗦&#xff0c;犯错的原因其实就很简单&#xff…

Vue自定义指令原来这么简单

本篇学习目标 能够了解组件进阶知识能够掌握自定义指令创建和使用能够完成tabbar案例的开发 1. 组件进阶 1.0 组件进阶 - 动态组件 目标: 多个组件使用同一个挂载点&#xff0c;并动态切换&#xff0c;这就是动态组件 需求: 完成一个注册功能页面, 2个按钮切换, 一个填写注册…

微信小程序(四)--- 自定义组件详解(properties,数据监听器,纯数据字段,插槽,父子间通信,behaviors)

目录 一、创建组件 二、引用组件 1、局部引用 2、全局引用 三、组件和页面的区别 四、组件样式隔离 1、注意点 2、修改组件的样式隔离选项 五、数据、方法、属性 1、data数据 2、methods方法 3、properties属性 4、data和properties的区别 5、使用setData修改proper…

AndroidStudio网格布局(制作计算机界面)

目录 网格布局特点&#xff08;类似于表格&#xff09; 常用属性&#xff1a; 针对布局的属性 针对子控件的属性 实例演示 创建一个安卓应用插入一张背景图片&#xff08;可以不加&#xff09; 打开字符串资源文件 strings.xml改应用标题名字&#xff08;可不改&#xf…

uniapp微信公众号h5微信授权登录

前言 在微信客户端中访问第三方网页&#xff0c;公众号可通过微信网页授权机制&#xff0c;来获取用户基本信息&#xff0c;进而实现业务逻辑。 关于公众号网页授权前期准备&#xff1a; 1.微信公众号开发&#xff0c;首先要搞一个公众号&#xff0c;开发阶段可以申请一个公众…

element ui+vue实现导航栏菜单以及页面跳转

关于博主&#xff1a; 不知道算不算的上入门&#xff0c;就是刚刚学习vue框架&#xff0c;断断续续的学习&#xff0c;所以有些地方讲的不正确也欢迎大家批评斧正&#xff0c;希望与大家共同进步 问题描述 对于初学前端的我们来说搭建一个路由导航界面还是比较困难的&#xf…

Web基础知识

1&#xff0c;Web基本概念和常识 ①web应用&#xff1a;网站&#xff08;广义上的PC&#xff0c;手机app&#xff09; ②浏览器&#xff08;Browser&#xff09;&#xff1a;也称用户代理&#xff0c;web客户端&#xff0c;主要有IE、Edge、Chrome、Firefox、腾讯浏览器&#x…

nvm 安装使用及配置淘宝下载镜像

NVM介绍 NVM全称node.js version management &#xff0c;专门针对node版本进行管理的工具&#xff0c;通过它可以安装和切换不同版本的node.js。 MVM下载 githhub下载地址&#xff0c;选择nvm-setup.zip&#xff1a;安装版&#xff0c;推荐使用 https://github.com/coreyb…

Antv X6 动态连线

这是我实际开发项目中&#xff0c;利用 X6 开发的一个关系图。具备连线功能。这里我尽可能全的记录整个开发思路和部分编码&#xff0c;如果你也用了 X6 希望对你有帮助。 创建画布 代码有删减&#xff0c;以下展示的代码全都有删减 index.vue <template><div id&q…