با این ماشین حساب ساده، بین پیکسلها (PX)، ریشه em (REM) و em (EM) واحدهای CSS تبدیل کنید. این ابزار برای طراحی و توسعه وب واکنشگرا ضروری است.
تبدیل بین پیکسلها (PX)، ریشه ام (REM) و ام (EM). مقدار را در هر فیلد وارد کنید تا مقادیر معادل در واحدهای دیگر را ببینید.
درک و تبدیل واحدهای CSS برای طراحی و توسعه وب واکنشگرا ضروری است. واحدهای PX (پیکسل)، REM (ریشه em) و EM از بلوکهای اصلی هستند که تعیین میکنند عناصر چگونه در دستگاهها و اندازههای صفحه نمایش مختلف اندازهگیری و موقعیتیابی شوند. این ابزار مبدل واحد جامع به شما این امکان را میدهد که به راحتی مقادیر را بین این سه واحد کلیدی CSS ترجمه کنید و به شما در ایجاد طرحهای وب انعطافپذیر و قابل نگهداری کمک کند.
پیکسلها (PX) واحدهای اندازهگیری ثابت هستند که کنترل دقیقی را فراهم میکنند اما مقیاسپذیری ندارند، در حالی که واحدهای REM نسبت به اندازه فونت عنصر ریشه مقیاس میشوند و واحدهای EM نسبت به اندازه فونت عنصر والد مقیاس میشوند. تبدیل بین این واحدها میتواند چالشبرانگیز باشد، بهویژه هنگام کار با طراحیهای پیچیده یا هنگام پشتیبانی از ویژگیهای دسترسی مانند تغییر اندازه متن. مبدل PX، REM و EM ما این فرآیند را ساده میکند و به شما این امکان را میدهد که بر روی ایجاد طراحیهای زیبا و واکنشگرا تمرکز کنید.
پیکسلها (PX) رایجترین و اساسیترین واحد CSS هستند. یک پیکسل یک نقطه واحد در یک شبکه تصویر دیجیتال است و کوچکترین عنصر قابل کنترل بر روی صفحه نمایش را نمایندگی میکند. در CSS، پیکسلها واحدهای اندازهگیری ثابت هستند که مستقل از سایر عوامل استایل باقی میمانند.
1.element {
2 width: 200px;
3 font-size: 16px;
4 margin: 10px;
5}
6
ویژگیهای کلیدی پیکسلها:
واحدهای REM (ریشه em) واحدهای نسبی هستند که بر اساس اندازه فونت عنصر ریشه (معمولاً عنصر <html>
) مقیاس میشوند. بهطور پیشفرض، بیشتر مرورگرها اندازه فونت ریشه را 16px تنظیم میکنند، به طوری که 1rem برابر با 16px است مگر اینکه بهطور صریح تغییر یابد.
1html {
2 font-size: 16px; /* پیشفرض در بیشتر مرورگرها */
3}
4
5.element {
6 width: 12.5rem; /* معادل با 200px با اندازه فونت ریشه پیشفرض */
7 font-size: 1rem; /* معادل با 16px */
8 margin: 0.625rem; /* معادل با 10px */
9}
10
ویژگیهای کلیدی واحدهای REM:
واحدهای EM واحدهای نسبی هستند که بر اساس اندازه فونت عنصر والد خود مقیاس میشوند. اگر هیچ اندازه فونتی برای والد مشخص نشده باشد، EMها به اندازه فونت وراثتی اشاره میکنند.
1.parent {
2 font-size: 20px;
3}
4
5.child {
6 font-size: 0.8em; /* معادل با 16px (20px × 0.8) */
7 margin: 0.5em; /* معادل با 8px (16px × 0.5) */
8}
9
ویژگیهای کلیدی واحدهای EM:
درک روابط ریاضی بین واحدهای PX، REM و EM برای تبدیلهای دقیق ضروری است. در اینجا فرمولهای مورد استفاده در مبدل ما آورده شده است:
برای تبدیل پیکسلها به واحدهای REM، مقدار پیکسل را بر اندازه فونت ریشه تقسیم کنید:
به عنوان مثال، با اندازه فونت ریشه پیشفرض 16px:
برای تبدیل پیکسلها به واحدهای EM، مقدار پیکسل را بر اندازه فونت عنصر والد تقسیم کنید:
به عنوان مثال، با اندازه فونت والد 16px:
برای تبدیل واحدهای REM به پیکسلها، مقدار REM را در اندازه فونت ریشه ضرب کنید:
به عنوان مثال، با اندازه فونت ریشه پیشفرض 16px:
برای تبدیل واحدهای EM به پیکسلها، مقدار EM را در اندازه فونت عنصر والد ضرب کنید:
به عنوان مثال، با اندازه فونت والد 16px:
برای تبدیل واحدهای REM به واحدهای EM، باید هم اندازه فونت ریشه و هم اندازه فونت عنصر والد را در نظر بگیرید:
اگر هر دو اندازه فونت برابر باشند (بهعنوان مثال، 16px)، آنگاه 1rem = 1em.
برای تبدیل واحدهای EM به واحدهای REM، از فرمول زیر استفاده کنید:
دوباره، اگر هر دو اندازه فونت برابر باشند، آنگاه 1em = 1rem.
ابزار مبدل ما استفاده از مقادیر را بین واحدهای PX، REM و EM آسان میکند. در اینجا یک راهنمای مرحله به مرحله برای استفاده مؤثر از مبدل آورده شده است:
<html>
پروژه خود تنظیم کنیددرک زمان استفاده از هر واحد CSS و نحوه تبدیل بین آنها برای توسعه وب مؤثر ضروری است. در اینجا برخی از کاربردها و سناریوهای عملی آورده شده است که در آن مبدل ما ارزشمند است:
تبدیل بین واحدها برای ایجاد طراحیهای واقعاً واکنشگرا ضروری است:
1/* تبدیل مقادیر ثابت پیکسل به واحدهای REM واکنشگرا */
2.container {
3 /* از: padding: 20px; */
4 padding: 1.25rem; /* 20px ÷ 16px = 1.25rem */
5
6 /* از: margin-bottom: 32px; */
7 margin-bottom: 2rem; /* 32px ÷ 16px = 2rem */
8}
9
استفاده از واحدهای نسبی دسترسی را با احترام به ترجیحات کاربر بهبود میبخشد:
سیستمهای طراحی مدرن از استفاده دقیق از واحدها بهرهمند میشوند:
ایجاد تایپوگرافی هماهنگ نیاز به انتخاب واحد دقیق دارد:
1/* سیستم تایپوگرافی با استفاده از واحدهای REM */
2h1 { font-size: 2.5rem; } /* 40px */
3h2 { font-size: 2rem; } /* 32px */
4h3 { font-size: 1.5rem; } /* 24px */
5h4 { font-size: 1.25rem; } /* 20px */
6p { font-size: 1rem; } /* 16px */
7small { font-size: 0.875rem; } /* 14px */
8
هنگام پیادهسازی طراحیها از ابزارهایی مانند Figma یا Photoshop:
در حالی که PX، REM و EM رایجترین واحدها هستند، گزینههای جایگزینی نیز وجود دارد که ارزش بررسی دارند:
تاریخچه واحدهای CSS منعکسکننده تکامل گستردهتر طراحی وب است، از طرحهای ایستا تا رویکردهای واکنشگرا و قابل دسترسی امروز.
در روزهای ابتدایی CSS، پیکسلها برتری داشتند. طراحان وب طرحهای عرض ثابت ایجاد کردند، معمولاً 640px یا 800px برای سازگاری با وضوحهای صفحه نمایش رایج. دسترسی و تنوع دستگاهها نگرانیهای عمدهای نبودند و کنترل دقیق هدف اصلی بود.
با تنوع اندازههای صفحه نمایش، طرحهای مبتنی بر درصد محبوبیت پیدا کردند. طراحان شروع به ایجاد طراحیهای انعطافپذیرتر کردند، اگرچه تایپوگرافی اغلب در واحدهای پیکسل باقی ماند. این دوره شاهد معرفی واحدهای EM در CSS بود، هرچند پذیرش آن به دلیل پیچیدگی مدیریت اندازههای فونت آبشاری محدود بود.
معرفی آیفون در سال 2007 طراحی وب را متحول کرد. ناگهان، وبسایتها نیاز به کار بر روی صفحاتی به اندازه 320px داشتند. این امر به علاقه به تکنیکهای طراحی واکنشگرا و واحدهای نسبی شتاب بخشید. محدودیتهای واحدهای EM (بهویژه اثر آبشاری آنها) در حالی که طراحیها پیچیدهتر میشدند، بیشتر نمایان شد.
مقاله تأثیرگذار ایتان مارکوت در مورد طراحی وب واکنشگرا در سال 2010 نحوه نزدیک شدن توسعهدهندگان به واحدهای CSS را تغییر داد. واحد REM در CSS3 معرفی شد و مزایای مقیاسبندی نسبی را بدون پیچیدگیهای آبشاری واحدهای EM ارائه داد. پشتیبانی مرورگرها از واحدهای REM به تدریج در این دوره افزایش یافت.
توسعه وب امروز ترکیبی از واحدها را برای اهداف مختلف در آغوش میگیرد:
این تکامل منعکسکننده انتقال وب از یک رسانه مبتنی بر سند به یک پلتفرم برنامه پیچیده است که باید در برابر بیشمار دستگاه و زمینه کار کند.
1// تبدیل بین واحدهای PX، REM و EM
2const pxToRem = (px, rootFontSize = 16) => {
3 return px / rootFontSize;
4};
5
6const pxToEm = (px, parentFontSize = 16) => {
7 return px / parentFontSize;
8};
9
10const remToPx = (rem, rootFontSize = 16) => {
11 return rem * rootFontSize;
12};
13
14const emToPx = (em, parentFontSize = 16) => {
15 return em * parentFontSize;
16};
17
18const remToEm = (rem, rootFontSize = 16, parentFontSize = 16) => {
19 return rem * (rootFontSize / parentFontSize);
20};
21
22const emToRem = (em, parentFontSize = 16, rootFontSize = 16) => {
23 return em * (parentFontSize / rootFontSize);
24};
25
26// مثال استفاده
27console.log(pxToRem(24)); // 1.5
28console.log(remToPx(1.5)); // 24
29console.log(pxToEm(24, 24)); // 1
30console.log(remToEm(2, 16, 32)); // 1
31
1:root {
2 /* اندازههای پایه فونت */
3 --root-font-size: 16px;
4 --base-font-size: var(--root-font-size);
5
6 /* مقادیر پیکسل رایج تبدیل شده به REM */
7 --space-4px: 0.25rem;
8 --space-8px: 0.5rem;
9 --space-16px: 1rem;
10 --space-24px: 1.5rem;
11 --space-32px: 2rem;
12 --space-48px: 3rem;
13
14 /* مقیاس تایپوگرافی */
15 --text-xs: 0.75rem; /* 12px */
16 --text-sm: 0.875rem; /* 14px */
17 --text-base: 1rem; /* 16px */
18 --text-lg: 1.125rem; /* 18px */
19 --text-xl: 1.25rem; /* 20px */
20 --text-2xl: 1.5rem; /* 24px */
21}
22
23/* مثال استفاده */
24.card {
25 padding: var(--space-16px);
26 margin-bottom: var(--space-24px);
27 font-size: var(--text-base);
28}
29
30.card-title {
31 font-size: var(--text-xl);
32 margin-bottom: var(--space-8px);
33}
34
1// توابع SCSS برای تبدیل واحد
2@function px-to-rem($px, $root-font-size: 16) {
3 @return ($px / $root-font-size) * 1rem;
4}
5
6@function px-to-em($px, $parent-font-size: 16) {
7 @return ($px / $parent-font-size) * 1em;
8}
9
10@function rem-to-px($rem, $root-font-size: 16) {
11 @return $rem * $root-font-size * 1px;
12}
13
14// مثال استفاده
15.element {
16 padding: px-to-rem(20);
17 margin: px-to-rem(32);
18 font-size: px-to-rem(18);
19
20 .nested {
21 // استفاده از اندازه فونت والد (18px) برای تبدیل به em
22 padding: px-to-em(16, 18);
23 margin-bottom: px-to-em(24, 18);
24 }
25}
26
1def px_to_rem(px, root_font_size=16):
2 """تبدیل پیکسلها به واحدهای REM"""
3 return px / root_font_size
4
5def rem_to_px(rem, root_font_size=16):
6 """تبدیل واحدهای REM به پیکسلها"""
7 return rem * root_font_size
8
9def px_to_em(px, parent_font_size=16):
10 """تبدیل پیکسلها به واحدهای EM"""
11 return px / parent_font_size
12
13def em_to_px(em, parent_font_size=16):
14 """تبدیل واحدهای EM به پیکسلها"""
15 return em * parent_font_size
16
17# مثال استفاده
18print(f"16px = {px_to_rem(16)}rem") # 16px = 1.0rem
19print(f"2rem = {rem_to_px(2)}px") # 2rem = 32px
20print(f"24px = {px_to_em(24, 16)}em") # 24px = 1.5em
21
واحدهای REM (ریشه em) نسبت به اندازه فونت عنصر ریشه (معمولاً عنصر <html>
) نسبی هستند، در حالی که واحدهای EM نسبت به اندازه فونت عنصر والد خود نسبی هستند. این تفاوت کلیدی به این معنی است که واحدهای REM نسبتهای ثابتی را در سرتاسر سند حفظ میکنند، در حالی که واحدهای EM میتوانند هنگام تو در تو بودن اثر آبشاری ایجاد کنند.
هیچ واحد "بهتری" برای تمام موقعیتها وجود ندارد. ترکیبی از واحدها معمولاً مؤثرترین است:
رویکرد ایدهآل استفاده از هر واحد برای بهترین عملکرد آن در یک سیستم یکپارچه است.
پیشفرض 16px بهعنوان یک استاندارد خوانایی تعیین شده است که در اکثر دستگاهها خوب عمل میکند. تحقیقات نشان داده است که متنی در حدود 16px برای خواندن بر روی صفحه نمایشها در فاصلههای دید معمولی بهینه است. این پیشفرض همچنین یک پایه خوب برای دسترسی فراهم میکند و اطمینان حاصل میکند که متن برای اکثر کاربران خیلی کوچک نیست.
بله، CSS از مقادیر منفی برای بسیاری از ویژگیها با هر نوع واحد پشتیبانی میکند. حاشیههای منفی، جابجاییها و موقعیتها موارد استفاده رایج برای مقادیر منفی هستند. مبدل ما مقادیر منفی را بهدرستی برای تمام نوعهای واحد مدیریت میکند.
واحدهای EM هنگام تو در تو بودن ترکیب میشوند. بهعنوان مثال:
1.parent {
2 font-size: 16px;
3}
4.child {
5 font-size: 1.5em; /* 24px (16px × 1.5) */
6}
7.grandchild {
8 font-size: 1.5em; /* 36px (24px × 1.5) */
9}
10
این اثر ترکیبی میتواند برای ایجاد طراحیهای متناسب مفید باشد اما نیاز به مدیریت دقیق دارد تا از مقیاسبندی ناخواسته جلوگیری شود.
مرورگرها با مقادیر زیرپیکسل بهطور متفاوتی برخورد میکنند. برخی از مرورگرها به نزدیکترین پیکسل گرد میکنند، در حالی که برخی دیگر از رندرینگ زیرپیکسل برای مقیاسگذاری نرمتر پشتیبانی میکنند. این میتواند گاهی اوقات باعث ایجاد تفاوتهای جزئی در مرورگرها شود، بهویژه با مقادیر کوچک REM/EM یا هنگام استفاده از تغییرات. برای اکثر موارد استفاده، این تفاوتها ناچیز هستند.
هیچ تفاوت عملکرد قابل توجهی بین استفاده از پیکسلها، REM یا واحدهای EM در مرورگرهای مدرن وجود ندارد. انتخاب واحدها باید بر اساس نیازهای طراحی، رفتار واکنشگرا و نیازهای دسترسی باشد نه ملاحظات عملکرد.
"CSS Values and Units Module Level 3." W3C Recommendation. https://www.w3.org/TR/css-values-3/
مارکوت، ایتان. "طراحی وب واکنشگرا." A List Apart، 25 مه 2010. https://alistapart.com/article/responsive-web-design/
رتر، ریچارد. "عناصر سبک تایپوگرافیک در وب." http://webtypography.net/
"واحدهای CSS." MDN Web Docs. https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Values_and_units
"پیکسلهای CSS در مقابل پیکسلهای فیزیکی." Stack Overflow Documentation. https://stackoverflow.com/questions/8785643/what-exactly-is-the-difference-between-css-pixels-and-device-pixels
"طولهای CSS." CSS-Tricks. https://css-tricks.com/the-lengths-of-css/
"استفاده از متغیرهای CSS سفارشی." MDN Web Docs. https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties
"درک و استفاده از واحدهای rem در CSS." SitePoint. https://www.sitepoint.com/understanding-and-using-rem-units-in-css/
دیگر با تبدیلهای دستی واحد CSS دست و پنجه نرم نکنید و بگذارید مبدل واحدهای PX، REM و EM ما کار را برای شما انجام دهد. چه در حال ساخت یک وبسایت واکنشگرا باشید، چه در حال ایجاد یک سیستم طراحی یا فقط در حال یادگیری در مورد واحدهای CSS، این ابزار به شما زمان میدهد و دقت را تضمین میکند. مقادیر خود را اکنون وارد کنید تا ببینید چگونه تبدیل واحد میتواند آسان باشد!
کشف ابزارهای بیشتری که ممکن است برای جریان کاری شما مفید باشند