You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现带发光渐变边框的透明按钮?(基于Tailwind CSS)

问题:如何用镂空div实现带发光渐变边框的透明按钮?

我想要创建一个带有发光渐变边框的按钮,但该按钮需要是透明的。目前我通过在按钮后方放置

元素来实现发光效果与自定义渐变边框,这是我能想到的唯一实现方式。请问是否可以制作一个中间镂空(对应按钮位置)的
作为边框,以此实现border属性无法达成的样式?以下是我当前使用Tailwind CSS编写的代码:

<div className='grid gap-8 items-start justify-center mt-1.5'>
  <div className={`rounded-[8px] m-4 p-0.5 max-w-sm bg-gradient-to-tl from-gradient_2 to-gradient_2_2`}>
    <div className='relative group'>
      <div className={`absolute -inset-2 rounded-lg blur opacity-80  bg-gradient-to-tl from-gradient_2 to-gradient_2_2 group-hover:opacity-100 transition duration-500 group-hover:duration-200`}/>
      <button className={`rounded-[5px] relative px-7 py-2 bg-modal`}>
        <span className='text-text font-bold'>{label}</span>
      </button>
    </div>
  </div>
</div>

解决方案

当然可以用中间镂空的元素实现这种效果,下面给你两种更简洁的Tailwind CSS实现方案:

方案1:背景裁切法(兼容大部分浏览器)

通过嵌套层的背景裁切和内边距,直接把渐变背景转化为镂空边框,同时保留发光效果:

<div class="grid gap-8 items-start justify-center mt-1.5">
  <div class="m-4 group relative">
    <!-- 发光效果层 -->
    <div class="absolute -inset-2 rounded-lg blur opacity-80 bg-gradient-to-tl from-gradient_2 to-gradient_2_2 group-hover:opacity-100 transition duration-500 group-hover:duration-200"></div>
    <!-- 镂空渐变边框按钮 -->
    <button class="relative px-7 py-2 rounded-[5px] bg-transparent">
      <div class="absolute inset-0 rounded-[5px] p-[1px] bg-gradient-to-tl from-gradient_2 to-gradient_2_2">
        <div class="w-full h-full rounded-[5px] bg-modal"></div>
      </div>
      <span class="relative z-10 text-text font-bold">{label}</span>
    </button>
  </div>
</div>

原理说明:外层渐变容器通过p-[1px]留出边框宽度,内层的bg-modal元素填充中间区域,相当于把渐变背景“裁剪”成边框形状,中间被背景色镂空。

方案2:CSS Mask法(代码更简洁)

利用CSS的mask属性组合渐变,直接实现中间镂空的边框效果,减少嵌套层级:

<div class="grid gap-8 items-start justify-center mt-1.5">
  <div class="m-4 group relative">
    <!-- 发光效果层 -->
    <div class="absolute -inset-2 rounded-lg blur opacity-80 bg-gradient-to-tl from-gradient_2 to-gradient_2_2 group-hover:opacity-100 transition duration-500 group-hover:duration-200"></div>
    <!-- 带镂空边框的按钮容器 -->
    <div class="relative px-7 py-2 rounded-[5px]">
      <div class="absolute inset-0 rounded-[5px] bg-gradient-to-tl from-gradient_2 to-gradient_2_2" style="mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); mask-composite: exclude;"></div>
      <span class="relative z-10 text-text font-bold">{label}</span>
    </div>
  </div>
</div>

原理说明:mask属性通过两层线性渐变的组合(mask-composite: exclude),只保留外围的边框区域显示渐变背景,中间区域完全镂空,透出下层的bg-modal背景。

这两种方案都能替代你原来的多层嵌套逻辑,实现透明按钮+渐变发光边框的效果,hover过渡效果也和你原代码保持一致。

内容的提问来源于stack exchange,提问作者Strawb3rry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 01:27:09