TL; DR: Apakah ada sesuatu seperti table-layout: fixed
untuk grid CSS?
Saya mencoba membuat kalender tampilan tahun dengan kisi-kisi besar 4x3 selama berbulan-bulan dan di dalamnya bersarang kisi-kisi 7x6 selama berhari-hari.
Kalender harus mengisi halaman, sehingga wadah kotak tahun mendapat lebar dan tinggi masing-masing 100%.
.year-grid {
width: 100%;
height: 100%;
display: grid;
grid-template: repeat(3, 1fr) / repeat(4, 1fr);
}
.month-grid {
display: grid;
grid-template: repeat(6, 1fr) / repeat(7, 1fr);
}
Berikut ini contoh yang berfungsi: https://codepen.io/loilo/full/ryXLpO/
Untuk mempermudah, setiap bulan dalam pena itu ada 31 hari dan dimulai pada hari Senin.
Saya juga memilih ukuran font yang sangat kecil untuk menunjukkan masalah:
Item kisi (= sel hari) cukup kental karena ada beberapa ratusan di halaman. Dan segera setelah label nomor hari menjadi terlalu besar (jangan ragu untuk bermain-main dengan ukuran font di pena menggunakan tombol di kiri atas) kotak hanya akan tumbuh dalam ukuran dan melebihi ukuran tubuh halaman.
Apakah ada cara untuk mencegah perilaku ini?
Saya awalnya menyatakan grid tahun saya menjadi 100% lebar dan tinggi sehingga mungkin titik untuk memulai, tapi saya tidak bisa menemukan properti CSS yang berhubungan dengan grid yang sudah cocok dengan kebutuhan itu.
Penafian: Saya sadar bahwa ada cara yang cukup mudah untuk men-style kalender itu tanpa menggunakan Layout Grid CSS. Namun, pertanyaan ini lebih tentang pengetahuan umum tentang topik daripada memecahkan contoh konkret.
sumber
Jawaban:
Secara default, item kisi tidak boleh lebih kecil dari ukuran kontennya.
Item kisi memiliki ukuran awal
min-width: auto
danmin-height: auto
.Anda bisa mengesampingkan perilaku ini dengan mengatur item kisi ke
min-width: 0
,min-height: 0
atauoverflow
dengan nilai apa pun selainvisible
.Dari spec:
Berikut adalah penjelasan yang lebih terperinci yang mencakup item fleksibel, tetapi juga berlaku untuk item kisi, juga:
Posting ini juga mencakup masalah potensial dengan wadah bersarang dan perbedaan render yang diketahui di antara browser utama .
Untuk memperbaiki tata letak Anda, buat penyesuaian ini pada kode Anda:
codepen yang direvisi
1fr
vs.minmax(0, 1fr)
Solusi di atas beroperasi pada level item grid. Untuk solusi level kontainer, lihat posting ini:
sumber
min-width: 0;
tidak membantu. Apakah saya melewatkan sesuatu?Jawaban sebelumnya cukup bagus, tapi saya juga ingin menyebutkan bahwa ada adalah tata letak setara tetap untuk grid, Anda hanya perlu menulis
minmax(0, 1fr)
bukan1fr
sebagai ukuran trek Anda.sumber
minmax(0, 1fr)
berfungsi karena1fr
benar-benar merupakan singkatan untukminmax(auto,1fr)
, yang bukan nilai yang benar untuk pertanyaan awal.Jawaban yang ada memecahkan sebagian besar kasus. Namun, saya mengalami kasus di mana saya membutuhkan konten sel-grid
overflow: visible
. Saya menyelesaikannya dengan benar-benar memposisikan dalam pembungkus (tidak ideal, tetapi yang terbaik yang saya tahu), seperti ini:https://codepen.io/bjnsn/pen/vYYVPZv
sumber
hal yang lebih mudah untuk dilakukan adalah mengatur lebar item kisi item seperti:
sumber