برای مدت طولانی، طراحان وب مجبور به ایجاد در محدودیت های مستطیل شده اند. بیشتر محتوای موجود در وب همچنان در جعبههای ساده محبوس است، زیرا بیشتر سرمایهگذاریهای خلاقانه در طرحبندی غیر مستطیلی به ناامیدی ختم میشود. با معرفی CSS Shapes که با Chrome 37 در دسترس است، این وضعیت در شرف تغییر است. شکلهای CSS به طراحان وب اجازه میدهد تا محتوا را در اطراف مسیرهای سفارشی مانند دایرهها، بیضیها و چند ضلعیها قرار دهند، بنابراین از محدودیتهای مستطیل رهایی مییابند.
اشکال را می توان به صورت دستی تعریف کرد یا می توان آنها را از تصاویر استنباط کرد.
بیایید به یک مثال بسیار ساده نگاه کنیم.
شاید شما هم به اندازه من ساده لوح بودید که برای اولین بار تصویری را با قسمتهای شفاف شناور کردید و انتظار داشتید که محتوا بپیچد و شکافها را پر کند، اما از باقی ماندن شکل پوشش مستطیلی در اطراف عنصر ناامید شدهاید. برای حل این مشکل می توان از شکل های CSS استفاده کرد.
اعلان CSS shape-outside: url(image.png) به مرورگر می گوید که یک شکل را از تصویر استخراج کند.
ویژگی shape-image-threshold حداقل سطح شفافیت پیکسل هایی را که برای ایجاد شکل استفاده می شود، تعریف می کند. مقدار آن باید در محدوده بین 0.0 (کاملا شفاف) و 1.0 (کاملاً مات) باشد. بنابراین، shape-image-threshold: 0.5 به این معنی است که فقط از پیکسل هایی با کدورت 50 درصد و بالاتر برای ایجاد شکل استفاده می شود.
ویژگی float در اینجا کلیدی است. در حالی که ویژگی shape-outside شکل ناحیه ای را که محتوا در اطراف آن قرار می گیرد را مشخص می کند، بدون شناور، اثرات شکل را نخواهید دید.
عناصر دارای یک ناحیه شناور در طرف مقابل مقدار float خود هستند. برای مثال، اگر عنصری با تصویر فنجان قهوه به سمت چپ شناور شود، ناحیه شناور در سمت راست فنجان ایجاد میشود. حتی اگر میتوانید یک تصویر را با شکافها در هر دو طرف مهندسی کنید، محتوا فقط در اطراف شکل در سمت مقابل مشخصشده توسط ویژگی float، چپ یا راست، و نه هر دو، میپیچد.
در آینده، امکان استفاده shape-outside بر روی عناصری که با معرفی CSS Exclusions شناور نیستند، امکان پذیر خواهد بود.
ایجاد اشکال به صورت دستی
علاوه بر استخراج اشکال از تصاویر، می توانید آنها را به صورت دستی نیز کدنویسی کنید. شما می توانید از چند مقدار تابعی برای ایجاد اشکال انتخاب کنید: circle() , ellipse() , inset() و polygon() . هر تابع شکل مجموعه ای از مختصات را می پذیرد و با یک جعبه مرجع که سیستم مختصات را ایجاد می کند جفت می شود. اطلاعات بیشتر در مورد جعبه های مرجع در یک لحظه.
تابع حلقه()
نماد کامل برای مقدار شکل دایره circle(r at cx cy) که r شعاع دایره است، در حالی که cx و cy مختصات مرکز دایره در محور X و Y هستند. مختصات مرکز دایره اختیاری است. اگر آنها را حذف کنید، مرکز عنصر (تقاطع مورب های آن) به عنوان پیش فرض استفاده می شود.
در مثال بالا، محتوا در خارج از یک مسیر دایره ای قرار می گیرد. آرگومان واحد 50% شعاع دایره را مشخص می کند که در این مورد خاص، نصف عرض یا ارتفاع عنصر است. تغییر ابعاد عنصر بر شعاع شکل دایره تأثیر می گذارد. این یک مثال اساسی از این است که چگونه CSS Shapes می تواند پاسخگو باشد.
قبل از اینکه به ادامه مطلب بروید، یک نکته را کنار بگذارید: مهم است که به یاد داشته باشید که اشکال CSS فقط بر شکل ناحیه شناور اطراف یک عنصر تأثیر میگذارد. اگر عنصر دارای پسزمینه باشد، با شکل بریده نمیشود. برای دستیابی به این اثر، باید از ویژگیهای CSS Masking - یا clip-path یا mask-image استفاده کنید. ویژگی clip-path بسیار مفید است زیرا از همان نماد CSS Shape پیروی می کند، بنابراین می توانید از مقادیر مجدد استفاده کنید.
تصاویر در سراسر این سند از برش برای برجسته کردن شکل و کمک به درک جلوه ها استفاده می کنند.
بازگشت به شکل دایره.
هنگام استفاده از درصد برای شعاع دایره، مقدار در واقع با یک فرمول کمی پیچیده تر محاسبه می شود: sqrt(width^2 + height^2) / sqrt(2). درک این موضوع مفید است زیرا به شما کمک می کند تصور کنید که اگر ابعاد عنصر برابر نباشد، شکل دایره حاصل چگونه خواهد بود.
همه انواع واحدهای CSS را می توان در مختصات تابع شکل - px، em، rem، vw، vh و غیره استفاده کرد. شما می توانید موردی را انتخاب کنید که برای نیازهای شما به اندازه کافی انعطاف پذیر یا سفت باشد.
می توانید موقعیت دایره را با تنظیم مقادیر صریح برای مختصات مرکز آن تنظیم کنید.
.element{shape-outside:circle(50%at00);}
این مرکز دایره را در مبدا سیستم مختصات قرار می دهد. سیستم مختصات چیست؟ اینجاست که باکس های مرجع را معرفی می کنیم.
جعبه های مرجع برای اشکال CSS
جعبه مرجع یک جعبه مجازی در اطراف عنصر است که سیستم مختصات مورد استفاده برای ترسیم و قرار دادن شکل را ایجاد می کند. مبدأ سیستم مختصات در گوشه سمت چپ بالای آن است که محور X به سمت راست و محور Y به سمت پایین است.
به یاد داشته باشید که shape-outside شکل ناحیه شناور را که محتوا در اطراف آن پیچیده میشود، تغییر میدهد. ناحیه شناور تا لبه های بیرونی جعبه که توسط ویژگی margin تعریف شده است گسترش می یابد. این margin-box نامیده می شود و اگر به صراحت به آن اشاره نشده باشد، جعبه مرجع پیش فرض برای یک شکل است.
دو اعلان CSS زیر نتایج یکسانی دارند:
.element{shape-outside:circle(50%at00);/* identical to: */shape-outside:circle(50%at00)margin-box;}
ما هنوز حاشیه ای برای عنصر تعیین نکرده ایم. در این مرحله میتوان فرض کرد که مبدأ سیستم مختصات و مرکز دایره در گوشه سمت چپ بالای ناحیه محتوای عنصر هستند. هنگامی که یک حاشیه تعیین می کنید، این تغییر می کند:
منشاء سیستم مختصات اکنون خارج از ناحیه محتوای عنصر است (100px بالا و 100px سمت چپ)، همانطور که مرکز دایره نیز چنین است. مقدار محاسبه شده شعاع دایره نیز برای محاسبه سطح افزایش یافته سیستم مختصات ایجاد شده توسط جعبه مرجع margin-box افزایش می یابد.