2015, Mempelajari layout CSS dengan cara yang teliti
(book.mixu.net)- Materi pembelajaran per bab ini dibuat agar pembaca yang sudah pernah memakai CSS dapat memahami algoritme layout hingga aturan-aturan detailnya
inline,block,z-index, dan model box dijelaskan kembali bukan sebagai cara pakai sederhana, melainkan sebagai aturan penentu seperti formatting context dan stacking context- Dalam alur normal, posisi relatif elemen block dan inline tidak ditentukan hanya oleh
display, tetapi juga dipengaruhi oleh elemen saudara dan konteksnya - Ukuran model box dan perhitungan
margin: autoberubah sesuai metode positioning, sehingga sulit dihafal sebagai satu aturan tunggal - Materi berlanjut dari alur normal, float, absolute positioning, margin collapsing, overflow,
z-index, pseudo-element, dan Flexbox ke masalah layout praktis seperti centering dan framework grid
Memahami layout CSS sebagai sekumpulan aturan
- Materi ini memandang layout CSS bukan sebagai kumpulan tip, melainkan sistem berbasis aturan, lalu menjelaskan tiap aturan dengan menelusurinya per bab dalam materi pembelajaran yang panjang ini
- Seperti ungkapan “pedantic”, pendekatannya memperhatikan detail-detail yang tampak sepele dan bahkan aturan formalnya
- Sasaran pembacanya bukan orang yang baru belajar CSS, melainkan mereka yang sudah memakai CSS tetapi ingin memahami perilaku layout dengan lebih ketat
- Karena website biasanya berkembang secara bertahap, mudah untuk mempelajari layout hanya lewat tip dan trik kecil, dan dalam proses itu algoritme layout itu sendiri bisa terlewat
- Konsep-konsep utama dibahas secara berurutan, dan disertai contoh penerapan untuk memeriksa tiap konsep
Susunan per bab
- Chapter 1: Box positioning in CSS membahas bagaimana box yang dibentuk elemen HTML ditempatkan satu sama lain
- Tiga metode positioning utama di CSS: alur normal, float, dan absolute positioning
- anonymous box generation, formatting context, line box dalam alur normal, serta perataan di dalam line box
- urutan float, clearfix, interaksi antara float dan tinggi parent
- Chapter 2: Box sizing in CSS membahas model box dan perbedaannya menurut metode positioning
- Perhitungan
height,width, danmarginmemakai mekanisme yang berbeda-beda - Untuk memahami cara perhitungannya, kita perlu melihat metode positioning yang sedang dipakai beserta mekanisme perhitungannya
- Perhitungan
- Chapter 3: Additional properties that influence positioning merangkum properti dan mekanisme tambahan yang memengaruhi penempatan box
- margin collapsing, negative margins, overflow
max-width,max-height,min-width,min-height- stacking context dan
z-index - pengaruh pseudo-element terhadap layout
- properti CSS3
box-sizing
- Chapter 4: Flexbox menjelaskan mode layout Flexbox di CSS 3
- Chapter 5: CSS layout - tricks and layout techniques menerapkan isi bab-bab sebelumnya ke masalah nyata
- centering horizontal dan vertikal
- cara kerja framework grid CSS
- layout multi-kolom
- jebakan umum dan trik layout
- reference index dapat digunakan saat ingin mencari konsep atau properti tertentu lalu berpindah ke bab dan bagian terkait
1 komentar
Komentar Hacker News
Saat menjelaskan layout CSS, hal pertama yang perlu disebut adalah bahwa ada empat sistem layout yang berbeda:
tableyang paling tua dan masih dipakai di email,floatuntuk gambar di dalam isi teks,flexboxyang paling banyak dipakai saat ini, dangridsebagai alternatif modern untuktablepenentuan posisi
absolutedanfixedjuga bisa dipakai seperti hack untuk mengakali layoutabsolutedanfixedbukan hack dan juga tidak “mengakali” layoutKeduanya adalah dua dari lima opsi positioning yang menentukan bagaimana elemen ditempatkan dan berperilaku di dalam alur dokumen, atau di dalam container tertentu: https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layou...
Properti
floatjuga bisa dipakai bersama Grid. Yang justru tidak disebut adalah normal flow, sistem layout yang paling mudah dan paling dasar: https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layou...Markup HTML table yang sebenarnya memang merupakan salah satu cara tertua untuk menempatkan bagian-bagian halaman web berdampingan dan juga dipakai di email, tetapi itu pembahasan yang terpisah dari CSS
Di CSS memang ada
display: tabledan nilai-nilai terkait, tetapi setahu saya dulu di IE lama ini lebih sulit dipakai daripadafloatdan penggunaannya juga terbatas. Saya juga hampir tidak pernah melihatnya banyak dipakai di web modern, mungkin karena persyaratan markup di sekitarnya terlalu kaku. Misalnya tidak ada cara untuk mengubah urutan, dan jika butuh beberapa baris, Anda harus menaruh elemen di HTML yang menjalankan peran ituKarena itu mengubah perilaku kompatibilitas lama menjadi nilai default yang masuk akal. Contoh: https://www.joshwcomeau.com/css/custom-css-reset/#our-finish...
tablebukan sistem layout CSS yang paling tua. Itu adalah flow layout, dan anehnya justru sama sekali tidak ada di daftar iniPenjelasan bahwa
float“dipakai untuk menempatkan kotak di tepi kiri dan kanan kotak container” tidak akuratfloatmemang bisa dipakai begitu, tetapi sejak ada flexbox dan grid, orang tidak lagi memakainya seperti itu. Karena elemen keluar dari normal flow, ini jadi cara yang membingungkan untuk membuat layout bagi orang yang sedang belajar CSSfloatlebih dekat ke alat typesetting daripada alat layout. Kalau tulisan itu mengaku pedantic, seharusnya lebih telitiPada dasarnya ini dibuat seperti Microsoft Word untuk file yang ada di komputer orang lain, jadi sebagian besar properti awal seperti
floatmemang ditujukan untuk layout typesettingJika tidak ada ruang tersisa, elemen itu akan turun ke bawah elemen-elemen sebelumnya. Jika sebuah elemen
display: block, elemen itu akan memenuhi seluruh ruang horizontal sehingga semua elemen setelahnya akan mengambang di bawahnya. Itulah sebabnya namanyafloat, dan begitulah cara posisi elemen dihitungJika memakai
float:left|right, elemen tersebut dipaksa lebih dulu mengambang ke kiri atau kanan dibanding elemen lain dalam container yang sama. Tentu saja, jika container memakai flex atau grid, ini tidak lagi bekerja seperti itufloatdan alurnya yang khusus, serta menjelaskan cara menggunakan kembali dan menerapkan perilaku itu dengan hati-hati untuk tujuan lainTerutama jika mempertimbangkan bahwa saat itu flexbox/grid layout belum ada, menurut saya ini sudah merupakan penjelasan yang teliti
Ini mengurangi kebutuhan untuk memikirkan banyak properti: https://flexboxcss.com
floatTerutama saat catatan itu harus disejajarkan dengan posisi referensi di tengah paragraf
Tulisan seperti ini terasa agak memberatkan meskipun ditulis sebelum era CSS Grid. Sejak CSS Grid muncul, layout CSS jadi makin rumit, dan meskipun sudah 10 tahun mengembangkan web, rasanya saya masih belum paham seberapa dalam CSS itu
Cara kerjanya, kasus pengecualian yang langka, mekanisme internal, dan jumlah fiturnya yang sangat besar memang begitu, dan saya juga baru-baru ini menulis soal ini
Bahkan sebelum sempat benar-benar mengejar semua detail Grid Layouting, sudah muncul subgrid dan container queries. Banyak properti yang baru ditambahkan terasa menangani kasus yang terlalu spesifik sampai saya ragu akan pernah memakainya (seperti
hanging-punctuation,font-palette)Hanya untuk pemenggalan kata dalam paragraf saja ada setidaknya tiga properti, dan orang bisa saja tidak tahu bahwa properti
filterjuga mendukung jenis filter yang sepenuhnya berbeda dengan memakai SVG. Kita bahkan bisa mengatur algoritme penskalaan gambar, danborder-radiusjuga mendukung sudut elipsKita memang bisa mengatakan hal seperti ini tentang teknologi apa pun, tetapi CSS berbeda. CSS menangani terlalu banyak hal dengan terlalu banyak cara, dan berubah terlalu banyak, terlalu cepat: https://shubhamjain.co/2024/02/19/css-impossible-thats-okay/
Saya sudah lebih lama berkutat dengan CSS, tapi saya bahkan tidak berusaha menghafal apakah itu
align-itemsataujustify-content, jadi saya tidak ingat. Begitu memakai flexbox, saya langsung membuka https://css-tricks.com/snippets/css/a-guide-to-flexbox/Grid lebih sulit lagi untuk saya ingat. Meski begitu, setelah beberapa kali menggerutu dan bilang WTF, biasanya saya tetap bisa membuat apa yang saya mau dengan cukup mudah, jadi saya tidak merasa seperti tidak memahami kedalamannya. Saya sering mendengar orang berkata seperti ini tentang CSS, tetapi dalam kebanyakan kasus saya merasa cukup mudah membuat layout yang diinginkan tanpa usaha besar. Hanya saja saya memang tidak mengingat CSS seperti saya mengingat JS
Keduanya terdokumentasi dengan baik dan relatif intuitif, terutama grid yang perilaku anehnya lebih sedikit
Sekarang kita juga tidak terlalu perlu memahami flow layout secara mendalam, dan float serta table layout bisa dilewati sepenuhnya. Cukup gunakan untuk gambar mengambang di dalam konten teks, sesuai tujuan awalnya, dan untuk tabel yang benar-benar tabel
Saat pertama kali saya benar-benar mengerjakan frontend dan dibayar dalam dolar, saya masih menghasilkan DHTML langsung dari perl. Bahkan mengetik singkatan itu saja terasa seperti jari saya kaku karena sudah terlalu jauh hilang dari cache memori otot
Frontend terasa seperti dijalankan oleh anak enam tahun yang sudah paham kalkulus, jadi sekarang rasanya sudah tidak ada cara untuk benar-benar mengejarnya lagi
Tapi cukup membantu juga karena saya memakai plain CSS dan biasanya tidak punya stylesheet global
Saya banyak mengembangkan aplikasi UI, dan kebanyakan memakai Angular, jadi akhir-akhir ini saya cukup memakai framework seperti Bootstrap atau Foundation
Banyaknya pilihan layout di CSS murni terasa sangat berlebihan dan bikin pusing, terutama untuk desain responsif. Saya pernah mencoba CSS murni, tetapi akhirnya tetap banyak memakai boilerplate dan malah membuat sesuatu yang mirip mini-framework
Kecuali kalau membuat situs web desainer yang benar-benar kustom, saya pribadi tidak merasa perlu terus-terusan menemukan kembali roda
CSS bukan berarti selalu menemukan kembali roda; justru CSS bisa membuat layout yang sulit atau hal-hal yang dulu perlu JS menjadi lebih mudah dan lebih kuat
Bootstrap juga oke, tetapi saat harus menyelesaikan masalah layout tingkat lanjut, saya jadi sering memeriksa elemen hanya untuk melihat style apa yang benar-benar diterapkan. Setidaknya itu pengalaman saya, jadi secara pribadi saya akan memilih sisi CSS
Fitur baru yang saya tunggu adalah aturan
@scope, karena sepertinya itu akan membuat style yang memiliki scope jadi jauh lebih mudahhttps://open-props.style/
https://developer.mozilla.org/en-US/docs/Web/CSS/@scope
Apakah tulisan ini dibuat sebelum CSS Grid dan CSS columns?
Ada juga tulisan tentang z-index: https://philipwalton.com/articles/what-no-one-told-you-about...
Melihat bahwa bab 3 membahas margin collapsing dan negative margins, tulisan ini tampaknya memprioritaskan pemahaman teknik layout lama
Itu tetap bernilai saat menangani codebase lawas, tetapi untuk proyek baru sebaiknya dihindari
Apa cara terbaik untuk mempelajari CSS secara mendalam? Dokumentasi resmi terasa agak aneh dalam hal apa yang masih berlaku saat ini dan apa yang tidak
Kalau dipikir-pikir, dalam bahasa Belanda current diterjemahkan sebagai
actueeldan actual sebagaidaadwerkelijk, jadi ini cukup masuk akal. Kalau penutur asli bingung, justru itu mungkin membantuMungkin ini cocok untuk gaya belajar tertentu, tetapi ketika benar-benar memanipulasi style dan layout, sisi praktis dari cara kerjanya akan benar-benar melekat
Saat memakai CSS, saya menargetkan untuk menulis sesedikit mungkin. Bukan karena saya benci CSS—justru saya rasa CSS mendapat reputasi buruk yang tidak adil—melainkan karena dengan begitu kita bisa belajar menata layout dengan lebih efektif tanpa terlalu banyak deklarasi yang saling tumpang tindih
Materi terbaik untuk dasar-dasar CSS adalah https://web.dev/learn/css, dan itu juga mencakup flexbox serta grid
Untuk panduan desain, saya merekomendasikan Refactoring UI. Di sana ada banyak saran yang bisa langsung diterapkan, yang kurang di buku seperti The UX Book
Dalam proyek saya, saya memakai komponen TailwindCSS dan Daisy UI dari penulis Refactoring UI, jadi pada praktiknya saya tidak menulis raw CSS. Awalnya TailwindCSS terasa seperti kemunduran menjadi inline CSS, tetapi tetap saja lebih baik daripada alternatifnya. Saya sarankan untuk mencobanya
[1] https://drafts.csswg.org/
[2] https://developer.mozilla.org/en-US/docs/Web/CSS
Yang pertama bukan materi belajar untuk pengembang web baru. Yang kedua juga bukan dokumen resmi atau otoritatif, tetapi biasanya memuat informasi tentang dukungan Baseline dan tabel kompatibilitas browser
margindanpaddingBagus juga mempelajari bagaimana cascade style bekerja, sehingga Anda juga akan mengerti mengapa orang memakai SCSS dan pengembangan berbasis komponen agar sebagian besar hal itu tidak perlu terlalu dipikirkan
Pelajari juga media query dan penargetan berdasarkan ukuran layar. Yang terpenting, tidak perlu malu mencari di web “cara melakukan x di CSS”. Spesifikasinya sangat besar dan ada banyak hal untuk diingat, jadi kalau tidak sering dipakai dalam waktu lama, mustahil mengingat semuanya