Saya bertanya-tanya bagaimana saya bisa membuat tata letak dengan kotak responsif . Setiap kotak akan memiliki konten yang selaras secara vertikal dan horizontal . Contoh spesifik ditampilkan di bawah ...
html
css
responsive-design
grid-layout
aspect-ratio
Garethdn
sumber
sumber
Jawaban:
Anda dapat membuat kotak kuadrat responsif dengan konten terpusat vertikal dan horizontal hanya dengan CSS . Saya akan menjelaskan bagaimana dalam proses langkah demi langkah tetapi pertama di sini adalah 2 demo dari apa yang dapat Anda capai:
Sekarang mari kita lihat bagaimana membuat kotak responsif mewah ini!
1. Membuat kotak responsif:
Trik untuk menjaga elemen persegi (atau apa pun aspek rasio lainnya) adalah menggunakan persen
padding-bottom
.Catatan: Anda dapat menggunakan bantalan atas juga atau margin atas / bawah tetapi latar belakang elemen tidak akan ditampilkan.
Karena bantalan atas dihitung sesuai dengan lebar elemen induk ( Lihat MDN untuk referensi ), tinggi elemen akan berubah sesuai dengan lebarnya. Anda sekarang dapat menjaga rasio aspeknya sesuai dengan lebarnya.
Pada titik ini Anda dapat membuat kode:
HTML :
CSS
Berikut adalah contoh tata letak sederhana dari kotak 3 * 3 menggunakan kode di atas.
Dengan teknik ini, Anda dapat membuat rasio aspek lainnya, di sini adalah tabel yang memberikan nilai padding bawah sesuai dengan rasio aspek dan lebar 30%.
2. Menambahkan konten di dalam kotak
Karena Anda tidak dapat menambahkan konten secara langsung di dalam kotak (itu akan memperluas tinggi mereka dan kotak tidak akan menjadi kotak lagi), Anda perlu membuat elemen anak (untuk contoh ini saya menggunakan divs) di dalamnya dengan
position: absolute;
dan meletakkan konten di dalamnya . Ini akan mengeluarkan konten dari alur dan menjaga ukuran kotak.Jangan lupa untuk menambahkan
position:relative;
div orangtua sehingga anak-anak absolut diposisikan / berukuran relatif terhadap orangtua mereka.Mari kita tambahkan beberapa konten ke kotak 3x3 kotak kami:
HTML :
CSS :
HASIL <- dengan beberapa pemformatan untuk membuatnya cantik!
3. Memasukkan konten
Secara horizontal:
Hal ini cukup mudah, Anda hanya perlu menambahkan
text-align:center
ke.content
.HASIL
Penjajaran vertikal
Ini menjadi serius! Triknya adalah menggunakan
tapi kita tidak bisa menggunakan
display:table;
pada.square
atau.content
divs karena bertentangan denganposition:absolute;
sehingga kita perlu membuat dua anak di dalam.content
divs. Kode kami akan diperbarui sebagai berikut:HTML :
CSS:
Kami sekarang telah selesai dan kami dapat melihat hasilnya di sini:
HASIL LENGKAP LANGSUNG
biola yang dapat diedit di sini
sumber
* { box-sizing: border-box; }
Anda harus menyesuaikan tinggi dan lebar dalam .content div hingga 100%. :)justify-content: center; align-items: center; flex-flow: column nowrap;
Anda bisa menggunakan unit vw (view-width), yang akan membuat kuadrat responsif sesuai dengan lebar layar.
Mock-up cepat ini adalah:
sumber
margin-left: -4px;
gunakanmargin-right:-4px
. Alih-alih tidak mengacaukan inkonsistensi di mincharspace tetapi diatur ke ukuran font induk wrapper ke 0 dan daripada untuk elemen anak diatur ulang ke1rem
(relatif-em)Jawaban yang diterima sangat bagus, namun ini bisa dilakukan dengan
flexbox
.Berikut adalah sistem kisi yang ditulis dengan sintaks BEM yang memungkinkan ditampilkannya 1-10 kolom per baris.
Jika ada baris terakhir tidak lengkap (misalnya Anda memilih untuk menampilkan 5 sel per baris dan ada 7 item), item trailing akan dipusatkan secara horizontal. Untuk mengontrol perataan horizontal dari item tambahan, cukup ubah
justify-content
properti di bawah.square-grid
kelas.Tampilkan cuplikan kode
Fiddle: https://jsfiddle.net/patrickberkeley/noLm1r45/3/
Ini diuji dalam FF dan Chrome.
sumber
Saya menggunakan solusi ini untuk kotak responsif dari ransum yang berbeda:
HTML:
CSS:
Lihat demo di JSfiddle.net
sumber