آموزش جامع FlexBox در سال 2022

متخصص FlexBox شوید...

با راهنمای جامع FlexBox دوناوب یکبار برای همیشه متخصص FlexBox شوید. هر آنچه برای آشنایی با FlexBox نیاز دارید اینجاست. آشنایی با تمام ویژگی های مختلف فلکس باکس، مثال ها و پروژه های واقعی، تاریخچه، الگوها و هر آنچه که درباره FlexBox می خواهید همین جا و در همین مطلب قرار دارد. پس با ما همراه باشید.

فهرست عناوین:

پیشینه FlexBox

ماژول FlexBox یا به عبارتی Flexible Box یا به تعبیری FlexBoc Layout در سال 2009 و با هدف ارائه یک روش کارآمدتر برای طراحی چیدمان صفحات وب معرفی شد. بعدها در سال 2017 کنسرسیوم جهانی وب توصیه کرد تا برای طراحی وبسایت از این ماژول استفاده شود. به کمک این ماژول می توانید ترتیب چینش و تراز عناصر صفحه را تعیین کنید.

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

ایده اصلی پشت این ماژول این است که به نگهدارنده عناصر این امکان داده شود تا عرض یا ارتفاع خود را متناسب با اندازه عناصر درونی تغییر دهد تا جایگیری عناصر در صفحه وب به خوبی انجام شود و فضا را به شکل مناسبی پوشش دهد.

مهمترین مزیت این ماژول سازگاری بهتر با طراحی واکنشگرا و تطبیق با اندازه های مختلف صفحات نمایش است.

یک نگهدارنده Flex یا به عبارتی یک جعبه فلکس (FlexBox)، عناصر درون خود را به گونه ای سازماندهی می کند تا به نحوی مناسب فضای موجود را پوشش دهند و در صورتی که عنصری نتواند در یک سطر و در کنار عناصر دیگر جا شود، آن را به سطر بعدی منتقل کرده و لذا مانع از اسکرول و پیمایش افقی صفحه خواهد شد.

مهمتر از همه، برخلاف روش های طرح بندی معمول (همچون Block و inline) که فقط امکان چینش عناصر به صورت افقی را در نظر می گیرند، روش FlexBox، راستای عمود یا ستونی را نیز کنترل می کند.

روش های معمول فاقد انعطاف لازم برای طرح بندی اجزای صفحه بوده و خصوصا وقتی صحبت از تغییر جهت، تغییر اندازه، کشش عناصر و یا کوچک کردن ابعاد باشد، شرایط را بسیار پیچیده می کنند.

نکته: طرح FlexBox برای طراحی وب اپلکیشن ها و طرح بندی های کوچک بسیار مناسب است. در حالی که در طرح بندی های مقیاس بزرگ، روش Grid مناسب تر است.

مبانی و اصطلاحات FlexBox

از آنجائیکه FlexBox یک ماژول کامل است، خود به تنهایی شامل چندین خصوصیت CSS (CSS Property) می باشد.

برخی از این خصوصیات بر روی المان نگهدارنده (Flex Container) که به آن المان پدر گفته می شود، اعمال می شوند، و برخی دیگر از این خصوصیات بر المان های فرزند (Flex Item) اعمال می شوند.

در طراحی با روش های Block و inline، طراحی بر اساس ویژگی Direction استوار است. یعنی متناسب با direction، جهت چینش در این دو روش تعیین می شود.

در روش FlexBox علاوه برای direction، می توانید جهت چینش المان ها را فارق از direction، با کمک ویژگی flex-flow یا flex-direction کنترل کنید.

برای درک بهتر، به شکل زیر دقت کنید:

ساختار کلی یک طرح FlexBox

آیتم ها (فرزندان) در راستای محور اصلی (از شروع تا پایان آن) و محوز متقاطع یا محور فرعی (از شروع تا پایان آن) قرار می گیرند.

یعنی عناصر به ترتیب از چپ به راست و بالا به پائین چیده می شوند. البته این در صورتی است که direction صفحه ltr یا به عبارتی Left to right یعنی چپ به راست باشد. بعدا تاثیر direction صفحه بر چینس عناصر را خواهیم دید. همچنین با تنظیم ویژگی flex-flow یا flex-direction این چینش تغییر خواهد کرد. هم در راستای افقی و هم در راستای عمودی.

با اصطلاحات موجود در تصویر فوق بیشتر آشنا بشیم:

محور اصلی: محور اصلی نگهدارنده Flex محور اولیه ای است که آیتم ها و فرزندان در راستای آن چیده خواهند شد. بسته به ویژگی flex-direction این مقدار می تواند در راستای افقی یا عمود و در راستای مستقیم یا معکوس باشد. یعنی هر 4 جهت اصلی ممکن است. بعدا بیشتر با این ویژگی آشنا خواهید شد.

شروع محور اصلی | پایان محور اصلی: تمام فرزندان متناسب با flex-direction از ابتدای محور اصلی تا پایان آن قرار می گیرند.

بعد اصلی: عرض یا ارتفاع یک آیتم فلکس، که در راستای محور اصلی باشد، بعد یا اندازه اصلی آن المان است. اندازه یا بعد اصلی نگهدارنده، برابر مجموع ابعاد المان های آن در راستای اصلی است. بسته به مقدار flex-direction، بعد اصلی یا برابر width خواهد بود و یا برابر height. فرضا اگر مقدار flex-direction:row باشد، بعد اصلی برابر width (در راستای افق) خواهد بود.

محور فرعی: محور عمود بر محور اصلی را محور متقاطع یا محور فرعی می گویند. جهت آن بستگی به جهت محور اصلی دارد. جهت محور اصلی هم بستگی به flex-direction دارد.

شروع محور فرعی | پایان محور فرعی: وقتی عناصر، محور اصلی را پر کنند، سایر عناصر در راستای محور فرعی مرتب می شوند. فرض کنید محور اصلی در راستای افق و محور فرعی در راستای عمود است. پس از اینکه تعدادی المان محور اصلی را پر کنند، سایت عناصر در ردیف بعدی قرار گرفته و مجددا در راستای محور اصلی ردیف می شوند. هر ردیف، در راستای فرعی (در این مثال از بالا به پائین مرتب می شوند). برای مثال در شکل بالا اگر4 عنصر flex-box با ابعاد فوق داشته باشم، دو عنصر ردیف اول و دو عنصر در ردیف دوم قرار می گیرند. لذا شروع محور فرعی از بالا و پایان آن در پائین خواهد بود.

بعد فرعی: عرض یا ارتفاع یک آیتم فلکس، هر کدام که در راستای بعد فرعی باشد، اندازه فرعی را تشکیل می دهد. در مثال بابا، ارتفاع عناصر، بعد فرعی را می سازند. اگر دو عنصر دیگر نیز اضافه شوند، بعد فرعی دو برابر خواهد شد. یعنی دو ردیف مانند تصویر فوق خواهیم داشت.

خوب شاید با توضیحات فوق کمی گمی سردرگم شده باشید. با ادامه آموزش همراه باشید تا با مشاهده مثال ها و توضیحات بیشتر، مطالب فوق برایتان روشن شود.

خصوصیات FlexBox

در ادامه با خصوصیات ماژول FlexBoxآشنا می شوید. برخی از این خصوصیات مربوط به المان نگهدارنده فلکس (المان پدر) و برخی مربوط به المان های فرزند (Flex Item) است.

خصوصیات المان نگهدارنده FlexBox (Flex Container)

display

برای تعریف یک المان نگهدارنده Flex باید از ویژگی Display، استفاده کنیم. به عبارتی با استفاده از این ویژگی می توانید تعریف کنید که یک المان HTML باید به صورت یک نگهدارنده Flex عمل کند.

مقادیر مختلفی برای ویژگی display وجود دارد. شامل:

خوب همانطور که مشخص است، برای اینکه یک المان از قوانین FlexBox پیروی کند، مقدار ویژگی Display آن المان، باید یکی از مقادیر Flex یا inline-flex باشد.

نکته مهم: وقتی به یک المان Display:flex یا Display:inline-flex می دهید، آن المان (نگهدارنده) و تمام فرزندان مستقیم آن از قوانین Flex پیروی می کنند.

منظور از فرزندان مستقیم، المان هایی هستند که درون نگهدارنده قرار دارند و این شامل فرزندان درونی تر نخواهد شد.

.container {
  display: flex; /* or inline-flex */
}
اما تفاوت flex و inline-flex چیست؟

وقتی المانی دارای display:flex باشد، تمام عرض نگهدارنده خود را پر خواهد کرد. حتی اگر تعداد المان های فرزند و مجموع عرض آن ها کمتر از عرض نگهدارنده باشد.

در حالی که المان با display:inline-flex، فقط به اندازه ای که نیاز دارد عرض اشغال می کند. برای درک بیشتر، به تصویر زیر نگاه کنید:

تفاوت المان inline-flex و flex

flex-direction

این ویژگی جهت محور اصلی را تعیین می کند. متناسب با جهت تعیین شده، المان های فرزند، در راستای محور اصلی در کنار یک دیگر (یا در زیر هم) ردیف می شوند.

مقادیر مختلفی برای این ویژگی وجود دارد که به شرح زیر است:

.container {
  flex-direction: row | row-reverse | column | column-reverse;
}
ویژگی flex-direction جهت چینش المان های flex را تعیین می کند

flex-wrap

به صورت پیش فرض،المان های Flex سعی می کنند در یک خط کنار هم قرار بگیرند. اما در شرایطی ممکن است امکان قرار گیری همه این المان ها در کنار هم ممکن نبوده و عرض صفحه گنجایش همه المان ها را نداشته باشد.

با ویژگی flex-wrap می توانید نحوه قرار گیری عناصر در هر ردیف را کنترل کنید

با تغییر ویژگی flex-wrap به مقدار wrap می توانید به المان ها دستور دهید تا در صورتی که عرض صفحه پر شد، المان ها در ردیف بعدی کنار هم قرار بگیرند. یعنی اگر فرضا 10 المان داشتیم که 5 تای آن ها ردیف اول را پر کردند، 5تا بعدی در ردیف بعدی مرتب می شوند.

با این شرایط دیگر اسکرول افقی در صفحه نداریم و المان ها به صورت کاملا منعطف و با توجه به عرض صفحه در کنار هم مرتب می شوند. این یعنی واکنشگرا بودن طرح یا لایوت صفحه شما.

.container {
  flex-wrap: nowrap | wrap | wrap-reverse;
}

مقادیر مختلف ویژگی flex-wrap:

دموی حالت های فوق رو می تونید در اینجا ببینید.

این آموزش در حال تکمیل است…

میانگین امتیازات : 4.9/5 - تعداد امتیازات: 26 امتیاز
خروج از نسخه موبایل