HTML CSS JavaScript

Belum masuk. Progresmu tidak tersimpan.

Masuk
  • Bab 2 dari 7
  • 30 menit
  • 1 latihan kode
  • 4 soal kuis

Peta Koneksi dan Menghubungkan HTML ke CSS

Di bab ini (8 bagian)
  1. Tujuan
  2. Peta koneksi: siapa memanggil siapa
  3. Tiga cara menyisipkan CSS
  4. Tag <link> dan path file
  5. Selector: jembatan yang sebenarnya
  6. Kenapa CSS tidak ter-apply?
  7. Kesalahan umum
  8. Rangkuman

Tujuan bab ini

  • Membaca peta koneksi: siapa memanggil siapa antara HTML, CSS, dan JavaScript.
  • Membandingkan tiga cara menyisipkan CSS dan memahami urutan prioritasnya dengan benar.
  • Menulis <link rel="stylesheet"> dengan path relatif dan absolut yang tepat.
  • Mendiagnosis kenapa sebuah aturan CSS tidak ter-apply.

Peta koneksi: siapa memanggil siapa

Matriks koneksi HTML, CSS, dan JavaScript

Baca tabel ini dari baris (pemanggil) ke kolom (yang dipanggil):

Dari \ KeHTMLCSSJavaScript
HTML-<link rel="stylesheet"> atau <style><script src> atau <script>...</script>
CSSselector: tag, .class, #id, [atribut]@import, variabel --warnatidak ada
JavaScriptDOM API: querySelector, createElement, appendel.style, classListimport / export

Dua hal yang perlu kamu tangkap dari peta ini:

  1. HTML adalah titik awal. Browser selalu membuka file HTML dulu. Dari situlah ia tahu file CSS dan JS mana yang harus diunduh.
  2. Arahnya tidak simetris. CSS tidak pernah memanggil JavaScript. CSS hanya bisa "menunjuk" elemen HTML lewat selector. Sebaliknya, JavaScript bisa menjangkau HTML (lewat DOM) dan CSS (lewat class atau style). Karena itu, setiap kali halaman perlu berubah setelah dimuat, JavaScript-lah yang turun tangan.

Bab ini membahas koneksi pertama: HTML ke CSS.

Tiga cara menyisipkan CSS

1. Inline, lewat atribut style di elemen:

<p style="color: red; font-size: 20px">Diskon hari ini!</p>

Paragraf itu jadi merah dan berukuran 20px. Gayanya menempel di satu elemen saja. Mau dipakai di paragraf lain? Harus disalin. Mau ganti merah jadi biru di seluruh situs? Cari satu per satu. Hindari untuk proyek sungguhan.

2. Internal, lewat tag <style> di <head>:

<head>
  <style>
    p { color: red; }
  </style>
</head>

Semua <p> di halaman itu jadi merah. Lumayan untuk prototipe atau halaman tunggal, tapi tidak bisa dipakai bersama oleh halaman lain.

3. External, lewat file .css dan tag <link>:

<head>
  <link rel="stylesheet" href="css/style.css">
</head>

Satu file gaya bisa dipakai puluhan halaman. Browser juga menyimpannya di cache, jadi saat pindah halaman file itu tidak perlu diunduh ulang. Ini standar industri.

Urutan prioritas saat bentrok

Kalau dua aturan mengatur properti yang sama pada elemen yang sama, siapa yang menang? Urutannya:

  1. Deklarasi dengan !important mengalahkan semuanya (pakai sangat jarang).
  2. Inline style mengalahkan aturan dari <style> maupun file eksternal.
  3. Antara <style> dan file eksternal, tidak ada yang otomatis lebih kuat. Browser membandingkan specificity selector dulu (#id lebih kuat dari .class, .class lebih kuat dari nama tag).
  4. Kalau specificity sama, yang ditulis paling akhir menang.

Sering ada yang bilang "internal mengalahkan external". Itu hanya kelihatan benar karena <style> biasanya ditulis setelah <link>. Coba balik urutannya:

<head>
  <style> p { color: red; } </style>
  <link rel="stylesheet" href="css/style.css"> <!-- isinya: p { color: blue; } -->
</head>

Paragraf akan biru, karena aturan dari file eksternal dibaca belakangan dan specificity-nya sama. Detail cascade lengkap ada di kelas HTML5 dan CSS3.

Selector: jembatan yang sebenarnya

<link> menyambungkan file. Selector menyambungkan setiap aturan ke elemen.

<h1 id="judul">Toko Buku</h1>
<p>Selamat datang.</p>
<button class="tombol">Beli</button>
<button class="tombol" data-status="habis">Pesan</button>
#judul { color: navy; }                    /* 1 elemen */
p { line-height: 1.6; }                    /* semua <p> */
.tombol { background: crimson; color: white; } /* 2 tombol */
[data-status="habis"] { opacity: 0.5; }    /* tombol kedua saja */

Hasilnya: judul biru tua, paragraf berjarak baris lega, kedua tombol merah berteks putih, dan tombol "Pesan" tampak pudar karena punya data-status="habis".

SelectorMencariContoh
#namaSatu elemen dengan id itu#judul
.namaSemua elemen yang punya class itu.tombol
tagSemua elemen dengan tag itup
[atribut] / [atribut="nilai"]Elemen dengan atribut tertentu[data-status="habis"]

Selector atribut untuk data-* sangat berguna nanti: JavaScript cukup mengganti nilai data-status, lalu CSS otomatis menyesuaikan tampilan.

Kenapa CSS tidak ter-apply?

Kalau sebuah aturan tidak berefek, cek berurutan dari yang paling kasar ke paling halus:

  1. File-nya termuat? Buka DevTools (F12), tab Network, muat ulang. Kalau style.css berstatus 404, masalahnya di path atau rel.
  2. Selector-nya cocok? Klik kanan elemen, pilih Inspect. Di panel Styles, aturanmu harus muncul. Kalau tidak muncul sama sekali, selector tidak cocok dengan elemen: typo, lupa titik, atau beda huruf besar kecil.
  3. Aturannya kalah? Kalau aturan muncul tapi dicoret, ada aturan lain yang menang: inline style, specificity lebih tinggi, atau ditulis belakangan.
  4. Sintaksnya valid? Ikon peringatan di panel Styles menandakan properti atau nilai yang tidak dikenal.

Kesalahan umum

  • Typo nama class: HTML class="Harga", CSS .harga. Nama class case-sensitive, jadi keduanya berbeda.
  • Lupa titik atau pagar: menulis tombol { } padahal maksudnya .tombol { }. Browser mencari tag <tombol> yang tidak ada.
  • Path relatif dari folder yang salah: memakai css/style.css di halaman/tentang.html, padahal seharusnya ../css/style.css.
  • Lupa rel="stylesheet" di <link>.
  • Inline style sisa debugging yang diam-diam mengalahkan aturan di file CSS.
  • Mengira <style> selalu menang atas file eksternal. Yang menentukan adalah specificity, lalu urutan penulisan.

Rangkuman

  • HTML adalah titik awal yang memanggil CSS dan JS. CSS tidak pernah memanggil JS, sedangkan JS bisa menjangkau HTML dan CSS.
  • Tiga cara menyisipkan CSS: inline, <style>, dan <link>. Pakai <link> ke file eksternal untuk proyek sungguhan.
  • Prioritas: !important, lalu inline, lalu specificity, lalu urutan penulisan.
  • Path relatif dihitung dari file HTML yang membuka: ./ folder ini, ../ folder induk, / root situs.
  • Selector (#id, .class, tag, [atribut]) adalah jembatan nyata dari aturan CSS ke elemen HTML.

Selesaikan bab ini

  1. 1. Baca materi
  2. 2. Latihan kode (1)
  3. 3. Kuis (4 soal)

Latihan kode: Perbaiki koneksi CSS yang putus

Kartu produk ini harusnya berwarna, tapi empat aturan CSS tidak ter-apply. Cari penyebabnya dan perbaiki (boleh di HTML atau CSS, pilih yang paling masuk akal):

  • Judul produk harus biru #1572b6. Periksa selector-nya.
  • Harga harus tebal dan 20px. Periksa nama class-nya, huruf besar kecil berpengaruh.
  • Info stok harus pudar (opacity: 0.5). Nama atribut di HTML dan selector harus sama.
  • Tombol harus oranye dari aturan .tombol. Ada sesuatu di HTML yang mengalahkannya.

Cek pemahaman

  1. 1File `halaman/tentang.html` ingin memuat `css/style.css` yang ada di akar proyek. `href` mana yang benar?

  2. 2Apa warna teks paragraf ini?

    <style>
      #info { color: blue; }
    </style>
    <style>
      .teks { color: red; }
    </style>
    <p id="info" class="teks">Halo</p>
  3. 3Path `/css/style.css` dihitung dari akar situs, bukan dari folder tempat file HTML berada.

  4. 4Apa yang terjadi pada `<link href="css/style.css">` yang tidak punya atribut `rel`?