用纯CSS实现苹果iOS 26的Liquid Glass液体玻璃效果

昨天,苹果在 WWDC 2025 上发布了一款令人惊艳的设计。当我们都在期待下一次 AI 突破时,蒂姆·库克却带来了 iOS 26,并引入了全新的"液体玻璃"设计语言。这一设计更新灵感来源于苹果的 VR 头显 Vision Pro,为所有苹果设备带来了半透明菜单、光泽图标和圆角控件。

但开发者们有个特点------当苹果展示出闪亮的新事物时,我们总会想:"我敢打赌,我可以用 CSS 实现这个。" 🤓

因此,我决定不等 iOS 26 发布,就用纯 HTML 和 CSS 重现苹果的液体玻璃效果。没有 JavaScript,没有复杂框架------只有传统的网页魔法。

液体玻璃为何如此特别?

苹果的液体玻璃采用实时渲染,能动态响应移动并产生高光效果,创造出一种生动且响应迅速的界面。其特点包括具有光泽、反射和透明特性的视觉界面元素,赋予软件更加"玻璃质感"的外观和体验。

关键在于结合多种 CSS 技术,实现透明度、深度和那种让一切感觉高端的微妙"液体"质感之间的完美平衡。

解构 CSS 魔法

1. 基础:创建玻璃效果

html 复制代码
<div class="container">
  <!-- Card base glass -->
  <div class="glass">
    <div class="card-header">
      <div class="icon glass">🎵</div>
      <div>
        <h3 class="card-title">Today's Hits</h3>
        <p class="card-subtitle">Apple Music Hits</p>
      </div>
    </div>
    <div class="music-widget glass">
      <div class="album-cover">♪</div>
      <div style="flex: 1">
        <div style="color: white; font-weight: 500">Current Song</div>
        <div style="color: rgba(255, 255, 255, 0.7); font-size: 14px">Artist Name</div>
      </div>
      <button class="play-btn">▶</button>
    </div>
  </div>

  <div class="glass">
    <div class="card-header">
      <div class="icon glass">📝</div>
      <div>
        <h3 class="card-title">Reminders</h3>
        <p class="card-subtitle">3 items</p>
      </div>
    </div>
    <div class="card-content">
      <div style="margin-bottom: 10px">○ Pick up contacts</div>
      <div style="margin-bottom: 10px">○ Order plant food</div>
      <div>○ Water Monstera</div>
    </div>
  </div>

  <div class="glass">
    <div class="card-header">
      <div class="icon glass">✨</div>
      <div>
        <h3 class="card-title">Glassmorphism</h3>
        <p class="card-subtitle">Modern Design</p>
      </div>
    </div>
    <div class="card-content">
      <p>
        The glass effect relies on transparency, background blur and thin edges to create depth.
      </p>
      <a href="#" class="btn-glass glass">Discover more</a>
    </div>
  </div>
</div>

该效果的核心在于组合多种 CSS 属性:

css 复制代码
.glass {
  position: relative;
  background: rgba(255, 255, 255, 0.15);
  backdrop-filter: blur(2px) saturate(180%);
  border: 1px solid rgba(255, 255, 255, 0.8);
  border-radius: 2rem;
  box-shadow: 0 8px 32px rgba(31, 38, 135, 0.2), inset 0 4px 20px rgba(255, 255, 255, 0.3);
}

每个属性的作用:

  • backdrop-filter: blur() 创建磨砂玻璃模糊效果
  • rgba() 背景提供半透明层级
  • inset box-shadow 添加内发光和深度
  • border: rgba() 创建微妙的玻璃状边缘

2. 液体触感:伪元素魔法

真正的秘诀在于::after伪元素,它创建了液体光泽:

css 复制代码
.glass::after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(255, 255, 255, 0.1);
  border-radius: 2rem;
  backdrop-filter: blur(1px);
  box-shadow: inset -10px -8px 0px -11px rgba(255, 255, 255, 1), inset 0px -9px 0px -8px rgba(255, 255, 255, 1);
  opacity: 0.6;
  z-index: -1;
  filter: blur(1px) drop-shadow(10px 4px 6px black) brightness(115%);
}

这创造了那些让玻璃呈现"液体"质感的微妙高光和反射------仿佛光线正在表面流动。

跨浏览器兼容性

该效果在支持backdrop-filter的现代浏览器中表现良好:

  • ✅ Chrome、Firefox、Safari、Edge
  • ❌ Internet Explorer(但说实话,你上次担心 IE 是什么时候?)

对于旧版浏览器,你可以提供备用样式或使用 polyfill。

完整 css

css 复制代码
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html {
  font-size: 100%;
  scroll-behavior: smooth;
}

body {
  min-height: 100vh;
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  background-image: url('https://images.unsplash.com/photo-1539635278303-d4002c07eae3?crop=entropy&cs=srgb&fm=jpg&ixid=M3wzMjM4NDZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NDk1Njc4NTB8&ixlib=rb-4.1.0&q=85');
  background-size: cover;
  background-position: center center;
  background-repeat: no-repeat;
  background-attachment: fixed;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1.25rem;
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}

/* Background pattern */
body::before {
  content: '';
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-image: radial-gradient(
      circle at 20% 50%,
      rgba(120, 119, 198, 0.3) 0%,
      transparent 50%
    ), radial-gradient(circle at 80% 20%, rgba(255, 119, 198, 0.3) 0%, transparent 50%),
    radial-gradient(circle at 40% 80%, rgba(120, 219, 255, 0.3) 0%, transparent 50%);
  pointer-events: none;
}

.container {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(17rem, 1fr));
  gap: 1.25rem;
  max-width: 62.5rem;
  width: 100%;
}

/* Liquid glass effect class */
.glass {
  position: relative;
  background: rgba(255, 255, 255, 0.15);
  backdrop-filter: blur(2px) saturate(180%);
  border: 0.0625rem solid rgba(255, 255, 255, 0.8);
  border-radius: 2rem;
  padding: 1.25rem;
  box-shadow: 0 8px 32px rgba(31, 38, 135, 0.2), inset 0 4px 20px rgba(255, 255, 255, 0.3);
}

.glass::after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(255, 255, 255, 0.1);
  border-radius: 2rem;
  backdrop-filter: blur(1px);
  box-shadow: inset -10px -8px 0px -11px rgba(255, 255, 255, 1), inset 0px -9px 0px -8px rgba(255, 255, 255, 1);
  opacity: 0.6;
  z-index: -1;
  filter: blur(1px) drop-shadow(10px 4px 6px black) brightness(115%);
  pointer-events: none;
}

/* Content style */
.card-header {
  display: flex;
  align-items: center;
  gap: 0.9375rem;
  margin-bottom: 0.9375rem;
}

.icon {
  position: relative;
  width: 2.5rem;
  height: 2.5rem;
  border-radius: 0.625rem;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1.25rem;
}

.icon::after {
  border-radius: 0.625rem;
}

.card-title {
  font-size: 1.5rem;
  font-weight: 600;
  color: white;
  margin: 0;
}

.card-subtitle {
  font-size: 1.1rem;
  color: white;
  margin: 0.3125rem 0 0 0;
}

.card-content {
  color: white;
  line-height: 1.6;
}

.card-content-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 0.938rem;
  margin-top: 0.938rem;
}

.card-content-icon {
  background: rgba(0, 0, 0, 0.1);
  border-radius: 10px;
  margin: 0 auto 5px;
  display: flex;
  align-items: center;
  justify-content: center;
  aspect-ratio: 1;
}

.btn-glass {
  position: relative;
  color: white;
  padding: 0.75rem 1.5rem;
  border-radius: 0.75rem;
  cursor: pointer;
  transition: all 0.3s ease;
  margin-top: 0.9375rem;
  display: inline-block;
  text-decoration: none;
}

.btn-glass::after {
  border-radius: 0.75rem;
}

.btn-glass:hover {
  background: rgba(255, 255, 255, 0.3);
  transform: scale(1.05);
}

/* Musical Widget */
.music-widget {
  position: relative;
  display: flex;
  align-items: center;
  gap: 0.9375rem;
  padding: 0.9375rem;
  border-radius: 0.9375rem;
  margin-top: 0.9375rem;
}

.music-widget::after {
  border-radius: 0.9375rem;
}

.album-cover {
  width: 3.125rem;
  height: 3.125rem;
  background: linear-gradient(45deg, #ff6b6b, #4ecdc4);
  border-radius: 0.5rem;
  display: flex;
  align-items: center;
  justify-content: center;
  color: white;
  font-weight: bold;
}

.play-btn {
  width: 2.5rem;
  height: 2.5rem;
  background: rgba(255, 255, 255, 0.3);
  border: none;
  border-radius: 50%;
  color: white;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: all 0.3s ease;
}

.play-btn:hover {
  background: rgba(255, 255, 255, 0.5);
  transform: scale(1.1);
}

/* Responsive */
@media (max-width: 550) {
  .container {
    grid-template-columns: 1fr;
  }
}

未来展望

这只是开始!液体玻璃效果为现代网页设计开辟了无限可能。你可以轻松将此技术应用于:

  • 导航菜单
  • 弹出对话框
  • 仪表盘小部件
  • 移动应用界面
  • 着陆页区块

关键在于找到视觉吸引力和可用性之间的平衡------就像苹果做的那样。

总结

在等待 iOS 26 正式发布的同时,我们已经开始将苹果的魔法带到网页上。有时,理解新设计趋势的最佳方式就是卷起袖子亲自构建。

CSS 的妙处在于它赋予我们重现最复杂设计系统的能力。谁知道呢?也许你的下一个项目会让用户不禁双击确认:"等等,这是原生应用还是网站?"

资源与参考

用 ❤️ 和 CSS 魔法制作

你对苹果的新设计方向有何看法?你计划在你的项目中尝试液体玻璃效果吗?在下方评论区告诉我! 👇

原文链接dev.to/kevinbism/r...
作者:Kevin Ramirez

如果您觉得内容对您有帮助,欢迎收藏、点赞、分享

欢迎关注公众号【前端小石匠】,一起学习,共同进步~

相关推荐
阿奇__10 分钟前
element 跨页选中,回显el-table选中数据
前端·vue.js·elementui
谢尔登11 分钟前
【React】SWR 和 React Query(TanStack Query)
前端·react.js·前端框架
断竿散人11 分钟前
专题一、HTML5基础教程-Viewport属性深入理解:移动端网页的魔法钥匙
前端
3Katrina12 分钟前
理解Promise:让异步编程更优雅
前端·javascript
星之金币13 分钟前
关于我用Cursor优化了一篇文章:30 分钟学会定制属于你的编程语言
前端·javascript
天外来物15 分钟前
实战分享:用CI/CD实现持续部署
前端·nginx·docker
moxiaoran575316 分钟前
Spring Cloud Gateway 动态路由实现方案
运维·服务器·前端
市民中心的蟋蟀16 分钟前
第十一章 这三个全局状态管理库之间的共性与差异 【上】
前端·javascript·react.js
vvilkim30 分钟前
Flutter 常用组件详解:Text、Button、Image、ListView 和 GridView
前端·flutter
vvilkim37 分钟前
Flutter 命名路由与参数传递完全指南
前端·flutter