角落展开按钮(背景四角扇形涂抹展开动画源码)

CSS 许可:自研原创

纯 CSS 角落展开按钮:伪元素从左上/右上/左下/右下角斜向放大铺满,扇形涂抹式填充,悬停变装、按压缩回,质感独特。

效果演示(真实可交互)

伪元素从角落斜向放大铺满,按下时回缩

完整代码

HTML 结构:

<button class="ce-btn ce-bl">左下角展开</button>
<button class="ce-btn ce-tr">右上角展开</button>
<button class="ce-btn ce-br">右下角展开</button>

CSS 核心代码(以左下角为例):

.ce-btn {
  position: relative; padding: 13px 32px;
  border: 1.5px solid #4d96ff; color: #7db2ff;
  background: transparent; overflow: hidden; z-index: 1;
  transition: color .3s ease;
}
.ce-btn::before {
  content: ''; position: absolute;
  left: -25%; bottom: -150%;          /* 定位到角落外 */
  width: 150%; height: 300%;          /* 足够大,旋转也不露底 */
  background: linear-gradient(135deg, #4d96ff, #7c5cff);
  transform: scale(0);
  transform-origin: left bottom;      /* 从角落开始生长 */
  transition: transform .4s cubic-bezier(.4,0,.2,1);
  z-index: -1; border-radius: 40%;
}
.ce-btn:hover { color: #fff; }
.ce-btn:hover::before { transform: scale(1); }

右上/右下角只需改 right/top 定位与 transform-origin 即可。

参数说明

参数取值说明
伪元素尺寸150% × 300%放大后仍能盖满按钮,避免露角
角落定位left/bottom: -25%/-150%决定从哪个角展开
transform-originleft bottom 等四角生长原点必须与角落一致
缩放scale(0) → scale(1)从点生长到铺满
动画时长.4s cubic-bezier(.4,0,.2,1)标准缓动,先快后慢
border-radius: 40%伪元素圆角让展开边缘呈弧形而非直角

兼容性与性能

常见问题

Q: 展开时为什么会出现白色小三角? 伪元素缩放中会短暂小于按钮尺寸,角落方向出现空隙;把伪元素做得足够大(150%×300%)并定位到角落外侧即可避免。

Q: 可以做成从左上角展开吗? 可以,把定位改为 left: -25%; top: -150%,transform-origin: left top,其余不变。

Q: 想要更快或带弹性的展开? 弹性可用 cubic-bezier(.34,1.56,.64,1) 或加 keyframes 在 1.0 处回弹到 1.08 再落回 1.0。

Q: 触屏上没 hover 怎么办? 把 :hover 选择器换成 :active 或点击加类名,也可同时保留两种,桌面悬停、移动端点按。

Q: 多个角落展开按钮叠在一起会互相遮挡吗? 每个伪元素都在各自按钮内部且 overflow: hidden,不会溢出;若按钮间间距过小,给伪元素加 border-radius: 40% 让展开边缘呈弧线,视觉更柔和。

许可与来源

  • 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
  • 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
  • 首次发布:2026-09-01 · 最近更新:2026-09-01
  • 修改日志:2026-09-01 首次发布;2026-09-13 补充许可证与来源标注、复制按钮说明与法务页入口
  • 纠错:联系页面 / min@cactus.asia,2 个工作日内核实处理

常见问题

这个组件可以商用吗?

可以。本组件为粤喵自研原创,可免费用于个人和商业项目,无需署名。

浏览器兼容性如何?

支持所有现代浏览器(Chrome / Firefox / Safari / Edge 最新版本)。旧版 IE 不支持 CSS 动画相关特性。

怎么修改动画参数?

直接调整 CSS 中的 animation-duration(时长)、animation-timing-function(缓动曲线)等属性即可,代码中有注释说明。

✍️ 作者与审核