ฉันอยากจะชื่นชมคำตอบของ josh3736 ที่ให้บริบททางประวัติศาสตร์ที่ยอดเยี่ยม ในขณะที่มันพูดชัดแจ้งได้ดีแนว CSS มีการเปลี่ยนแปลงในเกือบห้าปีนับตั้งแต่คำถามนี้ถูกถาม เมื่อถูกถามคำถามนี้px
เป็นคำตอบที่ถูกต้อง แต่ไม่เป็นจริงอีกต่อไปในวันนี้
tl; dr:ใช้rem
ภาพรวมหน่วย
px
หน่วยในอดีตมักแสดงถึงหนึ่งพิกเซลของอุปกรณ์ ด้วยอุปกรณ์ที่มีความหนาแน่นของพิกเซลสูงกว่าและสูงกว่าจึงไม่สามารถใช้กับอุปกรณ์ได้หลายชนิดเช่นจอแสดงผล Retina ของ Apple
rem
หน่วยแสดงขนาดr oot em มันเป็นสิ่งที่ตรงกับfont-size
:root
ในกรณีของ HTML มันเป็น<html>
องค์ประกอบ สำหรับ SVG เป็น<svg>
องค์ประกอบ เริ่มต้นfont-size
ในเบราว์เซอร์ทุก * 16px
คือ
ในขณะที่เขียนที่rem
ได้รับการสนับสนุนโดยประมาณ 98% ของผู้ใช้ หากคุณกำลังกังวลเกี่ยวกับที่อื่น ๆ 2% ผมจะเตือนคุณว่าคำสั่งสื่อจะยังได้รับการสนับสนุนโดยประมาณ 98% ของผู้ใช้
เกี่ยวกับการใช้ px
ตัวอย่าง CSS ส่วนใหญ่บนอินเทอร์เน็ตใช้px
ค่าเพราะเป็นมาตรฐานจริง pt
, in
และความหลากหลายของหน่วยงานอื่น ๆจะถูกนำมาใช้ในทางทฤษฎี แต่พวกเขาไม่ได้จัดการกับค่าเล็ก ๆ เดียวกับคุณได้อย่างรวดเร็วจะต้องรีสอร์ทเพื่อเศษส่วนซึ่งเป็นอีกต่อไปที่ชนิดและยากที่จะเหตุผลเกี่ยวกับ
หากคุณต้องการเส้นขอบแบบบางpx
คุณสามารถใช้1px
โดยpt
คุณต้องใช้0.75pt
เพื่อผลลัพธ์ที่สอดคล้องกันและนั่นก็ไม่สะดวก
เกี่ยวกับการใช้ rem
rem
ค่าเริ่มต้นของ16px
ไม่ใช่ข้อโต้แย้งที่แข็งแกร่งมากสำหรับการใช้งาน เขียน0.0625rem
เป็นที่เลวร้ายยิ่งกว่าการเขียน0.75pt
ดังนั้นทำไมจะใช้ใครrem
?
มีประโยชน์สองส่วนrem
เหนือหน่วยอื่น ๆ
- ความพึงพอใจของผู้ใช้เป็นที่เคารพนับถือ
- คุณสามารถเปลี่ยน
px
ค่าที่ชัดเจนของrem
สิ่งที่คุณต้องการ
เคารพการตั้งค่าของผู้ใช้
การซูมเบราว์เซอร์เปลี่ยนไปมากในช่วงหลายปีที่ผ่านมา เบราว์เซอร์จำนวนมากในอดีตจะขยายขนาดเท่านั้นfont-size
แต่มันเปลี่ยนไปอย่างรวดเร็วเมื่อเว็บไซต์ต่างๆรู้ว่าการออกแบบพิกเซลที่สมบูรณ์แบบของพวกเขานั้นแตกสลายเมื่อใดก็ตามที่มีคนซูมเข้าหรือออก เมื่อถึงจุดนี้เบราว์เซอร์จะขยายขนาดหน้าทั้งหมดดังนั้นการซูมด้วยตัวอักษรจึงไม่อยู่ในภาพ
การเคารพความปรารถนาของผู้ใช้นั้นไม่อยู่ในภาพ เพียงเพราะเบราว์เซอร์ถูกตั้งค่าเป็นค่า16px
เริ่มต้นไม่ได้หมายความว่าผู้ใช้จะไม่สามารถเปลี่ยนการตั้งค่าของพวกเขาเป็น24px
หรือ32px
เพื่อแก้ไขการมองเห็นต่ำหรือทัศนวิสัยไม่ดี หากคุณแยกหน่วยออกจากฐานrem
ผู้ใช้ที่มีขนาดตัวอักษรสูงกว่าจะเห็นไซต์ที่มีขนาดใหญ่ขึ้นตามสัดส่วน เส้นขอบจะใหญ่ขึ้นช่องว่างภายในจะใหญ่ขึ้นขอบจะใหญ่ขึ้นทุกอย่างจะขยายเพิ่มขึ้นอย่างราบรื่น
หากคุณยึดการสืบค้นสื่อของrem
คุณเป็นหลักคุณสามารถตรวจสอบให้แน่ใจว่าเว็บไซต์ที่ผู้ใช้เห็นเหมาะกับหน้าจอ ผู้ใช้ที่มีfont-size
ชุด32px
บน640px
เบราว์เซอร์กว้างได้อย่างมีประสิทธิภาพจะเห็นเว็บไซต์ของคุณเป็นแสดงให้เห็นว่าผู้ใช้ที่16px
อยู่บน320px
เบราว์เซอร์กว้าง อย่างมีการสูญเสีย RWD rem
ในการใช้ไม่ได้
การเปลี่ยนpx
ค่าที่ชัดเจน
เพราะrem
อยู่บนพื้นฐานfont-size
ของ:root
โหนดถ้าคุณต้องการที่จะเปลี่ยนสิ่งที่1rem
แสดงให้เห็นถึงสิ่งที่คุณต้องทำคือการเปลี่ยนfont-size
:
:root {
font-size: 100px;
}
body {
font-size: 1rem;
}
<p>Don't ever actually do this, please</p>
ไม่ว่าคุณจะทำอะไรอย่าตั้งค่า:root
องค์ประกอบfont-size
เป็นpx
ค่า
ถ้าคุณตั้งค่าfont-size
บนhtml
กับpx
ค่าที่คุณได้ปลิวไปตั้งค่าของผู้ใช้โดยไม่ต้องวิธีที่จะได้รับพวกเขากลับมา
หากคุณต้องการเปลี่ยนค่าที่ชัดเจนของrem
ให้ใช้%
หน่วย
คณิตศาสตร์สำหรับเรื่องนี้ค่อนข้างตรงไปตรงมา
ชัดเจน font-size ของ:root
เป็นแต่ให้บอกว่าเราต้องการที่จะเปลี่ยนไป16px
20px
ทั้งหมดที่เราต้องทำคือการคูณด้วยค่าที่จะได้รับ16
20
ตั้งค่าสมการของคุณ:
16 * X = 20
และแก้ปัญหาสำหรับX
:
X = 20 / 16
X = 1.25
X = 125%
:root {
font-size: 125%;
}
<p>If you're using the default font-size, I'm 20px tall.</p>
การทำทุกอย่างเป็นทวีคูณ20
ไม่ใช่สิ่งที่ยอดเยี่ยม แต่คำแนะนำทั่วไปก็คือทำให้ขนาดrem
เท่ากัน10px
ชัดเจน จำนวนมายากลที่10/16
ซึ่งเป็นหรือ0.625
62.5%
:root {
font-size: 62.5%;
}
<p>If you're using the default font-size, I'm 10px tall.</p>
ปัญหาที่เกิดขึ้นในขณะนี้คือการที่เริ่มต้นของคุณfont-size
สำหรับส่วนที่เหลือของหน้าเป็นวิธีชุดเล็กเกินไป แต่มีการแก้ไขที่ง่ายสำหรับการที่: ตั้งค่าfont-size
ในbody
การใช้rem
:
:root {
font-size: 62.5%;
}
body {
font-size: 1.6rem;
}
<p>I'm the default font-size</p>
สิ่งสำคัญที่ควรทราบคือเมื่อมีการปรับค่านี้ค่าที่ชัดเจนrem
คือ10px
ซึ่งหมายความว่าค่าใด ๆ ที่คุณอาจเขียนpx
สามารถแปลงได้โดยตรงrem
โดยการชนทศนิยม
padding: 20px;
กลายเป็น
padding: 2rem;
ขนาดตัวอักษรที่ชัดเจนที่คุณเลือกนั้นขึ้นอยู่กับคุณดังนั้นหากคุณต้องการไม่มีเหตุผลคุณไม่สามารถใช้:
:root {
font-size: 6.25%;
}
body {
font-size: 16rem;
}
และมีความเท่าเทียมกัน1rem
1px
ดังนั้นคุณมีมันเป็นทางออกที่ง่ายในการเคารพความต้องการของผู้ใช้ในขณะที่ยังหลีกเลี่ยงความซับซ้อนของ CSS
เดี๋ยวก่อนแล้วอะไรที่จับได้?
ฉันเกรงว่าคุณอาจถามว่า เท่าที่ฉันอยากจะเสแสร้งว่าrem
เป็นเวทมนตร์และแก้ปัญหาทุกอย่างยังมีเรื่องของการบันทึก ไม่มีอะไรที่ทำลายความคิดของฉันแต่ฉันจะเรียกพวกเขาออกดังนั้นคุณไม่สามารถพูดได้ว่าฉันไม่ได้เตือนคุณ
Media Queries (ใช้em
)
หนึ่งในปัญหาแรกที่คุณจะพบโดยrem
เกี่ยวข้องกับการสืบค้นสื่อ พิจารณารหัสต่อไปนี้:
:root {
font-size: 1000px;
}
@media (min-width: 1rem) {
:root {
font-size: 1px;
}
}
ค่าของrem
การเปลี่ยนแปลงขึ้นอยู่กับว่าการสืบค้นสื่อใช้หรือไม่และการสืบค้นสื่อขึ้นอยู่กับมูลค่าของrem
สิ่งที่เกิดขึ้นบนโลก
rem
ในคำสั่งสื่อใช้ค่าเริ่มต้นของfont-size
และไม่ควร (ดูส่วน Safari) คำนึงถึงการเปลี่ยนแปลงใด ๆ ที่อาจเกิดขึ้นกับfont-size
ของ:root
องค์ประกอบ ในคำอื่น ๆ ก็คุ้มค่าที่เห็นได้ชัดคือเสมอ 16px
นี้เป็นบิตที่น่ารำคาญเพราะมันหมายความว่าคุณต้องทำบางคำนวณเศษส่วน แต่ฉันได้พบว่าที่พบมากที่สุดคำสั่งสื่อแล้วใช้ค่าที่มีหลายรายการที่ 16
| px | rem |
+------+-----+
| 320 | 20 |
| 480 | 30 |
| 768 | 48 |
| 1024 | 64 |
| 1200 | 75 |
| 1600 | 100 |
นอกจากนี้หากคุณใช้ตัวประมวลผลล่วงหน้า CSS คุณสามารถใช้มิกซ์อินหรือตัวแปรเพื่อจัดการคิวรีสื่อบันทึกของคุณซึ่งจะปกปิดปัญหาทั้งหมด
การแข่งรถวิบาก
น่าเสียดายที่มีข้อผิดพลาดที่รู้จักกับ Safari ซึ่งการเปลี่ยนแปลง:root
ขนาดตัวอักษรจะเปลี่ยนrem
ค่าที่คำนวณได้สำหรับช่วงแบบสอบถามสื่อ สิ่งนี้อาจทำให้เกิดพฤติกรรมที่แปลกประหลาดบางอย่างถ้าขนาดตัวอักษรของ:root
องค์ประกอบเปลี่ยนไปในเคียวรีสื่อบันทึก โชคดีที่การแก้ไขง่ายๆคือ: การใช้em
หน่วยคำสั่งสื่อ
การสลับบริบท
หากคุณสลับระหว่างโครงการต่าง ๆ โครงการต่าง ๆ เป็นไปได้ค่อนข้างที่ขนาดตัวอักษรที่ชัดเจนrem
จะมีค่าแตกต่างกัน ในโครงการหนึ่งคุณอาจจะใช้ขนาดที่ชัดเจนของที่อยู่ในโครงการอื่นที่มีขนาดที่ชัดเจนอาจจะมี10px
1px
สิ่งนี้อาจสร้างความสับสนและทำให้เกิดปัญหา
คำแนะนำเดียวของฉันที่นี่คือการยึดติดกับ62.5%
การแปลงrem
เป็นขนาดที่ชัดเจน10px
เพราะนั่นเป็นเรื่องธรรมดาในประสบการณ์ของฉัน
ไลบรารี CSS ที่ใช้ร่วมกัน
หากคุณกำลังเขียน CSS ที่จะถูกใช้บนไซต์ที่คุณไม่ได้ควบคุมเช่นสำหรับวิดเจ็ตที่ฝังอยู่จะไม่มีวิธีที่ดีที่จะทราบว่าขนาดที่ชัดเจนrem
จะมีอะไร หากเป็นกรณีนี้โปรดใช้px
ต่อไป
หากคุณยังคงต้องการที่จะใช้rem
แต่พิจารณาปล่อย Sass rem
หรือน้อยกว่ารุ่นของสไตล์กับตัวแปรที่จะแทนที่การปรับสำหรับขนาดที่ชัดเจนของ
* ฉันไม่ต้องการหลอกใครให้ใช้rem
แต่ฉันไม่สามารถยืนยันได้อย่างเป็นทางการว่าเบราว์เซอร์ทุกตัวใช้เป็น16px
ค่าเริ่มต้น คุณจะเห็นว่ามีจำนวนมากของเบราว์เซอร์และมันจะไม่เป็นสิ่งที่ยากสำหรับเบราว์เซอร์ที่จะต้องแยกออกเคยดังนั้นเล็กน้อยที่จะพูดหรือ15px
18px
ในการทดสอบอย่างไรก็ตามฉันไม่เคยเห็นตัวอย่างเดียวที่เบราว์เซอร์ที่ใช้การตั้งค่าเริ่มต้นในระบบที่ใช้การตั้งค่าเริ่มต้นมีค่าอื่นใดนอกเหนือจาก16px
นี้ หากคุณพบตัวอย่างเช่นโปรดแบ่งปันกับฉัน