Glassmorphism CSS | backdrop-filter trên landing, fallback và contrast chữ

(Cập nhật: 19 tháng 7, 2026 ) glassmorphism backdrop-filter CSS landing page UI accessibility
Kết luận

Kính = rgba trong suốt + backdrop-filter: blur() (và -webkit- khi cần). Landing chỉ nên 1–2 card/nav kính, không phủ toàn trang. Luôn có fallback nền đục + contrast chữ trên ảnh thật. Mobile VN: giảm blur / tắt kính dưới breakpoint nếu scroll giật. Chỉnh nhanh bằng Glassmorphism CSS.

Designer gửi mock “frosted glass” kiểu Apple. Dev copy backdrop-filter: blur(40px) lên hero full-bleed. Trên iPhone cũ / Android 4GB phổ biến ở VN: scroll như slide trình chiếu. Trên desktop: chữ trắng trên mây sáng — đẹp mock, fail thật.

Bài này tập trung card kính trên landing: support, fallback, perf, contrast — không phải lịch sử xu hướng UI.

Bài viết này giúp bạn

  • Viết CSS glass đúng lớp (không nhầm filter)
  • Thêm fallback khi không có backdrop-filter
  • Giữ chữ đọc được trên blur
  • Giới hạn cost GPU mobile
  • Dùng generator rồi tinh chỉnh cho ảnh nền thật

CSS tối thiểu

.glass-card {
  background: rgba(255, 255, 255, 0.22);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border: 1px solid rgba(255, 255, 255, 0.35);
  border-radius: 16px;
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);
}

/* Dark panel trên ảnh sáng */
.glass-card--dark {
  background: rgba(15, 23, 42, 0.45);
  border-color: rgba(255, 255, 255, 0.12);
  color: #f8fafc;
}

Ba thành phần:

  1. Alpha nền — quá thấp = chữ chết; quá cao = hết “kính”
  2. Blur — 8–16px thường đủ card; 30px+ cho hero lớn dễ nặng
  3. Border sáng mỏng — tách cạnh khỏi nền rối

filter: blur() trên chính card sẽ làm mờ chữ bên trong — sai mục tiêu. Phải là backdrop-filter.

✨ Tạo CSS glassmorphism ngay tại đây

Glassmorphism
  

Kéo blur/opacity trên tool Glassmorphism, copy CSS, rồi dán lên ảnh hero thật — slider trên nền caro không đủ để chốt contrast.


Support và fallback

Hỗ trợ chính đã ổn năm 2026, nhưng máy/WebView cũ (in-app Zalo, Facebook) đôi khi hành xử khác. Best practice:

.glass-card {
  /* Fallback: đọc được khi không blur */
  background: rgba(255, 255, 255, 0.92);
}

@supports ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .glass-card {
    background: rgba(255, 255, 255, 0.22);
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
  }
}

Không có blur → card gần đặc, vẫn sạch. Có blur → kính. Đừng để fallback alpha 0.15 — chữ biến mất trên mọi engine.

Checklist hỗ trợ
Hạng mục Làm gì Bỏ sót thì sao
backdrop-filter blur + alpha Không kính — chỉ tấm mờ nếu alpha thấp
-webkit-backdrop-filter Song song Safari cũ Một số WebKit không blur
@supports fallback Nền đục hơn Chữ không đọc được
Nội dung phía sau Ảnh/gradient thật Blur ‘trống’ — chỉ thấy rgba

Contrast chữ trên nền blur

Blur trộn vùng sáng/tối phía sau → độ tương phản thay đổi theo scroll (parallax) hoặc carousel.

Triệu chứngHướng xử lý
Chữ trắng trên trời sángTăng alpha nền hoặc dùng glass tối; thêm overlay linear-gradient dưới chữ
Chữ tối trên ảnh đêmNền trắng alpha cao hơn hoặc text sáng
Cạnh glyph “rung”Giảm blur; tránh text mỏng 12px trên blur mạnh
Pass mock / fail productionĐo contrast trên frame thật, không trên Figma nền solid

Gợi ý thực dụng landing:

  • Headline trên glass: tối thiểu tương phản cảm nhận ~ lớn; body ≥ 16px
  • Có thể text-shadow: 0 1px 2px rgba(0,0,0,0.25) rất nhẹ — không thay nền đủ đục
  • CTA button trên glass: nền button đặc (không kính) để click rõ

Hiệu năng mobile (bối cảnh VN)

Nhiều user xem landing trên 4G + máy tầm trung. backdrop-filter buộc compositor làm việc mỗi frame khi layer kính chồng nội dung chuyển động.

Giảm risk:

  1. Chỉ glass cho pricing card / navbar — không blur 100vh
  2. @media (max-width: 768px) { backdrop-filter: blur(6px); } hoặc tắt kính → nền đặc
  3. Tránh blur(40px) + nhiều card trong grid
  4. will-change không phải phép màu — đừng thêm bừa
  5. Test Chrome remote trên máy thật, không chỉ DevTools throttling CPU

Nếu Lighthouse/INP xấu và glass nằm trên carousel autoplay — tắt autoplay hoặc bỏ blur trước khi tối ưu micro khác.


Case study

Hero agency — đẹp desktop, giật mobile

Blur 24px full-width panel + video nền. Fix: video poster tĩnh trên mobile, panel alpha 0.85 không blur dưới 768px. Conversion không đổi; bounce giảm vì trang cuộn được.

Card giá SaaS

Ba cột glass trên gradient tím. Cột giữa chữ gần không đọc khi gradient sáng. Fix: background: rgba(15,23,42,0.55) + border sáng; CTA solid. Vẫn “glass”, contrast đạt.


Checklist ship

  • Dùng backdrop-filter, không filter lên chữ
  • Có -webkit- và fallback @supports
  • Preview trên ảnh hero sáng + tối
  • Contrast CTA/headline ổn
  • ≤ 2 vùng kính lớn / trang
  • Mobile: blur giảm hoặc tắt
  • Không phụ thuộc kính để phân hierarchy thông tin quan trọng

Liên quan

Bookmark lý do: recipe glass + fallback + contrast + giới hạn perf mobile — đủ để ship landing không chỉ đẹp trên mock.