เครื่องมือแปลงหน่วย PX เป็น REM เป็น EM – เครื่องคำนวณหน่วย CSS ฟรี
แปลงพิกเซลเป็นหน่วย REM และ EM ได้ทันที เครื่องมือแปลงหน่วย CSS สำหรับการออกแบบเว็บแบบ Responsive ที่รองรับขนาดฟอนต์แบบกำหนดเองและคำนวณแบบเรียลไทม์เพื่อผลลัพธ์ที่แม่นยำ
เครื่องมือแปลงหน่วย PX, REM และ EM
แปลงระหว่างหน่วยพิกเซล (PX), รูท เอ็ม (REM) และ เอ็ม (EM) ป้อนค่าในช่องใดก็ได้เพื่อดูค่าเทียบเคียงในหน่วยอื่น
สูตรการแปลง
- PX เป็น REM: ค่าใน px ÷ ขนาดฟอนต์หลัก
- PX เป็น EM: ค่าใน px ÷ ขนาดฟอนต์องค์ประกอบหลัก
- REM เป็น PX: ค่าใน rem × ขนาดฟอนต์หลัก
- EM เป็น PX: ค่าใน em × ขนาดฟอนต์องค์ประกอบหลัก
เอกสารประกอบการใช้งาน
ตัวแปลงหน่วย PX, REM และ EM: อธิบายหน่วยต่างๆ ใน CSS อย่างละเอียด
ทำไมการแปลงหน่วย CSS จึงสำคัญสำหรับการพัฒนาเว็บสมัยใหม่
เมื่อคุณกำลังสร้างเว็บไซต์ที่ตอบสนอง หนึ่งในความท้าทายที่พบบ่อยที่สุดคือการแปลงข้อกำหนดการออกแบบให้เป็น CSS ที่ยืดหยุ่นและขยายได้ คุณอาจเคยเห็นการออกแบบใน Figma ที่มี "padding: 24px" และสงสัยว่าควรเก็บเป็นพิกเซลหรือแปลงเป็นหน่วย rem การตัดสินใจนี้ส่งผลกระทบต่อทุกอย่าง ตั้งแต่การเข้าถึงไปจนถึงวิธีที่เลย์เอาต์ของคุณตอบสนองเมื่อผู้ใช้ปรับขนาดฟอนต์ของเบราว์เซอร์
เครื่องมือแปลงหน่วย PX, REM และ EM นี้ช่วยให้คุณแปลงระหว่างหน่วย CSS สามหน่วยหลักได้อย่างรวดเร็ว พิกเซลให้การควบคุมที่แม่นยำ—เหมาะสำหรับเส้นขอบและรายละเอียดเล็ก ๆ หน่วย REM จะปรับขนาดตามขนาดฟอนต์ราก ทำให้เหมาะสำหรับระยะห่างและการจัดพิมพ์ที่สม่ำเสมอทั่วทั้งไซต์ หน่วย EM จะปรับขนาดสัมพันธ์กับองค์ประกอบหลัก เหมาะสำหรับการสร้างคอมโพเนนต์ที่เป็นอิสระและรักษาสัดส่วน
ส่วนที่ยุ่งยาก? การแปลงระหว่างหน่วยต้องคำนึงถึงขนาดฟอนต์ ซึ่งแตกต่างกันระหว่างองค์ประกอบราก และคอมโพเนนต์แต่ละอัน ข้อผิดพลาดทั่วไปที่ฉันเห็นนักพัฒนาทำคือการใช้พิกเซลทุกที่เพราะดูเหมือนง่ายกว่า แม้ว่าจะใช้งานได้ในตอนแรก แต่จะสร้างปัญหาการเข้าถึงเมื่อผู้ใช้เพิ่มขนาดฟอนต์เริ่มต้นของเบราว์เซอร์—เลย์เอาต์จะไม่ปรับขนาดสัดส่วนตามไปด้วย
ทำความเข้าใจหน่วย CSS: PX, REM และ EM
พิกเซล (PX) คืออะไร?
พิกเซล (PX) เป็นหน่วย CSS ที่ตรงไปตรงมามากที่สุด—สิ่งที่คุณระบุคือสิ่งที่คุณได้รับ พิกเซลใน CSS เป็นหน่วยอ้างอิง ไม่จำเป็นต้องเป็นพิกเซลทางกายภาพของหน้าจอ (โดยเฉพาะบนหน้าจอความละเอียดสูงเช่น Retina) พวกมีขนาดคงที่ที่ไม่เปลี่ยนแปลงตามขนาดฟอนต์หรือองค์ประกอบหลัก
1.element {
2 width: 200px;
3 font-size: 16px;
4 margin: 10px;
5}
6เมื่อพิกเซลทำงานได้ดี:
- เส้นขอบและตัวแบ่ง (เส้นขอบ 1px หรือ 2px คงความคมชัด)
- รายละเอียดเล็ก ๆ ที่ไม่ควรปรับขนาด
- คอนเทนเนอร์ความกว้างคงที่เมื่อต้องการขนาดที่แน่นอน
- ขนาดไอคอนเมื่อทำงานกับสไปรต์ชีตที่ต้องการความแม่นยำระดับพิกเซล
ข้อควรระวัง: พิกเซลไม่เคารพการตั้งค่าของผู้ใช้ หากใครเพิ่มขนาดฟอนต์เริ่มต้นของเบราว์เซอร์จาก 16px เป็น 20px เพื่อความสามารถในการอ่าน เค้าเลย์เอาต์แบบพิกเซลจะไม่เปลี่ยนแปลง ซึ่งอาจทำให้ข้อความล้นคอนเทนเนอร์หรือสร้างพื้นที่ว่างที่แน่นอัด
REM คืออะไร?
REM (root em) เป็นหน่วยที่ปรับขนาดตามขนาดฟอนต์ขององค์ประกอบราก—ปกติคือองค์ประกอบ <html> เบราว์เซอร์ส่วนใหญ่ค่าเริ่มต้นคือ 16px ดังนั้น 1rem เท่ากับ 16px เว้นแต่คุณจะเปลี่ยนขนาดฟอนต์ราก นี่คือสิ่งที่ทำให้ REM ทรงพลัง: พวกมีการปรับขนาดที่สอดคล้องและคาดเดาได้ทั่วทั้งไซต์
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:
- การปรับขนาดสอดคล้อง: เปลี่ยนขนาดฟอนต์ราก และทุกอย่างจะปรับขนาดสัดส่วนตามกัน
- การปฏิบัติตามหลักการเข้าถึง: เมื่อผู้ใช้ปรับขนาดฟอนต์เบราว์เซอร์ เค้าเลย์เอาต์แบบ REM จะปรับตัวโดยอัตโนมัติ
- การบำรุงรักษาง่าย: อัปเดตค่าระยะห่างในที่เดียว แทนการค้นหาค่าพิกเซลทั่วไป
- ไม่มีปัญหาการซ้อนทับ: ไม่เหมือน EM หน่วย REM ไม่ทับซ้อนเมื่อองค์ประกอบซ้อนกัน
เคล็ดลับมืออาชีพจากประสบการณ์: ตั้งขนาดฟอนต์รากเป็น 62.5% (ซึ่งทำให้ 1rem = 10px ที่ฐาน 16px) นี่ทำให้การคำนวณทางคณิตศาสตร์ง่ายขึ้น—1.6rem = 16px, 2.4rem = 24px เพียงจำให้ตั้งขนาดฟอนต์ของ body กลับเป็น 1.6rem เพื่อให้ข้อความเริ่มต้นเป็น 16px ตามข้อกำหนด CSS Values and Units ของ W3C หน่วย REM จะอ้างอิงถึงองค์ประกอบรากเสมอ ทำให้คาดเดาได้ในเค้าเลย์เอาต์ที่ซับซ้อน
EM คืออะไร?
หน่วย EM ปรับขนาดสัมพัทธ์กับขนาดฟอนต์ขององค์ประกอบหลัก ทำให้มีความตระหนักถึงบริบท พฤติกรรมนี้แตกต่างจากหน่วย REM ซึ่งอ้างอิงรากเสมอ ชื่อ "em" มาจากการพิมพ์—เดิมทีหมายถึงความกว้างของตัวอักษรตัวใหญ่ "M" ในแบบอักษรที่กำหนด
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 โดดเด่น:
- การออกแบบแบบคอมโพเนนต์: การเติมและระยะห่างที่ปรับขนาดตามฟอนต์
- การพิมพ์: ความสูงบรรทัดทำงานได้ดีกับค่าที่ไม่มีหน่วยหรือ em (เช่น
line-height: 1.5em) - โมดูลที่ครอบคลุมตัวเอง: ปุ่มหรือการ์ดที่รักษาสัดส่วนเมื่อขนาดฟอนต์เปลี่ยน
- มีเดียควอรี: ตามเอกสาร MDN Web Docs หน่วย EM ในมีเดียควอรีอ้างอิงขนาดฟอนต์เริ่มต้นของเบราว์เซอร์ ไม่ใช่องค์ประกอบหลัก
กับดักการซ้อนทับ: นี่คือจุดที่นักพัฒนามักติดกับดัก หน่วย EM จะลดหลั่นผ่านองค์ประกอบที่ซ้อนกัน ซึ่งอาจสร้างผลลัพธ์ที่ไม่คาดคิด:
1.level-1 { font-size: 1.2em; } /* 19.2px ถ้าหลักเป็น 16px */
2.level-2 { font-size: 1.2em; } /* 23.04px (19.2px × 1.2) */
3.level-3 { font-size: 1.2em; } /* 27.65px (23.04px × 1.2) */
4หลังจากสามระดับของการซ้อนกัน ข้อความของคุณจะโตขึ้น 73% แทนที่จะเป็น 20% ที่ตั้งใจ นี่เป็นเหตุผลที่นักพัฒนาหลายคนหันไปใช้หน่วย REM สำหรับการพิมพ์เมื่อการสนับสนุนเบราว์เซอร์ดีขึ้น
สูตรการแปลงและการคำนวณ
ความเข้าใจความสัมพันธ์ทางคณิตศาสตร์ระหว่างหน่วย PX, REM และ EM เป็นสิ่งสำคัญสำหรับการแปลงที่แม่นยำ ต่อไปนี้คือสูตรที่ใช้ในตัวแปลงของเรา:
การแปลง PX เป็น REM
ในการแปลงพิกเซลเป็นหน่วย REM ให้หารค่าพิกเซลด้วยขนาดฟอนต์ราก:
ตัวอย่าง โดยใช้ขนาดฟอนต์รากเริ่มต้นที่ 16px:
- 16px = 1rem
- 24px = 1.5rem
- 8px = 0.5rem
การแปลง PX เป็น EM
ในการแปลงพิกเซลเป็นหน่วย EM ให้หารค่าพิกเซลด้วยขนาดฟอนต์ของธาตุแม่:
ตัวอย่าง โดยใช้ขนาดฟอนต์ของธาตุแม่ที่ 16px:
- 16px = 1em
- 24px = 1.5em
- 8px = 0.5em
การแปลง REM เป็น PX
ในการแปลงหน่วย REM เป็นพิกเซล ให้คูณค่า REM กับขนาดฟอนต์ราก:
ตัวอย่าง โดยใช้ขนาดฟอนต์รากเริ่มต้นที่ 16px:
- 1rem = 16px
- 1.5rem = 24px
- 0.5rem = 8px
การแปลง EM เป็น PX
ในการแปลงหน่วย EM เป็นพิกเซล ให้คูณค่า EM กับขนาดฟอนต์ของธาตุแม่:
ตัวอย่าง โดยใช้ขนาดฟอนต์ของธาตุแม่ที่ 16px:
- 1em = 16px
- 1.5em = 24px
- 0.5em = 8px
การแปลง REM เป็น EM
ในการแปลงหน่วย REM เป็นหน่วย EM ต้องคำนึงถึงทั้งขนาดฟอนต์รากและขนาดฟอนต์ของธาตุแม่:
หากทั้งขนาดฟอนต์รากและธาตุแม่เท่ากัน (เช่น 16px) แล้ว 1rem = 1em
การแปลง EM เป็น REM
ในการแปลงหน่วย EM เป็นหน่วย REM ให้ใช้สูตรต่อไปนี้:
อีกครั้ง หากขนาดฟอนต์ทั้งสองเท่ากัน แล้ว 1em = 1rem
วิธีใช้เครื่องมือแปลงหน่วย PX เป็น REM เป็น EM
การแปลงค่าอย่างแม่นยำทำได้ง่ายด้วยเครื่องมือนี้ กุญแจสำคัญคือการเข้าใจขนาดฟอนต์ที่ใช้สำหรับสถานการณ์เฉพาะของคุณ
คู่มือเริ่มต้นอย่างรวดเร็ว
- ป้อนค่าของคุณ ในช่องใดก็ได้—พิกเซล, REM, หรือ EM
- ตรวจสอบผลลัพธ์ ทันทีในสองหน่วยอื่น
- ปรับขนาดฟอนต์ ให้ตรงกับโปรเจกต์ของคุณ:
- ขนาดฟอนต์ราก: สิ่งที่คุณตั้งค่าบน
<html>(โดยปกติ 16px) - ขนาดฟอนต์ของพาเรนต์: ขนาดฟอนต์ของพาเรนต์ของอิลิเมนต์เฉพาะ (โดยปกติ 16px เช่นกัน)
- ขนาดฟอนต์ราก: สิ่งที่คุณตั้งค่าบน
- คัดลอกค่า ที่คุณต้องการโดยใช้ปุ่มคัดลอก
รับผลลัพธ์ที่แม่นยำสำหรับโปรเจกต์ของคุณ
เครื่องมือแปลงค่าเริ่มต้นที่ 16px สำหรับทั้งขนาดฟอนต์ราก และพาเรนต์เนื่องจากเป็นมาตรฐานของเบราว์เซอร์ แต่สิ่งที่สำคัญคือ: โปรเจกต์ของคุณอาจใช้ค่าที่แตกต่างกัน
ค้นหาขนาดฟอนต์ราก: เปิดเครื่องมือนักพัฒนาของเบราว์เซอร์ ตรวจสอบอิลิเมนต์ <html> และตรวจสอบขนาดฟอนต์ที่คำนวณ หากคุณตั้งค่า html { font-size: 62.5%; } ขนาดฟอนต์รากของคุณจะเป็น 10px (62.5% ของ 16px)
ค้นหาขนาดฟอนต์พาเรนต์: สำหรับการแปลง EM คุณต้องทราบขนาดฟอนต์ของอิลิเมนต์พาเรนต์เฉพาะที่คุณกำลังใช้สไตล์ ตรวจสอบอิลิเมนต์นั้นในเครื่องมือนักพัฒนาเพื่อดูขนาดฟอนต์ที่คำนวณ หากพาเรนต์มี font-size: 1.2rem และรากของคุณเป็น 16px ให้ตั้งขนาดฟอนต์พาเรนต์เป็น 19.2px เพื่อการคำนวณ EM ที่แม่นยำ
สถานการณ์การแปลงทั่วไป
จากการออกแบบสู่โค้ด: ไฟล์ Figma ของคุณแสดง padding: 24px คุณต้องการใช้หน่วย REM เพื่อการเข้าถึงที่ดีขึ้น ป้อน 24 ในช่อง PX และคุณจะเห็นว่าเท่ากับ 1.5rem (สมมติว่ารากเป็น 16px)
สร้างคอมโพเนนต์ปุ่ม: คุณต้องการให้การเติมพื้นที่ขยายตามขนาดฟอนต์ของปุ่ม หากปุ่มมี font-size: 1.125rem (18px) ให้ตั้งขนาดฟอนต์พาเรนต์เป็น 18 ป้อนการเติมพื้นที่ในพิกเซลที่คุณต้องการ และใช้ค่า EM ที่ได้
การพิมพ์แบบตอบสนอง: คุณกำลังสร้างส่วนหัวที่มีขนาด 32px บนเดสก์ท็อป ป้อน 32px เพื่อดูว่าเป็น 2rem ซึ่งจะขยายขนาดได้อย่างเหมาะสมเมื่อผู้ใช้ปรับขนาดฟอนต์ของเบราว์เซอร์
การแปลงหน่วย CSS ในกรณีใช้งานจริง
การรู้สูตรคือเรื่องหนึ่ง—การนำไปใช้อย่างมีประสิทธิภาพในโค้ดการผลิตคือคนละเรื่อง นี่คือจุดที่การแปลงหน่วยสร้างความแตกต่างที่เป็นรูปธรรมในโปรเจ็คของคุณ
การแปลงไฟล์ดีไซน์เป็น CSS แบบตอบสนอง
คุณได้รับดีไซน์จาก Figma ที่ระบุทุกอย่างด้วยพิกเซล องค์ประกอบการ์ดแสดง:
- การเติมขอบ: 24px
- ขนาดฟอนต์หัวเรื่อง: 28px
- ขนาดฟอนต์เนื้อหา: 16px
- ระยะห่างด้านล่าง: 40px
การแปลงเป็นหน่วย REM (สมมติฐานราก 16px) ได้ดังนี้:
1.card {
2 padding: 1.5rem; /* 24px → 1.5rem */
3 margin-bottom: 2.5rem; /* 40px → 2.5rem */
4}
5
6.card__heading {
7 font-size: 1.75rem; /* 28px → 1.75rem */
8}
9
10.card__body {
11 font-size: 1rem; /* 16px → 1rem */
12}
13ประโยชน์คืออะไร? เมื่อผู้ใช้ที่มีความบกพร่องทางการมองเห็นเพิ่มขนาดฟอนต์เริ่มต้นของเบราว์เซอร์จาก 16px เป็น 20px การ์ดของคุณจะปรับขนาดสัดส่วนตามกัน การเติมขอบ ระยะห่าง และข้อความจะขยายขึ้น 25% โดยรักษาความสมดุลทางภาพ หากใช้ค่าพิกเซล เฉพาะข้อความจะขยาย ทำให้เลย์เอาต์เสีย
[ส่วนที่เหลือของการแปลความจะดำเนินต่อ...]
วิวัฒนาการของหน่วย CSS: จากแบบคงที่สู่แบบยืดหยุ่น
การเปลี่ยนจากพิกเซลไปสู่หน่วยสัมพัทธ์สะท้อนถึงการเดินทางของเว็บจากเอกสารคงที่ไปสู่แอปพลิเคชันที่ตอบสนอง ความเข้าใจในประวัติศาสตร์นี้อธิบายเหตุผลที่เราแปลงหน่วยในปัจจุบัน
ยุคพิกเซลที่สมบูรณ์แบบ (ค.ศ. 1990-2000)
เว็บไซต์ในยุคแรกถูกออกแบบสำหรับความกว้างหน้าจอเฉพาะ—640px จากนั้นก็ 800px แล้วก็ 1024px เค้าโครง CSS ใช้พิกเซลโดยเด็ดขาดเพราะนักออกแบบสิ่งพิมพ์เข้าใจเช่นนั้น ไซต์ดูเหมือนกันทั้งหมดในเบราว์เซอร์ (เมื่อพวกมันทำงาน) แต่แตกหักสนิทบนขนาดหน้าจอที่ไม่คาดคิด เว็บถูกปฏิบัติเหมือนสิ่งพิมพ์: คงที่ ควบคุมได้ และคาดเดาได้
หน่วย EM มีอยู่ในข้อกำหนด CSS ซึ่งสืบทอดมาจากการพิมพ์ แต่นักพัฒนาส่วนใหญ่หลีกเลี่ยง พฤติกรรมการสะสมทำให้สับสน และไม่มีอุปกรณ์มือถือบังคับให้เราคิดอย่างยืดหยุ่น
การปลุกตื่นของมือถือ (ค.ศ. 2007-2010)
ไอโฟนเปลี่ยนทุกอย่าง กะทันหัน มีการเข้าชมจากหน้าจอขนาด 320px เป็นสัดส่วนที่สำคัญ การซูมแบบหนีบช่วยได้ แต่เว็บไซต์ที่ออกแบบสำหรับเดสก์ท็อป 1024px ก็ยังน่าปวดหัวบนมือถือ
บทความของ Ethan Marcotte ปี 2010 เกี่ยวกับการออกแบบเว็บแบบตอบสนอง ทำให้แนวทางใหม่ชัดเจน: กริดแบบไหล่ ภาพที่ยืดหยุ่น และมีเดียควอรี่ หน่วยสัมพัทธ์กลายเป็นสิ่งจำเป็น ไม่ใช่ทางเลือก แต่พฤติกรรมการสืบทอดของ EM ก่อให้เกิดบักในเค้าโครงที่ซับซ้อน
หน่วย REM ช่วยแก้ปัญหา (ค.ศ. 2010-ปัจจุบัน)
CSS3 แนะนำหน่วย REM ราวปี 2010 แก้ปัญหาหลักของ EM: การสะสม REM ให้การปรับขนาดสัมพัทธ์โดยไม่มีความซับซ้อนของการสืบทอด Internet Explorer 9 เพิ่มการสนับสนุนในปี 2011 และภายในปี 2015 หน่วย REM กลายเป็นกระแสหลัก
ในปัจจุบัน แนวปฏิบัติที่ดีที่สุดผสมผสานหน่วยอย่างมียุทธศาสตร์ REM สำหรับการพิมพ์และระยะห่าง EM สำหรับสัดส่วนภายในส่วนประกอบ พิกเซลสำหรับรายละเอียดที่ละเอียด ฟังก์ชัน CSS สมัยใหม่เช่น clamp() ผสมผสานหน่วยเหล่านี้อย่างพลวัต สร้างเค้าโครงที่ปรับตัวเข้ากับบริบทใดๆ
วิวัฒนาการนี้—จากพิกเซลแข็งกระด้างสู่หน่วยสัมพัทธ์ที่ยืดหยุ่น—สะท้อนความคาดหวังของผู้ใช้ที่เปลี่ยนจาก "เว็บไซต์ควรดูเหมือนกันทุกที่" เป็น "เว็บไซต์ควรทำงานได้ดีทุกที่"
ตัวอย่างโค้ดสำหรับการแปลงหน่วย
ฟังก์ชันการแปลงหน่วยใน JavaScript
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คุณสมบัติ CSS แบบกำหนดเองสำหรับการแปลงหน่วย
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มิกซิน SCSS สำหรับการแปลงหน่วย
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ตัวแปลงหน่วยใน Python
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ข้อผิดพลาดทั่วไปเมื่อแปลงหน่วย CSS
หลังจากตรวจสอบโค้ดเบสหลายร้อยชุด ฉันสังเกตเห็นข้อผิดพลาดเหล่านี้เกิดขึ้นซ้ำ ๆ การหลีกเลี่ยงพวกมันจะช่วยประหยัดเวลาในการแก้จุดบกพร่อง
ข้อผิดพลาดที่ 1: ไม่คำนึงถึงขนาดฟอนต์รากที่กำหนดเอง
ปัญหา: คุณแปลง 24px เป็น 1.5rem โดยสมมติว่าขนาดฟอนต์รากเริ่มต้นคือ 16px แต่โปรเจ็กต์ของคุณใช้ html { font-size: 62.5%; } ซึ่งทำให้รากมีขนาด 10px องค์ประกอบของคุณจะมีขนาด 15px แทน 24px
วิธีแก้: ตรวจสอบขนาดฟอนต์รากที่แท้จริงของโปรเจ็กต์เสมอก่อนทำการแปลง ตั้งค่าขนาดฟอนต์รากของตัวแปลงให้ตรงกับความเป็นจริงของโปรเจ็กต์
ข้อผิดพลาดที่ 2: การใช้หน่วย EM สำหรับการพิมพ์ในคอมโพเนนต์ที่ซ้อนกัน
ปัญหา: คุณสร้างคอมโพเนนต์การ์ดด้วย font-size: 1.2em สำหรับส่วนหัว ใช้งานได้ดี จากนั้นคุณวางการ์ดไว้ในการ์ดอื่น และทันใดนั้นส่วนหัวของการ์ดภายในกลายเป็น 1.44em (1.2 × 1.2) แทน 1.2em
วิธีแก้: ใช้หน่วย REM สำหรับการพิมพ์เว้นแต่คุณต้องการพฤติกรรมการซ้อนกัน สงวนหน่วย EM สำหรับระยะห่างที่ควรปรับขนาดตามขนาดฟอนต์ท้องถิ่น
ข้อผิดพลาดที่ 3: การแปลงความกว้างเส้นขอบเป็น REM
ปัญหา: คุณแปลง border: 1px เป็น border: 0.0625rem เพื่อความสอดคล้อง เมื่อผู้ใช้ซูมหรือเปลี่ยนขนาดฟอนต์ เส้นขอบของคุณจะดูหนาและไม่สวยงาม
วิธีแก้: คงเส้นขอบไว้ในพิกเซล เส้นขอบที่เล็กกว่าพิกเซล (0.5px) มีการรองรับที่ไม่สอดคล้องกันในเบราว์เซอร์ และเส้นขอบไม่จำเป็นต้องปรับขนาดตามข้อความ
ข้อผิดพลาดที่ 4: ลืมว่าหน่วยในมีเดียคิวรีอ้างอิงการตั้งค่าของผู้ใช้
ปัญหา: คุณเขียน @media (min-width: 768px) สำหรับจุดแบ่งแท็บเล็ต ผู้ใช้ที่ตั้งขนาดฟอนต์เริ่มต้นใหญ่ขึ้นจะไม่ได้รับเลย์เอาต์แท็บเล็ตเมื่อควรจะได้
วิธีแก้: ใช้หน่วย EM หรือ REM ในมีเดียคิวรี: @media (min-width: 48em) นี่จะเคารพการตั้งค่าฟอนต์ของผู้ใช้ ตามที่แนะนำในเอกสาร MDN เกี่ยวกับการออกแบบที่ตอบสนอง
ข้อผิดพลาดที่ 5: การผสมวิธีการคำนวณ
ปัญหา: Sass ของคุณใช้วิธีการคำนวณหนึ่ง JavaScript ใช้อีกวิธีหนึ่ง และการคำนวณในใจของคุณใช้วิธีที่สาม ผลลัพธ์ไม่ตรงกัน ทำให้เกิดความยุ่งยากในการปรับแต่ง
วิธีแก้: ใช้ตัวแปลงนี้เป็นแหล่งข้อมูลที่เชื่อถือได้ ทำบุ๊กมาร์กไว้ อ้างอิงระหว่างการตรวจสอบโค้ด และตรวจสอบให้แน่ใจว่าทุกคนในทีมใช้วิธีการแปลงเดียวกัน
คำถามที่พบบ่อย
อะไรคือความแตกต่างระหว่างหน่วย REM และ EM?
จุดอ้างอิงแตกต่างกันโดยสิ้นเชิง หน่วย REM จะดูที่ขนาดฟอนต์ของ <html> เสมอ—ไม่ว่าองค์ประกอบจะซ้อนกันลึกเพียงใด 1rem จะเท่ากับค่าที่คำนวณได้เหมือนเดิม หน่วย EM จะดูที่ขนาดฟอนต์ขององค์ประกอบแม่ทันที ซึ่งสร้างผลกระทบแบบลูกโซ่
คิดแบบนี้: หากคุณซ้อน <div> สามชั้น แต่ละชั้นมี font-size: 1.2em ข้อความใน div ชั้นในสุดจะมีขนาดใหญ่กว่าที่คาดไว้เพราะแต่ละระดับคูณทับกัน ด้วย font-size: 1.2rem ที่แต่ละระดับ div ทั้งสามจะมีขนาดฟอนต์เหมือนกันเพราะอ้างอิงจากราก
นี่คือเหตุผลที่ REM เป็นที่นิยมสำหรับการจัดพิมพ์เมื่อการสนับสนุนของเบราว์เซอร์ดีขึ้น—มันขจัดภาระทางความคิดในการติดตามห่วงโซ่การสืบทอด
หน่วย CSS แบบใดดีที่สุดสำหรับการออกแบบเว็บแบบตอบสนอง?
ไม่มีหน่วยเดียวที่ชนะในทุกสถานการณ์ การออกแบบที่ตอบสนองที่ดีที่สุดจะผสมผสานหน่วยอย่างมียุทธศาสตร์:
ใช้ REM สำหรับ: ระยะห่างทั่วไป มาตราส่วนการพิมพ์ ช่องว่างขององค์ประกอบ และการวัดใดๆ ที่ควรปรับขนาดตามการตั้งค่าฟอนต์ของผู้ใช้
ใช้ EM สำหรับ: ระยะห่างภายในองค์ประกอบ (การเติมปุ่ม ช่องว่างการ์ด) มีเดียควอรี (เคารพการตั้งค่าของผู้ใช้) และองค์ประกอบที่ควรปรับขนาดตามบริบทเฉพาะ
ใช้พิกเซลสำหรับ: เส้นขอบ 1px (ดูคมชัด) เงาของกล่อง (เงาที่ละเอียดต้องการความแม่นยำ) และความกว้างเส้นของ SVG
ใช้เปอร์เซ็นต์หรือหน่วยวิวพอร์ตสำหรับ: ความกว้างคอนเทนเนอร์ ส่วนที่มีความสูงเต็ม
ฉันเคยเห็นฐานโค้ดที่พยายามใช้หน่วยเดียวทั่วทั้งหน้า—มันสร้างปัญหาในการบำรุงรักษาเสมอ ใช้แต่ละหน่วยที่ให้ประโยชน์มากที่สุด
[การแปลต่อเนื่อง...]
การอ้างอิงและการอ่านเพิ่มเติม
-
"โมดูลค่าและหน่วย CSS ระดับ 3" คำแนะนำของ W3C https://www.w3.org/TR/css-values-3/
-
มาร์กอตต์, เอแธน "การออกแบบเว็บแบบตอบสนอง" A List Apart, 25 พฤษภาคม 2553 https://alistapart.com/article/responsive-web-design/
-
รัตเตอร์, ริชาร์ด "องค์ประกอบของรูปแบบตัวอักษรที่ใช้กับเว็บ" http://webtypography.net/
-
"หน่วย CSS" เอกสาร MDN Web https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Values_and_units
-
"พิกเซล CSS กับพิกเซลทางกายภาพ" เอกสาร Stack Overflow 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 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 อย่างถูกต้อง
การแปลงหน่วย CSS ด้วยตนเองเป็นเรื่องน่าเบื่อและมีโอกาสผิดพลาดสูง คุณกำลังทำการคำนวณทางคณิตศาสตร์ในใจ สงสัยในการคำนวณ และหวังว่าจะกำหนดขนาดฟอนต์ได้ถูกต้อง เครื่องมือแปลง PX เป็น REM เป็น EM นี้จะขจัดปัญหาเหล่านั้น
ป้อนค่าพิกเซลจากไฟล์ดีไซน์ ปรับขนาดฟอนต์ให้ตรงกับการกำหนดค่าโปรเจ็กต์ และรับค่า REM และ EM ที่ถูกต้องทันที คัดลอกไปใช้ในโค้ดได้เลย ไม่ว่าคุณจะกำลังใช้งานระบบดีไซน์ใหม่ ปรับปรุงโค้ดเดิมให้ใช้หน่วยสัมพัทธ์ หรือแค่พยายามทำความเข้าใจความสัมพันธ์ของหน่วยเหล่านี้ เครื่องมือนี้จะจัดการการคำนวณให้ เพื่อให้คุณมุ่งเน้นไปที่การสร้างสรรค์
สำหรับนักพัฒนาที่ทำงานบนไซต์ที่ต้องคำนึงถึงการเข้าถึง เครื่องมือนี้ช่วยให้มั่นใจว่าเลย์เอาต์ของคุณปรับขนาดได้อย่างถูกต้องเมื่อผู้ใช้ปรับค่าความชอบฟอนต์—ซึ่งเป็นข้อกำหนดตาม WCAG 2.1 ระดับ AA สำหรับผู้สร้างไลบรารีคอมโพเนนต์ จะช่วยทำให้เข้าใจว่าค่า EM แบบใดสร้างสัดส่วนที่ต้องการ สำหรับทุกคนที่แปลงดีไซน์จาก Figma เป็น CSS ในการผลิต จะช่วยเพิ่มความเร็วในขั้นตอนการแปลงอย่างมาก
สูตรคำนวณอ้างอิงจากข้อกำหนดโมดูลค่าและหน่วย CSS ของ W3C เพื่อให้มั่นใจว่าการแปลงสอดคล้องกับวิธีที่เบราว์เซอร์คำนวณค่าเหล่านี้จริง