Tái Tạo Hiệu Ứng Kính Lỏng (Liquid Glass) Của Apple Với React, CSS & SVG Filters
Lê Lân
0
Khám Phá Hiệu Ứng Liquid Glass Của Apple Với SVG Filters Và React
Mở Đầu
Hiệu ứng Liquid Glass vừa được Apple giới thiệu thực sự tạo nên một luồng gió mới cho thiết kế giao diện. Hiệu ứng này không chỉ làm mọi thứ trở nên hấp dẫn mà còn giúp trải nghiệm người dùng trở nên sống động và chân thực hơn bao giờ hết.
Việc tái hiện hiệu ứng kính thủy tinh chất lỏng (Liquid Glass) không hề đơn giản. Mặc dù chúng ta có thể dễ dàng áp dụng CSS backdrop-filter để làm mờ nền, nhưng việc tạo ra hiệu ứng biến dạng, kéo giãn và uốn cong các điểm ảnh sao cho giống như kính thật thì lại là một thách thức lớn. Bài viết này sẽ giới thiệu chi tiết cách hoạt động, cũng như cách sử dụng SVG Filters, đặc biệt là feDisplacementMap để mô phỏng chính xác hiện tượng đó.
Nội dung sẽ lần lượt đi qua:
Tìm hiểu bản chất hiệu ứng kính thủy tinh
Giới hạn của CSS Filters và lý do chuyển sang SVG Filters
Mô hình toán học bằng trường khoảng cách (Signed Distance Fields)
Cách tạo bản đồ dịch chuyển cho hiệu ứng
Ứng dụng kỹ thuật trong React để tối ưu hóa hiệu suất
Hiệu Ứng Liquid Glass Là Gì?
Bản Chất Của Hiệu Ứng
Hiệu ứng Liquid Glass khiến cho nền phía sau phần tử giao diện bị biến dạng như kính thủy tinh cong, làm các điểm ảnh bị đẩy hoặc kéo theo một quy luật nhất định, giống như kính thật làm méo hình ảnh phía sau nó.
Trên ảnh, mạng lưới bên trái là trạng thái ban đầu, còn bên phải cho thấy cách lưới bị kéo giãn và khúc xạ, trong đó:
Trung tâm kính có hiệu ứng phóng đại
Các vùng quanh viền bị uốn cong
Tất cả điểm ảnh vẫn tồn tại nhưng vị trí và hình dạng thay đổi theo quy luật
Giới Hạn Của Các Bộ Lọc CSS
CSS cung cấp backdrop-filter hỗ trợ các hiệu ứng như mờ (blur), tương phản (contrast), tăng sáng (brightness)... Tuy nhiên, nó không cho phép điều khiển mức độ và hướng dịch chuyển chính xác từng điểm ảnh như yêu cầu của Liquid Glass.
.glass {
backdrop-filter: blur(10px);
}
Các bộ lọc CSS native chỉ xử lý hiệu ứng tổng thể, không thể mô phỏng sự biến dạng chi tiết điểm ảnh.
Do vậy, cần phải dùng đến SVG Filters để mở rộng khả năng xử lý một cách tùy chỉnh.
SVG Filters và feDisplacementMap: Người Điều Khiển Pixel
Cách Hoạt Động Của feDisplacementMap
feDisplacementMap là một bộ lọc SVG đặc biệt, cho phép biến đổi vị trí điểm ảnh dựa trên một bản đồ dịch chuyển (displacement map).