ความแตกต่างระหว่าง px em rem พร้อมตัวอย่าง

บทความนี้สรุป px, em, rem ซึ่งเป็น 3 unit ที่ใช้บ่อยๆในการกำหนดขนาดใน css

Marach T.

10 Sep 2022


TLDR;

บทความนี้สรุป px, em, rem ซึ่งเป็น 3 unit ที่ใช้บ่อยๆในการกำหนดขนาดใน css

  • px เป็น absolute unit ไม่ขึ้นอยู่กับใคร
  • em เป็น relative unit ที่ขึ้นอยู่กับค่าของ parent element
  • rem เป็น relative unit ที่ขึ้นอยู่กับค่าของ root element

px (pixel – พิกเซล)

  • เป็นหน่วยที่ใช้กันทั่วๆไปในงาน digital
  • เป็นหน่วยแบบ absolute unit เอาไปใช้ตรงๆเลย ไม่ต้องคิดมาก
  • ถ้าดีไซน์เนอร์ส่งงานมาว่าใช้ font ขนาด 16px เราก็เอาไปเขียนเลยว่า font-size: 16px;
  • ไม่มีอะไรพิเศษ :P

em (เอ็ม)

  • เป็นหน่วยแบบ relative unit = ค่าขึ้นอยู่กับค่าอื่น
  • ค่าอื่นในที่นี้ ก็คือค่าที่ได้มาจาก parent element

ตัวอย่าง em

<body>
	<p>Paragraph text</p>
</body>
body {
font-size: 16px;
}

p {
font-size: 1em;
}
  • ในกรณีนี้ p ที่ตั้งค่าไว้ 1em จะมีขนาดบนหน้าจอ 16px
  • วิธีการคำนวณคือ เอาเลข em ไปคูณกับ ค่าของ body (body เป็น parent element ของ p)
  • body มีขนาด 16px - p = 1em → ขนาดบนหน้าจอจะเป็น 1 × 16 = 16px - p = 1.125em → ขนาดบนหน้าจอจะเป็น 1.125 × 16 = 18px

สถานการณ์ที่ควรใช้ em: การทำแสดงเวลาแบบสากล เช่น 11am

<time>11<span>AM</span></time>
time {
  font-size: 16px;
}

span {
  font-size: 0.75em;
}

จากตัวอย่างด้านบน

  • 11 จะมีขนาด 16px
  • ส่วน AM จะมีขนาด 0.75 × 16 = 12px

ข้อดีคือ

  • ถ้า time ขยายขนาดใหญ่ขึ้น เช่น จาก 16px24px
  • AM จะขยายใหญ่ขึ้นอัตโนมัติด้วย โดยมีขนาด 0.75 × 24 = 18px

จะเห็นว่า em เหมาะสำหรับการตั้งค่าให้สอง element มีความสัมพันธ์กันเพื่อที่จะไม่ต้องมาคอยตั้งค่าใหม่ซ้ำๆ

ข้อควรระวัง: การใช้ em ซ้อนๆกันหลาย element จะจัดการยาก เพราะมันจะทบค่ากันไปเรื่อยๆ

rem (เร็ม)

  • เป็น relative unit (เหมือน em) ที่ค่าขึ้นอยู่กับค่าอื่น
  • ค่าอื่นในที่นี้คือ root element (<html>)

ตัวอย่าง rem

html {
  font-size: 32px;
}

body {
  font-size: 16px;
}

p {
  font-size: 1rem;
}
  • ในกรณีนี้ p ที่ตั้งค่าไว้ 1rem จะมีขนาดบนหน้าจอ 32px (ยึดตามค่า html)
  • แต่ถ้า p ตั้งค่าไว้เป็น 1em ก็จะมีขนาดบนหน้าจอ 16px แทน (ยึดตามค่า parent element = body)

สถานการณ์ที่ควรใช้ rem: การทำ responsive design ให้ขยายตัวหนังสือ เมื่อหน้าจอใหญ่ขึ้น

<html>
  <body>
    <h1>Heading text</h1>
    <p>Paragraph text</p>
  </body>
</html>
html {
  font-size: 16px;
}

body {
  font-size: 99px;
}

h1 {
  font-size: 1.125rem;
}

p {
  font-size: 1rem;
}

@media screen and (min-width: 768px) {
  html {
    font-size: 24px;
  }
}

จะเห็นว่า ในขนาดหน้าจอ mobile

  • h1 จะมีขนาด 1.125 × 16 = 18px
  • p จะมีขนาด 1 × 16 = 16px

เมื่อหน้าจอขยายใหญ่ขึ้นเป็น tablet (ขนาด 768px ขึ้นไป)

  • h1 จะมีขนาด 1.125 × 24 = 27px
  • p จะมีขนาด 1 × 24 = 24px

จะเห็นว่า style ของ parent element (font-size: 99px จาก body) จะไม่มีผลต่อ h1 กับ p เลย

rem ทำให้เราสามารถจัดการขนาดของทุกตัวอักษรได้ ด้วยการปรับที่ html ที่เดียว ซึ่งสะดวกมากๆ

สรุปอีกที

  • px เป็น absolute unit ไม่ขึ้นอยู่กับใคร
  • em เป็น relative unit ที่ขึ้นอยู่กับค่าของ parent element
  • rem เป็น relative unit ที่ขึ้นอยู่กับค่าของ root element

Latest Posts

วิธีใช้ subgrid เพื่อให้เนื้อหา card เรียงกันแบบสวยๆ

สอนวิธีการใช้ subgrid เพื่อสร้าง card ที่มี layout ที่สวยงามและ flexible ได้ตามเนื้อหาที่ใส่เข้ามา

01 Jun 2024 • Marach T.

คู่มือเข้าใจ Burnout: เป็นที่เรา หรือเป็นที่งาน

เบิร์นเอาท์ (burnout) เป็นสิ่งที่เกิดขึ้นได้ง่ายแต่รักษาให้หายขาดได้ยาก เพราะมักเกิดจากปัจจัยทั้งภายใน (ตัวเราเอง) และภายนอก (งาน)

17 Feb 2024 • Marach T.

Design principle คืออะไร และช่วยทีมโปรดักอย่างไร

Design principle คือ หลักการที่ใช้ตัดสินใจในการออกแบบ product – ช่วยให้ทีมตัดสินใจได้เหมาะสมและรวดเร็ว

11 Jun 2023 • Marach T.

ดู Posts ทั้งหมด