Khám phá bộ chọn CSS nâng cao cho thiết kế web hiện đại

0 0 0

Người đăng: Gung Typical

Theo Viblo Asia

Cùng tìm hiểu thế giới bộ chọn CSS nâng cao như :is(), :where(), :not():has(). Những bộ chọn này là công cụ mạnh mẽ để tạo CSS hiệu quả và linh hoạt hơn cho thiết kế web hiện đại.

Bộ chọn :is()

Hàm giả lớp :is() cho phép bạn áp dụng kiểu cho nhiều bộ chọn mà không cần lặp lại các thuộc tính giống nhau. Nó đặc biệt hữu ích để nhóm các bộ chọn có độ đặc hiệu khác nhau.

VD:

<div class="alert success">Success message</div>
<div class="alert error">Error message</div>
<div class="alert warning">Warning message</div>
:is(.alert.success, .alert.error, .alert.warning) { font-weight: bold; border: 1px solid; border-radius: 4px;
} .alert.success { border-color: green; }
.alert.error { border-color: red; }
.alert.warning { border-color: orange; }

Kết quả: Tất cả các loại cảnh báo đều có phông chữ đậm và viền, với màu được xác định bởi lớp cụ thể của chúng.

image.png

Bộ chọn :where()

Tương tự như :is(), :where() nhóm các bộ chọn, nhưng nó có độ đặc hiệu bằng 0. Điều này làm cho nó trở nên lý tưởng để tạo các kiểu dễ ghi đè.

VD:

<button class="primary">Primary Action</button>
<input type="button" value="Secondary Action">
<input type="submit" value="Submit Form">
/* Button styles with low specificity */
:where(button, input[type="button"], input[type="submit"]) { font-size: 1rem; padding: 0.5em 1em; background-color: #f0f0f0; border: none; cursor: pointer;
} /* Specific override for primary buttons */
button.primary { background-color: #007BFF; color: white;
}

Kết quả: image.png

Bộ chọn :not()

Giả lớp :not() được sử dụng để loại trừ các phần tử nhất định khỏi lựa chọn. Nó rất tốt để áp dụng kiểu cho mọi thứ trừ một phần tử hoặc lớp cụ thể.

VD:

<ul> <li class="done">Completed Task</li> <li>To Do</li> <li>Another Task</li>
</ul>
/* Style all list items except those marked as 'done' */
li:not(.done) { background-color: #f0f0f0;
} /* Darken the text for completed items */
li.done { color: #888;
}

Kết quả: image.png

Bộ chọn :has()

Giả lớp :has() cho phép bạn tạo kiểu cho một phần tử dựa trên những gì nó chứa. Bộ chọn này rất mạnh mẽ nhưng hỗ trợ trình duyệt còn hạn chế tại thời điểm viết bài.

VD:

<section> <h2>Video Section</h2> <video src="movie.mp4" controls></video> <img src="thumbnail.jpg" alt="Video Thumbnail">
</section>
<section> <h2>Text Only Section</h2> <p>Here's some text content without any media.</p>
</section>
/* Style sections containing a video to have a dark background */
section:has(video) { background-color: #1a1a1a;
} /* Make images inside sections with videos a little darker */
section:has(video) img { filter: brightness(0.8);
}

Kết quả: image.png

Hỗ trợ trình duyệt

  • :is() và :where(): Các trình duyệt hiện đại thường hỗ trợ chúng nhưng hãy luôn kiểm tra dữ liệu tương thích mới nhất.
  • :not(): Được hỗ trợ rộng rãi nhưng các bộ chọn phức tạp bên trong :not() có thể không hoạt động trong các trình duyệt cũ.
  • :has(): Hạn chế ở các phiên bản Safari gần đây với hỗ trợ thử nghiệm trong các trình duyệt khác. Hãy sử dụng thận trọng hoặc sử dụng polyfill để có khả năng tương thích rộng hơn.

Cân nhắc về tính đặc hiệu

  • :is() và :where() kế thừa độ đặc hiệu cao nhất từ các bộ chọn mà chúng chứa, với :where() có độ đặc hiệu bằng không.
  • Độ đặc hiệu của :not() là độ đặc hiệu của bộ chọn mà nó chứa.
  • :has() có thể dẫn đến các vấn đề đặc hiệu phức tạp vì nó phụ thuộc vào các bộ chọn bên trong nó nhưng nó không trực tiếp thêm vào điểm đặc hiệu.

Ứng dụng thực tế

  • Tạo kiểu cho các thành phần: Sử dụng :is() và :where() cho các kiểu chung trên các lớp nút hoặc phần tử biểu mẫu khác nhau.
  • Bố cục linh hoạt: :has() có thể được sử dụng cho các bố cục thích ứng, nơi sự hiện diện của các phần tử nhất định thay đổi kiểu dáng của phần tử cha.
  • Thiết kế đáp ứng: Kết hợp các bộ chọn này với media query để có thiết kế linh hoạt và theo ngữ cảnh hơn nữa.

Kết Luận

Bộ chọn CSS nâng cao có thể sắp xếp hợp lý các bảng kiểu của bạn, làm cho chúng gọn gàng và hiệu quả hơn. Hãy chú ý đến hỗ trợ trình duyệt, đặc biệt là đối với :has(), và sử dụng các bộ chọn này một cách khôn ngoan để nâng cao CSS của bạn mà không ảnh hưởng đến khả năng bảo trì.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Căn giữa các phần tử HTML theo chiều dọc (phần 1)

Bài viết được dịch từ bài Vertical centering of elements in HTML xuất bản ngày 18/01/2015 trên trang Web++. .

0 0 79

- vừa được xem lúc

Căn giữa phần tử trong CSS

1. Theo chiều ngang. Đó có phải là phần tử inline hay inline-* (như text hay links). .

0 0 66

- vừa được xem lúc

99% không biết đến mẹo này khi sử dụng Flexbox CSS

Hello lại là mình đây. Bài viết hôm nay mình sẽ giới thiệu tới mọi người một trick khá hay khi dùng CSS flexbox nhé. 1. Chia layout với flexbox.

0 0 62

- vừa được xem lúc

Vanilla JS Project: Tính tuổi

1. Yêu cầu.

0 0 72

- vừa được xem lúc

1 số UI component và layout hữu ích với Frontend

Giới thiệu. Hôm nay mình xin chia sẻ 1 số Layout và UI component quen mà có lẽ là quen thuộc với nhiều người khi làm dự án, hay bắt gặp trên mạng.

0 0 65

- vừa được xem lúc

Style text css

Giới thiệu. Chào 2021, mình sẽ giới thiệu vài kiểu style cho text màu mè chút cho rực rỡ .

0 0 44