[ad_1]

https://www.youtube.com/watch?v=Khk0mmylnea

Mari kita buat tata letak menggunakan subgrid. Masih agak baru pada saat penulisan artikel ini dan belum didukung di semua browser utama, salah satu fitur baru yang saat ini sedang diimplementasikan dengan dalam modul tata letak CSS Grid adalah subgrid. Gambar 1 menunjukkan dukungan browser saat ini untuk subgrid.

Data tentang dukungan untuk fitur CSS-Subgrid di seluruh browser utama dari caniuse.com
Dukungan browser saat ini untuk subgrid CSS

Tapi pertama -tama, fungsionalitas apa yang dibawa oleh subgrid yang sebelumnya tidak tersedia di grid? Apa yang dilakukan Subgrid adalah memungkinkan elemen anak dapat menggunakan trek yang dibuat pada elemen induknya. Dengan kata lain, elemen anak beroperasi pada baris dan kolom orang tua mereka yang memungkinkan kami untuk menyelaraskan elemen kami dengan lebih rapi. Mari kita lihat bagaimana ini bekerja dalam praktik.

Subgrid

Kami akan menggunakan subgrid untuk tata letak daftar 4 proyek yang ditemukan dalam daftar bahwa masing -masing memiliki gambar, nama, deskripsi, dan tautan dalam tata letak 4 kolom. HTML kami terlihat sebagai berikut (Listing 1):

<section class="projects">
  <h2>My Projects</h2>
  <ul>
     <li>
       <img src="https://ignitioncms.com/img/ignition-light.svg" alt="Ignition Logo" title="Ignition" height="100">
       <h3>Ignition CMS</h3>
       <div class="content">
          <p>Ignition is a headless CMS...</p>
       </div>
       <a href="https://ignitioncms.com" target="_blank" rel="noopener">Check out Ignition CMS</a>
    </li>
    ...
  </ul>
</section>
Memulai html

Dan halaman web kami terlihat seperti terlihat pada Gambar 2.

andromeda-v2.appspot.com/o/media%2FLjaRDqaLVWCA4MM7kHxb%2F01-starting.webp?alt=media&token=50b68b98-30fb-4b6b-b291-8ecc93671122, https://firebasestorage.googleapis.com/v0/b/andromeda-v2.appspot.com/o/media%2FkaJDyGuMzmGxDMlf8JhW%2F01-starting.png?alt=media&token=9ed35f0b-8094-4034-aa31-06ff88568549″ src=”https://firebasestorage.googleapis.com/v0/b/andromeda-v2.appspot.com/o/media%2FkaJDyGuMzmGxDMlf8JhW%2F01-starting.png?alt=media&token=9ed35f0b-8094-4034-aa31-06ff88568549″ alt=”Penangkapan layar titik awal di browser Firefox”/>
Titik awal

Kami mulai dengan memberikan daftar kami display nilai properti dari grid dan mendefinisikan 4 kolom (satu untuk setiap proyek). Karena kami ingin semua 4 kolom menjadi lebar yang sama yang kami gunakan repeat()yang memungkinkan kita untuk menentukan jumlah kolom yang akan dibuat untuk dimensi yang ditentukan. Kami juga menghapus gaya daftar dan bantalan default dari daftar. Oleh karena itu, CSS kami terlihat sebagai berikut (Listing 2).

  .projects ul {
    list-style-type: none; /* remove list style (bullet points) */
    padding: 0;
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
Penangkapan layar dari titik awal

Sekarang setelah kita memiliki kolom (Gambar 3) kita dapat mulai fokus pada elemen individual yang ditemukan dalam setiap proyek (gambar, nama, deskripsi, dan daftar).

Konten pengambilan layar yang diletakkan dalam 3 kolom. Isi masing -masing proyek disejajarkan dengan bagian atas kolom mereka menggunakan aliran konten normal.
Empat tata letak kolom

Perhatikan bahwa nama proyek dan deskripsi tidak memiliki panjang yang sama. (Ya, karakter ekstra di akhir proyek kedua – Cirrostyle – bukan pengawasan, mereka ada di sana untuk membuat judul bungkus). Yang ingin kami lakukan adalah memiliki setiap jenis konten yang disejajarkan secara horizontal. Kami akan menggunakan subgrid untuk mencapai ini.

Itu subgrid Nilai properti ditetapkan untuk salah satunya grid-template-columns, grid-template-rowsatau keduanya. Dalam kasus kami, karena kami mencari perataan horizontal, kami akan menggunakannya grid-template-rows. Perhatikan bahwa kita masih perlu memberikan proyek (<li>) nilai tampilan grid (Daftar 3).

  .projects ul li {
    display: grid;
    grid-template-rows: subgrid;
  }
Menambahkan subgrid ke proyek individual

Pada saat ini setelah menerapkan properti ini, kami tidak akan melihat semua konten kami sekarang ditemukan di baris pertama seperti yang terlihat pada Gambar 3.

Konten pengambilan layar yang diletakkan dalam 3 kolom. Isi masing -masing proyek disejajarkan dengan bagian atas kolom mereka dalam satu baris. Baris proyek individu saling tumpang tindih
Semua konten proyek dalam satu baris

Mari kita lanjutkan dan tentukan baris kita. Ini akan dilakukan pada orang tua ( <ul>). Kami akan memberikan setiap baris nilai berikut:

  • Baris pertama (gambar): 100px
  • Baris Kedua (Nama Proyek): max-content
  • Baris ketiga (deskripsi): auto
  • Baris keempat (tautan): max-content

Daftar CSS kami yang diperbarui akan terlihat sebagai berikut (Listing 4):

.projects ul {
  list-style-type: none;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  grid-template-rows: 100px max-content auto max-content;
}
Menambahkan definisi baris ke daftar

Meskipun kami mendefinisikan baris kami, kami dapat melihat bahwa konten kami masih ditemukan di baris pertama (Gambar 5). Baris sekarang lebih kecil, tetapi elemen individual proyek belum didistribusikan di seluruh baris yang baru dibuat.

Konten pengambilan layar yang diletakkan dalam 3 kolom. Isi masing -masing proyek disejajarkan dengan bagian atas kolom mereka dalam satu baris. Baris proyek individu saling tumpang tindih.
Konten proyek tumpang tindih dalam barisan tinggi 100px

Bahkan jika kami secara eksplisit menetapkan baris ke setiap elemen proyek individu (Listing 5) kami menemukan bahwa konten kami tetap terjebak di baris pertama (Gambar 6).

.projects ul {
  list-style-type: none;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  grid-template-rows: 100px max-content auto max-content;
}
Menambahkan definisi baris ke daftar
Konten pengambilan layar yang diletakkan dalam 3 kolom. Isi masing -masing proyek disejajarkan dengan bagian atas kolom mereka dalam satu baris. Baris proyek individu saling tumpang tindih. Baris sekarang tinggi 100px.
Konten masih belum selaras dalam baris

Alasan elemen konten proyek berpegang pada baris pertama itu adalah karena kami belum menetapkan nilai baris untuk proyek itu sendiri (<li>). Kecuali ditentukan lain, secara default elemen akan memakan ruang 1 sel (baik secara horizontal maupun vertikal). Kami membutuhkan kami <li> elemen untuk menjangkau 4 baris. Ini akan membuat baris yang tersedia untuk subgrid dan konten proyek akan dapat menyelaraskan dengan benar. Setelah kami memperbarui kami <li>(Listing 5) kita melihat bahwa elemen proyek kami jatuh (Gambar 7).

.projects ul li {
  display: grid;
  grid-template-rows: subgrid;
  grid-row: 1 / 5;
}
Membuat
Konten pengambilan layar yang diletakkan di dalam 3 kolom dan konten masing -masing proyek selaras secara horizontal dengan setiap elemen proyek (gambar, nama, deskripsi, dan tautan) di baris masing -masing.
Subgrid yang diterapkan

Dengan konten kami di baris yang benar, mari kita lakukan sedikit pembersihan. Gambar kami meluas melewati lebar kolom dan menyebabkan beberapa luapan. Untuk memperbaikinya, kami akan memberikan gambar kami a max-width dari 100%.

Kami juga akan menambahkan beberapa ruang di antara kolom kami menggunakan gap milik. Meskipun kami ingin menambahkan ruang di antara kolom, kami tidak ingin menambahkan apa pun di antara baris. Karena itu kami menetapkan 2 nilai untuk deklarasi kami. Yang pertama 0 (row-gap) dan yang kedua 2rem (column-gap). Listing 7 menunjukkan CSS kami yang diperbarui dan Gambar 8 Kemajuan kami sejauh ini. Perhatikan bahwa gap Deklarasi ditambahkan ke daftar, bukan proyek individu.

.projects ul li img {
  grid-row: 1;
  max-width: 100%; /* constrains image width */
}

.projects ul {
  list-style-type: none;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  grid-template-rows: 100px max-content auto max-content;
  gap: 0 2rem; /* gap between the columns but not the rows */
}
Membatasi lebar gambar dan menambahkan celah kolom
Penangkapan layar proyek dengan ruang putih yang ditambahkan antara kolom dan ukuran gambar dibatasi. Konten tidak lagi meluap kolomnya.
Gambar yang diterapkan max-lebar dan celah

Mari kita menaruh beberapa sentuhan akhir pada tata letak kami. Kami akan memusatkan gambar secara horizontal di tengah kolom mereka dan memusatkan nama -nama proyek secara vertikal di tengah baris mereka. Mari kita mulai dengan gambar. Untuk memusatkan gambar secara horizontal yang akan kami gunakan justify-self dengan nilai center. Untuk berpusat pada memproyeksikan nama secara vertikal, kami menggunakan align-self juga dengan nilai center Seperti yang terlihat di Listing 8.

.projects ul li img {
  grid-row: 1;
  max-width: 100%;
  justify-self: center; /* horizontal alignment */
}

.projects ul li h3 {
  grid-row: 2;
  align-self: center; /* vertical alignment */
}
Menyelaraskan elemen individu

Dengan penyesuaian akhir ini, tata letak kami terlihat cukup bagus (Gambar 9) tetapi mari kita lihat seperti apa penampilan kita di Chrome (Gambar 10). Spoiler, pada saat itu atau menulis artikel ini, Chrome belum mendukung subgrid.

Penangkapan layar Firefox dengan elemen dengan benar secara vertikal dan horizontal selaras dalam baris dan kolomnya.
Tata letak yang sudah selesai di Firefox
Penangkapan layar chrome dengan elemen yang ditemukan dengan benar di kolomnya tetapi penyelarasan vertikal dari perataan baris tidak benar karena subgrid belum didukung.
Subgrid tidak didukung di Chrome

Membuat mundur

Meskipun tata letak kami tidak terlihat mengerikan di Chrome, mari kita lanjutkan dan membuatnya sedikit lebih baik dengan menambahkan fallback. Kami akan menggunakan @supports At-aturan untuk memberikan solusi alternatif untuk browser yang belum mendukung subgrid. Dengan secara khusus menambahkan gaya bersyarat ke browser itu jangan Dukungan Subgrid, kami menciptakan situasi di mana ketika properti mendapatkan dukungan, kode kami akan secara otomatis mulai menggunakan solusi pilihan kami. Setelah properti mendapatkan dukungan luas, kami dapat dengan mudah menghapus at-aturan kami tanpa perlu menyentuh sisa kode kami.

Mari kita fokus menyelaraskan ajakan bertindak (tautan) kita di bagian bawah proyek. Proyek kami sudah memiliki file display nilai grid Jadi kami hanya akan memberikan dan nilai alternatif untuk kami grid-template-rows. Oleh karena itu, aturan kami terlihat sebagai berikut (Listing 10):

@supports not (grid-template-rows: subgrid) {
  .projects > ul li {
    grid-template-rows: 100px min-content auto min-content;
  }
}
Aturan Fallback

Meskipun bukan tata letak yang identik seperti di Firefox, dengan menambahkan fallback kami sekarang memiliki solusi kerja di Chrome yang akan “meningkatkan” itu sendiri untuk menggunakan subgrid setelah subgrid didukung oleh browser (Gambar 11).

Penangkapan layar chrome dengan fallback diterapkan. Konten proyek disejajarkan dengan bagian atas kolom daripada masing -masing bagian yang secara horizontal dengan setara dengan jenis yang sama secara horizontal kecuali untuk tautan yang disejajarkan dengan benar di bagian bawah kolom.
Fallback diterapkan di Chrome

Anda dapat menemukan versi yang berfungsi dari kode pada codepen di https://codepen.io/martine-dowden/pen/ylrawvp.

Happy Coding!

[ad_2]

Subgrid CSS | Blog | Solusi Galaksi Andromeda

Tags: , , ,