ToolHub
View All Posts

دليل تحويل وحدات CSS: شرح px و rem و em و vw و vh

اختيار وحدات CSS الصحيحة هو أحد أكثر القرارات تأثيرًا عند كتابة أوراق الأنماط. تحدد الوحدات التي تختارها كيفية تغيير حجم العناصر عبر أحجام الشاشات المختلفة، وكيفية استجابتها لتفضيلات المستخدم (مثل إعدادات حجم خط المتصفح)، والسلوك المتوقع للتخطيط. ومع ذلك، يلجأ العديد من المطورين افتراضيًا إلى البكسل بدافع العادة، مفتقدين المرونة ومزايا إمكانية الوصول التي توفرها الوحدات النسبية. يغطي هذا الدليل جميع وحدات CSS الرئيسية، ويشرح متى تستخدم كل منها، ويوضح كيفية التحويل بينها، ويقدم أفضل الممارسات العملية للتصميم المتجاوب الحديث.

فهم تصنيف وحدات CSS

تنقسم وحدات CSS إلى فئتين رئيسيتين: الوحدات المطلقة والوحدات النسبية. الوحدات المطلقة لها حجم فيزيائي ثابت، بينما تشتق الوحدات النسبية قيمتها المحسوبة من نقطة مرجعية أخرى. فهم هذا التمييز هو أساس اتخاذ خيارات وحدات مدروسة.

الوحدات المطلقة

الوحدات المطلقة هي مقاييس ثابتة الحجم. الوحدة المطلقة الأكثر استخدامًا في تطوير الويب هي البكسل (px). تشمل الوحدات المطلقة الأخرى النقاط (pt) والسنتيمتر (cm) والميليمتر (mm) والبوصة (in). تُستخدم هذه الوحدات بشكل أساسي في أوراق أنماط الطباعة أو عندما تحتاج إلى قياس لا يتغير مع السياق. في CSS المعتمد على الشاشة، px هي الوحدة المطلقة الوحيدة التي ستستخدمها بانتظام.

الوحدات النسبية

تحسب الوحدات النسبية قيمتها النهائية بناءً على قيمة مرجعية. em نسبة إلى حجم خط العنصر الحالي، و rem نسبة إلى حجم خط العنصر الجذري، و vw و vh نسبة إلى أبعاد منفذ العرض، والنسب المئوية نسبة إلى العنصر الأب. الوحدات النسبية هي حجر الزاوية في التصميم المتجاوب والقابل للوصول لأنها تسمح لتخطيطك بالتكيف تلقائيًا مع السياقات المختلفة.

البكسل (px): الوحدة الأساسية

البكسل هو أكثر وحدات CSS بديهية لأنه يرتبط مباشرة ببكسلات الشاشة (مع بعض الاعتبارات المتعلقة بنسبة بكسل الجهاز). قيم px هي نفسها دائمًا بغض النظر عن السياق، مما يجعلها قابلة للتنبؤ وسهلة الفهم. ومع ذلك، فإن هذه القابلية للتنبؤ لها ثمن: الأحجام المعتمدة على البكسل لا تتغير عندما يغير المستخدم حجم الخط الافتراضي للمتصفح، مما يخلق مشكلات في إمكانية الوصول.

متى تستخدم px

متى تتجنب px

تجنب استخدام px لأحجام الخطوط والحشو والهوامش وأبعاد التخطيط التي يجب أن تتكيف مع تفضيلات المستخدم. المستخدم الذي يزيد حجم خط المتصفح إلى 20px يتوقع أن يتغير حجم كل النص وفقًا لذلك، لكن أحجام الخطوط المعتمدة على px لا تستجيب لهذا التغيير.

rem: الحجم النسبي للجذر

). في معظم المتصفحات، حجم الخط الجذري الافتراضي هو 16px، لذا 1rem = 16px، 0.5rem = 8px، 2rem = 32px. الميزة الرئيسية لـ rem هي أنها تتغير عندما يغير المستخدم حجم الخط الافتراضي للمتصفح، مما يجعلها الخيار الأفضل لإمكانية الوصول.

تحويل px إلى rem

صيغة التحويل بسيطة: اقسم قيمة البكسل على حجم الخط الجذري.

rem = px / root-font-size

// With default root font size of 16px:
12px = 12 / 16 = 0.75rem
16px = 16 / 16 = 1rem
24px = 24 / 16 = 1.5rem
32px = 32 / 16 = 2rem
48px = 48 / 16 = 3rem

خدعة 62.5%

يجد العديد من المطورين أن القسمة على 16 مملة. خدعة شائعة هي تعيين حجم الخط الجذري إلى 62.5%، مما يجعل 1rem يساوي 10px. هذا يبسط الحساب الذهني: 14px تصبح 1.4rem، 24px تصبح 2.4rem، وهكذا.

html {
    font-size: 62.5%; /* 1rem = 10px */
}

body {
    font-size: 1.6rem; /* 16px */
}

h1 {
    font-size: 3.2rem; /* 32px */
    margin-bottom: 1.6rem; /* 16px */
}
ملاحظة إمكانية الوصول: خدعة 62.5% تعمل لأنها لا تزال تحترم تفضيلات حجم خط المستخدم. تعيين font-size: 62.5% على العنصر الجذري هو 62.5% من القيمة الافتراضية التي اختارها المستخدم، لذا إذا قام المستخدم بتعيين متصفحه إلى 20px، يصبح العنصر الجذري 12.5px، وتتغير جميع قيم rem بشكل متناسب. لا تقم أبدًا بتعيين حجم الخط الجذري إلى قيمة px ثابتة، لأن هذا يتجاوز تفضيلات المستخدم.

em: الحجم النسبي للسياق

وحدة em نسبة إلى حجم خط العنصر الحالي (أو للخصائص غير font-size، نسبة إلى العنصر الأب). هذا يعني أن 1em يساوي حجم الخط الحالي، وتتراكم قيم em عند تداخل العناصر. يمكن أن يكون سلوك التركيب هذا قويًا ومربكًا في نفس الوقت.

مشكلة التركيب

/* Parent: font-size 16px */
.parent {
    font-size: 1em; /* 16px */
}

/* Child: 1.2em of parent's 16px = 19.2px */
.child {
    font-size: 1.2em;
}

/* Grandchild: 1.2em of child's 19.2px = 23.04px */
.grandchild {
    font-size: 1.2em;
}

كل عنصر متداخل يضاعف حجم الخط، مما يؤدي إلى نمو أسي. لهذا السبب فإن rem عادة أفضل لأحجام الخطوط. ومع ذلك، يتألق em في حالات استخدام محددة حيث تريد تغيير حجم على مستوى المكون.

متى تستخدم em

وحدات منفذ العرض: vw و vh و vmin و vmax

وحدات منفذ العرض نسبة إلى أبعاد نافذة المتصفح. 1vw يساوي 1% من عرض منفذ العرض، و 1vh يساوي 1% من ارتفاع منفذ العرض. vmin هو الأصغر بين vw و vh، و vmax هو الأكبر. هذه الوحدات ضرورية لإنشاء تخطيطات تستجيب للمساحة المتاحة على الشاشة.

حالات استخدام شائعة لوحدات منفذ العرض

حالة الاستخدامالوحدةمثال
منطقة hero بملء الشاشةvhheight: 100vh
طباعة مرنةvw + clampfont-size: clamp(1rem, 2.5vw, 2rem)
تخطيط جنبًا إلى جنبvwwidth: 50vw
عنصر مربعvminwidth: 20vmin; height: 20vmin
تراكب بملء منفذ العرضvw + vhwidth: 100vw; height: 100vh

مشكلة vh في الجوال

في متصفحات الجوال، 100vh لا تساوي دائمًا ارتفاع منفذ العرض المرئي. يشغل شريط عنوان المتصفح وعناصر التحكم في التنقل مساحة، لكن 100vh تشمل المنطقة خلف هذه العناصر. هذا يتسبب في اقتطاع المحتوى أسفل المناطق ذات الارتفاع الكامل. توفر CSS الحديثة dvh (ارتفاع منفذ العرض الديناميكي) كحل، والذي يأخذ في الاعتبار أشرطة الأدوات الديناميكية. بدلاً من ذلك، استخدم JavaScript لتعيين خصائص CSS مخصصة بناءً على window.innerHeight.

/* Modern approach */
.hero {
    height: 100dvh; /* Dynamic viewport height */
}

/* Fallback for older browsers */
.hero {
    height: 100vh;
    height: 100dvh;
}

وحدات منفذ العرض الجديدة: svh و lvh و dvh

قدمت CSS ثلاث وحدات جديدة لارتفاع منفذ العرض لحل مشكلات منفذ العرض في الجوال:

توجد نفس المتغيرات الصغيرة/الكبيرة/الديناميكية للعرض (svw و lvw و dvw) ووحدات min/max (svmin و lvmin و dvmin إلخ). استخدم dvh للتخطيطات ذات الشاشة الكاملة في الجوال، و svh عندما تحتاج إلى ضمان ظهور المحتوى بدون تمرير، و lvh عندما تريد ملء أقصى مساحة ممكنة.

استخدام ()clamp للطباعة المرنة

دالة ()clamp في CSS هي طفرة في الطباعة المتجاوبة. تقبل ثلاث قيم: الحد الأدنى والقيمة المفضلة والحد الأقصى. يختار المتصفح القيمة المفضلة لكنه يقيدها بين الحد الأدنى والحد الأقصى.

/* Font size scales from 1rem to 2.5rem based on viewport */
h1 {
    font-size: clamp(1rem, 2.5vw + 0.5rem, 2.5rem);
}

/* Padding scales proportionally */
.container {
    padding: clamp(1rem, 3vw, 3rem);
}

يمنحك هذا النهج فوائد التغيير بناءً على منفذ العرض دون خطر أن يصبح النص صغيرًا جدًا على الجوال أو كبيرًا جدًا على سطح المكتب. يلغي الحاجة إلى نقاط توقف استعلامات الوسائط لأحجام الخطوط، مما يقلل بشكل كبير من تعقيد CSS.

جدول مرجعي للتحويل

استخدم هذا الجدول كمرجع سريع للتحويلات الشائعة. تفترض جميع القيم حجم خط جذري 16px ومنفذ عرض 1920x1080.

pxremem (عند 16px)vw (1920px)% (من 16px)
8px0.5rem0.5em0.417vw50%
12px0.75rem0.75em0.625vw75%
16px1rem1em0.833vw100%
20px1.25rem1.25em1.042vw125%
24px1.5rem1.5em1.25vw150%
32px2rem2em1.667vw200%
48px3rem3em2.5vw300%
64px4rem4em3.333vw400%

أفضل ممارسات وحدات CSS

هل تحتاج إلى تحويل سريع بين وحدات CSS؟ جرب محول وحدات CSS المجاني عبر الإنترنت. تحويل فوري بين px إلى rem و em إلى px ووحدات منفذ العرض والمزيد.

محول وحدات CSS

الأسئلة الشائعة

هل يجب استخدام px أم rem لحجم الخط؟

استخدم rem لأحجام الخطوط في معظم الحالات. وحدات rem نسبة إلى حجم الخط الجذري، لذا تتغير عندما يغير المستخدم حجم الخط الافتراضي للمتصفح. هذا يحسن إمكانية الوصول. استخدم px فقط للتفاصيل الدقيقة مثل الحدود والظلال أو عندما تحتاج إلى دقة على مستوى البكسل لا يجب أن تتغير مع تفضيلات المستخدم.

ما الفرق بين em و rem؟

em نسبة إلى حجم خط العنصر الأب، بينما rem نسبة إلى حجم الخط الجذري (عادة 16px). em يتراكم عند التداخل، مما قد يؤدي إلى تغييرات غير متوقعة في الحجم. rem يشير دائمًا إلى نفس الأساس، مما يجعله أكثر قابلية للتنبؤ. استخدم rem للأحجام العامة، و em لتغيير الحجم على مستوى المكون حيث تريد أن تتغير العناصر المتداخلة بشكل متناسب.

كيفية تحويل px إلى rem؟

اقسم قيمة البكسل على حجم الخط الجذري (عادة 16px). على سبيل المثال، 24px / 16 = 1.5rem. الصيغة هي: rem = px / root-font-size. إذا كان حجم الخط الجذري 16px، فإن 1rem = 16px، 0.5rem = 8px، 2rem = 32px. يمكنك استخدام محول وحدات CSS عبر الإنترنت للتحويل السريع.

متى يجب استخدام وحدات منفذ العرض (vw, vh)؟

استخدم وحدات منفذ العرض عندما تريد الحجم نسبة إلى نافذة المتصفح. تشمل حالات الاستخدام الشائعة مناطق hero بملء الشاشة (100vh)، والطباعة التي تتغير مع عرض منفذ العرض (clamp مع vw)، والتخطيطات التي يجب أن تملأ المساحة المتاحة. تجنب استخدام vw وحده لنص الجسم لأنه قد يصبح صغيرًا جدًا على الجوال أو كبيرًا جدًا على الشاشات العريضة.

ما هي أفضل وحدة CSS للتصميم المتجاوب؟

لا توجد وحدة واحدة أفضل. الجمع بينها يعمل بشكل أفضل: rem لأحجام الخطوط والتباعد، والنسب المئوية للعرض داخل الحاويات، ووحدات منفذ العرض للعناصر بملء الشاشة، و ()clamp في CSS للطباعة المرنة التي تتغير بين الحجم الأدنى والأقصى. المفتاح هو فهم ما تشير إليه كل وحدة والاختيار وفقًا لذلك.

ToolHub's collection of 300+ free online tools including CSS unit converters, formatters, and more — no sign-up required.