Vùng chọn trong CSS đóng vai trò rất quan trọng khi viết CSS, bởi vì nếu bạn sử dụng vùng chọn sai thì điều đó có nghĩa là các quy tắc CSS của bạn sẽ không thể thực thi hoặc thực thi không đúng chỗ. Có thể nói rằng, việc nắm rõ quy tắc sử dụng vùng lựa chọn là kỹ thuật quan trọng hàng đầu khi bạn sử dụng CSS
Vùng chọn trong CSS rất linh hoạt, hầu như bạn có thể chọn bất cứ thứ gì từ thẻ đi sâu vào các thẻ bên trong nó. Ở bài này mình sẽ nói qua các kiểu sử dụng vùng chọn cơ bản nhất vì bạn sẽ sử dụng nó thường xuyên nhất, ngoài ra còn có các kiểu sử dụng vùng chọn nâng cao khác mình sẽ nói ở loạt phim gần cuối
Lựa chọn vùng là gì?
Trong CSS, vùng chọn có nghĩa là khu vực mà bạn muốn nó sẽ được áp dụng các quy tắc CSS mà bạn muốn chỉ định cho nó. Ví dụ bạn muốn tăng kích thước chữ của thẻ h1 thì vùng chọn của bạn sẽ là h1
Vùng chọn có thể là tên thẻ HTML hoặc thuộc tính của HTML
Các loại vùng lựa chọn cơ bản
Vùng lựa chọn dựa trên tên thẻ
Kiểu vùng chọn này là đơn giản nhất, nghĩa là nó sẽ chọn toàn bộ các phần tử trên tài liệu HTML dựa trên tên thẻ có trong tài liệu rồi áp dụng CSS. Ví dụ mình muốn thay đối kiểu cho toàn bộ thẻ h1
trong trang web thì sẽ có đoạn CSS sau với vùng chọn h1
Xem Bút NPVEyz của Thạch Phạm [@thachpham92] trên CodePen
Dĩ nhiên với kiểu sử dụng vùng chọn này thì toàn bộ các thẻ HTML trong trang web được chọn trong CSS đều biến đổi theo, tức là bạn không thể sử dụng kiểu chọn tên thẻ để viết CSS cho một khu vực độc lập
Lựa chọn vùng dựa trên ID
Lựa chọn vùng dựa trên ID [tên định danh] có nghĩa là bạn có thể chọn một phần tử có thể dựa vào giá trị của thuộc tính id
trong thẻ HTML. Sở dĩ vùng chọn id được sử dụng để chọn một phần tử có thể là do trên một trang tài liệu HTML thì mỗi phần tử phải mang một id riêng biệt không trùng nhau
Id được thiết lập dựa trên thuộc tính id
trong thẻ HTML và bất kỳ thẻ nào cũng có thể sử dụng id. Khi viết tên id vào CSS thì nó phải có dấu thăng [#tên-id
] đặt trước tên id để phân biệt với các loại vùng chọn khác. Ví dụ
Xem Bút BygBGQ của Thạch Phạm [@thachpham92] trên CodePen
Rõ ràng bạn thấy ở ví dụ trên mình có hai thẻ h1
nhưng mình muốn viết CSS cho một thẻ h1
cụ thể nào đó thì sẽ đặt id riêng cho phần tử mà mình cần viết CSS thay vì sử dụng vùng chọn dựa theo tên thẻ
Ngoài ra còn có một cách viết vùng chọn theo id khác là viết kèm theo tên thẻ đang sử dụng id đó như h1#post-title
, lưu ý là phải viết sát nhau
Xin lưu ý rằng, một thẻ có thể chứa nhiều id khác nhau và mỗi tên id sẽ được cách nhau bởi khoảng trắng như thế này
[html]
Hello
[/html]Vùng lựa chọn dựa trên lớp
Lớp [lớp] cũng rất được sử dụng phổ biến như id nhưng một điểm khác biệt của lớp là một lớp có thể được sử dụng cho nhiều phần tử trên một trang tài liệu HTML, còn id thì chỉ được sử dụng một lần duy nhất
Lớp được khai báo trong một phần tử HTML bởi lớp thuộc tính như . Khi khai báo vùng chọn lớp trong CSS, thì tên lớp phải được đặt sau dấu chấm [
h1
0]. Ví dụ về cách sử dụng class linh hoạt
Xem Bút bNPbzq của Thạch Phạm [@thachpham92] trên CodePen
Cũng giống như id, lớp cũng có thể được viết kèm theo kiểu thẻ tên h1. dính và phải liền nhau
Lựa chọn vùng theo thứ cấp
Kiểu vùng chọn này bạn cũng sẽ sử dụng rất thường xuyên, đặc biệt là khi tiến hành viết CSS cho trang web đó là phần tử chọn theo thứ cấp. Nghĩa là với vùng chọn này, bạn có thể chọn một phần tử con trong một phần tử mẹ nào đó
Ví dụ mình có một đoạn HTML thế này
[html]
- Menu 1
- Menu 2
- Menu 3
- Google+
[/html]
Như ở đoạn trên, mình có hai danh sách với thẻ h1
1 mang 2 id khác nhau. Bây giờ mình muốn viết CSS cho các thẻ h1
2 trong cái danh sách h1
3 thì làm thế nào? . Lúc này, chúng ta sẽ sử dụng đến vùng lựa chọn thứ cấp
Để chọn các thẻ h1
2 bên trong h1
3, mình sẽ viết vùng chọn là h1
6 thay vì chỉ viết h1
7 trong CSS. Lúc này CSS sẽ hiểu rằng chúng ta muốn chọn tất cả các thẻ h1
2 nằm bên trong phần tử mang h1
3
Xem Bút WbqeBE của Thạch Phạm [@thachpham92] trên CodePen
Lựa chọn vùng theo cấp độ liền kề
Đây là một kiểu chọn vùng dựa theo thứ cấp, đồng thời giúp bạn chọn các phần tử bên trong một phần tử nào đó nhưng nó sẽ chỉ áp dụng cho các phần từ đó cũng nằm bên dưới nó để bật. Bây giờ mình có cái danh sách hai cấp bật như sau
[html]
- Menu 1
- Menu 1.a
- Menu 1.b