CSS Grid

লেসন ২৩ / ৪৪

CSS Grid কী?

CSS Grid হলো দ্বি-মাত্রিক লেআউট সিস্টেম — একইসাথে সারি ও কলাম নিয়ন্ত্রণ করা যায়। Flexbox এক মাত্রায়, Grid দুই মাত্রায়।

মৌলিক Grid

.container {
    display: grid;
    grid-template-columns: 200px 200px 200px;  /* ৩ কলাম */
    grid-template-rows: 100px 100px;
    gap: 20px;
}

fr unit (fractional)

.container {
    display: grid;
    /* ৩ সমান কলাম */
    grid-template-columns: 1fr 1fr 1fr;
    /* বা */
    grid-template-columns: repeat(3, 1fr);

    /* Sidebar + Main */
    grid-template-columns: 250px 1fr;

    /* 2:1 অনুপাত */
    grid-template-columns: 2fr 1fr;
}

Responsive Grid (auto-fit)

.cards {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: 20px;
}
/* প্রতিটি কার্ড কমপক্ষে 280px, বেশি জায়গা হলে ভাগ করে নেবে */

Grid Item Placement

.item-1 {
    grid-column: 1 / 3;      /* ১ থেকে ৩ পর্যন্ত (২ কলাম দখল) */
    grid-row: 1 / 2;
    /* সংক্ষিপ্ত */
    grid-column: span 2;      /* ২টি কলাম দখল */
}

.item-2 {
    grid-area: 1 / 2 / 3 / 4;
    /* row-start / col-start / row-end / col-end */
}

Named Areas (সবচেয়ে পরিষ্কার পদ্ধতি)

.layout {
    display: grid;
    grid-template-columns: 200px 1fr 200px;
    grid-template-rows: auto 1fr auto;
    grid-template-areas:
        "header  header  header"
        "sidebar main    aside"
        "footer  footer  footer";
    min-height: 100vh;
    gap: 10px;
}

header  { grid-area: header; }
.side   { grid-area: sidebar; }
main    { grid-area: main; }
aside   { grid-area: aside; }
footer  { grid-area: footer; }

Alignment in Grid

.container {
    display: grid;
    /* Item গুলো cell এর ভিতরে */
    justify-items: center;  /* start, end, stretch */
    align-items: center;

    /* পুরো grid container এর ভিতরে */
    justify-content: center;
    align-content: center;

    /* সংক্ষিপ্ত */
    place-items: center;
}