DEV Community

Eris Sulistina
Eris Sulistina

Posted on

Logical Pseudo-class di dalam CSS

Logical pseudo-class adalah jenis pseudo-class dalam CSS yang memungkinkan kita membuat seleksi elemen berdasarkan logika kondisi untuk menyaring elemen berdasarkan struktur atau hubungan dalam DOM.


Daftar Logical Pseudo-class

Pseudo-Class Deskripsi Contoh Penggunaan
:not(selector) Menyeleksi elemen yang tidak cocok dengan selector tertentu button:not(.primary)
:is(selector, …) Menyederhanakan banyak selector yang memiliki deklarasi sama :is(h1, h2, h3)
:where(selector, …) Sama seperti :is() tapi dengan specificity selalu 0 :where(article, section)
:has(selector) Menyeleksi elemen yang memiliki anak/cucu yang cocok dengan selector div:has(img)
:nth-child(n) Menyeleksi elemen berdasarkan urutan anak li:nth-child(2)
:nth-of-type(n) Sama seperti :nth-child tapi hanya memperhitungkan jenis tag yang sama p:nth-of-type(2)
:nth-last-child(n) Seperti :nth-child tapi dihitung dari belakang tr:nth-last-child(1)
:nth-last-of-type(n) Kombinasi :nth-last-child dan :nth-of-type div:nth-last-of-type(1)
:first-child Menyeleksi elemen pertama dalam parent p:first-child
:last-child Menyeleksi elemen terakhir dalam parent li:last-child
:only-child Menyeleksi elemen yang menjadi satu-satunya anak span:only-child
:only-of-type Menyeleksi satu-satunya elemen dari jenisnya dalam parent h2:only-of-type
:empty Menyeleksi elemen yang tidak punya isi (termasuk teks/spasi) div:empty

Big 4

Diantara banyaknya Logical pseudo-class, saya sangat merekomendeasikan kamu untuk menguasai 4 diantaranya karena itu merupakan selector CSS modern untuk menulis rule yang lebih fleksibel dan efisien. 4 pseudo-class tersebut adalah:

  1. :not
  2. :is
  3. :where
  4. :has

❗ :not() — Mengecualikan Elemen

:not berfungsi untuk menargetkan semua elemen yang tidak cocok dengan selector tertentu.

/* Menargetkan elemen a yang tidak memiliki class .btn */
a:not(.btn) { .... }

/* Menargetkan elemen textarea yang tidak memiliki attribute rows */
textarea:not([rows]) {
    resize: none;
    field-sizing: content;
}
Enter fullscreen mode Exit fullscreen mode

🧩 :is() — Menyatukan Beberapa Selector

:is berfungsi untuk menargetkan elemen yang cocok dengan salah satu selector di dalamnya.

/* Menargetkan elemen h1, h2, h3 */
:is(h1, h2, h3) { .... }

/* 
    Menargetkan 2 kondisi.
    1. article > p
    2. article > span
 */
article > :is(p, span) { .... }
Enter fullscreen mode Exit fullscreen mode

💡 :where() — Mirip :is(), Tapi Tanpa Bobot Spesifisitas

/* Menargetkan elemen h1, h2, h3 tanpa spesifisitas */
:where(h1, h2, h3) { .... }

/* 
    Menargetkan 2 kondisi tanpa spesifisitas pada p dan span.
    1. article > p
    2. article > span
 */
article > :where(p, span) { .... }
Enter fullscreen mode Exit fullscreen mode

🔎 :has() — Menargetkan Elemen yang MENGANDUNG Elemen Tertentu

:has berfungsi untuk menyeleksi elemen berdasarkan child atau selector yang diberikan.

/* Menargetkan button yang memiliki descendant child svg */
button:has(svg) { .... }

/* Menargetkan article yang memiliki direct child img */
article:has(> img) { .... }

/* Menargetkan label yang memiliki attribute required pada next-sibling */
label:has(+ [required])::after {
    content: "*"
}
Enter fullscreen mode Exit fullscreen mode

✨ Penutup

Semoga tulisan saya ini dapat mengupgrade kemampuan css kamu sebagai frontend developer.

Kalau kamu suka artikel ini, jangan lupa 💖 save, 🗨️ comment, dan 🔁 share ke teman developer lainnya!

Sampai jumpa di tulisan berikutnya 👋

Top comments (1)

Collapse
 
dreama profile image
Dream

Penjelasan tentang perbedaan :is() dan :where() menarik, terutama pada bagian spesifisitas yang bisa sangat membantu ketika ingin menulis CSS yang lebih mudah diatur!