Apakah mungkin membuat bungkus kisi CSS tanpa menggunakan kueri media?
Dalam kasus saya, saya memiliki jumlah item non-deterministik yang ingin saya tempatkan dalam kotak dan saya ingin kotak itu membungkusnya. Dengan menggunakan Flexbox, saya tidak dapat mengatur ruang dengan baik. Saya juga ingin menghindari banyak pertanyaan media.
Berikut beberapa contoh kode :
.grid {
display: grid;
grid-gap: 10px;
grid-auto-flow: column;
grid-template-columns: 186px 186px 186px 186px;
}
.grid > * {
background-color: green;
height: 200px;
}
<div class="grid">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
</div>
Dan inilah gambar GIF:
Sebagai catatan tambahan, jika ada yang bisa memberi tahu saya bagaimana saya bisa menghindari menentukan lebar semua item seperti saya, grid-template-columns
itu akan bagus. Saya lebih suka anak-anak menentukan lebarnya sendiri.
grid-template-columns: auto auto auto auto;
apakah bekerja dalam kasus ini? =)Jawaban:
Gunakan salah satu
auto-fill
atauauto-fit
sebagai nomor pengulanganrepeat()
notasi.auto-fill
Kisi akan mengulangi trek sebanyak mungkin tanpa memenuhi wadahnya.
Dalam kasus ini, dengan contoh di atas (lihat gambar) , hanya 5 track yang dapat masuk ke grid-container tanpa meluap. Hanya ada 4 item di kisi kami, jadi yang kelima dibuat sebagai trek kosong di ruang yang tersisa.
Sisa ruang yang tersisa, trek # 6, mengakhiri kisi eksplisit. Ini berarti tidak ada cukup ruang untuk menempatkan trek lain.
auto-fit
Kata
auto-fit
kunci berperilaku sama sepertiauto-fill
, kecuali setelah algoritme penempatan item kisi, trek kosong dalam ruang yang tersisa akan diciutkan0
.Petak akan tetap mengulangi trek sebanyak mungkin tanpa meluap penampungnya, tetapi trek yang kosong akan diciutkan
0
.Track yang diciutkan dianggap memiliki fungsi ukuran track tetap
0px
.Tidak seperti
auto-fill
contoh gambar, trek kelima yang kosong diciutkan, mengakhiri kisi eksplisit tepat setelah item ke-4.auto-fill
vs.auto-fit
Perbedaan antara keduanya terlihat ketika
minmax()
fungsinya digunakan.Gunakan
minmax(186px, 1fr)
untuk menyusun item dari186px
hingga186px
ditambah sebagian kecil dari ruang yang tersisa di wadah kisi.Saat menggunakan
auto-fill
, item akan bertambah setelah tidak ada ruang untuk menempatkan track kosong.Saat menggunakan
auto-fit
, item akan bertambah untuk mengisi ruang yang tersisa karena semua trek kosong akan ditutup0px
.Tempat bermain:
CodePen
Memeriksa trek pengisian otomatis
Memeriksa trek pas otomatis
sumber
display: grid
elemenjustify-content: center
repeat(auto-fill, minmax(186px, 1fr));
bukan piksel, tetapi selama div memiliki teks di dalamnya?Anda ingin salah satu
auto-fit
atauauto-fill
di dalamrepeat()
fungsi:Perbedaan antara keduanya menjadi jelas jika Anda juga menggunakan a
minmax()
untuk memungkinkan ukuran kolom yang fleksibel:Ini memungkinkan kolom Anda melenturkan ukurannya, mulai dari 186 piksel hingga kolom dengan lebar yang sama yang membentang di seluruh lebar wadah.
auto-fill
akan membuat kolom sebanyak yang sesuai dengan lebarnya. Jika, katakanlah, lima kolom pas, meskipun Anda hanya memiliki empat item kisi, akan ada kolom kosong kelima:auto-fit
Sebaliknya, menggunakan akan mencegah kolom kosong, meregangkan kolom Anda lebih jauh jika perlu:sumber
Anda mungkin mencari
auto-fill
:Demo: http://codepen.io/alanbuchanan/pen/wJRMox
Untuk menggunakan ruang yang tersedia secara lebih efisien, Anda dapat menggunakan
minmax
, dan meneruskanauto
sebagai argumen kedua:Demo: http://codepen.io/alanbuchanan/pen/jBXWLR
Jika Anda tidak ingin kolom kosong, Anda bisa menggunakan
auto-fit
bukanauto-fill
.sumber
Saya memiliki situasi yang sama. Di atas apa yang Anda lakukan, saya ingin memusatkan kolom saya di wadah sementara tidak mengizinkan kolom kosong untuk mereka kiri atau kanan:
sumber
Ini usahaku. Maafkan bulu halusnya, saya merasa ekstra kreatif.
Metode saya adalah orang tua
div
dengan dimensi tetap . Selebihnya hanya menyesuaikan konten di dalam div itu.Ini akan mengubah skala gambar terlepas dari rasio aspeknya. Tidak akan ada pemotongan yang sulit juga.
sumber