Membuat situs yang bagus dengan CSS seminimal mungkin (2023)
(thecascade.dev)- Banyak developer mengalami masalah yang tidak perlu akibat desain CSS yang berlebihan
- Hanya dengan style global yang minimal, kita tetap bisa membuat halaman yang cukup rapi dan responsif
- Masalah layout dasar bisa diselesaikan cukup dengan membatasi ukuran dan menampilkan elemen gambar, SVG, dan video sebagai blok
- Keterbacaan bisa ditingkatkan dengan font system-ui, jarak antarbaris yang tepat, dan pembatasan lebar paragraf maksimum
- Perlu menerapkan properti color-scheme agar preferensi lingkungan seperti dark mode dari OS dapat tercermin
Membuat situs yang bagus dengan CSS seminimal mungkin
Masalah CSS yang berlebihan dan pendekatan yang dipakai
- Banyak orang membuat rancangan CSS yang terlalu rumit saat membangun website
- Dengan CSS yang minimal sekalipun, kita tetap bisa membuat halaman responsif yang cukup rapi dan berpegang pada dasar
HTML dasar dan penanganan gambar
-
Hanya dengan menulis HTML dasar, sebuah situs sudah memberikan responsivitas dasar
-
Karena gambar dapat menimbulkan masalah overflow pada layout, terapkan CSS berikut
img { max-width: 100%; display: block; } -
Jika masalah serupa muncul pada elemen SVG dan video, bisa diperluas seperti berikut
img, svg, video { max-width: 100%; display: block; }
Peningkatan tipografi
-
Font bawaan browser cenderung terasa kurang menarik dari sisi desain
-
Dengan memakai system-ui sebagai font family, kita bisa menerapkan typeface bawaan yang sesuai untuk tiap platform
-
Karena ukuran font dan jarak antarbaris default cenderung sedikit kecil, pengaturan berikut direkomendasikan
body { font-family: system-ui; font-size: 1.25rem; line-height: 1.5; } -
Hanya dengan pengaturan ini saja, kita sudah bisa mendapatkan peningkatan yang besar dibanding nilai default browser
Dukungan dark mode
-
Karena banyak pengguna menyukai dark mode, menerapkan properti color-scheme yang mengikuti pengaturan OS sangat berguna
html { color-scheme: light dark; } -
Properti ini mengatur agar style user agent secara otomatis mencerminkan tema sistem yang dipilih
-
Ini juga bisa ditentukan lewat atribut pada tag HTML
<html lang="en" color-scheme="light dark"></html> -
Selain mengikuti preferensi sistem, memberikan opsi agar pengguna dapat memilih color scheme secara langsung juga merupakan best practice yang baik
Pembatasan lebar konten
-
Panjang paragraf konten adalah elemen penting yang sangat memengaruhi keterbacaan
-
Secara umum, idealnya isi utama ditampilkan dalam 45–90 karakter per baris
-
Dengan membatasi lebar maksimum elemen
mainseperti di bawah, kita bisa meningkatkan keterbacaan paragrafmain { max-width: min(70ch, 100% - 4rem); margin-inline: auto; } -
Fungsi
min()memilih nilai yang lebih kecil antara70chdan100% - 4rem -
margin-inline: automembuat elemen rata tengah secara horizontal -
Sesuai kebutuhan, alih-alih
main, kita juga bisa memakai kelas .container atau .wrapper
Contoh CSS minimal akhir
-
Jika semua poin di atas digabungkan, set CSS minimal berikut sudah cukup untuk membangun situs yang stabil
html { color-scheme: light dark; } body { font-family: system-ui; font-size: 1.25rem; line-height: 1.5; } img, svg, video { max-width: 100%; display: block; } main { max-width: min(70ch, 100% - 4rem); margin-inline: auto; }
Penutup dan skalabilitas
- Contoh di atas bisa langsung dipakai sebagai titik awal yang ringan atau untuk halaman kecil
- Dalam kebanyakan kasus, lebih baik memperluasnya dengan menambahkan style tambahan di atas fondasi ini
1 komentar
Opini Hacker News
system ui font familytetap tidak direkomendasikanhttps://infinnie.github.io/blog/2017/systemui.html
stpada font-nya terlalu tidak enak dilihat, jadi saya tidak ingin menerima saran font dari situs itumax-width? Sasaran artikelnya adalah semua orang yang membuat homepage pribadiIni salah. Sintaks yang benar adalah
Penulis artikel menulisnya dengan benar di beberapa contoh, tetapi salah pada contoh pertama sehingga bisa membingungkan
seperti ini. Melihat
'times'maupun'Times New Roman'sama-sama berjalan tanpa kutip, saya bertanya-tanya apakah itu pengecualian karena font lama, atau CSS memang cukup longgar dalam pencocokan namaIni, saya ingin menyebutnya sekadar cachet money
https://meyerweb.com/eric/books/
content-width, font besar, dan line-height besar. Banyak situs sekarang memakai font terlalu besar dan jarak antarbaris terlalu lebar sehingga perlu banyak sekali scrolling. Ukuran font bawaan browser sudah pas dengan sistem, jadi sebaiknya ukuran font dibiarkan saja dan serahkan penyesuaiannya pada zoomimg { max-width: 100%; }Pengaturan ini wajib dipakai bersama
height: auto. Kalau tidak, proporsi gambar akan rusakimg, svg, video { max-width: 100%; }Di Chrome 141, perhitungan
autojadi salah karena masalah width/height pada elemen SVG bertingkat. Untuk sementara perlu ditangani dengansvg:where(:not(svg svg))Font
system-uibukan sekadar pengganti sederhana untuksans-serif. Jika font UI sistem dipakai untuk isi utama konten, pada beberapa kombinasi OS/bahasa hasilnya bisa sangat tidak nyaman sampai nyaris sulit dibaca. Kalau butuhsans-serif, gunakan sajasans-serifUkuran font default sedikit kecil, jadi sekitar 18~20px (
1.25rem) terasa pas. Tetapi pada layar kecil, sebaiknya jangan lebih dari1remline-heightdefault biasanya direkomendasikan di 1.5~1.7, tetapi 1.7 terlalu renggang di layar kecil. 1.4~1.5 lebih pas, dan bisa disesuaikan menjadi 1.4~1.6 tergantung ukuran layarfont-family: System UI;Ini adalah kesalahan sintaks yang jelas. Jika stylesheet ditinjau, hal ini akan langsung terlihat
Memisahkan tema sistem gelap/terang dan tema web adalah ide yang bagus. Firefox secara default disetel agar konten mengikuti tema sistem, dan itu juga bisa diubah terpisah
main { max-width: min(70ch, 100% - 4rem); margin-inline: auto; }Ini berarti margin minimal sekitar 2rem (jika ditambah body margin default, menjadi 2rem+8px). Margin-nya terlalu besar, dan lokasi penerapannya juga terasa janggal. Jika ingin menerapkannya ke
main, lebih logis menggunakan padding sepertiTetapi dalam praktiknya, header atau footer juga butuh margin sisi yang sama, jadi lebih baik menyesuaikan margin
bodyDengan begitu margin bisa dikurangi dari sekitar ~40px menjadi 16px