Rumah >hujung hadapan web >tutorial css >Susun atur grid CSS moden yang mudah dan responsif
mata teras
grid-column
untuk mencari item grid, serta sifat seperti grid-row
, justify-items
dan align-items
untuk menyelaraskan dan menyesuaikan item. Ia juga membolehkan grid bersarang, di mana unsur -unsur kanak -kanak grid sendiri boleh menjadi bekas grid. align-self
Dalam artikel sebelumnya, kami meneroka empat teknik yang berbeza untuk membina susun atur grid responsif yang mudah. Jawatan itu ditulis pada tahun 2014 - sebelum grid CSS tersedia - jadi dalam tutorial ini kita akan menggunakan struktur HTML yang sama tetapi dengan susun atur grid CSS moden.
Dalam tutorial ini, kami akan menggunakan Float untuk membuat demo dengan susun atur asas dan kemudian meningkatkannya dengan grid CSS. Kami akan menunjukkan banyak utiliti berguna seperti elemen yang berpusat, merangkumi projek, dan mudah mengubah susun atur pada peranti kecil dengan mentakrifkan semula kawasan grid dan menggunakan pertanyaan media. Anda boleh mencari kod dalam codepen ini:
susun atur grid CSS moden responsif
Sebelum kita menyelam untuk membuat demonstrasi grid responsif, mari kita mula memperkenalkan grid CSS.CSS Grid adalah sistem dua dimensi yang kuat yang ditambah kepada pelayar yang paling moden pada tahun 2017. Ia benar -benar mengubah cara kami membuat susun atur HTML. Susun atur grid membolehkan kami membuat struktur grid dalam CSS, bukan dalam HTML.
Di samping IE11, penyemak imbas yang paling moden menyokong grid CSS. Anda boleh menggunakan Caniuse.com untuk menyemak sokongan.
Susun atur grid mempunyai bekas induk yang
harta ditetapkan kepada display
atau grid
. Unsur -unsur kanak -kanak dari bekas adalah item grid, dan mereka terletak secara tersirat kerana algoritma grid yang kuat. Anda juga boleh menggunakan kelas yang berbeza untuk mengawal penempatan, saiz, kedudukan, dan aspek lain dari projek. inline-grid
mari kita mulakan dengan halaman HTML asas. Buat fail HTML dan tambahkan yang berikut:
<code class="language-html"><!DOCTYPE html> <title>CSS Grid Layout Example</title> <link rel="stylesheet" href="style.css"> <header> <h2>CSS Grid Layout Example</h2> </header> <aside class="sidebar"> <p>Sidebar</p> </aside> <main> <article>1</article> <article>2</article> <article>11</article> </main> <footer> <p>Copyright 2018</p> </footer> </code>
Kami menggunakan semantik HTML untuk menentukan tajuk, sidebar, badan, dan bahagian kaki halaman. Di bahagian utama, kami menggunakan tag <article></article>
untuk menambah satu set item. <article></article>
adalah tag semantik HTML5 yang boleh digunakan untuk membungkus kandungan bebas dan mandiri. Halaman tunggal boleh mengandungi sebilangan tag <article></article>
.
Ini adalah tangkapan skrin halaman pada peringkat ini:
di kepala dokumen dan tambahkan gaya berikut: <style></style>
<code class="language-css">body { background: #12458c; margin: 0rem; padding: 0px; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; } header { text-transform: uppercase; padding-top: 1px; padding-bottom: 1px; color: #fff; border-style: solid; border-width: 2px; } aside { color: #fff; border-width:2px; border-style: solid; float: left; width: 6.3rem; } footer { color: #fff; border-width:2px; border-style: solid; clear: both; } main { float: right; width: calc(100% - 7.2rem); padding: 5px; background: hsl(240, 100%, 50%); } main > article { background: hsl(240, 100%, 50%); background-image: url('https://source.unsplash.com/daily'); color: hsl(240, 0%, 100%); border-width: 5px; }</code>Ini adalah halaman demo kecil, jadi kami akan gaya tag secara langsung untuk kebolehbacaan dan bukannya menggunakan sistem penamaan kelas.
Kami menggunakan terapung untuk meletakkan sidebar ke kiri, letakkan badan utama ke kanan, dan tetapkan lebar bar sisi ke lebar
6.3rem tetap. Kemudian, kami mengira dan menetapkan lebar baki bahagian badan menggunakan fungsi CSS . Bahagian utama mengandungi perpustakaan projek yang dianjurkan ke dalam blok menegak. calc()
susun atur tidak sempurna. Sebagai contoh, ketinggian bar sisi adalah berbeza dari ketinggian bahagian kandungan utama. Terdapat pelbagai teknik CSS yang dapat menyelesaikan masalah ini, tetapi kebanyakannya adalah tip atau penyelesaian. Oleh kerana susun atur ini adalah sandaran untuk grid, ia akan dilihat oleh pengguna yang lebih sedikit dan lebih sedikit. Kejatuhan itu tersedia dan cukup baik.
Versi terkini Chrome, Firefox, Edge, Opera, dan Safari semuanya menyokong grid CSS, yang bermaksud jika pelawat anda menggunakan penyemak imbas ini, anda tidak perlu risau tentang menyediakan sandaran. Anda juga perlu mempertimbangkan penyemak imbas Evergreen. Versi terkini Chrome, Firefox, Edge dan Safari adalah pelayar malar hijau. Iaitu, mereka akan mengemas kini secara automatik dan diam -diam tanpa mendorong pengguna. Untuk memastikan susun atur anda berfungsi dengan baik di setiap penyemak imbas, anda boleh memulakan dengan sandaran lalai berasaskan terapung dan kemudian memohon susun atur grid moden menggunakan teknik peningkatan progresif. Pengguna menggunakan pelayar yang lebih tua tidak akan mendapat pengalaman yang sama, tetapi itu cukup baik.
Peningkatan Progresif: Anda tidak perlu menutup segala -galanya
Apabila menambah susun atur grid CSS di atas susun atur susun atur, anda tidak perlu menulis ganti semua tag atau menggunakan gaya CSS yang berasingan:
float: left|right
ke elemen yang juga merupakan elemen grid (anak elemen induk dengan gaya display: grid
), apungan akan diabaikan dan grid diambil. @supports
boleh digunakan untuk memeriksa sokongan untuk ciri -ciri tertentu dalam CSS. Ini membolehkan kita mengatasi gaya sandaran jika perlu, sementara pelayar yang lebih tua mengabaikan blok @supports
. Sekarang, mari tambahkan grid CSS ke halaman kami. Pertama, mari kita tanda sebagai bekas grid dan tetapkan lajur grid, baris, dan kawasan:
<code class="language-html"><!DOCTYPE html> <title>CSS Grid Layout Example</title> <link rel="stylesheet" href="style.css"> <header> <h2>CSS Grid Layout Example</h2> </header> <aside class="sidebar"> <p>Sidebar</p> </aside> <main> <article>1</article> <article>2</article> <article>11</article> </main> <footer> <p>Copyright 2018</p> </footer> </code>
Kami menggunakan harta display:grid
untuk menandakan sebagai bekas grid. Kami menetapkan jurang grid 0.1VW. GAP membolehkan anda membuat slot antara sel grid dan bukannya menggunakan margin. Kami juga menambah dua lajur menggunakan
grid-template-columns
. Lajur pertama mengamalkan lebar tetap 6.5 REM, dan lajur kedua menggunakan lebar sisa. fr
adalah unit pecahan, dan 1FR adalah sama dengan sebahagian ruang yang ada.
Seterusnya, kami menggunakan grid-template-rows
untuk menambah tiga baris. Baris pertama menggunakan ketinggian tetap 6rem, baris ketiga menggunakan ketinggian tetap 3rem, dan ruang bebas yang tersisa (1FR) diperuntukkan ke baris kedua.
Kami kemudian menggunakan grid-template-areas
untuk menetapkan sel -sel maya yang dihasilkan oleh persimpangan lajur dan baris ke rantau ini. Sekarang kita perlu menggunakan grid-area
untuk benar -benar menentukan kawasan -kawasan yang dinyatakan dalam templat kawasan:
<code class="language-css">body { background: #12458c; margin: 0rem; padding: 0px; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; } header { text-transform: uppercase; padding-top: 1px; padding-bottom: 1px; color: #fff; border-style: solid; border-width: 2px; } aside { color: #fff; border-width:2px; border-style: solid; float: left; width: 6.3rem; } footer { color: #fff; border-width:2px; border-style: solid; clear: both; } main { float: right; width: calc(100% - 7.2rem); padding: 5px; background: hsl(240, 100%, 50%); } main > article { background: hsl(240, 100%, 50%); background-image: url('https://source.unsplash.com/daily'); color: hsl(240, 0%, 100%); border-width: 5px; }</code>
Kebanyakan kod balik tidak mempunyai kesan sampingan pada grid CSS, kecuali untuk lebar bahagian badan width: calc(100% - 7.2rem);
, yang mengira lebar baki bahagian badan selepas menolak lebar sidebar ditambah ruang margin/pengisian.
Ini adalah tangkapan skrin hasilnya. Sila ambil perhatian bahawa kawasan utama tidak menduduki semua lebar yang tinggal:
apabila menyokong grid: width: auto;
<code class="language-css">body { /*...*/ display: grid; grid-gap: 0.1vw; grid-template-columns: 6.5rem 1fr; grid-template-rows: 6rem 1fr 3rem; grid-template-areas: "header header" "sidebar content" "footer footer"; }</code>Ini adalah tangkapan skrin hasil semasa:
Tambah mesh bersarang
Elemen kanak -kanak grid itu sendiri boleh menjadi bekas grid. Mari kita tetapkan bahagian utama sebagai bekas grid:
<code class="language-html"><!DOCTYPE html> <title>CSS Grid Layout Example</title> <link rel="stylesheet" href="style.css"> <header> <h2>CSS Grid Layout Example</h2> </header> <aside class="sidebar"> <p>Sidebar</p> </aside> <main> <article>1</article> <article>2</article> <article>11</article> </main> <footer> <p>Copyright 2018</p> </footer> </code>
Kami menggunakan jurang grid 0.1VW dan gunakan fungsi repeat(auto-fill, minmax(12rem, 1fr));
untuk menentukan lajur dan baris. Pilihan auto-fill
cuba mengisi ruang bebas dengan seberapa banyak lajur atau baris yang mungkin, dan mewujudkan lajur atau baris tersirat jika diperlukan. Jika anda ingin meletakkan lajur atau baris yang ada ke dalam ruang yang ada, anda perlu menggunakan auto-fit
. Baca penjelasan yang baik mengenai perbezaan antara auto-fill
dan auto-fit
.
Ini adalah tangkapan skrin hasilnya:
, grid-column
dan grid-row
kata kunci span
dan grid-column
, yang membolehkan anda mencari item grid dalam grid induk menggunakan garisan grid. Mereka adalah singkatan untuk sifat berikut: grid-row
grid-row-start
grid-row-end
grid-column-start
grid-column-end
untuk menentukan berapa lajur atau baris untuk rentang. span
<code class="language-css">body { background: #12458c; margin: 0rem; padding: 0px; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; } header { text-transform: uppercase; padding-top: 1px; padding-bottom: 1px; color: #fff; border-style: solid; border-width: 2px; } aside { color: #fff; border-width:2px; border-style: solid; float: left; width: 6.3rem; } footer { color: #fff; border-width:2px; border-style: solid; clear: both; } main { float: right; width: calc(100% - 7.2rem); padding: 5px; background: hsl(240, 100%, 50%); } main > article { background: hsl(240, 100%, 50%); background-image: url('https://source.unsplash.com/daily'); color: hsl(240, 0%, 100%); border-width: 5px; }</code>Ini adalah tangkapan skrin hasilnya:
menggunakan utiliti penjajaran grid
Kami mahu memusatkan teks dalam tajuk, sidebar dan footer, dan nombor dalam elemen
.
<article></article>
grid CSS menyediakan enam sifat
, justify-items
, align-items
, justify-content
, align-content
, justify-self
, dan align-self
yang boleh digunakan untuk menyelaraskan dan menyesuaikan item grid . Mereka sebenarnya adalah sebahagian daripada modul penjajaran kotak CSS.
Tambahkan yang berikut dalam header
, aside
, article
dan footer
pemilih:
<code class="language-css">body { /*...*/ display: grid; grid-gap: 0.1vw; grid-template-columns: 6.5rem 1fr; grid-template-rows: 6rem 1fr 3rem; grid-template-areas: "header header" "sidebar content" "footer footer"; }</code>
justify-items
digunakan untuk menyesuaikan item grid di sepanjang paksi baris atau arah mendatar. align-items
Align item grid di sepanjang paksi lajur atau arah menegak. Mereka semua boleh mengambil start
, end
, center
, dan stretch
nilai. Ini adalah tangkapan skrin selepas elemen berpusat:
susun atur demo kami adalah mudah untuk skrin sederhana dan besar, tetapi mungkin bukan cara terbaik untuk membina halaman untuk peranti skrin kecil. Dengan grid CSS, kita dapat dengan mudah mengubah struktur susun atur ini untuk secara linearize dalam peranti kecil -dengan mentakrifkan semula kawasan grid dan menggunakan pertanyaan media.
Berikut adalah tangkapan skrin sebelum menambahkan kod untuk membina semula susun atur pada peranti kecil:
<code class="language-html"><!DOCTYPE html> <title>CSS Grid Layout Example</title> <link rel="stylesheet" href="style.css"> <header> <h2>CSS Grid Layout Example</h2> </header> <aside class="sidebar"> <p>Sidebar</p> </aside> <main> <article>1</article> <article>2</article> <article>11</article> </main> <footer> <p>Copyright 2018</p> </footer> </code>pada peranti dengan lebar kurang daripada 575 piksel, susun atur menjadi linear:
Perhatikan bahawa lebar bar sisi tidak mengisi lebar yang ada. Ini disebabkan oleh kod sandaran, jadi yang perlu kita lakukan ialah menggunakan
pada penyemak imbas yang dibolehkan grid
width: auto;
width: 6.3rem;
Ini adalah tangkapan skrin hasil akhir:
<code class="language-css">body { background: #12458c; margin: 0rem; padding: 0px; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; } header { text-transform: uppercase; padding-top: 1px; padding-bottom: 1px; color: #fff; border-style: solid; border-width: 2px; } aside { color: #fff; border-width:2px; border-style: solid; float: left; width: 6.3rem; } footer { color: #fff; border-width:2px; border-style: solid; clear: both; } main { float: right; width: calc(100% - 7.2rem); padding: 5px; background: hsl(240, 100%, 50%); } main > article { background: hsl(240, 100%, 50%); background-image: url('https://source.unsplash.com/daily'); color: hsl(240, 0%, 100%); border-width: 5px; }</code>
pautan codepen
Dalam tutorial ini, kami membuat susun atur demo responsif menggunakan grid CSS. Kami menunjukkan menggunakan kod sandaran untuk pelayar yang lebih tua, langkah demi langkah menambah grid CSS, membina semula susun atur dalam peranti kecil, dan menggunakan elemen pusat atribut penjajaran.
Soalan Lazim mengenai susun atur grid CSS moden yang mudah dan responsif
Apakah perbezaan antara grid CSS dan Flexbox? Grid CSS dan Flexbox adalah kedua -dua sistem susun atur yang kuat dalam CSS. Walaupun mereka boleh digunakan secara bergantian dalam beberapa kes, mereka masing -masing mempunyai kelebihan unik mereka sendiri. Flexbox adalah model susun atur satu dimensi yang sangat sesuai untuk memberikan item di sepanjang lajur atau baris. Grid CSS, sebaliknya, adalah sistem susun atur dua dimensi yang sesuai untuk mengatur unsur-unsur dalam baris dan lajur pada masa yang sama. Ia sesuai untuk mewujudkan susun atur web yang kompleks.
grid CSS menjadikannya mudah untuk membuat susun atur responsif tanpa pertanyaan media. Anda boleh menggunakan unit
, yang mewakili sebahagian ruang yang tersedia dalam bekas grid. Sebagai contoh, jika anda mahu tiga lajur monospace, anda boleh menggunakan Bolehkah saya menggunakan grid css dan flexbox bersama -sama? fr
grid-template-columns: 1fr 1fr 1fr
Ya, grid CSS dan Flexbox boleh digunakan bersama untuk susun atur. Anda boleh menggunakan grid CSS untuk membuat susun atur halaman keseluruhan dan kemudian gunakan Flexbox untuk susun atur komponen individu atau bahagian dalam sel grid. Gabungan ini membolehkan tahap fleksibiliti dan kawalan yang tinggi ke atas susun atur.
Grid CSS menyediakan beberapa sifat untuk menyelaraskan item, termasuk justify-items
, align-items
, justify-self
, dan align-self
. Ciri -ciri ini boleh digunakan untuk menyelaraskan item di sepanjang paksi baris (Align) atau paksi lajur (Align). Sebagai contoh, justify-items: center
akan memusatkan item di sepanjang paksi garis.
anda boleh menggunakan harta grid-gap
dan grid-row-gap
. Sebagai contoh, grid-column-gap
akan membuat jurang 20px antara semua item grid. grid-gap: 20px
Bagaimanakah kata kunci
auto-fill
berfungsi dalam grid CSS? auto-fit
Kata kunci dan auto-fill
digunakan dengan fungsi auto-fit
dalam sifat grid-template-columns
dan grid-template-rows
. repeat()
Gunakan sebanyak mungkin item untuk mengisi baris atau lajur, dan buat sel kosong jika terdapat item yang tidak mencukupi. auto-fill
berkelakuan sama, tetapi ia runtuh sel kosong, menjadikan item meregangkan untuk mengisi baris atau lajur. auto-fit
untuk mengawal susunan item tumpang tindih. z-index
Bagaimana untuk membuat grid bersarang dalam grid CSS?
untuk projek grid anda dan tentukan susun atur grid seperti yang anda lakukan untuk sebarang bekas grid. display: grid
dan grid-template-rows
untuk mengawal saiz trek grid (baris dan lajur). Anda boleh menentukan saiz menggunakan pelbagai unit, seperti piksel (px), peratusan (%), atau pecahan (FR). grid-template-columns
Atas ialah kandungan terperinci Susun atur grid CSS moden yang mudah dan responsif. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!