Class selector
Class selector adalah titik yang diikuti nama class. Selector ini memberi style pada setiap elemen yang atribut class-nya berisi nama tersebut, apa pun jenis elemennya.
Titik hanya muncul di CSS. Di HTML, atributnya adalah class="badge", tanpa titik. Nama class peka huruf besar kecil: .Badge tidak cocok dengan class="badge".
Beberapa class pada satu elemen
Sebuah elemen bisa membawa class sebanyak apa pun, dipisahkan spasi. Setiap class membawa aturannya sendiri, dan begitulah kamu membangun varian dari bagian-bagian kecil:
.btn.danger, tanpa spasi, cocok dengan elemen yang punya kedua class itu. Span terakhir punya danger tetapi tidak punya btn, jadi aturan berantai itu melewatinya.
Variasi class selector
| Selector | Cocok dengan |
|---|---|
.note | Elemen apa pun dengan class note |
p.note | Hanya elemen <p> dengan class note |
.btn.primary | Elemen yang punya btn sekaligus primary |
.card .title | .title di mana saja di dalam .card |
.card > .title | .title yang induknya .card |
.a, .b | Elemen dengan a atau b |
Perbedaan antara pakai spasi dan tanpa spasi dibahas bersama combinator lain di halaman selector CSS.
ID selector
ID selector adalah tanda pagar yang diikuti id: #site-header memberi style pada elemen dengan id="site-header". Sebuah id harus unik di halaman, jadi ID selector menargetkan tepat satu elemen.
Id berguna lebih dari sekadar style: href="#details" menggulir ke elemen itu, <label for="email"> menunjuk ke id sebuah input, dan JavaScript menemukannya dengan document.getElementById('details'). Itulah alasan umum memberi id pada elemen; untuk style, class adalah alat yang lebih tepat.
Class vs ID
Class .name | ID #name | |
|---|---|---|
| Per halaman | Banyak elemen | Satu elemen |
| Per elemen | Beberapa, dipisahkan spasi | Satu |
| Specificity | (0,1,0) | (1,0,0) |
Target link (#name di URL) | Tidak | Ya |
| Paling cocok untuk | Style | Anchor, label, pengait JavaScript |
Selisih specificity inilah alasan praktis untuk memberi style dengan class. Satu ID mengalahkan class sebanyak apa pun, jadi aturan yang ditulis dengan ID hanya bisa ditimpa oleh ID lain, inline style, atau !important:
Menambah dan menghapus class dengan JavaScript
Class adalah cara yang biasa bagi JavaScript untuk mengubah tampilan sesuatu: CSS menentukan state-nya, script hanya mengganti-gantinya.
classList juga punya add, remove, contains, dan replace. Hindari mengisi className secara langsung: cara itu mengganti semua class yang dimiliki elemen.
Memberi nama class
- Huruf, angka, tanda hubung, dan garis bawah aman dipakai:
card,card-title,card__title,is-open. - Jangan awali selector dengan angka atau tanda hubung yang diikuti angka.
.2coladalah CSS yang tidak valid. Awali dengan huruf (.cols-2) atau escape angkanya (.\32 col). - Beri nama berdasarkan fungsi, bukan tampilan:
.errorbertahan saat desain diubah,.red-texttidak. - Konvensi penamaan membantu di proyek yang lebih besar. BEM menulis
block__element--modifier, misalnya.card__title--large.
Kesalahan umum
- Menaruh titik di HTML.
class=".badge"tidak akan pernah cocok dengan.badge. - Dua atribut
class.<p class="a" class="b">hanya menyimpana. Pakaiclass="a b". - Memakai spasi padahal maksudnya kedua class.
.btn .primarymencari elemen bersarang;.btn.primaryadalah elemen yang sama. - Memakai ulang sebuah id. Id ganda merusak
getElementById, link anchor, dan hubungan label, meskipun CSS-nya tampak berfungsi. - Memberi style semuanya dengan id. Specificity-nya membuat penimpaan di kemudian hari jadi menyulitkan; pakai class.
Pertanyaan yang sering diajukan
Bagaimana cara memilih class di CSS?
Tulis titik diikuti nama class-nya: .card { ... } memberi style pada setiap elemen dengan class="card". Titik hanya ada di CSS; atribut HTML-nya tidak memakai titik.
Apa perbedaan class dan id di CSS?
Sebuah class bisa dipakai di elemen sebanyak apa pun dan satu elemen bisa punya beberapa class; sebuah id harus unik di halaman dan satu elemen paling banyak punya satu id. Di CSS, #id punya specificity yang jauh lebih tinggi dari .class, jadi aturan ID lebih sulit ditimpa.
Bagaimana cara memberi dua class pada satu elemen?
Pisahkan nama-namanya dengan spasi di satu atribut: class="btn primary". Menulis class dua kali pada satu elemen tidak berfungsi; browser hanya menyimpan atribut yang pertama.
Bagaimana cara memilih elemen yang punya dua class?
Rangkai class selector tanpa spasi: .btn.primary cocok dengan elemen yang punya kedua class itu. Dengan spasi, .btn .primary berarti elemen .primary yang berada di dalam elemen .btn.
Bolehkah nama class CSS diawali angka?
Di HTML boleh, tetapi selector tidak boleh diawali angka tanpa escape, jadi .1col adalah CSS yang tidak valid. Escape angkanya (.\31 col) atau, lebih baik lagi, awali nama class dengan huruf.