آموزش CSS پیشرفته : float ها
در ابتدا برای شناور کردن تصاویر درون بلوکهای متن، ویژگی float به یکی از رایجترین ابزارها برای ایجاد طرحبندیهای چند ستونی در صفحات وب تبدیل شد. با ظهور flexbox و grid، اکنون به هدف اصلی خود بازگشته است، همانطور که در این مقاله توضیح داده شده است.
ویژگی float معرفی شد تا به توسعهدهندگان وب اجازه دهد طرحبندیهایی را پیادهسازی کنند که شامل یک تصویر شناور درون یک ستون متن است و متن در سمت چپ یا راست آن قرار میگیرد. چیزی شبیه به آنچه در طرحبندی یک روزنامه میبینید.
اما توسعهدهندگان وب به سرعت متوجه شدند که میتوانند هر چیزی را شناور کنند، نه فقط تصاویر، بنابراین استفاده از float گسترش یافت، به عنوان مثال، به جلوههای طرحبندی سرگرمکنندهای مانند drop-caps.
floatها معمولاً برای ایجاد طرحبندیهای کامل وبسایت با چندین ستون اطلاعات شناور استفاده شدهاند تا در کنار یکدیگر قرار گیرند (رفتار پیشفرض این است که ستونها به همان ترتیبی که در منبع ظاهر میشوند، زیر یکدیگر قرار گیرند). تکنیکهای طرحبندی جدیدتر و بهتری نیز موجود است. استفاده از floatها به این روش باید به عنوان یک تکنیک قدیمی در نظر گرفته شود.
در این مقاله، ما فقط بر کاربردهای صحیح floatها تمرکز خواهیم کرد.
بیایید کاربرد floatها را بررسی کنیم. با مثالی شروع میکنیم که شامل float کردن یک بلوک متن در اطراف یک عنصر است. میتوانید با ایجاد یک فایل جدید در رایانه خود، پر کردن آن با یک الگوی HTML و قرار دادن کد زیر در آن در مکانهای مناسب، ادامه دهید. در پایین بخش، میتوانید یک مثال زنده از کد نهایی را مشاهده کنید.
ابتدا، با مقداری HTML شروع میکنیم. موارد زیر را به بدنه HTML خود اضافه کنید و هر چیزی را که قبلاً در آنجا بوده است، حذف کنید:
حالا CSS زیر را به HTML خود اعمال کنید (با استفاده از یک عنصر یا یک در یک فایل جداگانه - انتخاب با شماست):
اگر ذخیره و رفرش کنید، چیزی بسیار شبیه به آنچه انتظار داشتید را خواهید دید: کادر بالای متن، با جریان عادی، قرار گرفته است.
برای شناور کردن کادر، ویژگیهای float و margin-right را به قانون اضافه کنید:
بیایید در مورد نحوهی کار float فکر کنیم. عنصری که float روی آن تنظیم شده است (در این مورد عنصر ) از جریان چیدمان عادی سند خارج شده و به سمت چپ کانتینر والد خود (در این مورد ) میچسبد. هر محتوایی که در جریان چیدمان عادی زیر عنصر float شده قرار میگرفت، اکنون به جای آن، دور آن میپیچد و فضای سمت راست آن را تا بالای عنصر float شده پر میکند. در آنجا متوقف میشود.
floating کردن محتوا به سمت راست دقیقاً همان اثر را دارد، اما به صورت معکوس: عنصر float شده به سمت راست میچسبد و محتوا به سمت چپ آن را میپوشاند. سعی کنید مقدار float را به right تغییر دهید و margin-right را با margin-left در آخرین مجموعه قوانین جایگزین کنید تا نتیجه را ببینید.
در حالی که میتوانیم برای کنار زدن متن، حاشیهای به float اضافه کنیم، نمیتوانیم برای دور کردن آن از float، حاشیهای به متن اضافه کنیم. دلیل این امر این است که یک عنصر float شده از جریان عادی خارج میشود و کادرهای موارد بعدی در واقع پشت float قرار میگیرند. میتوانید با ایجاد تغییراتی در مثال خود، این موضوع را مشاهده کنید.
یک کلاس special به پاراگراف اول متن، پاراگرافی که بلافاصله پس از کادر float شده قرار دارد، اضافه کنید، سپس در CSS خود قوانین زیر را اضافه کنید. اینها به پاراگراف بعدی ما رنگ پسزمینه میدهند.
برای اینکه این افکت راحتتر دیده شود، margin-right را در float به margin تغییر دهید تا در اطراف float فضای خالی داشته باشید. میتوانید پسزمینه پاراگراف را که درست زیر کادر float شده قرار دارد، ببینید.
کادرهای خط عنصر بعدی ما کوتاه شدهاند، بنابراین متن در اطراف float قرار میگیرد، اما به دلیل حذف float از جریان عادی، کادر اطراف پاراگراف همچنان در عرض کامل باقی میماند.
دیدیم که یک float از جریان عادی حذف میشود و عناصر دیگر در کنار آن نمایش داده میشوند. اگر بخواهیم از حرکت عنصر بعدی به سمت بالا جلوگیری کنیم، باید آن را پاک کنیم؛ این کار با ویژگی clear انجام میشود.
در HTML خود از مثال قبلی، کلاس cleared را به پاراگراف دوم زیر عنصر float شده اضافه کنید. سپس موارد زیر را به CSS خود اضافه کنید:
باید ببینید که پاراگراف دوم اکنون عنصر float شده را پاک میکند و دیگر در کنار آن ظاهر نمیشود. ویژگی clear مقادیر زیر را میپذیرد:
left: موارد float شده در سمت چپ را پاک میکند.
right: موارد float شده در سمت راست را پاک میکند.
bottom: هر مورد float شده، چپ یا راست را پاک میکند.
جعبههای پاکسازی که دور یک شناور پیچیده شدهاند
حالا میدانید که چگونه چیزی را که بعد از یک عنصر float شده قرار دارد پاک کنید، اما بیایید ببینیم اگر یک float بلند و یک پاراگراف کوتاه داشته باشید، با یک کادر حاوی هر دو عنصر، چه اتفاقی میافتد.
سند خود را طوری تغییر دهید که پاراگراف اول و کادر شناور به طور مشترک با یک که دارای کلاس wrapper است، محصور شوند.
در CSS خود، قانون زیر را برای کلاس اضافه کنید و سپس صفحه را مجدداً بارگذاری کنید:
علاوه بر این، کلاس اصلی را حذف کنید:
خواهید دید که درست مانند مثالی که رنگ پسزمینه را روی پاراگراف قرار دادیم، رنگ پسزمینه پشت سر متغیر float قرار میگیرد.
باز هم، این به این دلیل است که float از جریان عادی خارج شده است. ممکن است انتظار داشته باشید که با قرار دادن کادر float شده و متن پاراگراف اول که float را احاطه کرده است، محتوای بعدی از کادر پاک شود. اما اینطور نیست.
برای حل این مشکل، باید از مقدار flow-root مربوط به ویژگی display استفاده کنید. این فقط برای حل این مشکل خاص و بدون استفاده از راهکار های غیرعادی وجود دارد - هنگام استفاده از آن هیچ عواقب ناخواستهای وجود نخواهد داشت.