مریم محمدپور
مریم محمدپور
خواندن ۴ دقیقه·۳ سال پیش

کدنویسی با Css grid


برای چیدمان المان ها در یک صفحه وب، راه هایی مثل استفاده از float یا flex در css وجود دارد و راهکار دیگر استفاده از grid است. grid در لغت به معنای توری است و در کدنویسی وب سایت ها برای چیدمان دو بعدی به کار می آید.

ماژول CSS grid به توسعه ‌دهندگان وب کمک می‌کند طرح‌های پیچیده واکنش‌گرا یا Responsive را راحت‌تر پیاده‌سازی کنند. grid این امکان را می‌دهد که هنگام طراحی صفحات وب بتوان صفحه را به بخش‌های مختلف تقسیم کرد به‌گونه‌ای که این بخش‌ها با یکدیگر تداخل نداشته باشند.

کدنویسی با کمک grid

برای استفاده از grid ابتدا یک grid container می سازیم. یعنی المنت هایی که می خواهیم آنها را بچینیم، داخل یک ظرف می ریزیم. به معنای دقیق تر همه آنها را داخل یک المنت والد قرار می دهیم و در CSS مربوط به آن، دستور display:grid; را قرار می دهیم.

برای یادگیری استفاده از grid باید کاربرد دستورات زیر را بیاموزیم:

grid-template-columns

grid-template-rows

grid-column

grid-row

justify-self

align-self

دو خاصیت اول به والد و خاصیت های بعدی به فرزندان تعلق می گیرد. برای یادگیری راحت تر به مثال زیر توجه کنید:

نتیجه این کد به این شکل است:


می بینید که دستور display: grid; در این مرحله عمل نمی کند و نتیجه شبیه دستور display:block; می باشد. برای حل این مشکل باید دستورات سطر یا ستون یا هر دو را به css عنصر والداضافه کنیم:

.parent{

display: grid;

grid-template-columns: 200px 400px 300px;

}



خاصیت grid-template-columns

با استفاده از خاصیت grid-template-columns می توانیم ستون هایی را در صفحه به وجود آوریم. در اینجا سه مقدار به این خاصیت دادیم، پس سه ستون ایجاد شد که عرض ستون اول 200px، عرض ستون دوم 400px و عرض ستون سوم 300px است.

می توانیم به جای مقدار از درصد استفاده کنیم، مثلا به شکل زیر:

grid-template-columns: 40% 10% 30%;

نتیجه به این شکل می شود:

راه سوم مقداردهی استفاده از fr است. این عبارت مخفف کلمه fraction به معنای سهم یا کسر است:

grid-template-columns: 2fr 1fr 3fr;

در این شرایط عرض صفحه به 6 قسمت (6=3+1+2) تقسیم می شود، آنهایی که در ستون اول قرار می گیرند، 2/6 عرض صفحه را به خود اختصاص می دهند، ستونی دومی ها 1/6 و ستون سومی ها 3/6 عرض صفحه را در اختیار می گیرند. نتیجه به این شکل است:


خاصیت grid-template-rows

حال می خواهیم اندازه ها را بر اساس سطر بچنیم. شرایط مشابه ستون است و تنها تفاوت در زمانی است که بخواهیم از fraction یا درصد استفاده کنیم. در این شرایط باید ابتدا به والد خاصیت ارتفاع بدهیم. در این زمینه یک مثال می زنیم:

.parent{

display: grid;

height:600px;

grid-template-rows: 2fr 1fr 3fr 1fr 2fr 3fr 1fr 2fr 4fr;

}

در این شرایط 600 پیکسل به 19 قسمت تقسیم می شود و هر سطر، ارتفاعی به اندازه ضریبی از 19 می گیرد


()repeat

همانطور که می بینید تعداد باکس ها زیاد است و می تواند بیش از این هم باشد، در این شرایط اگر بخواهیم کاری را تکرار کنیم از دستور repeat استفاده می کنیم:

grid-template-columns: repeat(3 , 1fr) ;

در اینجا سه ستون ایجاد می کند:


سلول های grid

برای کار با سلول های grid باید با مفاهیم line ، span <number> ، span <name> و auto آشنایی داشته باشیم تا بتوانیم یک item را تعریف کنیم. تصویر زیر یک جدول 3 سطری و 5 ستونی است. به هر کدام از خط هایی که برای ساخت این جدول ساخته شده یک Line می گویند. از span ها نیز برای تعیین گسترش فضا استفاده می کنیم. auto نیز نشان دهنده قرارگیری خودکار، بازه خودکار یا بازه پیش فرض است.


حال یک item را بر اساس دستور زیر تعریف می کنیم:

.item {

grid-column-start: <number> | <name> | span <number> | span <name> | auto;

grid-column-end: <number> | <name> | span <number> | span <name> | auto;

grid-row-start: <number> | <name> | span <number> | span <name> | auto;

grid-row-end: <number> | <name> | span <number> | span <name> | auto;

{

خاصیت های grid-column و grid-row به فرزندان اختصاص پیدا می کنند. می توان به صورت های دیگری نیز آنها را نوشت:

مثلا می خواهیم عرض رنگ قرمز دو برابر شود. اینگونه می نویسیم:

grid-column: 1/3;

این نوشته به این معناست که این ستون از line 1 تا line 3 ادامه پیدا کند. به شکل زیر:


خاصیتهای justify-self و align-self

این دو که به فرزندان داده می شوند، برای تراز افقی یا عمودی محتوای داخل آیتم ها کاربرد دارند و مقادیر start ، center و end می گیرند.

.gridbox3{

background-color: green;

justify-self: center;

align-self: start;

}

نتیجه به این شکل است:

در اینجا محتوای سلول سبز را در راستای افقی وسط چین، و در راستای عمودی بالا چین کردیم.

استفاده از inline-grid به جای grid

خاصیت Grid به طور کلی خاصیت block بودن را دارد یعنی تا انتهای سطر را می گیرد، اگر بخواهیم از grid بدون این خاصیت استفاده کنیم، سراغ inline-grid می رویم:

display: inline-grid;

پشتیبانی مرورگرها از grid

هر چند CSS grid به عنوان یکی از استانداردهای وب شناخته نشده است، اما از اکتبر سال 2017 به بعد مرورگرهای گوگل کروم، فایرفاکس، سافاری، اپرا و Microsoft edge همگی از CSS grid پشتیبانی می‌کنند.

css gridcss
روزنامه نگاری که می خواهد برنامه نویس شود
شاید از این پست‌ها خوشتان بیاید