Tutorial Belajar CSS Part 8: Urutan Prioritas Selector CSS (Specificity)

Pada tutorial belajar CSS kali ini saya akan membahas tentang urutan prioritas selector CSS jika dilihat dari ke-spesifik-an selector yang digunakan, atau di dalam istilah bahasa inggris: "CSS Specificity".


Pengertian ke-spesifik-an selector CSS

Jika pada tutorial sebelumnya kita telah membahas tentang urutan prioritas CSS berdasarkan sumber kode CSS tersebut (dimana inline style memiliki prioritas terkuat), pada artikel kali ini kita akan melihat urutan prioritas kode CSS jika seluruh kode CSS tersebut berada dalam file yang sama. Dalam kasus ini kita akan mempelajari apa yang akan terjadi jika beberapa kode CSS yang dibuat saling menimpa.

Agar lebih mudah dipahami, saya akan langsung membuat file sample kita, yaitu spesifik.html :

<!DOCTYPE html>
<html>
<head>
   <title>Contoh Kasus Spesifik CSS</title>
   <style type="text/css">
            p  {
               color:red;
               }
            div p {
               color:green;
               }
            #aaa{
               color:orange;
               }
            body div p {
               color:yellow;
               }
            div p.kalimat {
               color:silver;
               }
    </style>
</head>

<body>
   <div>
    <p id="aaa">
        Sedang Belajar CSS...
    </p>
   </div>
</body>
</html>

Sebelum anda menjalankan file spesifik.html tersebut, silahkan perhatikan terlebih dahulu defenisi CSS diatas. Terdapat 5 jenis selector yang 'mencoba' untuk merubah warna sebuah paragraf. Dan silahkan tebak akan bewarna apa paragraf "Sedang Belajar CSS…".

Urutan Prioritas Selector CSS (Specificity)

Dan, seperti yang kita lihat, paragraf tersebut tampak berwarna orange, dimana selector CSS "#aaa" adalah tempat pendefenisisan warna "color:orange", namun bagaimana ini bisa terjadi? bagaimana dengan ke-4 defenisi lainnya?

Jawabannya: karena selector #aaa dianggap paling spesifik atau paling detail dari ke-5 selector lainnya.


Cara Menghitung ke-spesifik-an Selector CSS

CSS memiliki aturan tertentu tentang ke-spesifik-an selector, yaitu ketika sebuah property dari CSS, saling menimpa satu sama lain, selector yang paling spesifik lah yang akan menang.

Aturan ke-spesifik-an CSS dihitung menggunakan formula 4 digit, contohnya: 0,1,0,0. Perhitungannya sama seperti hitung-hitungan kita sehari-hari, dimana 0,1,0,0 lebih besar dari 0,0,1,5, atau agar lebih mudah nilai 0,1,0,0 bisa ditulis menjadi 0100, dan nilai 0,0,1,5 menjadi 0015.

Berikut adalah nilai CSS Specificity untuk selector di dalam CSS:

  1. Setiap element/tag selector bernilai 0,0,0,1
  2. Setiap class selector, attribut selector bernilai 0,0,1,0
  3. Setiap ID selector bernilai 0,1,0,0
  4. Setiap inline style bernilai 1,0,0,0

Dengan menggunakan aturan tersebut, mari kita hitung angka ke-spesifik-an dalam contoh sebelumnya.

  1. Selector p, hanya terdiri dari 1 tag selector, maka nilainya: 0,0,0,1
  2. Selector div p, terdiri dari 2 tag selector, maka nilainya: 0,0,0,2
  3. Selector #aaa, terdiri dari 1 ID selector, maka nilainya: 0,1,0,0
  4. Selector body div p, terdiri dari 3 tag selector, maka nilainya: 0,0,0,3
  5. Selector div p.kalimat, terdiri dari 1 class selector dan 2 tag selector, maka nilainya: 0,0,1,2

Dari hasil yang kita peroleh, maka selector #aaa memiliki nilai paling tinggi, yaitu 0,1,0,0. Maka, karena itulah paragraf dalam contoh spesifik.html akan bewarna orange.

Sering kali dalam merancang sebuah website yang cukup kompleks, kita akan sering dibuat pusing dan bertanya-tanya kenapa style yang telah ditulis tidak merubah kode HTML yang ada, atau tidak berefek apa-apa. Mungkin jawabannya adalah nilai selector tersebut tertimpa oleh nilai selector lain yang lebih spesifik. Memahami aturan prioritas dan ke-spesifik-an CSS ini sangat penting untuk menghindari hal tersebut.

Mengenal perintah !important

Jika aturan prioritas diatas tidak cukup, CSS menyediakan "senjata" pamungkas, yaitu menggunakan perintah !important.

Perintah !important diletakkan di belakang propery dari CSS, dan perintah !important ini akan mengambil alih urutan prioritas CSS yang kita pelajari diatas. Mari kita ubah spesifik.html dengan menambahkan perintah !important.

<!DOCTYPE html>
<html>
<head>
   <title>Contoh Kasus Spesifik CSS !important</title>
   <style type="text/css">
            p  {
               color:red !important;
               }
            div p {
               color:green;
               }
            #aaa{
               color:orange;
               }
            body div p {
               color:yellow;
               }
            div p.kalimat {
               color:silver;
               }
    </style>
</head>

<body>
   <div>
    <p id="aaa">
      Sedang Belajar CSS...
    </p>
   </div>
</body>
</html>

Perhatikan akhir baris pada selector p, saya menambahkan perintah !important diakhir property, dan seperti yang bisa ditebak, paragraf kita sekarang akan berwarna merah.

Urutan Prioritas Selector CSS (Specificity) !mportant

Penggunaan perintah !important sebaiknya digunakan jika memang sudah terdesak dan sedapat mungkin dihindari,. Hal ini karena perintah !important akan mengubah urutan prioritas dan akan menyulitkan perancangan CSS.

Dalam tutorial CSS kali ini, bisa dikatakan bahwa perancangan kode CSS sebenarnya lebih condong ke seni (art) daripada pemograman. Karena selain memikirkan bagaimana tampilan web, kita juga harus memperhatikan aturan prioritas dan ke-spesifik-an CSS, dan mengombinasikannya untuk membuat tampilan website yang indah.

Dalam tutorial CSS selanjutnya, kita akan membahas Sifat Penurunan Dalam CSS, atau sering disebut juga dengan Inheritance dalam CSS, yakni tentang penurunan efek CSS dari sebuah tag kepada tag lainnya.


eBook CSS Uncover Duniailkom
Jika anda ingin belajar cara mendesain web, CSS wajib dikuasai. Duniailkom telah menyusun eBook CSS Uncover yang membahas CSS dengan lebih detail dan lebih lengkap, mulai dari dasar hingga fitur terbaru CSS3 seperti animasi dan web responsive. Penjelasan lebih lanjut bisa ke: eBook CSS Uncover Duniailkom.

22 Comments

  1. kickymaulana
    10 Feb 15
  2. madhan
    29 Jun 15
    • Andre
      30 Jun 15
      • Farhan Afany
        11 Oct 17
        • Andre
          11 Oct 17
  3. Dina
    10 Nov 15
    • Ahmad Ihsan
      17 Jul 17
  4. Dina
    10 Nov 15
  5. dadi
    15 Nov 15
  6. dadi
    15 Nov 15
    • mas agus
      15 Oct 16
      • Andre
        16 Oct 16
  7. harefa
    01 Apr 16
  8. ritoalit
    22 Feb 17
  9. Anonymous
    16 Dec 17
    • Andre
      18 Dec 17
  10. rendra
    20 May 19
    • Andre
      22 May 19
  11. Ardli
    11 Jul 19

Add Comment