Grid CSS atau Flexbox: Mana Yang Lebih Baik untuk Mencipta Lajur?

Grid CSS atau Flexbox: Mana Yang Lebih Baik untuk Mencipta Lajur?

Apabila bercakap tentang reka letak CSS, dua alatan utama yang anda gunakan ialah Grid dan Flexbox. Walaupun kedua-duanya hebat dalam membuat reka letak, mereka mempunyai tujuan yang berbeza dan mempunyai kekuatan dan kelemahan yang berbeza.





cara menggunakan iphone anda di komputer anda
Video MUO pada hari itu SCROLL UNTUK MENERUSKAN KANDUNGAN

Ketahui cara kedua-dua kaedah reka letak berkelakuan dan masa untuk menggunakan satu daripada yang lain.





Gelagat Berbeza CSS Flexbox dan Grid

Untuk membantu menggambarkan sesuatu, buat satu index.html fail dalam folder pilihan anda dan tampal dalam markup berikut:





<!DOCTYPE html> 
<html lang="en">
  <head>
    <link rel="stylesheet" href="style.css">
  </head>

  <body>
    <h1>Flexbox vs Grid</h1>
    <h2>Flexbox:</h2>

    <div class="flex-container">
      <div>Lorem.</div>
      <div>Lorem ipsum dolor sit amet.</div>
      <div>Lorem ipsum dolor sit amet consectetur.</div>
      <div>Lorem ipsum dolor sit.</div>
      <div>Lorem ipsum dolor sit amet consectetur adipisicing elit.</div>
      <div>Lorem ipsum dolor sit amet.</div>
      <div>Lorem ipsum dolor sit amet consectetur.</div>
      <div>Lorem ipsum dolor sit.</div>
    </div>

    <h2>Grid:</h2>

    <div class="grid-container">
      <div>Lorem.</div>
      <div>Lorem ipsum dolor sit amet.</div>
      <div>Lorem ipsum dolor sit amet consectetur.</div>
      <div>Lorem ipsum dolor sit.</div>
      <div>Lorem ipsum dolor sit amet consectetur adipisicing elit.</div>
      <div>Lorem ipsum dolor sit amet.</div>
      <div>Lorem ipsum dolor sit amet consectetur.</div>
      <div>Lorem ipsum dolor sit.</div>
    </div>
  </body>
</html>

Kedua-dua div mengandungi kanak-kanak yang sama supaya anda boleh menggunakan sistem yang berbeza pada setiap satu dan membandingkannya.

Anda juga boleh melihat bahawa HTML mengimport fail helaian gaya bernama style.css . Buat fail ini dalam folder yang sama seperti index.html dan tampal gaya berikut di dalamnya:



body { 
  padding: 30px;
}

h1 {
  color: #A52A2A;
}

h2 {
  font-size: large;
}

div:not([class]) {
  outline: 2px solid black;
  padding: 0.5em;
}

Halaman anda sepatutnya kelihatan seperti ini:

  Tangkapan skrin item flex dan grid

Sekarang, untuk menghidupkan yang pertama

ke dalam lajur flex, cuma tambah kod berikut pada helaian gaya anda:





.flex-container { 
  display: flex;
}

Inilah hasilnya:

  Tangkapan skrin paparan fleksibel

The bekas lentur div kini meletakkan elemen anaknya dalam lajur. Lajur ini fleksibel dan responsif—ia menyesuaikan lebarnya berdasarkan ruang yang tersedia dalam port pandangan. Tingkah laku ini adalah salah satu yang utama konsep asas di sebalik Flexbox .





Untuk mengelakkan lajur melimpah dalam bekas lentur , anda boleh menggunakan flex-wrap harta:

.flex-container { 
  display: flex;
  flex-wrap: wrap;
}

Jika tiada ruang yang mencukupi untuk elemen kanak-kanak dimuatkan pada satu baris, ia kini akan berpusing dan meneruskan pada baris seterusnya.

Sekarang gunakan susun atur Grid pada yang kedua

menggunakan CSS ini:

.grid-container { 
  display: grid;
}

Tiada apa-apa yang akan berlaku dengan pengisytiharan di atas sahaja kerana kelakuan lalai Grid mencipta baris yang bertindan di atas satu sama lain.

Untuk bertukar kepada paparan lajur, anda perlu menukar grid-auto-aliran harta (iaitu barisan secara lalai):

.grid-container { 
  display: grid;
  grid-auto-flow: column;
}

Sekarang inilah hasilnya:

  Tangkapan skrin paparan flex dan grid

Untuk menentukan bilangan lajur yang anda inginkan pada setiap baris, gunakan grid-template-lajur :

.grid-container { 
  display: grid;
  grid-template-columns: repeat(5, 1fr);
}

Nilai ini mencipta lima lajur yang sama lebar. Untuk mendapatkan gelagat pembalut yang serupa dengan Flexbox, anda boleh menggunakan sifat responsif seperti muat secara automatik dan min-maks :

.grid-container { 
  display: grid;
  grid-template-columns: repeat(auto-fit, min-max(300px, 1fr));
}

Anda akan sering mendengar Flexbox dan Grid masing-masing dirujuk sebagai satu dimensi dan dua dimensi. Itu bukan kebenaran sepenuhnya, bagaimanapun, kerana kedua-dua Flexbox dan Grid boleh membuat a sistem susun atur dua dimensi . Mereka hanya melakukannya dengan cara yang berbeza, dengan kekangan yang berbeza.

Apa yang paling penting ialah cara anda boleh mengawal aspek satu dimensi reka letak. Pertimbangkan imej berikut, sebagai contoh:

  Tangkapan skrin nowrap

Perhatikan sejauh mana konsisten lajur Grid dan tidak sekata setiap lajur dalam Flexbox. Setiap baris/lajur dalam bekas fleksibel adalah bebas daripada yang lain. Jadi sesetengahnya mungkin lebih besar daripada yang lain, bergantung pada saiz kandungannya. Ini kurang seperti lajur dan lebih seperti blok bebas.

Grid berfungsi secara berbeza, dengan menyediakan grid 2D dengan lajur dikunci masuk secara lalai. Lajur dengan teks pendek akan mempunyai saiz yang sama dengan lajur dengan teks yang lebih panjang, seperti yang ditunjukkan oleh imej di atas.

Ringkasnya, Grid CSS sedikit lebih berstruktur, manakala Flexbox lebih berstruktur sistem susun atur yang fleksibel dan responsif . Sistem susun atur alternatif ini dinamakan dengan baik!

Bila hendak menggunakan Flexbox

Adakah anda mahu bergantung pada saiz intrinsik setiap lajur/baris, seperti yang ditakrifkan oleh kandungannya? Atau adakah anda ingin mempunyai kawalan berstruktur dari perspektif ibu bapa? Jika jawapan anda adalah yang pertama, maka Flexbox ialah penyelesaian yang sesuai untuk anda.

Untuk menunjukkan ini, pertimbangkan menu navigasi mendatar. Gantikan markup dalam tag dengan ini:

<h1>Flexbox vs. Grid</h1> 

<header class="flex">
  <h2>Flexbox</h2>

  <nav>
    <ul class="nav-list">
      <li><a href="">Home</a></li>
      <li><a href="">About Us</a></li>
      <li><a href="">Service Information Goes Here</a></li>
      <li><a href="">Blog Contact</a></li>
      <li><a href=""></a></li>
    </ul>
  </nav>
</header>

<header class="grid">
  <h2>Grid</h2>

  <nav>
    <ul class="nav-list">
      <li><a href="">Home</a></li>
      <li><a href="">About Us</a></li>
      <li><a href="">Service Information Goes Here</a></li>
      <li><a href="">Blog Contact</a></li>
      <li><a href=""></a></li>
    </ul>
  </nav>
</header>

Gantikan penanda dalam fail CSS dengan ini:

bagaimana mencari buku apabila anda tidak mengetahui tajuk atau pengarangnya
.nav-list { 
  list-style: none;
  margin: 0;
  padding: 0;
}

header {
  --border-width: 5px;
  border: var(--border-width) solid black;
  margin-bottom: 30px;
}

header > *:first-child {
  border: var(--border-width) solid #FFC0CB;
  margin: 0;
}

li {
  border: var(--border-width) solid #90EE90;
}

Inilah hasilnya:

  Tangkapan skrin flex dan grid

Sekarang, ubah navigasi pertama kepada susun atur fleksibel dan yang kedua kepada susun atur grid dengan menambah CSS berikut:

.flex .nav-list { 
  display: flex;
  gap: 1em;
  flex-wrap: wrap;
}

.grid .nav-list {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
}

Bandingkan keputusan untuk melihat mana yang lebih sesuai:

  Tangkapan skrin output

Daripada imej di atas, anda dapat melihat bahawa Flexbox adalah penyelesaian yang sempurna dalam kes ini. Anda mempunyai item yang anda mahu pergi bersebelahan antara satu sama lain dan mengekalkan saiz intrinsiknya (besar atau kecil bergantung pada panjang teks). Dengan Grid, setiap sel mempunyai lebar tetap dan ia tidak kelihatan sebagus—sekurang-kurangnya dengan pautan teks biasa.

Bila Menggunakan Grid CSS

Satu tempat yang Grid benar-benar cemerlang ialah apabila anda ingin mencipta sistem tegar daripada induk. Contohnya ialah satu set elemen kad yang harus sama lebarnya, walaupun ia mengandungi jumlah kandungan yang berbeza.

Gantikan penanda di dalam tag dengan ini:

<h1>Flexbox vs. Grids</h1> 

<section class="cards">
  <h2>Some cards</h2>

  <div class="columns">
    <article class="card">
      <h3 class="card__title">Fun Stuff</h3>
      <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit.</p>

      <ul>
        <li>Lorem</li>
        <li>Ipsum</li>
        <li>Excavate</li>
      </ul>
    </article>

    <article class="card">
      <h3 class="card__title">Fun Stuff</h3>
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>

      <ul>
        <li>Lorem</li>
        <li>Ipsum</li>
        <li>Excavate</li>
      </ul>
    </article>

    <article class="card">
      <h3 class="card__title">A Longer Title Than Others</h3>

      <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Facere
         excepturi sit ea dolores totam veniam qui voluptates commodi,
         perferendis et!</p>

      <ul>
        <li>Lorem</li>
        <li>Ipsum</li>
        <li>Excavate</li>
      </ul>
    </article>
  </div>
</section>

Tambahkan CSS ini:

.columns { 
  display: flex;
  gap: 1em;
}

article {
  background-color: #90EE90;
  color: black;
  padding: 15px;
}

ul {
  background-color: white;
  padding: 2px;
  list-style: none;
}

Anda bermula dengan paparan Flexbox untuk melihat penampilannya, jadi anda boleh membandingkannya dengan paparan grid. Inilah outputnya:

  Tangkapan skrin flex bukan grid

Perhatikan bagaimana lajur terakhir lebih besar daripada yang lain kerana saiz intrinsiknya, itulah yang dikendalikan dengan baik oleh Flexbox. Tetapi untuk menjadikannya lebar yang sama menggunakan Flexbox, anda perlu menentang saiz intrinsik itu dengan menambah yang berikut:

.columns > * { 
  flex: 1;
}

Ini berjaya. Tetapi Grid lebih sesuai untuk kes seperti ini. Anda hanya tentukan bilangan lajur dan anda boleh pergi:

.columns { 
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  gap: 1em;
}

Inilah hasilnya:

  Tangkapan skrin grid lebih baik daripada flex

Satu lagi kelebihan menggunakan Grid ialah ibu bapa mengawal susun atur anak-anak. Jadi anda boleh menambah dan mengalih keluar elemen kanak-kanak tanpa perlu risau tentang melanggar reka letak.

Jadi Bilakah Anda Harus Menggunakan Grid atau Flexbox?

Ringkasnya, Grid CSS sangat bagus apabila anda mahukan kawalan berstruktur daripada perspektif ibu bapa, dengan saiz lajur yang sama tanpa mengira saiz kandungan individunya.

Flexbox, sebaliknya, sesuai apabila anda mahukan sistem yang lebih fleksibel berdasarkan saiz intrinsik elemen.