Dasar-dasar CSS

CSS (Cascading Style Sheets) adalah bahasa stylesheet yang digunakan untuk mengatur tampilan dokumen HTML.

Sejarah CSS

CSS pertama kali diusulkan oleh Håkon Wium Lie pada tahun 1994 ketika bekerja di CERN dengan Tim Berners-Lee. CSS1 dirilis pada tahun 1996, CSS2 pada 1998, dan CSS3 mulai dikembangkan sejak 1999 dengan pendekatan modular.

CSS3 memperkenalkan banyak fitur baru seperti border-radius, box-shadow, flexbox, grid, animasi, dan banyak lagi.

Sintaks Dasar CSS

CSS terdiri dari selector dan declaration block:

selector {
    property: value;
    property: value;
}

Contoh:

h1 {
    color: blue;
    font-size: 24px;
    text-align: center;
}

Penjelasan:

  • Selector - Elemen HTML yang akan diberi style (h1)
  • Property - Jenis style yang akan diubah (color)
  • Value - Nilai dari property (blue)
  • Declaration - Pasangan property:value (color: blue)
  • Declaration block - Kumpulan declaration dalam {}

Cara Menambahkan CSS

Ada 3 cara menambahkan CSS ke dokumen HTML:

1. Inline CSS

<h1 style="color: blue; font-size: 24px;">Judul</h1>
Catatan: Hindari penggunaan inline CSS karena sulit dikelola dan memiliki spesifisitas tinggi.

2. Internal CSS

<head>
    <style>
        h1 {
            color: blue;
            font-size: 24px;
        }
    </style>
</head>

3. External CSS

<head>
    <link rel="stylesheet" href="style.css">
</head>
Best Practice: Gunakan external CSS untuk memisahkan struktur (HTML) dan presentasi (CSS).

CSS Selector

Selector digunakan untuk memilih elemen HTML yang akan diberi style:

Selector Dasar

Selector Contoh Deskripsi
Element p Memilih semua elemen <p>
Class .header Memilih elemen dengan class="header"
ID #main Memilih elemen dengan id="main"
Universal * Memilih semua elemen

Selector Kombinasi

Selector Contoh Deskripsi
Descendant div p Memilih semua <p> di dalam <div>
Child ul > li Memilih semua <li> yang anak langsung dari <ul>
Adjacent sibling h1 + p Memilih <p> yang langsung setelah <h1>
General sibling h1 ~ p Memilih semua <p> yang setelah <h1>

Selector Atribut

/* Elemen dengan atribut tertentu */
a[target] {
    color: red;
}

/* Elemen dengan atribut dan nilai tertentu */
a[href="https://example.com"] {
    color: green;
}

/* Elemen dengan atribut yang mengandung nilai */
img[alt~="logo"] {
    border: 1px solid black;
}

/* Elemen dengan atribut yang dimulai dengan nilai */
a[href^="https"] {
    background: url(lock-icon.png) no-repeat left center;
}

/* Elemen dengan atribut yang diakhiri dengan nilai */
a[href$=".pdf"] {
    background: url(pdf-icon.png) no-repeat left center;
}

/* Elemen dengan atribut yang mengandung substring */
a[href*="google"] {
    color: blue;
}

Pseudo-class dan Pseudo-element

Pseudo-class

Memilih elemen berdasarkan state tertentu:

/* Link yang belum dikunjungi */
a:link {
    color: blue;
}

/* Link yang sudah dikunjungi */
a:visited {
    color: purple;
}

/* Elemen saat dihover */
button:hover {
    background-color: lightgray;
}

/* Elemen saat aktif (diklik) */
button:active {
    transform: scale(0.98);
}

/* Elemen yang mendapat fokus */
input:focus {
    border-color: blue;
}

/* Elemen pertama dari parent */
li:first-child {
    font-weight: bold;
}

/* Elemen terakhir dari parent */
li:last-child {
    border-bottom: none;
}

/* Elemen ke-n dari parent */
li:nth-child(2n) {
    background-color: #f5f5f5;
}

Pseudo-element

Memilih bagian tertentu dari elemen:

/* Menambahkan konten sebelum elemen */
.blockquote::before {
    content: '"';
    font-size: 2em;
    color: gray;
}

/* Menambahkan konten setelah elemen */
.blockquote::after {
    content: '"';
    font-size: 2em;
    color: gray;
}

/* Memilih huruf pertama */
p::first-letter {
    font-size: 2em;
    float: left;
}

/* Memilih baris pertama */
p::first-line {
    font-weight: bold;
}

/* Memilih teks yang diseleksi user */
::selection {
    background-color: yellow;
    color: black;
}

Praktik Mandiri

Coba edit CSS berikut dan lihat perubahan pada elemen di bawah:

.demo-box {
    width: 200px;
    height: 150px;
    padding: 20px;
    margin: 30px auto;
    border: 2px solid #333;
    background-color: #f0f0f0;
    color: #333;
    text-align: center;
    line-height: 150px;
    font-size: 18px;
    font-family: Arial, sans-serif;
    border-radius: 8px;
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
    transition: all 0.3s ease;
}

.demo-box:hover {
    /* Coba ubah properti hover di sini */
    transform: scale(1.05);
    box-shadow: 0 6px 12px rgba(0, 0, 0, 0.15);
    background-color: #e0e0e0;
}

.demo-box::before {
    content: '★ ';
    color: gold;
}

.demo-box::after {
    content: ' ★';
    color: gold;
}

Hasil:

Kotak Demo