مبدل واحدهای CSS ابزاری است که مقادیر طول را بین سیستمهای مختلف اندازهگیری CSS تبدیل میکند. CSS بیش از یک دوجین واحد طول تعریف میکند که به دو گروه تقسیم میشوند: واحدهای مطلق مانند px، pt، cm و in که به اندازههای فیزیکی ثابت نگاشت میشوند، و واحدهای نسبی مانند rem، em، vw، vh و % که به زمینه بستگی دارند، مانند اندازه فونت یا ابعاد ویوپورت.
مرورگرها همه طولهای CSS را هنگام رندرینگ به پیکسل تبدیل میکنند. وقتی مینویسید 1.5rem، مرورگر عدد 1.5 را در اندازه فونت ریشه (معمولاً 16px) ضرب میکند تا 24px به دست آید. وقتی مینویسید 50vw، نیمی از عرض جاری ویوپورت را میگیرد. درک این روابط برای ساختن طرحبندیهایی که در دستگاههای مختلف مقیاسپذیر باشند و به تنظیمات کاربر مانند اندازه فونت سفارشی احترام بگذارند، ضروری است.
مشخصات CSS Values and Units Module Level 4 (W3C) نسبتهای تبدیل دقیق بین تمام واحدهای مطلق را تعریف میکند: 1in = 96px = 72pt = 2.54cm = 25.4mm. واحدهای نسبی نسبت ثابتی ندارند زیرا به زمینه اجرا وابستهاند. یک مبدل رایگان واحد CSS به شما امکان میدهد این روابط را با توجه به اندازه فونت ریشه و ابعاد ویوپورت خاص خود، بدون نوشتن هیچ کدی، فوری محاسبه کنید.
چرا از مبدل واحدهای CSS استفاده کنیم؟
تبدیل دستی واحدهای CSS به معنای به خاطر سپردن نسبتها، استفاده از ماشینحساب و بررسی مجدد محاسبات است. این ابزار تبدیل را به سادگی در مرورگر شما انجام میدهد.
⚡
تبدیل فوری
یک مقدار وارد کنید، واحد مبدأ را انتخاب کنید و نتایج را در هر 10 واحد CSS یکجا ببینید. نیازی به محاسبات جداگانه برای px به rem، px به vw یا px به pt نیست.
🔒
حریم خصوصی دادههای شما
همه تبدیلها بهصورت محلی در مرورگر شما اجرا میشوند. هیچ مقداری به سرور ارسال، ثبت یا ذخیره نمیشود. تب را ببندید و دادهها از بین میروند.
🎯
تنظیم بر اساس محیط دقیق شما
اندازه فونت ریشه، عرض ویوپورت، ارتفاع ویوپورت و اندازه فونت والد را تنظیم کنید. مبدل از این مقادیر برای تولید نتایج دقیق برای واحدهای rem، em، vw، vh و % استفاده میکند.
📏
پوشش همه واحدهای طول CSS
از px، rem، em، vw، vh، %، pt، cm، mm و in پشتیبانی میکند. چه با طرحبندیهای صفحه نمایش، چه با استایلشیتهای چاپ یا تایپوگرافی واکنشگرا کار کنید، همه واحدها پوشش داده شدهاند.
موارد استفاده از مبدل واحدهای CSS
توسعه فرانتاند
مقادیر پیکسلی یک فایل طراحی را برای یک کتابخانه کامپوننت به rem تبدیل کنید. وقتی یک ماکت Figma فاصلهگذاری 24px را مشخص میکند، آن را به 1.5rem تبدیل کنید تا طرحبندی با تنظیمات اندازه فونت کاربر مقیاسپذیر شود.
مهندسی بکاند / فولاستک
قالبهای PDF یا ایمیل تولید کنید که ابعاد آنها بر حسب pt یا cm مشخص شدهاند. مقادیر پیکسلی CSS خود را به اندازههای point آماده چاپ برای رندرینگ سمت سرور با ابزارهایی مانند Puppeteer یا wkhtmltopdf تبدیل کنید.
DevOps / پایپلاینهای CI
اطمینان حاصل کنید که توکنهای فاصلهگذاری یک سیستم طراحی در مراحل مختلف ساخت از واحدهای یکسانی استفاده میکنند. بهسرعت تأیید کنید که یک پایه 16px مقادیر rem مورد انتظار را در CSS تولیدشده ایجاد میکند.
QA / تست بصری
استایلهای محاسبهشده را در هنگام تست چندمرورگری تأیید کنید. وقتی Chrome DevTools مقدار محاسبهشده 14.4px را نشان میدهد، آن را به rem تبدیل کنید تا تأیید کنید با 0.9rem مورد انتظار از استایلشیت مطابقت دارد.
تجسم داده
عناصر SVG یا canvas را نسبت به ابعاد ویوپورت اندازهگیری کنید. عرضهای ثابت پیکسلی نمودار را به واحدهای vw تبدیل کنید تا تجسمها درصد ثابتی از صفحه را در مانیتورهای مختلف پر کنند.
یادگیری CSS
رابطه بین rem، em و px را با آزمایش اندازههای پایه مختلف درک کنید. اندازه فونت ریشه را از 16px به 18px تغییر دهید و ببینید چگونه هر مقدار rem تغییر میکند.
مرجع واحدهای طول CSS
CSS ده واحد طول پرکاربرد تعریف میکند. واحدهای مطلق تبدیل ثابتی به پیکسل دارند. واحدهای نسبی به زمینه بستگی دارند: اندازه فونت ریشه برای rem، اندازه فونت والد برای em، و ویوپورت مرورگر برای vw و vh.
واحد
نام
اندازه پیشفرض
نسبت به
px
Pixel
1px
Fixed; 1px = 1/96 of 1in on screens
rem
Root em
16px (default)
Relative to <html> font-size
em
Em
Inherited
Relative to parent element font-size
vw
Viewport width
1% of viewport
Relative to browser window width
vh
Viewport height
1% of viewport
Relative to browser window height
%
Percentage
Varies
Relative to parent property value
pt
Point
1.333px
Print unit; 1pt = 1/72 of 1in
cm
Centimeter
37.795px
Physical unit; 1cm = 96px / 2.54
mm
Millimeter
3.7795px
Physical unit; 1mm = 1cm / 10
in
Inch
96px
Physical unit; 1in = 96px (CSS spec)
واحدهای مطلق در برابر نسبی CSS
انتخاب بین واحدهای مطلق و نسبی بر نحوه واکنش طرحبندی شما به صفحههای مختلف و تنظیمات کاربر تأثیر میگذارد. هر گروه مزایا و معایب متمایزی دارد.
واحدهای مطلق (px، pt، cm، mm، in)
واحدهای مطلق بدون توجه به زمینه، اندازه فیزیکی یکسانی تولید میکنند. از px برای حاشیهها، سایهها و عناصری که نباید مقیاسپذیر باشند استفاده کنید. از pt برای استایلشیتهای چاپ استفاده کنید. مشخصات CSS تعریف میکند که 1in = 96px، هرچند اندازه فیزیکی واقعی بسته به DPI نمایشگر متفاوت است.
واحدهای نسبی (rem، em، vw، vh، %)
واحدهای نسبی با زمینه مرجع خود مقیاسپذیر میشوند. از rem برای اندازههای فونت و فاصلهگذاری استفاده کنید تا به تنظیمات کاربر احترام بگذارید. از em برای مقیاسبندی داخلی کامپوننت استفاده کنید (padding نسبت به اندازه فونت خود عنصر). از vw/vh برای طرحبندیهای پرکننده ویوپورت مانند بخشهای hero استفاده کنید.
جدول تبدیل px به rem
این جدول اندازه فونت ریشه 16px (پیشفرض مرورگر) را فرض میکند. اگر پروژه شما از پایه متفاوتی استفاده میکند، مقدار پیکسل را بر پایه خود تقسیم کنید تا معادل rem به دست آید.
px
rem
pt
کاربرد معمول
10
0.625
7.5
Small caption text
12
0.75
9
Body text (compact)
14
0.875
10.5
Default body text
16
1
12
Root font-size (browser default)
18
1.125
13.5
Large body text
20
1.25
15
H4 heading
24
1.5
18
H3 heading
32
2
24
H2 heading
48
3
36
H1 heading
64
4
48
Display / hero text
نمونه کد
این مثالها نشان میدهند چگونه واحدهای CSS را بهصورت برنامهنویسی در JavaScript، Python، CSS custom properties و Sass تبدیل کنید.
JavaScript
// px to rem (given root font-size of 16px)
const pxToRem = (px, base = 16) => px / base
pxToRem(24) // → 1.5
// rem to px
const remToPx = (rem, base = 16) => rem * base
remToPx(1.5) // → 24
// px to vw (given viewport width of 1440px)
const pxToVw = (px, viewport = 1440) => (px / viewport) * 100
pxToVw(360) // → 25
// Dynamic calculation using getComputedStyle
const rootFontSize = parseFloat(
getComputedStyle(document.documentElement).fontSize
) // → 16 on most browsers
همه مرورگرهای اصلی (Chrome، Firefox، Safari، Edge) بهطور پیشفرض اندازه فونت ریشه 16px دارند. این بدان معناست که 1rem = 16px مگر اینکه کاربر یا استایلشیتی font-size عنصر html را تغییر داده باشد. برخی کاربران این مقدار را در تنظیمات مرورگر برای دسترسپذیری افزایش میدهند، به همین دلیل rem برای متن گزینه بهتری نسبت به px است.
چگونه px را به rem تبدیل کنم؟
مقدار پیکسل را بر اندازه فونت ریشه تقسیم کنید. با پایه پیشفرض 16px: 24px / 16 = 1.5rem. اگر پروژه شما html { font-size: 10px } تنظیم کرده باشد (یک reset رایج)، آنگاه 24px / 10 = 2.4rem. فرمول همیشه این است: rem = px / root-font-size.
تفاوت بین rem و em چیست؟
rem نسبت به اندازه فونت عنصر ریشه (تگ html) است، در حالی که em نسبت به اندازه فونت والد عنصر جاری است. این بدان معناست که rem اندازهگذاری یکسانی در سراسر صفحه ایجاد میکند، در حالی که em هنگام تودرتو شدن ترکیب میشود. یک 2em داخل یک والد 2em 4 برابر اندازه ریشه میشود. از rem برای فاصلهگذاری و اندازههای فونت سراسری استفاده کنید؛ از em زمانی استفاده کنید که میخواهید اندازهگذاری نسبت به متن خود کامپوننت مقیاسپذیر باشد.
چه زمانی باید از واحدهای vw یا vh استفاده کنم؟
از vw برای عناصری که باید با عرض پنجره مرورگر مقیاسپذیر شوند استفاده کنید، مانند بخشهای hero تمامعرض یا تایپوگرافی سیال (clamp با vw). از vh برای بخشهای تمامصفحه یا طرحبندیهای ارتفاع ویوپورت استفاده کنید. با vh در مرورگرهای موبایل که نوار آدرس ارتفاع ویوپورت را تغییر میدهد احتیاط کنید؛ واحد جدیدتر dvh (dynamic viewport height) این مشکل را حل میکند.
آیا میتوانم واحدهای مختلف CSS را در یک property ترکیب کنم؟
بله. تابع CSS calc() به شما امکان میدهد هر واحدی را در یک عبارت واحد ترکیب کنید. برای مثال، width: calc(100vw - 2rem) عدد 32px (در پایه پیشفرض) را از عرض کامل ویوپورت کم میکند. همچنین میتوانید واحدها را در clamp() ترکیب کنید: font-size: clamp(1rem, 2vw + 0.5rem, 2.5rem) تایپوگرافی سیالی ایجاد میکند که بین 16px و 40px مقیاسپذیر است.
1pt در CSS چند پیکسل است؟
در CSS، 1pt = 1/72 اینچ است، و 1 اینچ = 96px، پس 1pt = 96/72 = 1.333px. این نسبت در مشخصات CSS صرفنظر از DPI صفحه ثابت است. از pointها در درجه اول در استایلشیتهای چاپ و تولید PDF استفاده میشود. برای طراحی صفحه نمایش، px یا rem گزینههای بهتری هستند.
آیا reset کردن font-size به 62.5% هنوز روش خوبی است؟
تنظیم html { font-size: 62.5% } باعث میشود 1rem = 10px که محاسبات ذهنی را ساده میکند (24px = 2.4rem). با این حال، این کار مستلزم تنظیم صریح font-size روی عنصر body است و میتواند با کامپوننتهای شخص ثالثی که پایه پیشفرض 16px را فرض میکنند مشکل ایجاد کند. ترجیح مدرن حفظ پیشفرض 16px و استفاده از یک تابع Sass یا افزونه PostCSS برای انجام تبدیل است.