news 2026/7/2 23:30:38

巧用 CSS 实现高频出现的复杂怪状按钮 - 镂空的内凹圆角边框

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
巧用 CSS 实现高频出现的复杂怪状按钮 - 镂空的内凹圆角边框

在之前,我们有些过这么一篇文章 - 使用 CSS 轻松实现高频出现的各类奇形怪状按钮。

里面包含了如下这些图形:

你可以在这里看到:CodePen Demo -- CSS Various Button Shapes | CSS 各种造型按钮

接下来几篇文章中,将在上述基础上,额外补充一些在日常设计稿中,常见的,可能出现的更为复杂的几个按钮,本文,我们来尝试实现这个造型:

不镂空的内凹圆角按钮

在文章开头的贴图中,其实是有和这个按钮非常类似的造型:

此造型如果内部无需镂空,整体还是比较简单的,利用background: radial-gradient()径向渐变或者mask,都能比较轻松的实现。

我们快速回顾一下,看这样一个简单的例子:

<div></div>
div { background-image: radial-gradient(circle at 100% 100%, transparent 0, transparent 12px, #2179f5 12px); }

可以得到这样一个图形:

所以,只需控制下background-size,在 4 个角实现 4 个这样的图形即可:

<div class="inset-circle">inset-circle</div>
&.inset-circle { background-size: 70% 70%; background-image: radial-gradient( circle at 100% 100%, transparent 0, transparent 12px, #2179f5 13px ), radial-gradient( circle at 0 0, transparent 0, transparent 12px, #2179f5 13px ), radial-gradient( circle at 100% 0, transparent 0, transparent 12px, #2179f5 13px ), radial-gradient( circle at 0 100%, transparent 0, transparent 12px, #2179f5 13px ); background-repeat: no-repeat; background-position: right bottom, left top, right top, left bottom; }

借助 mask 实现渐变的内切圆角按钮

如果背景色要求渐变怎么办呢?

假设我们有一张矩形背景图案,我们只需要使用mask实现一层遮罩,利用mask的特性,把 4 个角给遮住即可。

mask的代码和上述的圆角切角代码非常类似,简单改造下即可得到渐变的内切圆角按钮:

<div class="mask-inset-circle">inset-circle</div>
.mask-inset-circle { background: linear-gradient(45deg, #2179f5, #e91e63); mask: radial-gradient( circle at 100% 100%, transparent 0, transparent 12px, #2179f5 13px ), radial-gradient( circle at 0 0, transparent 0, transparent 12px, #2179f5 13px ), radial-gradient( circle at 100% 0, transparent 0, transparent 12px, #2179f5 13px ), radial-gradient( circle at 0 100%, transparent 0, transparent 12px, #2179f5 13px ); mask-repeat: no-repeat; mask-position: right bottom, left top, right top, left bottom; mask-size: 70% 70%; }

这样,我们就得到了这样一个图形:

镂空的内凹圆角边框

但是,如果要求内部是整体镂空,只展示内凹圆角边框,整个复杂度一下就上来了。

上面的方法以及不适用了,原因在于很难利用mask制造一个不规则的内凹圆角形状进行裁剪,因此,我们必须另辟蹊径。

渐变偏移技巧

在 CSS 高阶小技巧 - 角向渐变的妙用! 一文中,我们介绍了渐变一个非常有意思的偏移技巧:

举个例子,下面是角向渐变conic-gradient()的简单介绍:

{ background: conic-gradient(deeppink, yellowgreen); }

从渐变的圆心、渐变起始角度以及渐变方向上来说,是这样的:

划重点:

从图中可以看到,角向渐变的起始圆心点、起始角度和渐变方向为:

  1. 起始点是图形中心,
  2. 默认渐变角度 0deg 是从上方垂直于圆心的
  3. 渐变方向以顺时针方向绕中心实现

当然,我们也可以控制角向渐变的起始角度以及角向渐变的圆心

稍微改一下上述代码:

{ background: conic-gradient(from 270deg at 50px 50px, deeppink, yellowgreen); }

效果如下:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/2 23:30:26

Web应用安全实战:从密码哈希到数据加密的cryptopasta最佳实践

1. 项目概述&#xff1a;为什么我们需要“cryptopasta”&#xff1f;如果你正在构建一个需要处理用户密码、API密钥、会话令牌或者任何敏感数据的Web应用&#xff0c;那么“安全”这个词&#xff0c;就不再是一个可选项&#xff0c;而是一个必须从第一行代码就开始考虑的基石。…

作者头像 李华
网站建设 2026/7/2 23:28:16

使用74HC165扩展微控制器输入接口的工程实践

1. 复杂系统输入扩展的挑战与解决方案在现代嵌入式系统和工业控制领域&#xff0c;我们经常面临一个经典问题&#xff1a;如何用有限的微控制器I/O引脚管理大量输入信号。以工厂自动化产线为例&#xff0c;一条典型的装配线可能需要监测上百个传感器状态——包括限位开关、光电…

作者头像 李华
网站建设 2026/7/2 23:24:06

应急响应实战:从百万行代码中高效定位与清除隐蔽后门

1. 项目概述&#xff1a;从“救火”到“狩猎”的思维转变在网络安全这个没有硝烟的战场上&#xff0c;应急响应&#xff08;Incident Response, IR&#xff09;从来都不是一份轻松的工作。想象一下&#xff0c;你正享受着周末的宁静&#xff0c;突然接到电话&#xff0c;生产环…

作者头像 李华
网站建设 2026/7/2 23:23:50

Nmap高级技巧:内网隐蔽扫描与防火墙绕过实战指南

1. 项目概述&#xff1a;为什么内网安全需要“隐形”扫描&#xff1f;如果你负责过企业内网的安全评估&#xff0c;或者尝试过在渗透测试中探测目标&#xff0c;大概率会遇到一个头疼的问题&#xff1a;你的扫描行为被对方的防火墙、入侵检测系统&#xff08;IDS&#xff09;或…

作者头像 李华
网站建设 2026/7/2 23:23:43

Nessus漏洞扫描实战:在Kali Linux上评估Windows 0系统安全

1. 项目概述&#xff1a;为什么今天还要折腾Nessus和Win2000&#xff1f; 看到这个标题&#xff0c;你可能会觉得有点“复古”。Nessus作为老牌漏洞扫描器&#xff0c;Win2000更是二十多年前的操作系统&#xff0c;这两者组合在一起&#xff0c;似乎和当下的云原生、零信任安全…

作者头像 李华
网站建设 2026/7/2 23:22:29

C++ 11和C++98相比有哪些新特性

C11标准提供了许多有用的新特性。这篇文章特别针对使C11和C98相比看上去像一门新语言的特性&#xff0c;因为&#xff1a;C11改变了书写C代码的风格和习惯&#xff0c;也改变了设计C库的方式。例如&#xff0c;你会看到更多的被当作参数和返回值的智能指针&#xff0c;还有按值…

作者头像 李华