[CSS] Bài 9 – Kết Hợp Các Bộ Chọn

Chúng ta không cần phải sử dụng tất cả các công cụ của CSS để có thể tạo ra được một website tốt. Tuy nhiên, nếu như chúng ta biết thêm nhiều công cụ hơn, thì điều đó cũng có nghĩa là chúng ta sẽ có thêm nhiều lựa chọn hơn để thực hiện ý

Chúng ta không cần phải sử dụng tất cả các công cụ của CSS để có thể tạo ra được một website tốt.
Tuy nhiên, nếu như chúng ta biết thêm nhiều công cụ hơn, thì điều đó cũng có nghĩa là chúng ta sẽ
có thêm nhiều lựa chọn hơn để thực hiện ý tưởng của mình. Hãy cùng thảo luận thêm về các bộ
chọn trong CSS.

Kết hợp các bộ chọn trong CSS

Nếu như bạn đang thắc mắc là tại sao mình đã không đề cập đến việc kết hợp các bộ chọn từ những
bài viết đầu tiên, thì… mình phải nói rằng đây là lỗi của mình. Chỉ đơn giản là mình quên mà thôi. 😄

Trong mọi khía cạnh của cuộc sống, cách tự nhiên nhất mà chúng ta học bất kỳ thứ gì, chắc chắn không
phải là một lộ trình thẳng tắp. Chặng đường mà chúng ta phải đi qua luôn luôn là các đường xoáy đệ
quy liền mạch và tiếp diễn không ngừng.

Một đường xoáy đệ quya spiral

Chúng ta khởi đầu bằng việc học một vài thứ cơ bản và rồi bắt đầu tạo ra thứ gì đó.
Sau đó chúng ta lại quay trở lại với những kiến thức trọng tâm để học nhiều thêm một chút nữa,
và tạo ra những thứ mới tốt đẹp hơn một chút. Là như vậy đấy.

Và bây giờ thì chúng ta đang bắt đầu một chu kỳ mới bằng việc học thêm về các bộ chọn CSS. 😄

Lợi ích của việc kết hợp các bộ chọn CSS là gì?

Hãy cùng nhìn lại ví dụ về thanh điều hướng đơn giản của chúng ta.

topnav.html

<!doctypehtml><html><head><metacharset="utf-8"><title>A simple navigation bar</title><linkrel="stylesheet"href="topnav.css"></head><body><navid="topnav"><aid="logo"class="nav-link"href="#">MY NAME</a><aclass="nav-link"href="#">Link 1</a><aclass="nav-link"href="#">Link 2</a><aclass="nav-link"href="#">Link 3</a><aclass="nav-link"href="#">Link 4</a><aclass="nav-link"href="#">Link 5</a><aid="about"class="nav-link"href="#">About Me</a></nav></body></html>

Để trang trí các liên kết, chúng ta đã đặt cho chúng một tên class có tính mô tả khá tốt nav-link.
Nhưng nếu như bây giờ chúng ta có thêm một thanh điều hướng khác trong trang web thì sao?
Bằng việc sử dụng trực tiếp tên class nav-link trong code CSS, chúng ta đã khiến tên class
này không thể được sử dụng lại vào mục đích khác hay cho các thành phần khác trong trang web.

Thật may mắn, CSS cho phép chúng ta kết hợp các bộ chọn để chọn ra các phần tử chính xác hơn
và giúp cho các tên class có thể được tái sử dụng cho nhiều thành phần khác nhau của trang web.
Đoạn code dưới đây là một ví dụ về việc kết hợp các bộ chọn trong CSS. Trong ví dụ, có 2 khối code CSS:

  • Khối đầu tiên sẽ chỉ chọn những .nav-link được đặt bên trong #topnav.
  • Khối thứ hai sẽ chỉ chọn những .nav-link được đặt bên trong #sidenav.

combine.css

#topnav .nav-link{/* styling .nav-link nested inside #topnav */}#sidenav .nav-link{/* styling .nav-link nested inside #sidenav */}

Làm thế nào để kết hợp các bộ chọn?

Việc kết hợp các bộ chọn CSS có thể được chia thành 3 kiểu và chúng ta sẽ nói về từng kiểu một:

  1. Union & Intersection (Tổng Hợp & Phần Giao)
  2. Next Sibling & Followed Siblings (Phần Tử Kế Cận & Các Phần Tử Theo Sau)
  3. Children & Decendants (Các Phần Tử Con & Các Phần Tử Kế Thừa)

1. Union & Intersection

Union của nhiều bộ chọn thường được sử dụng để giảm việc viết lặp code CSS.

Hãy giả định rằng chúng ta muốn áp dụng cùng font chữ cho tất cả các tiêu đề trong trang web của chúng ta.
Như vậy, đây sẽ là cách mà chúng ta viết CSS khi không kết hợp các bộ chọn.

union.css

1{font-family:'Arial', sans-serif;}h2{font-family:'Arial', sans-serif;}h3{font-family:'Arial', sans-serif;}h4{font-family:'Arial', sans-serif;}h5{font-family:'Arial', sans-serif;}h6{font-family:'Arial', sans-serif;}

Đoạn mã được viết lại sau đây có thể đem lại kết quả hiển thị tương tự.

union.css

h1, h2, h3, h4, h5, h6{font-family:'Arial', sans-serif;}

Bằng cách viết tên các bộ chọn liền nhau phân tách bởi các dấu phẩy ,
chúng ta có thể viết các luật CSS được sử dụng chung và giảm được việc lặp code CSS.
Và đó là Union, giờ hãy cùng nói về Intersection (phần giao).

Intersection giúp chúng ta chọn lấy các phần tử chính xác hơn bằng cách
viết liền tên một bộ chọn đứng ngay trước bộ chọn khác. Ví dụ dưới đây sẽ chỉ chọn
các phần tử <p> là thành viên của .exceprt và ngược lại.

intersection.css

p.excerpt{color: Gray;}

intersection.html

<!doctypehtml><html><head><metacharset="utf-8"><title>Intersection</title><linkrel="stylesheet"href="intersection.css"></head><body><p>This element is not selected.</p><pclass="excerpt">This text is Gray</p><divclass="excerpt">This element is not selected</div></body></html>

2. Next Sibling & Followed Siblings

Để chọn next sibling, phần tử kế cận tiếp theo, chúng ta có thể sử dụng một dấu cộng + để kết hợp các bộ chọn.
Ví dụ dưới đây sẽ chỉ chọn duy nhất phần tử <p> đứng ngay sau #unique.

next.css

#unique + p{color: Gray;}

next.html

<!doctypehtml><html><head><metacharset="utf-8"><title>The Next Door</title><linkrel="stylesheet"href="next.css"></head><body><h2>A heading</h2><p>This element is not selected.</p><h2id="unique">Who is next to me?</h2><p>Me, my color is Gray</p><h2>A heading</h2><p>This element is not selected.</p></body></html>

Nếu như chúng ta thay đổi #unique thành h2 trong code CSS, tất cả 3 phần tử <p> đều sẽ được chọn.
Trình duyệt web sẽ hiểu rằng chúng ta muốn chọn các phần tử <p> đứng ngay sau một phần tử <h2>.

Để chọn tất cả các followed siblings, các phần tử theo sau, chúng ta có thể sử dụng 1 dấu tidle ~ để
kết hợp các bộ chọn. Hãy cùng thay đổi code của chúng ta một chút.

followed.css

#unique ~ p{color: Gray;}

followed.html

<!doctypehtml><html><head><metacharset="utf-8"><title>Followed by the Joy</title><linkrel="stylesheet"href="followed.css"></head><body><h2>A heading</h2><p>This element is not selected.</p><h2id="unique">Who is following me?</h2><p>Me, my color is Gray.</p><h2>A heading</h2><p>Count me in, my color is Gray, too.</p></body></html>

3. Children & Decendants

Để chọn các children, các phần tử con, chúng ta có thể sử dụng một dấu lớn > để kết hợp các bộ chọn.
Ví dụ dưới đây sẽ chỉ chọn các liên kết là các phần tử con của #topnav, nhưng không chọn hết tất cả các
phần tử xếp chồng.

children.css

#topnav > a{color: Gray;}

children.html

<!doctypehtml><html><head><metacharset="utf-8"><title>Children</title><linkrel="stylesheet"href="children.css"></head><body><navid="topnav"><!-- children --><ahref="#">Gray</a><ahref="#">Gray</a><div><!-- other descendants --><ahref="#">Not selected</a><ahref="#">Not selected</a><ahref="#">Not selected</a></div></nav></body></html>

Để chọn tất cả các decendants, các phần tử xếp chồng của #topnav, chúng ta chỉ cần bỏ dấu lớn > đã sử dụng.

decendants.css

#topnav a{color: Gray;}

decendants.html

<!doctypehtml><html><head><metacharset="utf-8"><title>Descendants</title><linkrel="stylesheet"href="descendants.css"></head><body><navid="topnav"><!-- children --><ahref="#">Gray</a><ahref="#">Gray</a><div><!-- other descendants --><ahref="#">Gray</a><ahref="#">Gray</a><ahref="#">Gray</a></div></nav></body></html>

Trong tất cả các ví dụ từ đầu bài viết này, mình đã sử dụng các bộ chọn id để giải thích cách hoạt động của code dễ hơn.
Tuy nhiên, bộ chọn được sử dụng ở phía trước hoàn toàn có thể là các bộ chọn class hoặc các bộ chọn thông thường.

Bài viết về kết hợp các bộ chọn trong CSS của chúng ta tới đây là kết thúc. Trong bài viết tiếp theo,
chúng ta sẽ cùng nói về các class giả định. Các bộ chọn này sẽ giúp chúng ta tạo ra các hiệu ứng tương tác
với người dùng trang web. Ví dụ như khi người dùng rê trỏ chuột tới 1 liên kết và màu của liên kết đó
sẽ được thay đổi.

[CSS] Bài 10 – Các Class Giả Định

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ