ما هو تحويل وحدات 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 يدوياً يعني تذكّر النسب وفتح الآلة الحاسبة والتحقق من النتائج. هذه الأداة تُجري التحويل في متصفحك بسلاسة تامة.
حالات استخدام محوّل وحدات CSS
مرجع وحدات طول 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 إلى 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 المخصصة وSass.
// 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
# 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/* 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 */// 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
}