ToolDeck

مبدل واحدهای CSS

تبدیل واحدهای CSS بین px، rem، em، vw، vh و %

px16
rem1
em1
vw1.111111
vh1.777778
%100
pt12
cm0.4233331
mm4.233331
in0.1666667
همچنین امتحان کنید:فرمت‌کننده CSSفشرده‌ساز CSS

تبدیل واحدهای CSS چیست؟

مبدل واحدهای 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.

واحدناماندازه پیش‌فرضنسبت به
pxPixel1pxFixed; 1px = 1/96 of 1in on screens
remRoot em16px (default)Relative to <html> font-size
emEmInheritedRelative to parent element font-size
vwViewport width1% of viewportRelative to browser window width
vhViewport height1% of viewportRelative to browser window height
%PercentageVariesRelative to parent property value
ptPoint1.333pxPrint unit; 1pt = 1/72 of 1in
cmCentimeter37.795pxPhysical unit; 1cm = 96px / 2.54
mmMillimeter3.7795pxPhysical unit; 1mm = 1cm / 10
inInch96pxPhysical 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 به دست آید.

pxremptکاربرد معمول
100.6257.5Small caption text
120.759Body text (compact)
140.87510.5Default body text
16112Root font-size (browser default)
181.12513.5Large body text
201.2515H4 heading
241.518H3 heading
32224H2 heading
48336H1 heading
64448Display / 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
Python
# CSS unit converter functions

def px_to_rem(px: float, base: float = 16) -> float:
    return px / base

def rem_to_px(rem: float, base: float = 16) -> float:
    return rem * base

def px_to_vw(px: float, viewport: float = 1440) -> float:
    return (px / viewport) * 100

def px_to_pt(px: float) -> float:
    return px * 72 / 96

print(px_to_rem(24))     # → 1.5
print(rem_to_px(2.5))    # → 40.0
print(px_to_vw(720))     # → 50.0
print(px_to_pt(16))      # → 12.0
CSS (calc & custom properties)
/* Define a base scale using rem */
:root {
  --base: 16px;       /* root font-size */
  --space-1: 0.25rem; /* 4px */
  --space-2: 0.5rem;  /* 8px */
  --space-4: 1rem;    /* 16px */
  --space-8: 2rem;    /* 32px */
}

/* Fluid typography: scales between 1rem (16px) and 2.5rem (40px) */
h1 {
  font-size: clamp(1rem, 2.5vw + 0.5rem, 2.5rem);
}

/* Viewport-relative hero height */
.hero {
  height: calc(100vh - 4rem); /* full viewport minus 64px header */
}

/* Percentage-based grid */
.sidebar { width: 25%; }     /* 360px on 1440px screen */
.content { width: 75%; }     /* 1080px on 1440px screen */
SCSS (mixin)
// Reusable px-to-rem function in Sass
@use "sass:math";

$base-font-size: 16px !default;

@function rem($px) {
  @return math.div($px, $base-font-size) * 1rem;
}

// Usage
.card {
  padding: rem(24px);       // → 1.5rem
  margin-bottom: rem(32px); // → 2rem
  border-radius: rem(8px);  // → 0.5rem
  font-size: rem(14px);     // → 0.875rem
}

سؤالات متداول

اندازه پیش‌فرض فونت ریشه در مرورگرها چقدر است؟
همه مرورگرهای اصلی (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 برای انجام تبدیل است.