CSS Masking là kỹ thuật cho phép bạn ẩn hoặc hiển thị một phần của phần tử bằng cách sử dụng các mặt nạ (mask). Với CSS Masking, bạn có thể tạo ra các hình dạng và hiệu ứng đặc biệt cho hình ảnh hoặc bất kỳ phần tử HTML nào, giúp tăng tính sáng tạo và thẩm mỹ cho giao diện web. Thuộc tính CSS Masking hoạt động với cả hình ảnh, gradient, hoặc SVG, giúp bạn linh hoạt tạo các hiệu ứng nổi bật.

Bài viết này là một phần trong chuỗi học CSS trên "codetuthub.com", cùng với các chủ đề như CSS Backgrounds, CSS Gradients, và CSS Clip-path.

1. Tổng quan về CSS Masking

CSS Masking sử dụng thuộc tính mask hoặc mask-image để xác định phần nào của phần tử sẽ hiển thị, phần nào sẽ ẩn đi. mask cho phép bạn kết hợp hình ảnh, gradient hoặc SVG để tạo mặt nạ (mask) cho phần tử. Mặt nạ này hoạt động bằng cách ẩn đi các phần tử bên ngoài khu vực được xác định.

Các thuộc tính chính của CSS Masking

  1. mask-image: Xác định hình ảnh hoặc gradient sẽ được sử dụng làm mặt nạ.
  2. mask-position: Đặt vị trí của mask bên trong phần tử.
  3. mask-repeat: Xác định cách mask được lặp lại trong phần tử.
  4. mask-size: Điều chỉnh kích thước của mask.
  5. mask-origin: Xác định vị trí bắt đầu của mask bên trong phần tử.

2. Sử dụng mask-image với hình ảnh

mask-image cho phép bạn tạo mặt nạ từ một hình ảnh. Phần trắng trong ảnh mask sẽ hiển thị, còn phần đen sẽ bị ẩn đi.

Ví dụ về sử dụng mask-image

css
.masked-image {
    width: 300px;
    height: 200px;
    mask-image: url('path-to-mask-image.png');
    mask-size: cover;
}

Trong ví dụ này, mask-image sử dụng hình ảnh để làm mặt nạ cho phần tử, giúp tạo ra hiệu ứng cắt hình theo hình dạng của ảnh mask.

3. Sử dụng mask-image với gradient

Bên cạnh hình ảnh, bạn có thể sử dụng gradient để tạo mask cho các phần tử, giúp tạo ra các hiệu ứng mờ dần hoặc chuyển màu.

Ví dụ sử dụng mask-image với gradient

css
.gradient-mask {
    width: 300px;
    height: 200px;
    background: #3498db;
    mask-image: linear-gradient(to right, rgba(0, 0, 0, 1), rgba(0, 0, 0, 0));
}

Trong ví dụ này, gradient mask sẽ làm cho phần tử mờ dần từ bên trái sang bên phải, tạo hiệu ứng chuyển màu đẹp mắt.

4. Sử dụng mask với SVG

SVG là một công cụ mạnh mẽ cho CSS Masking, cho phép bạn tạo các hình dạng mask phức tạp và độc đáo. Bạn có thể tạo SVG mask và áp dụng chúng cho phần tử để tạo ra các hình cắt đẹp mắt.

Ví dụ tạo mask với SVG

html
<div class="svg-mask">
    <svg width="0" height="0">
        <defs>
            <mask id="mask1">
                <rect x="0" y="0" width="100%" height="100%" fill="white" />
                <circle cx="50%" cy="50%" r="50" fill="black" />
            </mask>
        </defs>
    </svg>
    <div class="masked-element" style="mask: url(#mask1);">
        Nội dung bị cắt
    </div>
</div>

Trong ví dụ này, SVG mask tạo ra một hình tròn màu đen ở giữa phần tử, tạo hiệu ứng cắt hình tròn bên trong phần tử.

5. Các thuộc tính bổ sung của CSS Masking

5.1 mask-position

mask-position xác định vị trí của mask bên trong phần tử. Tương tự như background-position, bạn có thể sử dụng các giá trị như top, right, bottom, left, hoặc các giá trị phần trăm.

css
.masked-element {
    mask-image: url('path-to-mask-image.png');
    mask-position: center;
    mask-size: cover;
}

5.2 mask-repeat

mask-repeat kiểm soát cách mask lặp lại, tương tự như background-repeat.

  • no-repeat: Không lặp lại mask.
  • repeat: Lặp lại cả hai chiều.
  • repeat-x: Lặp lại theo chiều ngang.
  • repeat-y: Lặp lại theo chiều dọc.
css
.masked-element {
    mask-image: url('path-to-mask-image.png');
    mask-repeat: no-repeat;
}

5.3 mask-size

mask-size xác định kích thước của mask trong phần tử, với các giá trị như cover, contain, hoặc kích thước tùy chỉnh.

css
.masked-element {
    mask-image: url('path-to-mask-image.png');
    mask-size: contain;
}

6. Kết hợp mask với clip-path

Bạn có thể kết hợp maskclip-path để tạo ra các hiệu ứng cắt và che phủ phức tạp hơn, tạo nên các thiết kế độc đáo và sáng tạo.

Ví dụ kết hợp maskclip-path

css
.combined-mask {
    width: 300px;
    height: 300px;
    background-color: #2ecc71;
    clip-path: circle(50% at 50% 50%);
    mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1), rgba(0, 0, 0, 0));
    mask-size: cover;
}

Trong ví dụ này:

  • clip-path: circle(50% at 50% 50%) tạo khung tròn cho phần tử.
  • mask-image tạo gradient mờ dần từ trên xuống dưới.

7. Ứng dụng của CSS Masking trong thiết kế

7.1 Tạo khung ảnh với hiệu ứng cắt phức tạp

Bạn có thể sử dụng CSS Masking để cắt hình ảnh theo các hình dạng độc đáo, giúp khung ảnh nổi bật và thu hút hơn.

css
.photo-frame {
    width: 300px;
    height: 300px;
    background-image: url('path-to-image.jpg');
    mask-image: url('path-to-mask-image.png');
    mask-size: cover;
    mask-position: center;
}

7.2 Tạo hiệu ứng hover độc đáo

Sử dụng CSS Masking để tạo hiệu ứng khi người dùng di chuột qua phần tử, như hiển thị nội dung mới hoặc các hiệu ứng mờ dần.

css
.hover-mask {
    width: 300px;
    height: 200px;
    background-color: #8e44ad;
    mask-image: linear-gradient(to right, rgba(0, 0, 0, 1), rgba(0, 0, 0, 0));
    transition: mask-position 0.5s ease;
}

.hover-mask:hover {
    mask-position: right;
}

Trong ví dụ này, khi di chuột qua, hiệu ứng mask sẽ di chuyển từ trái sang phải, tạo hiệu ứng chuyển động đẹp mắt.

7.3 Tạo class bao phủ (overlay) cho hình ảnh

CSS Masking có thể tạo class phủ để che hoặc nhấn mạnh một phần của hình ảnh.

css
.overlay-mask {
    width: 300px;
    height: 200px;
    background-image: url('path-to-image.jpg');
    mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, 1));
    mask-size: cover;
}

Class bao phủ gradient này sẽ làm mờ phần dưới của hình ảnh, giúp nội dung phía trên nổi bật hơn.

8. Kết luận

CSS Masking là một công cụ mạnh mẽ và linh hoạt trong thiết kế web, giúp bạn tạo ra các hiệu ứng che phủ và cắt hình độc đáo cho các phần tử. Từ việc sử dụng hình ảnh, gradient, đến SVG, CSS Masking mang đến khả năng sáng tạo không giới hạn, làm cho giao diện trang web trở nên nổi bật và chuyên nghiệp. Để tìm hiểu thêm về cách tạo hiệu ứng hình ảnh và nền, hãy tham khảo các bài viết khác trên "codetuthub.com" như CSS Backgrounds, CSS Gradients, và CSS Clip-path.