در این درس، با تعدادی از مهمترین افکتهای بصری (visual effects) که میتوان روی عناصر وب اعمال کرد، آشنا
میشویم. ابتدا با پراپرتی filter آشنا شده و خواهیم دید که چطور میتوانیم فیلترهای گرافیکی متنوعی را با
استفاده از این پراپرتی روی عناصر اعمال کنیم. سپس، ایجاد گوشههای گِرد با استفاده از پراپرتی border-radius را
یاد میگیریم و در نهایت، نحوهی اعمال سایه روی عناصر با استفاده از پراپرتیهای text-shadow و box-shadow را
خواهیم دید.
اعمال فیلتر روی عناصر با پراپرتی filter
کمی با اسلایدرهای زیر بازی کنید و تأثیر اعمال فیلترهای مختلف روی تصویر زیر را ببینید.
اعمال این فیلترهای بصری در گذشته تنها به کمک اپلیکیشنهای گرافیکی مانند فتوشاپ ممکن بود. اما حالا به لطف
ماژول Filter effects در CSS میتوان این فیلترها را بدون نیاز به ابزارهای خارجی و بهصورت دینامیک روی تصاویر
و سایر عناصر وب اعمال کرد. ماژول Filter effects شامل پراپرتی filter و یک نوع دادهی جدید با نام
<filter-function> است که امکان افزودن لفکتهای گرافیکی بالا را فراهم میکند.
نوع فیلتر از روی مقدار پراپرتی filter تعیین میشود که میتواند هر یک از توابع زیر باشد.
تابع فبلتر
توضیح
مثال
blur()
این تابع فیلتری را که در دنیای گرافیک کامپیوتری با نام Gaussian blur شناخته شده و باعث ایجاد محوشدگی یا
بلور میشود، روی عنصر اعمال میکند. پارامتر این تابع، میزان انحراف معیار تابع گاوسی است که تعیین میکند
چه تعداد از پیکسلهای صفحه با هم ترکیب شوند. بنابراین، مقادیر بالاتر به منزلهی افزایش بلور است. مقدار
این پارامتر میتواند بر حسب هر یک از واحدهای طولی مانند پیکسل، em و rem باشد.
filter: blur(4px)
filter: blur(.25em)
brightness()
فیلتری است که باعث افزایش یا کاهش میزان روشنایی عنصر میشود. پارامتر این تابع، مقداری است بر حسب درصد و
یا یک عدد بدون واحد. مقدار پیشفرض این پارامتر که باعث بیتأثیر بودن فیلتر میشود، مقدار 1 یا 100% است.
مقادیر کمتر باعث تاریکتر شدن و مقادیر بیشتر از 1 یا 100% باعث روشنتر شدن عکس یا عنصر میشود.
filter: brightness(.4)
filter: brightness(200%)
contrast()
این فیلتر برای تعیین میزان کنتراست (تضاد بین رنگهای تیره و روشن) کاربرد دارد. پارامتر این تابع فیلتر
میتواند یک عدد بدون واحد و یا بر حسب درصد وارد شود. مقادیر کمتر از 1 یا 100% باعث کاهش کنتراست و مقادیر
بالاتر از 1 یا 100% باعث افزایش کنتراست میشوند.
filter: contrast(1.75)
filter: contrast(50%)
drop-shadow()
این فیلتر برای انداختن سایهی بیرونی (drop shadow) روی عنصر کاربرد دارد. این تابع میتواند تا 4 پارامتر
داشته باشد. یک مقدار رنگی برای تعیین رنگ سایه و سه مقدار طولی که بهترتیب معرف اُفست سایه در راستای افقی
و عمودی و میزان بلور سایه هستند. نبود پارامتر رنگی باعث میشود که رنگ سایه از روی رنگ پراپرتی color عنصر
والد تعیین شود و نبود هر یک از سه مقدار طولی باعث میشود تا آن پارامتر معادل صفر در نظر گرفه شود.
این فیلتر برای سیاه و سفید کردن عکس یا عنصر کاربرد دارد. پارامتر این تابع فیلتر میتواند یک عدد بدون
واحد و یا بر حسب درصد باشد. مقدار پیشفرض این پارامتر 1 یا 100% است که باعث میشود عنصر کاملاً سیاه و
سفید شود. مقدار صفر هم عنصر را دستنخورده باقی میگذارد.
filter: grayscale(.7)
filter:grayscale(100%)
hue-rotate()
با استفاده از این فیلتر میتوانیم میزان hue را برای رنگهای موجود در عنصر تغییر دهیم. پارامتر این تابع
فیلتر یک مقدار زاویهای است که میتواند بر حسب درجه، رادیان، گرادیان و یا دور (turn) وارد شود.
filter: hue-rotate(90deg)
invert()
این فیلتر برای معکوس کردن رنگها کاربرد دارد. پارامتر این تابع فیلتر، مقداری است که یا به صورت یک عدد
بدون واحد و یا بر حسب درصد وارد میشود. مقدار 0 هیچ تأثیری روی عنصر ندارد و مقدار 1 یا 100% رنگها را به
طور کمل معکوس میکند.
filter: invert(.3)
filter: invert(50%)
opacity()
این فیلتر برای تعیین میزان شفافیت کاربرد دارد و مشابه پراپرتی opacity عمل میکند.
filter: opacity(.8)
filter: opacity(.3)
saturate()
این فیلتر برای تغییر میزان غلظت یا اشباعشدگی رنگها کاربرد دارد. پارامتر این تابع فیلتر، میتواند یک
عدد بدون واحد و یا بر حسب درصد وارد شود. مقدار پیشفرض این پارامتر 100% یا 1 است اما مقادیر کمتر باعث
کاهش غلظت رنگها و مقادیر بالاتر باعث افزایش غلظت رنگها میشوند.
filter: opacity(.4)
filter: opacity(200%)
sepia()
نام این فیلتر از روی یک لنز عکاسی گرفته شده که باعث میشود تصویر با رنگهای گرمتری نمایش داده شود.
مقدار این تابع فیلتر، میتواند به صورت یک عدد بدون واحد و یا بر حسب درصد وارد شود. مقدار 0 بدون اثر است
و مقدار 100% فیلتر sepia را به طور کامل اعمال میکند.
filter: sepia(.4)
filter: sepia(100%)
ایجاد گوشههای گرد با پراپرتی border-radius
میدانیم که عناصر وب در CSS به صورت باکسهای مستطیلی رندر میشوند. اگر بخواهیم گوشههای مستطیل را به جای
زاویهی 90 درجهی پیشفرض به شکل گردتری نمایش دهیم، میتوانیم از یک پراپرتی با نام border-radius استفاده
کنیم.
در واقع، پراپرتی border-radius برای اعمال افکتی که در ترمینولوژی گرافیک کامپیوتری rounded corners نامیده
میشود، کاربرد دارد. با استفاده از این افکت میتوانیم ترتیبی دهیم که گوشهها به صورت دایرهای یا بیضوی نمایش
داده شوند. به مثال سادهی زیر نگاه کنید.
اما عبارت radius (به معنی شعاع) در نام پراپرتی border-radius به چه معناست؟ در مثال بالا، شعاع 10px برای
گوشههای عنصر چگونه تفسیر میشود؟
برای درک این موضوع، باید یک دایره با شعاع دادهشده در هر گوشه در نظر بگیرید. هیچ توضیحی نمیتواند
بهاندازهی تصویر زیر گویا باشد.
مثال بالا نحوهی ایجاد گوشههای دایرهای را نشان میدهد. اما برای ایجاد گوشههای بیضوی، باید دو مقدار را به
پراپرتی border-radius اختصاص دهیم که اولی معرف شعاع افقی و دومی شعاع عمودی بیضی است. این مقادیر را باید با
اسلش (/) از هم جدا کنیم. مثال زیر را ببینید.
CSS
.rounded-corners{background-color: red;border-radius: 20px / 10px;height: 5rem;width: 5rem;}
اتفاقی که در مورد مثال بالا و گوشههای بیضوی رخ میدهد، شبیه تصویر زیر است.
پراپرتی border-radius یک پراپرتی اختصاری است که همزمان چهار پراپرتی زیر را مقداردهی میکند:
پراپرتی top-left-radius برای تنظیم میزان گردی گوشهی بالا سمت چپ.
پراپرتی top-right-radius برای تنظیم میزان گردی گوشهی بالا سمت راست.
پراپرتی bottom-right-radius برای تنظیم میزان گردی گوشهی پایین سمت راست.
پراپرتی bottom-left-radius برای تنظیم میزان گردی گوشهی پایین سمت چپ.
در مثالهای بالا، ما یک مقدار (دایرهای یا بیضوی) را به پراپرتی اختصاری border-radius دادهایم که همانطور که
میدانید، به این معناست که این مقدار برای هر چهار گوشه در نظر گرفته شود. اما طبیعتاً میتوانیم مانند مثال
زیر، مقادیر متفاوتی را برای هر گوشه تعیین کنیم.
و یا اینکه هر یک از پراپرتیهای بالا را به صورت جداگانه مقداردهی کنیم که البته در این صورت، باید توجه داشته
باشید که در مورد گوشههای بیضوی، نیازی به قرار دادن اسلش بین مقادیر نیست.
CSS
.rounded-corners{background-color: red;border-bottom-right-radius: 10px 20px;border-bottom-left-radius: 5px;border-top-left-radius: 20px 10px;border-top-right-radius: 50%;height: 5rem;width: 5rem;}
ایجاد تفکت سایه با پراپرتی box-shadow
یکی از افکتهای دیگری که میتوان روی باکس عناصر اعمال کرد، افکت سایه (shadow) است که با استفاده از یک
پراپرتی با نام box-shadow ایجاد میشود. برای سایه باید یک رنگ و هر یک از چهار پارامتر زیر را تنظیم کرد:
X offset یا فاصلهی افقی سایه از عنصر
Y offset یا فاصلهی عمودی سایه از عنصر
Blur radius یا شعاع محوشدگی که با رویکردی شبیه آنچه در مورد border-radius دیدیم، میزان محوشدگی
(blurriness) سایه را تعیین میکند.
Spread radius که میزان پخششدگی سایه را مشخص میکند.
در حالت پیشفرض، میزان blur و spread برای سایه صفر است و تغییر آنها اختیاری است اما X offset و Y offset
حتماً باید تعیین شوند.
با استفاده از کلمه کلیدی inset میتوانیم ترتیبی دهیم که سایه مانند مثال زیر، درون باکس اعمال شود.
CSS
.shadow{box-shadow: 0 0 25px black inset;background: #CCCCCC;width: 10rem;height: 5rem;}
و بالاخره اینکه امکان اعمال بیش از یک سایه روی باکس وجود دارد. این کار میتواند مثلاً برای اعمال سایههای
بیرونی و درونی به طور همزمان مفید باشد. کاری که در مثال زیر انجام شده است.
CSS
.shadow{box-shadow: 0 0 10px 0 black, 0 0 25px red inset;background: #CCCCCC;width: 10rem;height: 5rem;}