در حال بارگذاری...

تبدیل‌ها (Transforms) در CSS

در جلسهٔ قبل یاد گرفتید تغییر چقدر طول بکشد. Transform مشخص می‌کند پیکسل‌ها کجا بروند: یک برچسب کمی کنار برود، آیکن لودر بچرخد، روی هاور نشان بزرگ‌تر شود — معمولاً بدون اینکه همسایه‌ها مثل margin یا top جابه‌جا شوند.

transform چه چیزی را عوض می‌کند؟

transform روی جعبهٔ رسم‌شده نقشهٔ دوبعدی (و بعداً سه‌بعدی) می‌کشد. جایگاه عنصر در چیدمان همان می‌ماند، مگر خودتان با عرض یا چیز دیگری جریان را جابه‌جا کنید. برای همین translate() و بقیه برای حرکت ریز — هاور، باز/بسته، اصلاح کوچک — انتخاب خوبی‌اند.

یک ویژگی، چند تابع — داخل یک مقدار transform لیست با ویرگول نمی‌آید؛ ولی توابع را پشت سر هم در یک اعلان می‌چینید: transform: translateX(1rem) rotate(8deg) scale(1.05);

توابع اصلی ۲D

📊 نگاهی به توابع transform دوبعدی

تابع کار معمول
translate(x, y) / translateX / translateY جابه‌جایی دیداری بدون به‌هم‌ریختن چیدمان
rotate(زاویه) چرخش آیکن، فلش، لودر (deg، turn)
scale(x, y) / scale(n) بزرگ/کوچ کردن روی هاور؛ مقدار را معقول نگه دارید
skew(x, y) کج کردن — کم استفاده؛ زاویهٔ کوچک

زاویه با deg یا turn می‌نویسید. درصد در translate() نسبت به اندازهٔ خود عنصر است — برای ترفندهای وسط‌چین با position: absolute به درد می‌خورد.

اول translate — حرکت روزمره

فقط می‌خواهید کمی جابه‌جا شود؟ قبل از top و margin سراغ translate بروید. مرورگر اغلب لایهٔ transform را روی compositor نگه می‌دارد و با transition جلسهٔ قبل حرکت نرم‌تر می‌شود.

بالا آمدن ملایم chip روی هاور

css
.chip {
display: inline-block;
padding: 0.35rem 0.75rem;
border-radius: 999px;
background: #e0e7ff;
color: #1e3a8a;
transition: transform 0.2s ease, background-color 0.2s ease;
}

.chip:hover,
.chip:focus-visible {
transform: translateY(-0.15rem);
background: #c7d2fe;
}

chip بالا می‌آید ولی جای خط در صفحه عوض نمی‌شود. همان کار با margin-top منفی روی هاور را امتحان کنید — همسایه‌ها می‌پرند.

rotate و scale با هم

روی آیکن و badge معمولاً scale کوچک با rotate می‌آید. زاویه را کم نگه دارید؛ UI حرفه‌ای بماند، نه شلوغ.

بزرگ شدن badge و چرخش chevron

css
.badge {
display: inline-flex;
align-items: center;
gap: 0.35rem;
font-size: 0.875rem;
transition: transform 0.25s ease;
}

.badge:hover {
transform: scale(1.06);
}

.chevron {
display: inline-block;
transition: transform 0.2s ease;
}

.menu-open .chevron {
transform: rotate(180deg);
}

scale(1.06) یعنی تأکید؛ scale(2) اغلب اشتباه است. rotate(180deg) برای chevron یعنی «باز شده» — با کلاس روی HTML/JS جفتش کنید.

transform-origin — لولای حرکت

پیش‌فرض، چرخش و بزرگ‌نمایی از وسط جعبه است. با transform-origin محور را عوض می‌کنید: پایین-چپ مثل در، بالا-وسط برای حس flip، 50% 100% برای تب که از پایه خم شود.

لولای پایین با transition

css
.panel-tilt {
transform-origin: 50% 100%;
transition: transform 0.35s ease;
}

.panel-tilt.is-open {
transform: rotateX(12deg);
}

اینجا rotateX ملایم فقط برای واژگان transform است. صحنهٔ سه‌بعدی کامل در جلسهٔ اختیاری 3D Transforms است؛ در این درس مهم origin است: همان زاویه با pivot دیگر حس متفاوتی می‌دهد.

با transition جفت کنید؛ از layout دوری کنید

transition را روی قانون پایه بگذارید و transform (و opacity) را برای هاور/باز شدن انیمیت کنید — نه width/height/top. با prefers-reduced-motion: reduce چرخش و scale تزئینی را کوتاه یا حذف کنید.

خودتان امتحان کنید

  1. دکمه را با translateY(-0.2rem) و transition کوتاه روی هاور بالا ببرید؛ همان را با margin-top امتحان کنید و جابه‌جایی همسایه را ببینید.
  2. وقتی والد .is-open گرفت، chevron را 180deg بچرخانید؛ مدت حدود 0.2s.
  3. روی کارت transform-origin: left center بگذارید و rotate کوچک بدهید — با مبدأ وسط مقایسه کنید.
  4. روی هاور tag در یک transform بنویسید: translateX(0.5rem) scale(1.04).
  5. در DevTools حالت prefers-reduced-motion: reduce را بزنید و حرکت غیرضروری را کم کنید.

اشتباه‌های رایج

  • برای «بالا آمدن» هاور به‌جای translate از top/left/margin استفاده کردن
  • rotate(45deg) روی wrapper بزرگ — کل صفحه می‌چرخد
  • فراموش کردن transform-origin در UI لولایی — همه از وسط می‌چرخند
  • scale(0) برای مخفی کردن بدون برنامه برای focus و دسترس‌پذیری
  • رفتن سراغ perspective سنگین وقتی translate + opacity کافی است

جمع‌بندی

  • transform جعبهٔ رسم‌شده را جابه‌جا می‌کند؛ جریان چیدمان معمولاً همان می‌ماند
  • translate، rotate، scale و skew را با اندازه استفاده کنید؛ توابع را در یک transform بچینید
  • transform-origin محور چرخش/بزرگ‌نمایی است
  • transform را با transition جفت کنید؛ به‌جای layout از transform/opacity استفاده کنید
  • بعدی در Effects & Motion: انیمیشن CSS (@keyframes)

🧠 دانش خود را بیازمایید

آماده شروع

دانش خود را بیازمایید

خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کرده‌اید

❓
6
سوالات
🎯
70%
برای قبولی
♾️
∞
زمان
🔄
∞
تلاش‌ها

📝 دستورالعمل‌ها

  • هر سوال را با دقت بخوانید
  • بهترین پاسخ را برای هر سوال انتخاب کنید
  • می‌توانید آزمون را هر چند بار که می‌خواهید تکرار کنید
  • پیشرفت شما در بالا نمایش داده می‌شود