CSS Photo Filters — Biến ảnh bằng vài dòng CSS
Jason Nguyen
Ngày công bố: 22/11/2025
Tác giả
Ngày công bố: 22/11/2025
CSS Photo Filters — Biến Ảnh Bằng Vài Dòng CSS
Bạn không cần phải là một chuyên gia Photoshop hay dùng các phần mềm chỉnh ảnh phức tạp chỉ để tạo ra những bức ảnh đẹp mắt. Với CSS, bạn có thể áp dụng hàng loạt hiệu ứng lọc ảnh (photo filters) chỉ bằng vài dòng code đơn giản. Từ hiệu ứng đen trắng classic, sepia hoài cổ, đến các bộ lọc Instagram-inspired như Nashville hay Valencia — tất cả đều nằm trong tầm tay bạn. Bài viết này sẽ hướng dẫn bạn từ cơ bản đến nâng cao cách sử dụng CSS filters để biến những bức ảnh thường thành những tác phẩm nghệ thuật ấn tượng, ngay trên trình duyệt.
1. CSS Filter là gì?
CSS filter là một thuộc tính CSS cho phép bạn áp dụng các hiệu ứng đồ họa lên các phần tử HTML, đặc biệt là hình ảnh (thẻ <img>). Các hiệu ứng này bao gồm làm mờ, thay đổi độ sáng, tương phản, bão hòa màu, xoay màu, và nhiều hiệu ứng khác. CSS filter hoạt động dựa trên các hàm (functions) và có thể kết hợp nhiều hàm cùng lúc để tạo ra các bộ lọc phức tạp.
Cú pháp cơ bản:
img {
filter: <filter-function> [<filter-function>]*;
}
2. Các hàm Filter cơ bản
2.1. blur() — Làm mờ ảnh
Hàm blur() làm mờ hình ảnh với bán kính được chỉ định. Giá trị càng lớn, ảnh càng mờ.
img {
filter: blur(4px);
}
Ví dụ: Ảnh với độ mờ 2px, 4px, và 8px
2.2. brightness() — Điều chỉnh độ sáng
Giá trị từ 0% đến 100% (tối đen đến ảnh gốc). Trên 100% làm ảnh sáng hơn.
img {
filter: brightness(150%); /* Sáng hơn 50% */
}
2.3. contrast() — Điều chỉnh độ tương phản
Giá trị từ 0% (xám toàn bộ) đến 100% (ảnh gốc). Trên 100% tăng độ tương phản.
img {
filter: contrast(200%); /* Tăng gấp đôi độ tương phản */
}
2.4. saturate() — Điều chỉnh độ bão hòa màu
Giá trị từ 0% (ảnh đen trắng) đến 100% (ảnh gốc). Trên 100% tăng độ bão hòa.
img {
filter: saturate(300%); /* Màu sắc sống động hơn */
}
2.5. grayscale() — Ảnh đen trắng
Giá trị từ 0% (màu) đến 100% (đen trắng hoàn toàn).
img {
filter: grayscale(100%); /* Ảnh đen trắng */
}
2.6. sepia() — Hiệu ứng hoài cổ
Giá trị từ 0% đến 100% (ảnh nâu cổ điển).
img {
filter: sepia(80%);
}
2.7. hue-rotate() — Xoay vòng màu
Xoay các góc màu theo số độ (0 đến 360).
img {
filter: hue-rotate(180deg); /* Đảo ngược màu sắc */
}
2.8. invert() — Đảo ngược màu sắc
Giá trị từ 0% đến 100%.
img {
filter: invert(100%); /* Ảnh âm bản */
}
3. Kết hợp nhiều Filters để tạo hiệu ứng độc đáo
Bạn có thể kết hợp nhiều hàm filter cùng lúc, cách nhau bởi dấu cách, để tạo ra các hiệu ứng phức tạp và đẹp mắt.
/* Hiệu ứng vintage */
img {
filter: sepia(50%) contrast(120%) brightness(110%) saturate(80%);
}
/* Hiệu ứng ảnh Polaroid mờ */
img {
filter: contrast(110%) brightness(110%) saturate(130%);
}
/* Hiệu ứng film noir */
img {
filter: grayscale(80%) contrast(150%) brightness(90%);
}
/* Hiệu ứng neon */
img {
filter: contrast(200%) saturate(300%) hue-rotate(-20deg);
}
4. Tạo bộ lọc kiểu Instagram với CSS
Dưới đây là một số bộ lọc nổi tiếng được chuyển đổi sang CSS:
Nashville
img {
filter: sepia(20%) contrast(110%) brightness(105%) saturate(130%) hue-rotate(-5deg);
}
Valencia
img {
filter: sepia(15%) contrast(110%) brightness(105%) saturate(120%);
}
X-Pro II
img {
filter: sepia(30%) contrast(130%) brightness(110%) saturate(150%) hue-rotate(-10deg);
}
Toaster
img {
filter: sepia(40%) contrast(140%) brightness(115%) saturate(160%) hue-rotate(-15deg);
}
Hudson
img {
filter: contrast(120%) brightness(110%) saturate(130%) hue-rotate(-5deg) sepia(10%);
}
5. Filter với animation và transition
Bạn có thể tạo hiệu ứng chuyển đổi mượt mà bằng cách kết hợp filter với CSS transition hoặc animation.
/* Transition khi hover */
img {
transition: filter 0.5s ease;
}
img:hover {
filter: sepia(100%) saturate(300%) hue-rotate(20deg);
}
/* Animation chạy vô hạn */
@keyframes rainbow {
0% { filter: hue-rotate(0deg); }
50% { filter: hue-rotate(180deg); }
100% { filter: hue-rotate(360deg); }
}
img {
animation: rainbow 5s linear infinite;
}
6. Sử dụng CSS Filter cho background-image và các phần tử khác
Bạn có thể áp dụng filter cho bất kỳ phần tử nào, không chỉ ảnh.
/* Làm mờ background */
.hero {
background-image: url('background.jpg');
filter: blur(4px);
}
/* Làm mờ nền mà vẫn giữ nội dung sắc nét (dùng pseudo-element) */
.hero {
position: relative;
}
.hero::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image: url('background.jpg');
filter: blur(8px) brightness(70%);
z-index: -1;
}
7. Drop-shadow — Hiệu ứng đổ bóng
drop-shadow() tương tự như box-shadow nhưng hoạt động trên cả các phần tử trong suốt (PNG), tạo hiệu ứng đổ bóng chính xác cho nội dung của ảnh.
img {
filter: drop-shadow(5px 5px 10px rgba(0, 0, 0, 0.4));
}
8. Tối ưu hiệu suất
CSS filters khá mạnh mẽ nhưng cũng có thể ảnh hưởng đến hiệu suất, đặc biệt với nhiều ảnh cùng lúc. Một vài lưu ý:
- Sử dụng
will-change: filterđể gợi ý cho trình duyệt tối ưu. - Tránh áp dụng filter lên các phần tử lớn hoặc đang chuyển động.
- Thử nghiệm và kiểm tra hiệu suất trên các thiết bị yếu.
9. Kết hợp Filter với Canvas và WebGL
Với những hiệu ứng phức tạp hơn (ví dụ: lọc ảnh theo thời gian thực, xử lý pixel), bạn có thể kết hợp CSS filter với HTML Canvas hoặc WebGL. CSS filter có thể được dùng như một lớp overlay hoặc pre-processing.
10. Demo: Thư viện ảnh với bộ lọc CSS tương tác
Dưới đây là một thư viện ảnh tương tác đơn giản. Bạn có thể dùng JavaScript để thay đổi filter khi người dùng click vào nút hoặc chọn từ dropdown.
<div class="gallery">
<img src="photo1.jpg" class="filter-demo" />
<div class="controls">
<button data-filter="grayscale(100%)">Black & White</button>
<button data-filter="sepia(80%)">Sepia</button>
<button data-filter="blur(3px)">Blur</button>
<button data-filter="brightness(150%) contrast(130%)">Vibrant</button>
<button data-filter="none">Original</button>
</div>
</div>
<script>
document.querySelectorAll('.controls button').forEach(btn => {
btn.addEventListener('click', () => {
document.querySelector('.filter-demo').style.filter = btn.dataset.filter;
});
});
</script>
Kết luận: Sức mạnh của vài dòng CSS
CSS filters là một công cụ cực kỳ mạnh mẽ và dễ sử dụng để biến hóa hình ảnh ngay trên trình duyệt. Chỉ với vài dòng code, bạn có thể tạo ra hàng loạt hiệu ứng đẹp mắt, từ đơn giản đến phức tạp, từ cổ điển đến hiện đại. Dù bạn là designer, developer, hay làm cả hai, việc nắm vững CSS filters sẽ giúp bạn nâng tầm sản phẩm của mình một cách nhanh chóng và ấn tượng. Hãy thử nghiệm và sáng tạo với những bộ lọc của riêng bạn!
Bình luận (0)
No comments yet. Be the first to share your thoughts!