Bộ tạo clip-path cho CSS

Tiếp theo

Với clip-path, bạn có thể cắt bất kỳ phần tử nào thành hình đa giác để tạo ảnh có hình dạng, phần hero bất đối xứng hoặc bong bóng hội thoại mà không cần lớp phủ SVG. Viết tọa độ polygon() bằng tay dễ gây sai sót tính toán. Trình tạo này xuất ra khai báo clip-path chính xác cho bốn hình dạng cài sẵn: tam giác, hình thoi, hình thang và lục giác. Chọn một hình, tạo mã rồi sao chép CSS.

Cách tạo clip-path

  1. 1

    Chọn hình dạng

    Chọn một trong bốn hình dạng cài sẵn: tam giác, hình thoi, hình thang hoặc lục giác.

  2. 2

    Tạo CSS

    Bấm nút, công cụ sẽ xây dựng quy tắc `clip-path: polygon(...)` cho hình đã chọn.

  3. 3

    Sao chép quy tắc

    Sao chép kết quả và dán vào tệp stylesheet của bạn. Phần trăm giúp hình dạng co giãn theo kích thước phần tử.

  4. 4

    Đọc tọa độ

    Mỗi cặp số là một đỉnh: vị trí x và y của góc đó tính theo phần trăm của khung phần tử.

  5. 5

    Áp dụng

    `clip-path` hoạt động trên mọi phần tử trong tất cả trình duyệt hiện đại và hình dạng co giãn theo phần tử.

Năm hàm hình dạng

Hàm Cú pháp Cách dùng
inset() inset(10% 20% 10% 20% round 8px) Cắt hình chữ nhật có lề thụt vào trong và góc bo tròn tùy chọn
circle() circle(50% at 50% 50%) Hình tròn
ellipse() ellipse(40% 25% at 50% 50%) Hình elip
polygon() polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%) Đa giác bất kỳ
path() path("M0 0 L100 0 L50 100 Z") Dữ liệu đường dẫn SVG (hỗ trợ hạn chế)

Các đoạn đa giác phổ biến

/* Hexagon */
clip-path: polygon(25% 0, 75% 0, 100% 50%, 75% 100%, 25% 100%, 0 50%);

/* Rhombus */
clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%);

/* Chevron / arrow pointing right */
clip-path: polygon(0 0, 75% 0, 100% 50%, 75% 100%, 0 100%, 25% 50%);

/* Parallelogram */
clip-path: polygon(20% 0, 100% 0, 80% 100%, 0 100%);

/* Diagonal slice (modern hero section) */
clip-path: polygon(0 0, 100% 0, 100% 85%, 0 100%);

Đường chéo của khối hero có lẽ là kiểu được dùng phổ biến nhất, nó mang lại cho khối đó vẻ ngoài hiện đại, nghiêng góc mà không cần bất kỳ tệp SVG nào.

Tạo hoạt ảnh cho clip-path

clip-path có thể tạo hoạt ảnh miễn là cả hai trạng thái dùng cùng một hàm hình dạng với cùng số điểm. Một đa giác 4 đỉnh sẽ chuyển động mượt mà sang một đa giác 4 đỉnh khác; việc thêm hoặc bớt đỉnh sẽ phá vỡ phép nội suy.

.card { clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%); }
.card:hover { clip-path: polygon(0 5%, 100% 0, 100% 95%, 0 100%); }

Hãy dùng kỹ thuật này cho các hiệu ứng xuất hiện, biến dạng tinh tế khi di chuột, hoặc chuyển cảnh giữa các trang.

clip-path so với overflow: hidden

overflow: hidden cắt theo hình chữ nhật của border-box (có thể bo tròn bằng border-radius). clip-path cắt theo bất kỳ hình dạng nào bạn định nghĩa và cắt mọi thứ, bao gồm cả bóng đổ và đường viền. Nếu bạn cần bóng đổ vẫn hiển thị bên ngoài hình dạng thì clip-path không phải lựa chọn phù hợp.

filter: drop-shadow() có thể thêm lại một bóng đổ bám theo hình dạng cho các phần tử dùng clip-path, nhưng chậm hơn.

Hiệu suất

Trong các trình duyệt hiện đại, clip-path được tăng tốc bằng GPU, nên các clip-path động chạy rất mượt. Ngoại lệ là path() và những đa giác cực kỳ phức tạp (hơn 40 đỉnh), vốn chuyển sang kết xuất bằng CPU trên một số trình duyệt.

Khả năng truy cập

clip-path chỉ thay đổi phần hiển thị. Trình đọc màn hình, tiêu điểm bàn phím và sự kiện con trỏ vẫn căn theo toàn bộ hộp của phần tử, chứ không theo hình dạng đã cắt. Nếu một hình ảnh bị cắt thành hình ngôi sao thì văn bản alt vẫn được đọc bình thường. Nếu một nút bị cắt thành hình chevron thì vùng nhấp là toàn bộ hình chữ nhật, chứ không phải hình chevron nhìn thấy, điều này có thể khiến người dùng nhấp nhầm vào khoảng tưởng như trống.

Với các nút có hình dạng cắt khác thường, hãy đặt chiều rộng và chiều cao của phần tử thật sát để vùng nhấp (hitbox) khớp tương đối tốt với vùng hiển thị.

Câu hỏi thường gặp

Tất cả trình duyệt hiện đại (Chrome, Firefox, Safari, Edge) đều hỗ trợ polygon(), circle(), ellipse()inset(). path() được hỗ trợ trên Chrome 88+, Firefox 97+ và Safari 13.1+. IE không hỗ trợ bất kỳ tính năng nào trong số này, nhưng mức sử dụng của nó hiện đã ở dưới ngưỡng đáng kể đối với hầu hết trang web.

Vì clip-path cắt cả bóng đổ cùng với mọi thứ khác. Hãy dùng filter: drop-shadow() để thay thế, nó bám theo hình dạng đã cắt và giữ cho bóng đổ vẫn hiển thị.

Chỉ giữa cùng một hàm hình dạng với cùng số điểm. Một đa giác có 4 điểm sẽ chuyển động sang một đa giác khác có 4 điểm. Việc thêm hoặc bớt điểm, hoặc đổi hàm (ví dụ từ đa giác sang hình tròn), sẽ phá vỡ phép nội suy.

Không, các sự kiện con trỏ vẫn nhắm vào toàn bộ hình chữ nhật của phần tử. Một nút hình ngôi sao vẫn có vùng nhấp hình chữ nhật, bao gồm cả các góc trong suốt. Nếu điều này quan trọng, hãy cân nhắc dùng pointer-events: none trên ::before hoặc dùng các phần tử có kích thước vừa khít.

Công cụ liên quan