【Web前端】CSS实现毛玻璃效果

链接:个人博客

一、核心样式定义

css 复制代码
/* 定义设计变量 */
:root {
  --sidebar-bg: rgba(255, 255, 255, 0.7); /* 背景透明度 */
  --blur-intensity: blur(12px) saturate(120%); /* 模糊强度+饱和度增强 */
  --border-color: rgba(255, 255, 255, 0.2); /* 边框颜色 */
}

/* 基础毛玻璃类 */
.glass-effect {
  background: var(--sidebar-bg);
  backdrop-filter: var(--blur-intensity);
  -webkit-backdrop-filter: var(--blur-intensity); /* Safari 兼容 */
  border: 1px solid var(--border-color);
}

二、使用方式

html 复制代码
<!-- 在模板中直接应用基础类 -->
<div class="assistant-sidebar glass-effect">
  <!-- 内容 -->
</div>

<!-- 或通过@apply复用 -->
<style scoped>
.custom-element {
  @apply glass-effect;
  /* 可添加额外样式 */
  box-shadow: 0 8px 32px rgba(0,0,0,0.1);
}
</style>

三、效果调整

css 复制代码
/* 调整模糊强度 */
--blur-intensity: blur(20px); /* 增大模糊值 */

/* 修改背景透明度 */
--sidebar-bg: rgba(200, 200, 200, 0.5); /* 灰色调半透明 */

/* 增强视觉效果 */
box-shadow: 
  0 0 12px rgba(255,255,255,0.3) inset, /* 内发光 */
  0 8px 24px rgba(0,0,0,0.2); /* 外阴影 */

四、应用场景

  1. 侧边栏容器(.assistant-sidebar)
    • 固定定位 + 垂直居中
    • 组合使用毛玻璃与阴影效果
  2. 弹窗组件(.donate-popover)
    • 继承基础毛玻璃样式
    • 添加居中文本排版样式
  3. 图标容器(.icon-wrapper) -双层背景叠加:var(--icon-bg) + backdrop-filter: blur(6px) -悬停状态增强透明度变化

五、整体样式代码

css 复制代码
/* ================= 设计变量 ================= */
:root {
  /* 主容器背景透明度 */
  --sidebar-bg: rgba(255, 255, 255, 0.7);
  /* 图标默认背景 */
  --icon-bg: rgba(255, 255, 255, 0.5);
  /* 图标悬停背景 */
  --icon-hover-bg: rgba(255, 255, 255, 0.9);
  /* 边框颜色(半透明白) */
  --border-color: rgba(255, 255, 255, 0.2);
  /* 基础阴影效果 */
  --shadow-base: 0 8px 32px rgba(0, 0, 0, 0.1);
  /* 悬停阴影效果 */
  --shadow-hover: 0 6px 20px rgba(0, 0, 0, 0.12);
  /* 毛玻璃模糊强度(含饱和度增强) */
  --blur-intensity: blur(12px) saturate(120%);
}

/* ================ 毛玻璃基础样式 ================ */
.glass-effect {
  background: var(--sidebar-bg);
  /* 现代浏览器毛玻璃效果 */
  backdrop-filter: var(--blur-intensity);
  /* Safari 兼容方案 */
  -webkit-backdrop-filter: var(--blur-intensity);
  /* 微妙的边框增强层次感 */
  border: 1px solid var(--border-color);
}

/* ================ 侧边栏主容器 ================ */
.assistant-sidebar {
  position: fixed;
  /* 固定定位脱离文档流 */
  left: 20px;
  /* 左侧间距 */
  top: 50%;
  /* 垂直居中定位 */
  transform: translateY(-50%);
  /* 精确垂直居中 */
  border-radius: 16px;
  /* 圆角大小 */
  padding: 12px 8px;
  /* 内边距 */
  transition: all 0.3s ease;
  /* 平滑过渡动画 */
  z-index: 1000;
  /* 确保在最顶层 */
  box-shadow: var(--shadow-base);
  /* 基础投影 */
  @apply glass-effect;
  /* 应用毛玻璃效果 */

}

/* ================ 图标容器样式 ================ */
.icon-wrapper {
  position: relative;
  /* 相对定位用于子元素定位 */
  cursor: pointer;
  /* 手型光标指示可交互 */
  width: 40px;
  /* 固定尺寸 */
  height: 40px;
  display: flex;
  /* 弹性布局居中内容 */
  align-items: center;
  justify-content: center;
  border-radius: 8px;
  /* 圆角匹配主容器 */
  background: var(--icon-bg);
  /* 使用变量背景 */
  backdrop-filter: blur(6px);
  /* 图标级模糊效果 */
  border: 1px solid rgba(159, 152, 152, 0.2);
  /* 图标容器边框 */
  box-shadow:
    0 0 0 1px rgba(159, 152, 152, 0.2) inset;
  /* 内嵌阴影增强层次 */

  &:hover {
    border-color: rgba(255, 255, 255, 0.4);
    /* 悬停时边框高亮 */
  }

  /* 复合过渡效果 */
  transition: background 0.3s,
  /* 背景色过渡 */
  box-shadow 0.3s,
  /* 阴影过渡 */
  transform 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94);
  /* 弹性动画 */

  /* 悬停状态增强 */
  &:hover {
    background: var(--icon-hover-bg);
    /* 高亮背景 */
    box-shadow:
      var(--shadow-hover),
      /* 扩散阴影 */
      0 0 0 2px rgba(255, 255, 255, 0.4);
    /* 内发光效果 */
    transform: translateY(-3px);
    /* 上移3像素 */
  }
}
相关推荐
JinSo6 分钟前
alien-signals 系列 —— 认识下一代响应式框架
前端·javascript·github
开心不就得了12 分钟前
Glup 和 Vite
前端·javascript
szial14 分钟前
React 快速入门:菜谱应用实战教程
前端·react.js·前端框架
西洼工作室20 分钟前
Vue CLI为何不显示webpack配置
前端·vue.js·webpack
黄智勇1 小时前
xlsx-handlebars 一个用于处理 XLSX 文件 Handlebars 模板的 Rust 库,支持多平台使
前端
brzhang2 小时前
为什么 OpenAI 不让 LLM 生成 UI?深度解析 OpenAI Apps SDK 背后的新一代交互范式
前端·后端·架构
brzhang3 小时前
OpenAI Apps SDK ,一个好的 App,不是让用户知道它该怎么用,而是让用户自然地知道自己在做什么。
前端·后端·架构
井柏然3 小时前
前端工程化—实战npm包深入理解 external 及实例唯一性
前端·javascript·前端工程化
IT_陈寒4 小时前
Redis 高性能缓存设计:7个核心优化策略让你的QPS提升300%
前端·人工智能·后端
井柏然4 小时前
从 npm 包实战深入理解 external 及实例唯一性
前端·javascript·前端工程化