Shadow، Opacity و Utilityهای کاربردی در Tailwind CSS
بهنام نوبخت · ۱۴۰۵/۷/۱۳
در دو مقاله قبلی با رنگها، Typography، فاصلهها، اندازهها و Borderها در Tailwind CSS آشنا شدیم. اما برای ایجاد یک رابط کاربری زیبا و حرفهای، هنوز چند ویژگی مهم باقی مانده است. Shadow، Opacity، Visibility و سایر Utilityهای کاربردی به ما کمک میکنند عناصر صفحه را بهتر از یکدیگر جدا کنیم، ظاهر آنها را کنترل کنیم و رابط کاربری خواناتر و جذابتری بسازیم. در این مقاله این Utilityها را به صورت ساده و عملی بررسی میکنیم و در پایان چند نمونه واقعی مانند کارت، دکمه و پیام اطلاعرسانی ایجاد خواهیم کرد.
Shadow چیست؟
Shadow یا سایه، یک جلوه بصری است که باعث میشود یک عنصر از پسزمینه جدا به نظر برسد.
برای مثال یک کارت بدون سایه ممکن است ساده باشد:
<div class="bg-white p-6 rounded-xl">
محتوای کارت
</div>با اضافه کردن Shadow:
<div class="bg-white p-6 rounded-xl shadow-md">
محتوای کارت
</div>کارت برجستهتر دیده میشود.
انواع Shadow
Tailwind چند سطح مختلف برای Shadow در اختیار ما قرار میدهد.
برخی از Utilityهای رایج:
shadow-sm
shadow
shadow-md
shadow-lg
shadow-xl
shadow-2xl
shadow-inner
shadow-noneبه صورت کلی:
Shadow Size
↓
small
↓
medium
↓
large
↓
extra largeبرای مثال:
<div class="shadow-sm">
Small Shadow
</div>
<div class="shadow-md">
Medium Shadow
</div>
<div class="shadow-xl">
Large Shadow
</div>چه زمانی از Shadow استفاده کنیم؟
Shadow بیشتر برای ایجاد Visual Hierarchy یا سلسلهمراتب بصری استفاده میشود.
برای مثال:
کارتهای محصول
پنلها
منوها
Modalها
دکمهها
Navigation
فرمها
اما استفاده بیش از حد از Shadow میتواند ظاهر صفحه را شلوغ کند.
نکته: Shadow قرار نیست روی همه عناصر صفحه استفاده شود. معمولاً کافی است روی عناصری قرار بگیرد که باید از پسزمینه متمایز باشند.
حذف Shadow
اگر عنصری Shadow داشته باشد، میتوان آن را حذف کرد:
<div class="shadow-none">
بدون سایه
</div>این Utility زمانی مفید است که بخواهید Shadow یک کامپوننت را در شرایط خاص حذف کنید.
Opacity چیست؟
Opacity میزان شفافیت یک عنصر را مشخص میکند.
مقدار Opacity بین کاملاً شفاف و کاملاً غیرشفاف قرار میگیرد.
به صورت ساده:
Opacity
0 → Completely Transparent
|
50 → Semi Transparent
|
100 → Completely Visibleدر Tailwind میتوان از Utilityهایی مانند زیر استفاده کرد:
opacity-0
opacity-25
opacity-50
opacity-75
opacity-100مثال Opacity
<div class="opacity-50">
این عنصر نیمه شفاف است.
</div>یا:
<div class="opacity-75">
این عنصر تا حدی شفاف است.
</div>برای حالت کاملاً قابل مشاهده:
<div class="opacity-100">
عنصر کاملاً قابل مشاهده
</div>استفاده از Opacity برای تصاویر
Opacity برای تصاویر نیز کاربرد دارد.
<img
src="image.jpg"
alt="تصویر محصول"
class="opacity-75"
>در این حالت تصویر کمی شفاف میشود.
استفاده از Opacity در حالت Hover
یکی از کاربردهای جذاب Opacity ترکیب آن با hover است.
مثلاً:
<img
src="image.jpg"
alt="محصول"
class="opacity-75 hover:opacity-100"
>در حالت عادی تصویر کمی شفاف است، اما وقتی کاربر نشانگر ماوس را روی آن قرار میدهد، Opacity به 100 تغییر میکند.
در مقاله مربوط به States و تعاملات این مفهوم را به صورت کاملتر بررسی خواهیم کرد.
Visibility
گاهی میخواهیم یک عنصر قابل مشاهده یا غیرقابل مشاهده باشد.
برای این کار میتوان از:
visible
invisibleاستفاده کرد.
مثال:
<div class="visible">
این عنصر قابل مشاهده است.
</div>و:
<div class="invisible">
این عنصر دیده نمیشود.
</div>تفاوت مهم این است که invisible عنصر را از Layout حذف نمیکند؛ فقط آن را از دید کاربر مخفی میکند.
تفاوت Invisible و Hidden
این دو مفهوم را با هم اشتباه نگیرید.
invisible:
<div class="invisible">
محتوا
</div>عنصر همچنان فضای خود را حفظ میکند، اما دیده نمیشود.
اما hidden:
<div class="hidden">
محتوا
</div>عنصر از Layout حذف میشود.
به صورت ساده:
invisible
↓
Hidden visually
+
Space remains
hidden
↓
Element removed
+
Space removedاین تفاوت در طراحی رابط کاربری بسیار مهم است.
Cursor
هنگام ساخت عناصر تعاملی، گاهی لازم است شکل نشانگر ماوس را تغییر دهیم.
برای مثال:
<button class="cursor-pointer">
کلیک کنید
</button>یا:
<div class="cursor-not-allowed">
قابل استفاده نیست
</div>این Utilityها بیشتر زمانی کاربرد دارند که ظاهر عنصر باید رفتار آن را برای کاربر واضحتر کند.
Select
گاهی میخواهیم کاربر نتواند متن یک عنصر را انتخاب کند.
برای مثال:
<div class="select-none">
این متن قابل انتخاب نیست.
</div>یا برای فعال کردن انتخاب:
<p class="select-text">
این متن قابل انتخاب است.
</p>این قابلیت برای بعضی عناصر رابط کاربری مفید است، اما نباید بدون دلیل از select-none برای محتوای متنی استفاده کنیم.
Overflow
Overflow زمانی اهمیت پیدا میکند که محتوای یک عنصر از اندازه تعیینشده آن بزرگتر باشد.
برای مثال:
<div class="w-64 h-32 overflow-hidden">
محتوای طولانی که ممکن است
از محدوده عنصر خارج شود.
</div>در اینجا:
overflow-hiddenمحتوای خارج از محدوده را پنهان میکند.
Utilityهای رایج:
overflow-auto
overflow-hidden
overflow-visible
overflow-scrollOverflow Auto
یکی از کاربردهای رایج overflow-auto ایجاد Scroll در صورت نیاز است.
<div class="w-64 h-32 overflow-auto">
محتوای بسیار طولانی...
</div>اگر محتوا از محدوده خارج شود، مرورگر امکان Scroll را فراهم میکند.
Object Fit برای تصاویر
در طراحی کارتها و گالریها، نحوه قرار گرفتن تصویر داخل یک محدوده مشخص اهمیت زیادی دارد.
Tailwind Utilityهایی مانند:
object-contain
object-cover
object-fill
object-noneدر اختیار ما قرار میدهد.
یکی از رایجترین موارد:
<img
src="product.jpg"
alt="محصول"
class="w-full h-64 object-cover"
>object-cover باعث میشود تصویر محدوده تعیینشده را پوشش دهد.
این روش برای تصاویر کارت محصولات بسیار کاربردی است.
ترکیب Shadow و Border
گاهی برای ساخت یک کارت حرفهای، Shadow و Border را با هم استفاده میکنیم:
<div class="bg-white border border-gray-200 rounded-xl shadow-md p-6">
<h2 class="text-xl font-bold">
محصول جدید
</h2>
<p class="mt-2 text-gray-600">
توضیحات محصول
</p>
</div>در اینجا:
bg-white
↓
Background
border
↓
Border
rounded-xl
↓
Rounded Corners
shadow-md
↓
Shadow
p-6
↓
Paddingترکیب این Utilityها یک الگوی بسیار رایج در طراحی رابط کاربری است.
ساخت یک Product Card
حالا یک کارت محصول کاملتر ایجاد کنیم:
<div class="max-w-sm overflow-hidden rounded-xl bg-white shadow-md">
<img
src="product.jpg"
alt="تصویر محصول"
class="h-56 w-full object-cover"
>
<div class="p-6">
<h2 class="text-2xl font-bold text-gray-800">
لپتاپ حرفهای
</h2>
<p class="mt-3 leading-7 text-gray-600">
یک لپتاپ مناسب برای برنامهنویسی
و طراحی وب.
</p>
<p class="mt-4 text-xl font-bold text-blue-600">
۵۰,۰۰۰,۰۰۰ تومان
</p>
<button class="mt-5 rounded-lg bg-blue-600 px-5 py-2 text-white">
مشاهده محصول
</button>
</div>
</div>در این مثال:
overflow-hiddenباعث میشود تصویر از گوشههای کارت بیرون نزند.rounded-xlگوشههای کارت را گرد میکند.shadow-mdسایه ایجاد میکند.object-coverتصویر را متناسب با محدوده نمایش میدهد.p-6فضای داخلی ایجاد میکند.
ساخت پیام اطلاعرسانی
میتوانیم با Utilityهای ساده یک پیام اطلاعرسانی ایجاد کنیم:
<div class="rounded-lg border border-blue-200 bg-blue-50 p-4">
<h3 class="font-bold text-blue-800">
اطلاعیه
</h3>
<p class="mt-1 text-blue-700">
اطلاعات حساب شما با موفقیت بهروزرسانی شد.
</p>
</div>این الگو را میتوان برای انواع پیامها استفاده کرد.
برای مثال پیام موفقیت:
<div class="rounded-lg border border-green-200 bg-green-50 p-4">
<p class="text-green-700">
عملیات با موفقیت انجام شد.
</p>
</div>پیام خطا:
<div class="rounded-lg border border-red-200 bg-red-50 p-4">
<p class="text-red-700">
انجام عملیات با خطا مواجه شد.
</p>
</div>در اینجا رنگ، Border و پسزمینه با یکدیگر هماهنگ شدهاند تا نوع پیام برای کاربر قابل تشخیص باشد.
ساخت یک Button ساده
اکنون Utilityهای مختلف را برای ساخت یک دکمه ترکیب کنیم:
<button class="rounded-lg bg-blue-600 px-6 py-3 font-semibold text-white shadow-md">
ثبت سفارش
</button>این دکمه شامل موارد زیر است:
rounded-lg → Rounded Corners
bg-blue-600 → Background
px-6 → Horizontal Padding
py-3 → Vertical Padding
font-semibold → Font Weight
text-white → Text Color
shadow-md → Shadowدر این مرحله یک نکته مهم را مشاهده میکنید: Tailwind زمانی قدرتمند میشود که Utilityهای کوچک را با یکدیگر ترکیب کنیم.
استفاده از Utilityهای مختلف در یک پروژه
اکنون میتوانیم یک صفحه ساده بسازیم که چند مورد از مفاهیم این مقاله را با هم داشته باشد:
<main class="min-h-screen bg-gray-100 p-8">
<div class="mx-auto max-w-md">
<div class="overflow-hidden rounded-xl bg-white shadow-lg">
<div class="bg-blue-600 p-6 text-white">
<h1 class="text-3xl font-bold">
حساب کاربری
</h1>
<p class="mt-2 opacity-90">
اطلاعات حساب خود را مدیریت کنید.
</p>
</div>
<div class="p-6">
<div class="rounded-lg border border-green-200 bg-green-50 p-4">
<p class="font-medium text-green-700">
حساب شما فعال است.
</p>
</div>
<button class="mt-6 w-full rounded-lg bg-blue-600 px-5 py-3 font-semibold text-white shadow-md">
ادامه
</button>
</div>
</div>
</div>
</main>در این مثال از چندین مفهوم استفاده شده است:
Page
└── Card
├── Header
│ ├── Background
│ ├── Text
│ └── Opacity
│
└── Content
├── Message
│ ├── Border
│ └── Background
│
└── Button
├── Background
├── Padding
├── Shadow
└── Typographyنکته مهم درباره استفاده از Utilityها
در Tailwind ممکن است وسوسه شوید برای هر عنصر تعداد زیادی Utility اضافه کنید.
مثلاً:
<div class="bg-white p-6 m-4 border border-gray-200 rounded-xl shadow-md opacity-100 ...">تعداد زیاد کلاسها همیشه به معنی طراحی بهتر نیست.
بهتر است قبل از اضافه کردن هر Utility از خودتان بپرسید:
آیا این Utility واقعاً برای طراحی یا تجربه کاربری لازم است؟
اگر پاسخ منفی است، آن را اضافه نکنید.
یک تمرین عملی
یک کارت برای معرفی یک دوره آموزشی بسازید.
کارت شما باید شامل موارد زیر باشد:
Course Card
├── Image
├── Title
├── Description
├── Price
└── Buttonسعی کنید از Utilityهای زیر استفاده کنید:
shadow-md
rounded-xl
overflow-hidden
object-cover
opacity-...
border
bg-...
text-...
p-...
m-...سپس مقدار Shadow، Opacity، Border و رنگها را تغییر دهید و نتیجه را در مرورگر مشاهده کنید.
جمعبندی
در این مقاله با چند Utility مهم و کاربردی Tailwind CSS آشنا شدیم. یاد گرفتیم چگونه با shadow-* به عناصر سایه اضافه کنیم، با opacity-* میزان شفافیت را کنترل کنیم و با visible و invisible وضعیت نمایش عناصر را مدیریت کنیم. همچنین با Utilityهای مرتبط با Cursor، انتخاب متن، Overflow و نحوه نمایش تصاویر آشنا شدیم.
مهمترین موضوع این مقاله، ترکیب Utilityهای مختلف برای ساخت عناصر واقعی بود. یک کارت، دکمه یا پیام ساده معمولاً فقط با یک کلاس ساخته نمیشود؛ بلکه چند Utility در کنار یکدیگر قرار میگیرند تا ظاهر موردنظر ایجاد شود.
نظرات
هنوز نظری ثبت نشده است.