Penamaan Kotak CSS

Saat pertama kali mempelajari cara menggunakan tata letak kisi, Anda bisa mulai dengan menempatkan elemen pada kisi dengan nomor baris. Dalam hal ini, perlu untuk memantau kemana garis-garis tertentu berada di grid, dan ingat bahwa urutan angka-angka mereka dibalik jika situs ditampilkan untuk bahasa yang ditulis dari kanan ke kiri.

Berdasarkan sistem garis ini, teknik bekerja yang memungkinkan untuk memberi nama garis dan bahkan bidang kisi. Menggunakan teknik ini memungkinkan Anda untuk menempatkan item berdasarkan nama dan bukan dengan nomor. Pada artikel ini, saya akan melihat secara rinci berbagai cara penamaan garis dan area dalam tata letak CSS Grid , serta beberapa fitur menarik yang mereka buat.



Dari penerjemah:
Sebuah artikel dua tahun lalu (2017), tetapi menyentuh mekanisme penting dari fungsi Grid CSS, dan karena itu tampaknya berguna dan relevan saat ini.

Penamaan garis


Mari kita mulai dengan memberi nama garis kisi. Dalam contoh di bawah ini, ada Kotak dengan enam trek kolom eksplisit dan satu trek garis eksplisit. Elemen ditempatkan di grid menggunakan nomor baris.

.grid { display: grid; grid-gap: 20px; grid-template-rows: 20vh ; grid-template-columns: 1fr 2fr 1fr 2fr 1fr 2fr; } .header { grid-row: 1; grid-column: 1 / -1; } .sidebar { grid-row: 2; grid-column: 1 / 3; } .content { grid-row: 2; grid-column: 3 / -1; } 

Jika perlu, nama garis dapat ditentukan di dalam tanda kurung siku dalam daftar lagu. Penting untuk diingat di sini bahwa Anda memberi nama jalurnya, bukan trek yang mengikutinya. Setelah memberi nama garis, Anda dapat menggunakan namanya alih-alih angka ketika memposisikan elemen pada grid.

 .grid { display: grid; grid-gap: 20px; grid-template-rows: [header-start] 20vh [header-end] ; grid-template-columns: [sidebar-start] 1fr 2fr [sidebar-end] 1fr 2fr 1fr 2fr; } .header { grid-row: header-start; grid-column: 1 / -1; } .sidebar { grid-row: 2; grid-column: sidebar-start / sidebar-end; } 

Nama dapat berupa apa pun selain kata kunci span . Untuk alasan yang akan Anda pelajari nanti dalam artikel ini, penamaan dengan akhiran -start untuk garis mulai (tidak peduli apakah itu garis atau kolom baris) dan -end untuk akhir adalah praktik yang baik. Hasilnya harus main-start dan main-end atau sidebar-start dan sidebar-end .

Cukup sering, garis akhir dari satu bagian dari kisi dan garis awal dari bagian yang lain bertepatan, tetapi ini bukan masalah, karena garis dapat memiliki beberapa nama. Anda dapat menentukan baris beberapa nama dengan menambahkannya melalui spasi di dalam tanda kurung siku.

 .grid { display: grid; grid-gap: 20px; grid-template-rows: [header-start] 20vh [header-end] ; grid-template-columns: [full-start sidebar-start] 1fr 2fr [sidebar-end main-start] 1fr 2fr 1fr 2fr [main-end full-end]; } .header { grid-row: header-start; grid-column: full-start / full-end; } .sidebar { grid-row: 2; grid-column: sidebar-start / sidebar-end; } .content { grid-row: 2; grid-column: main-start / main-end; } 

Contoh ini menunjukkan bahwa Anda tidak harus memberi nama setiap garis kisi individual, dan bahwa nomor garis yang dapat digunakan selain nama selalu tersedia.

Codepen 1. Penamaan Baris

Baris dengan nama yang sama.


Kami melihat bagaimana garis dapat memiliki beberapa nama, tetapi ada juga situasi di mana beberapa garis memiliki nama yang sama. Ini terjadi jika Anda menggunakan fungsi repeat() dan menyertakan garis bernama dalam daftar trek. Contoh berikut membuat enam baris bernama, bergantian bernama col-a-start dan col-b-start .

 .grid { display: grid; grid-gap: 20px; grid-template-columns: repeat(3, [col-a-start] 1fr [col-b-start] 2fr); } 

Jika Anda menentukan col-a-start ketika memposisikan elemen, itu akan ditempatkan pada baris pertama yang ditemui dengan nama col-a-start (yang dalam contoh dianggap akan menjadi garis grid pertama). Dengan prinsip yang sama, jika Anda menentukan col-b-start saat memposisikan elemen, elemen itu akan ditempatkan pada garis kisi kedua.

Jika Anda perlu memposisikan pada baris berikutnya, tambahkan nomor setelah nama untuk menunjukkan pada baris mana dari baris dengan nama yang sama item harus ditempatkan

 .box3 { grid-row: 2; grid-column: col-a-start 2 / col-b-start 3; } 

Codepen 2. Baris dengan nama yang sama.

Spesifikasi ini menjelaskan perilaku ini sebagai "membuat seperangkat garis grid bernama."

Menyimpan nama garis saat membangun kembali kisi adaptif


Gunakan nomor baris atau nama mereka, Anda yang memutuskan. Sebagai aturan, garis dapat berguna dalam situasi ketika Anda ingin mengubah struktur kisi sebagai bagian dari kueri media. Alih-alih melacak garis mana yang Anda tempatkan elemen pada titik kontrol yang berbeda, itu akan mungkin untuk beroperasi dengan garis bernama berurutan.

Dalam contoh sederhana berikut ini, saya mendefinisikan kolom kotak untuk layar sempit, dan kemudian mendefinisikannya kembali dengan lebar 550px.

 .grid { display: grid; grid-gap: 20px; grid-template-rows: [header-start] 20vh [header-end]; grid-template-columns: [full-start ] 10px [sidebar-start main-start] 1fr [main-end sidebar-end] 10px [full-end]; } @media (min-width: 550px) { .grid { grid-template-columns: [full-start sidebar-start] 1fr 2fr [sidebar-end main-start] 1fr 2fr 1fr 2fr [main-end full-end]; } } 

Codepen 3. Memberi nama hal: mendefinisikan kembali posisi baris bernama

Bernama Daerah


Sebelumnya, kami hanya mempertimbangkan nama baris, tetapi ada cara lain. Kami dapat memberi nama area kisi.

Wilayah kisi adalah wilayah persegi panjang yang terdiri dari satu atau lebih sel kisi. Area ini didefinisikan oleh empat garis kisi yang menunjukkan garis awal dan akhir untuk kolom dan baris.


Kami menamai area grid menggunakan properti grid-template-areas . Properti ini menggambarkan tata letak dalam bentuk tabel ASCII dan merupakan serangkaian garis, yang masing-masing menggambarkan jalur garis terpisah dari kisi.

 .grid { display: grid; grid-template-columns: repeat(3, 1fr 2fr) ; grid-template-areas: "head head head head head head" "side side main main main main" "foot foot foot foot foot foot"; } 

Nama-nama yang kami gunakan di baris properti grid-template-areas ditugaskan untuk anak-anak langsung dari grid menggunakan properti grid-area . Nilai dari properti ini, ketika digunakan untuk penamaan, adalah apa yang disebut pengidentifikasi pengguna , sehingga tidak perlu dilampirkan dalam tanda kutip

 .header { grid-area: head; } .sidebar { grid-area: side; } .content { grid-area: main; } .footer { grid-area: foot; } 

Untuk membuat area mencakup lebih dari satu sel saat menggambarkan struktur kisi menggunakan properti grid-template-areas , Anda perlu merekam ulang pengenalnya beberapa kali di sepanjang baris atau kolom. Area yang dibuat harus berbentuk persegi panjang, area berbentuk L dan T tidak diperbolehkan. Anda juga dapat membuat hanya satu area persegi panjang untuk setiap nama - area yang terputus tidak diperbolehkan. Spesifikasi mencatat bahwa:
“Area yang tidak berbentuk segi empat atau terputus mungkin diperbolehkan dalam versi modul ini di masa depan”
- Properti grid-templat-area

Saat menggambarkan kisi, Anda harus menjaga presentasi lengkapnya, jika tidak seluruh iklan akan dibuang sebagai tidak valid. Ini berarti bahwa setiap sel kotak harus diisi.

 grid-template-areas: "head head head head head head" "side side main main main main" "foot foot foot foot foot foot"; } 

Karena Anda mungkin ingin membiarkan beberapa sel dalam markup kosong, spesifikasi mendefinisikan simbol titik . atau urutan titik tanpa spasi di antara mereka .... sebagai penanda sel kosong

 grid-template-areas: "head head head head head head" "side side main main main main" "....... ....... foot foot foot foot"; } 

Codepen 4. Wilayah Bernama

Jika Anda belum mengunduh Firefox untuk memanfaatkan semua fitur terbaru Firefox DevTools Grid Inspector, saya sarankan melakukan ini ketika bekerja dengan bidang yang disebutkan


Demonstrasi area bernama di "Inspektur Kotak" pada browser Firefox ( Buka asli )

Garis bernama membentuk area


Sekarang kita sampai pada bagian yang menarik dari seluruh penamaan liburan ini. Anda mungkin ingat bahwa ketika kami melihat baris bernama, saya menyarankan menggunakan perjanjian akhir baris yang menetapkan awal area menggunakan -start , akhir area menggunakan -end . Alasan untuk ini adalah bahwa jika Anda memberi nama garis dengan cara ini, Anda berakhir dengan area kisi dengan nama itu, dan Anda dapat memasukkan elemen ke dalamnya dengan menetapkan nama ini melalui properti grid-area .

Dalam contoh berikut, untuk baris dan kolom, saya beri nama panel-start dan panel-end . Ini akan memberi saya area bernama panel. Jika saya menetapkannya sebagai nilai properti grid-area untuk elemen pada halaman, ini akan menempatkan elemen di area yang ditentukan oleh baris ini

 .grid { display: grid; grid-gap: 20px; grid-template-columns: 1fr [panel-start] 2fr 1fr 2fr 1fr [panel-end] 2fr; grid-template-rows: 10vh [panel-start] minmax(200px, auto) 10vh [panel-end]; grid-template-areas: "head head head head head head" "side side main main main main" ".... .... foot foot foot foot"; } .panel { grid-area: panel; } 

Codepen 5. Area terbentuk dari garis bernama

Garis terbentuk dari area yang disebutkan


Kita juga bisa melakukan kebalikan dari yang ditunjukkan di atas, menggunakan garis yang dibuat dari area yang disebutkan. Setiap area membuat empat baris bernama menggunakan konvensi akhiran yang sama dengan -start dan -end . Jika ada area bernama main , garis awal dan akhir dan garis kolom akan disebut main-start dan main-end . Baris bernama ini dapat digunakan untuk memposisikan elemen.

Dalam contoh berikut, saya memposisikan panel menggunakan nama-nama garis yang dihasilkan secara otomatis ini:

 .grid { display: grid; grid-template-areas: "head head head head head head" "side side main main main main" ".... .... foot foot foot foot"; } .panel { grid-column: main-start / main-end; grid-row: head-start / foot-end; } 

Codepen 6. Garis terbentuk dari area yang disebutkan

Nama baris setara dengan nama wilayah


Selain baris dengan -end dan -end , baris dibuat untuk wajah-wajah wilayah kisi apa pun dengan nama wilayah ini. Dengan demikian, jika ada area main , Anda bisa menggunakan pengidentifikasi main sebagai nilai untuk properti grid-row-start atau grid-column-start , dan konten akan terletak dari awal area ini. Jika Anda menggunakan nilai ini untuk properti grid-row-end atau grid-column-end , maka garis akhir area ini dipilih. Pada contoh di bawah ini, saya meregangkan elemen .panel dari awal main ke akhir main untuk kolom, dan dari awal main ke ujung foot untuk garis

 .panel { grid-column: main; grid-row: main / foot ; } 

Codepen 7. Nama baris setara dengan nama wilayah

Penjelasan properti kotak-area


Sangat berguna untuk mengetahui sesuatu tentang properti grid-area . Pada dasarnya, apa yang kita lakukan ketika menggunakan grid-area dengan pengidentifikasi seperti main adalah bagaimana kita menggambarkan keempat garis area tersebut. Nilai yang valid untuk properti grid-area juga nomor baris.

 .main { grid-area: 2 / 1 / 4 / 3; } 

Ini memiliki efek yang sama dengan entri:
 .main { grid-row-start: 2; grid-column-start: 1; grid-row-end: 4; grid-column-end: 3; } 

Ketika anda bertanya
 .main { grid-area: main; } 

Ini sebenarnya berarti:
 .main { grid-area: main / main / main / main ; } 

Properti grid-area berperilaku sedikit berbeda ketika pengidentifikasi pengguna digunakan, bukan nomor baris. Saat menggunakan nomor baris untuk nilai awal di properti grid-area , setiap nomor baris akhir yang tidak Anda tentukan akan secara otomatis disetel ke auto , oleh karena itu, penentuan posisi otomatis akan digunakan untuk menentukan di mana menempatkan elemen.

Namun, jika Anda menggunakan ID pengguna dan melewati beberapa baris, mereka ditetapkan sebagai berikut

Tiga nama baris ditentukan


 .main { grid-area: main / main / main ; } 

Jika Anda menentukan tiga nama garis, maka pada dasarnya Anda kehilangan grid-column-end . Jika grid-column-start adalah pengidentifikasi pengguna, maka pengidentifikasi yang sama juga ditetapkan untuk grid-column-end . Seperti yang telah kita lihat, properti -end akan menggunakan wajah akhir dari main , jadi jika grid-column-start dan grid-column-end diberi nama yang sama, konten direntangkan ke semua kolom area ini.

Dua nama garis ditentukan


 .main { grid-area: main / main ; } 

Ketika hanya dua nama yang ditentukan, garis awal baris dan kolom ditetapkan. Jika grid-column-start dan / atau grid-row-start adalah pengidentifikasi pengguna, maka grid-column-end dan grid-row-end masing diatur ke nilai yang sama.

Satu nama baris ditentukan


 .main { grid-area: main ; } 

Menyetel nama garis tunggal adalah persis apa yang Anda lakukan ketika Anda mengatur area kisi ke nama utama area tersebut. Dalam hal ini, keempat baris diatur ke nilai ini.

Catatan : Ini berfungsi untuk grid-column - grid-row dan grid-row .

Metode ini sebenarnya berarti bahwa Anda dapat menetapkan satu set kolom atau baris dalam kotak untuk menempatkan elemen. Sama seperti nilai-akhir untuk properti grid-area diatur ke nilai yang sama dengan nilai awal (ketika dihilangkan), nilai akhir untuk properti grid-column dan grid-row juga berperilaku. Ini berarti bahwa Anda dapat menempatkan elemen antara garis kolom awal dan akhir dari area main menggunakan:

 .main { grid-column: main ; } 

Dalam Breaking Out with CSS Grid dijelaskan, saya menunjukkan bagaimana fitur ini digunakan untuk membuat pola desain yang berguna untuk area berukuran penuh yang melampaui area konten terbatas.

Sebuah kisi dapat memiliki banyak garis bernama.


Semua hal di atas berarti grid sebagai hasilnya dapat berisi sejumlah besar garis bernama. Dalam kebanyakan kasus, Anda tidak perlu khawatir tentang ini. Bekerja dengan garis yang Anda butuhkan dan abaikan keberadaan orang lain.

Penamaan dan singkatan grid dan templat-templat properti


CSS Grid memiliki dua singkatan yang memungkinkan Anda untuk mengatur banyak properti grid dalam satu sintaks yang kompak. Secara pribadi, tampaknya cukup sulit untuk saya pahami. Ketika saya membahas hal ini dengan pengembang lain, pendapat terbagi: beberapa seperti mereka, yang lain lebih suka menggunakan properti terpisah. Seperti dalam kasus singkatan lainnya, harus diingat bahwa nilai properti yang tidak Anda gunakan akan diatur ulang ke aslinya

Singkatan grid-template: membuat kisi eksplisit


Anda dapat menggunakan pintasan grid-template untuk mengatur semua properti kisi eksplisit di satu tempat sekaligus

 grid-template-columns grid-template-rows grid-template-areas 

Ini berarti bahwa Anda dapat mendefinisikan garis yang dinamai dan area yang dinamai secara bersamaan. Saat menggunakan properti yang menggabungkan area dan baris bernama, saya pertama-tama akan menentukan nilai properti grid-template-areas , seperti yang dijelaskan pada bagian di atas.

Maka Anda mungkin ingin menambahkan nama baris. Mereka ditempatkan di awal dan di akhir setiap garis nilai - ingat bahwa setiap garis nilai mewakili jalur garis. Nama atau nama garis harus di dalam tanda kurung siku, sama seperti ketika memberi nama garis di properti grid-template-rows , dan harus berada di luar tanda kutip yang mengelilingi garis nilai yang menentukan trek garis.

Pada contoh di bawah ini, saya beri nama dua garis garis: panel-start muncul setelah baris header (baris kedua grid) dan panel-end berjalan setelah baris footer terakhir (baris keempat grid dengan tiga trek garis). Saya juga menentukan ukuran trek baris untuk baris yang dinamai dan tidak disebutkan namanya dengan menambahkan parameter pada akhir baris nilai yang menggambarkan trek baris ini.

 .grid { display: grid; grid-gap: 20px; grid-template: " head head head head head head" 10vh [panel-start] "side side main main main main" minmax(200px, auto) ".... .... foot foot foot foot" 10vh [panel-end]; } 

Jika perlu memberi nama kolom, kita tidak bisa melakukan ini di dalam baris, jadi kita perlu menambahkan pemisah / , dan kemudian menentukan daftar trek kolom. Baris diberi nama seolah-olah daftar ini adalah nilai dari properti grid-template-columns .

 .grid { display: grid; grid-gap: 20px; grid-template: " head head head head head head" 10vh [panel-start] "side side main main main main" minmax(200px, auto) ".... .... foot foot foot foot" 10vh [panel-end] / [full-start ] 1fr [panel-start] 2fr 1fr 2fr 1fr [panel-end] 2fr [full-end]; } 

Dalam contoh ini, yang dapat Anda lihat dalam codepen di bawah ini, saya membuat satu set garis tambahan untuk baris dan kolom, garis-garis ini menentukan area yang disebut panel , karena saya menggunakan panel-start dan panel-end sintaks. Dengan cara ini saya dapat menempatkan elemen dengan mengatur nilai panel properti grid-area .

Sepintas, ini terlihat agak tidak bisa dipahami. Jadi, di sini kita membuat daftar kolom yang berbaris sesuai dengan tabel ASCII kita yang didefinisikan di atas. Secara opsional, tambahkan spasi di antara nilai untuk menyelaraskan definisi template-areas - template-columns dan template-columns .

Codepen 8. singkatan Grid -template

Singkatan grid: mesh implisit dan eksplisit


Spesifikasi mengasumsikan bahwa jika Anda perlu mendefinisikan kisi implisit secara terpisah, Anda harus menggunakan properti grid steno alih-alih grid-template . Kotak singkatan me-reset semua nilai implisit yang belum Anda atur. Dengan demikian, ini memungkinkan Anda untuk mengatur dan mereset properti berikut

 grid-template-columns grid-template-rows grid-template-areas grid-auto-columns grid-auto-rows grid-auto-flow 

Untuk tujuan kami, menggunakan singkatan grid akan identik dengan menggunakan grid-template , karena kami mendefinisikan definisi grid implisit. Satu-satunya perbedaan adalah mengatur ulang properti grid-auto–* . Singkatan grid dapat digunakan untuk mengatur kisi eksplisit dan mengatur ulang properti implisit, atau untuk mengatur kisi implisit dan mengatur ulang properti eksplisit. Melakukan keduanya pada saat yang sama tidak masuk akal

 .grid { display: grid; grid-gap: 20px; grid: " head head head head head head" 10vh [panel-start] "side side main main main main" minmax(200px, auto) ".... .... foot foot foot foot" 10vh [panel-end] / [full-start ] 1fr [panel-start] 2fr 1fr 2fr 1fr [panel-end] 2fr [full-end]; } 

Catatan : Dalam versi asli yang disarankan dari spesifikasi Grid CSS, pengurangan ini juga me-reset properti gap antara sel grid-row-gap sel grid-column-gap grid-row-gap dan sel grid-row-gap sel grid-row-gap kotak. Namun, perilaku ini akhirnya berubah. Browser memperbarui perilaku ini, tetapi pada saat penulisan (Oktober 2017), Anda masih bisa menghadapi situasi di mana nilai properti gap diatur ulang ke nol ketika pengurangan digunakan, jadi Anda mungkin perlu mendefinisikannya kembali nanti

Pendekatan mana yang digunakan?


Anda mungkin bertanya yang mana dari semua metode ini yang paling baik digunakan untuk tugas tertentu? Tidak ada aturan ketat. Secara pribadi, saya suka menggunakan grid-template-areas untuk komponen saat saya bekerja di pustaka templat saya. Lebih mudah memiliki struktur komponen tepat di depan mata Anda secara langsung di CSS dan grid-template-areas membuatnya mudah untuk mencoba opsi tata letak yang berbeda saat mengujinya. Saya menemukan bahwa karena pergerakan sel mesh yang begitu sederhana, penting untuk memastikan bahwa urutan visual dan logis dari sel-sel komponen tidak terganggu. Pengunjung yang berinteraksi dengan situs Anda menggunakan keyboard, beralih di antara elemen-elemen dengan tombol Tab, akan memilih elemen-elemen dalam urutan yang didefinisikan dalam markup. Pastikan untuk mengingat kembali tata letak segera setelah Anda memutuskan cara yang paling tepat untuk menampilkan konten Anda. Untuk mempelajari lebih lanjut tentang masalah ini, saya sarankan membaca artikel Layout dan Aksesibilitas Grid CSS .

Konvensi penamaan dasar


Untuk meringkas artikel, saya akan merekapitulasi beberapa aturan dasar yang perlu diingat ketika memberi nama garis atau bidang CSS Grid:

Penamaan baris:

  1. Anda dapat menggunakan hampir semua nama (kecuali untuk kata kunci rentang), tetapi Anda juga dapat menggunakan area yang dibuat dari baris ini jika nama mereka diakhiri dengan -start dan -end
  2. Garis dapat memiliki beberapa nama yang didefinisikan di dalam tanda kurung siku dan dipisahkan oleh spasi
  3. Beberapa baris mungkin memiliki nama yang sama; jika Anda membutuhkan yang spesifik, cukup tambahkan nomor baris yang diperlukan setelah nama dalam urutan

Area Penamaan:

  1. Saat mendefinisikan suatu area menggunakan area grid-template-areas , bentuk area tersebut harus persegi panjang
  2. Saat menggunakan properti grid-template-areas , setiap lintasan baris dari kotak tersebut direpresentasikan sebagai string nilai dan ditampilkan dalam tanda kutip
  3. Setiap sel harus diisi. Jika dengan desain Anda ingin membiarkan beberapa sel kosong, gunakan titik untuk ini . atau elipsis ... tanpa spasi
  4. Wilayah yang diberi nama membuat garis dengan nama yang sama dengan wilayah, tetapi dengan -end dan -end . Mereka dapat digunakan untuk memposisikan elemen.

Source: https://habr.com/ru/post/id478850/


All Articles