【css】打造倾斜异形按钮:CSS radial-gradient 与抗锯齿实战解析

目录

[第一章 效果以及思路](#第一章 效果以及思路)

[第二章 核心重点:background 之 radial-gradient(径向渐变)详解](#第二章 核心重点:background 之 radial-gradient(径向渐变)详解)

[2.1 radial-gradient 基本概念](#2.1 radial-gradient 基本概念)

[2.2 抗锯齿技巧](#2.2 抗锯齿技巧)

[第三章 源码](#第三章 源码)


第一章 效果以及思路

  • 需求:实现了一款红色倾斜按钮,按钮边角呈现非对称圆角,左右两侧有自然的圆弧补位,文字保持水平规整不跟随按钮倾斜,整体视觉流畅无生硬感,摆脱了传统矩形按钮的单调。
  • 整体思路:整体分为「基础样式重置」「布局居中」「按钮核心样式」「伪元素补位」「文字还原」五个部分:
  1. 样式重置:通过*选择器清除浏览器默认的marginpadding,避免样式干扰;
  2. 布局居中:利用flex布局让按钮在页面水平居中,顶部留出间距保证视觉舒适;
  3. 按钮主体:.skew-btn通过transform: skew(-20deg)实现整体倾斜,设置非对称圆角border-radius: 15px 0 15px 0和背景色;
  4. 圆弧补位:通过::before::after伪元素填补倾斜后按钮两侧的边角空缺,形成完整圆弧;
  5. 文字还原:用span包裹文字并通过transform: skew(20deg)反向倾斜,抵消父元素的倾斜效果,保证文字水平可读。
  • 重点 :伪元素的background属性(径向渐变radial-gradient)是实现圆弧补位的关键,而抗锯齿技巧则是保证视觉质感的核心,接下来展开详细解析。

第二章 核心重点:background 之 radial-gradient(径向渐变)详解

2.1 radial-gradient 基本概念

CSS radial-gradient() 函数

  • 与常用的linear-gradient(线性渐变,沿直线扩散)不同,radial-gradient是从一个指定中心点向外围扩散形成的渐变效果,默认呈现椭圆形状,可通过参数自定义为圆形,常用来实现圆形、圆弧、光晕等视觉效果。
  • 4 个核心参数,逐一解析:
css 复制代码
background: radial-gradient(circle at 0 0, transparent 20px, #ff4d4f 21px);
  • circle:指定径向渐变的形状为「圆形」。如果不指定该参数,默认是「椭圆」,这里需要圆形来匹配按钮的圆角弧度,保证补位效果自然,避免椭圆带来的变形感。
  • at 0 0:指定径向渐变的「中心点位置」,语法格式为at 水平位置 垂直位置(支持像素、百分比、关键字如left/top)。这里0 0对应伪元素的左上角,结合::before的定位bottom: 0; left: -19px;,刚好对应按钮左侧下方的边角补位区域;同理,::after中的at 100% 100%对应伪元素的右下角,匹配按钮右侧上方的补位区域。
  • transparent 20px:第一个「渐变色标」,表示「从中心点到 20px 的范围内 ,填充完全透明色(transparent)」。色标格式为「颜色 值」,这里的20px是该颜色的终止位置,即 0px~20px 区间均为透明。
  • #ff4d4f 21px:第二个「渐变色标」,表示「从距离中心点 21px 的位置开始 ,填充与按钮主体一致的红色(#ff4d4f)」。这里的21px是该颜色的起始位置,即 21px 及以后的区域均为红色。

2.2 抗锯齿技巧

(对比右边都写20px的效果,有很明显的锯齿效果)

  • 关键技巧:相邻色标实现「无缝切割」
  • 小编代码写了两个色标间距仅 1px(20px vs 21px),这并非真正的「渐变」(没有颜色过渡过程),而是利用radial-gradient的色标特性实现了「圆形形状切割」:
  1. 0px~20px:透明区域,形成一个圆形「镂空」,刚好匹配伪元素width: 20px; height: 20px;的尺寸;
  2. 21px 及以后:红色填充区域,由于伪元素的宽高仅 20px,超出部分不会显示,最终呈现出「红色圆形拐角」;
  3. 伪元素通过position: absolute精确定位,与按钮主体无缝衔接,填补了倾斜后按钮边角的空缺,让整体形状更完整。
  4. 若两个色标设置为相同像素(如均为 20px)或间距过大(如 20px vs 25px) ,会出现明显的渐变过渡带,导致边缘模糊、锯齿感凸显。1px 的极小间距让颜色从透明直接切换到红色,几乎无过渡,边缘更锐利,有效减少模糊锯齿。

第三章 源码

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style>
        * {
            margin: 0;
            padding: 0;
        }

        body {
            display: flex;
            justify-content: center;
            align-items: flex-start;
            margin-top: 20px;
        }

        .skew-btn {
            margin: auto;
            position: relative;
            display: inline-block;
            padding: 12px 36px;
            color: #fff;
            font-size: 16px;
            background-color: #ff4d4f;
            border-radius: 15px 0 15px 0;
            transform: skew(-20deg);
        }

        .skew-btn::before {
            content: '';
            position: absolute;
            bottom: 0;
            left: -19px;
            width: 20px;
            height: 20px;
            background: radial-gradient(circle at 0 0,
                    transparent 20px,
                    #ff4d4f 21px);
        }

        .skew-btn::after {
            content: '';
            position: absolute;
            top: 0;
            right: -19px;
            width: 20px;
            height: 20px;
            background: radial-gradient(circle at 100% 100%,
                    transparent 20px,
                    #ff4d4f 21px);
        }

        .skew-btn span {
            display: inline-block;
            transform: skew(20deg);
        }
    </style>
</head>

<body>
    <div class="skew-btn"><span>❆VE❆</span></div>
</body>

</html>
相关推荐
hxjhnct1 小时前
CSS 伪类和伪元素
前端·javascript·css
followYouself2 小时前
ViewPager+Fragment
android·前端
37方寸2 小时前
前端基础知识(HTML、CSS)
前端·css·html
u1301302 小时前
深入解析二维码技术与前端生成方案
前端·二维码
pas1362 小时前
33-mini-vue 更新element的children-双端对比diff算法
javascript·vue.js·算法
小范馆2 小时前
STM32F03C8T6通过AT指令获取天气API-下篇
前端·stm32·esp8266-01s
靓仔建2 小时前
用tdesign-vue-next的t-tree-select做个下拉单选框
javascript·vue.js·tdesign
开开心心_Every2 小时前
无广告输入法推荐:内置丰富词库免费皮肤
服务器·前端·学习·决策树·edge·powerpoint·动态规划
卓怡学长3 小时前
m111基于MVC的舞蹈网站的设计与实现
java·前端·数据库·spring boot·spring·mvc