ToolDeck

ตัวแปลงหน่วย CSS

แปลงหน่วย CSS ระหว่าง px, rem, em, vw, vh และ %

px16
rem1
em1
vw1.111111
vh1.777778
%100
pt12
cm0.4233331
mm4.233331
in0.1666667

การแปลงหน่วย CSS คืออะไร?

ตัวแปลงหน่วย CSS คือเครื่องมือที่แปลงค่าความยาวระหว่างระบบการวัดของ CSS ที่แตกต่างกัน CSS กำหนดหน่วยความยาวมากกว่าหนึ่งโหล แบ่งออกเป็นสองกลุ่ม: หน่วยสัมบูรณ์อย่าง px, pt, cm และ in ที่แมปกับการวัดทางกายภาพที่คงที่ และหน่วยสัมพัทธ์อย่าง rem, em, vw, vh และ % ที่ขึ้นอยู่กับบริบท เช่น ขนาด font หรือขนาด viewport

เบราว์เซอร์แปลงความยาว CSS ทั้งหมดเป็น pixel ในระหว่างการแสดงผล เมื่อคุณเขียน 1.5rem เบราว์เซอร์จะคูณ 1.5 ด้วย root font-size (โดยทั่วไปคือ 16px) เพื่อได้ 24px เมื่อคุณเขียน 50vw ก็จะนำครึ่งหนึ่งของความกว้าง viewport ปัจจุบัน การเข้าใจความสัมพันธ์เหล่านี้จำเป็นสำหรับการสร้าง layout ที่ปรับขนาดตามอุปกรณ์และเคารพการตั้งค่าของผู้ใช้ เช่น ขนาด font ที่กำหนดเองในเบราว์เซอร์

ข้อกำหนด CSS Values and Units Module Level 4 (W3C) กำหนดอัตราการแปลงที่แน่นอนระหว่างหน่วยสัมบูรณ์ทั้งหมด: 1in = 96px = 72pt = 2.54cm = 25.4mm หน่วยสัมพัทธ์ไม่มีอัตราส่วนที่คงที่เพราะขึ้นอยู่กับบริบทในขณะรันไทม์ ตัวแปลงหน่วย CSS ฟรีช่วยให้คุณคำนวณความสัมพันธ์เหล่านี้ได้ทันทีตาม root font-size และขนาด viewport ของคุณ โดยไม่ต้องเขียนโค้ดใดๆ

ทำไมต้องใช้ตัวแปลงหน่วย CSS?

การแปลงหน่วย CSS ด้วยมือหมายถึงการจำอัตราส่วน เปิดเครื่องคิดเลข และตรวจสอบความถูกต้องซ้ำ เครื่องมือนี้ทำการแปลงในเบราว์เซอร์ของคุณโดยไม่มีขั้นตอนยุ่งยาก

แปลงได้ทันที
ใส่ค่า เลือกหน่วยต้นทาง แล้วดูผลลัพธ์ใน 10 หน่วย CSS พร้อมกัน ไม่ต้องคำนวณแยกสำหรับ px-to-rem, px-to-vw หรือ px-to-pt
🔒
ข้อมูลของคุณปลอดภัย
การแปลงทั้งหมดทำงานในเบราว์เซอร์ของคุณ ไม่มีค่าใดถูกส่งไปยังเซิร์ฟเวอร์ บันทึก หรือเก็บไว้ ปิดแท็บแล้วข้อมูลก็หายไป
🎯
ตรงกับบริบทของคุณ
กำหนด root font-size, ความกว้าง viewport, ความสูง viewport และ parent font-size ตัวแปลงใช้ค่าเหล่านี้เพื่อให้ผลลัพธ์ที่แม่นยำสำหรับหน่วย rem, em, vw, vh และ %
📏
ครอบคลุมหน่วย CSS ทั้งหมด
รองรับ px, rem, em, vw, vh, %, pt, cm, mm และ in ไม่ว่าจะทำงานกับ layout สำหรับหน้าจอ stylesheet สำหรับพิมพ์ หรือ typography แบบ responsive ครอบคลุมทุกหน่วย

กรณีการใช้งานตัวแปลงหน่วย CSS

การพัฒนา Frontend
แปลงค่า pixel จากไฟล์ออกแบบเป็น rem สำหรับ component library เมื่อ Figma mockup กำหนดระยะห่าง 24px ให้แปลงเป็น 1.5rem เพื่อให้ layout ปรับขนาดตามการตั้งค่า font-size ของผู้ใช้
วิศวกรรม Backend / Full-Stack
สร้าง template PDF หรืออีเมลที่กำหนดขนาดใน pt หรือ cm แปลงค่า pixel ของ CSS เป็นขนาด point สำหรับการพิมพ์สำหรับการแสดงผลฝั่งเซิร์ฟเวอร์ด้วยเครื่องมืออย่าง Puppeteer หรือ wkhtmltopdf
DevOps / CI Pipelines
ตรวจสอบว่า spacing token ของ design system ใช้หน่วยที่สอดคล้องกันในทุกขั้นตอน build ตรวจสอบอย่างรวดเร็วว่าฐาน 16px สร้างค่า rem ที่คาดหวังใน CSS ที่สร้างขึ้น
QA / การทดสอบด้านภาพ
ตรวจสอบ style ที่คำนวณแล้วระหว่างการทดสอบข้ามเบราว์เซอร์ เมื่อ Chrome DevTools แสดงค่าที่คำนวณแล้วเป็น 14.4px ให้แปลงเป็น rem เพื่อยืนยันว่าตรงกับ 0.9rem ที่คาดไว้จาก stylesheet
การแสดงภาพข้อมูล
กำหนดขนาด SVG หรือ canvas element เทียบกับขนาด viewport แปลงความกว้าง chart แบบ pixel คงที่เป็นหน่วย vw เพื่อให้การแสดงภาพครอบคลุมเปอร์เซ็นต์ที่สม่ำเสมอของหน้าจอบนจอภาพต่างๆ
การเรียนรู้ CSS
ทำความเข้าใจความสัมพันธ์ระหว่าง rem, em และ px โดยทดลองกับขนาด base ที่แตกต่างกัน เปลี่ยน root font-size จาก 16px เป็น 18px แล้วดูว่าค่า rem ทุกค่าเปลี่ยนแปลงอย่างไร

ข้อมูลอ้างอิงหน่วยความยาว CSS

CSS กำหนดหน่วยความยาว 10 หน่วยที่ใช้กันทั่วไป หน่วยสัมบูรณ์มีการแปลงคงที่เป็น pixel หน่วยสัมพัทธ์ขึ้นอยู่กับบริบท: root font-size สำหรับ rem, parent font-size สำหรับ em และ viewport ของเบราว์เซอร์สำหรับ vw และ vh

หน่วยชื่อขนาดปริยายสัมพัทธ์กับ
pxPixel1pxFixed; 1px = 1/96 of 1in on screens
remRoot em16px (default)Relative to <html> font-size
emEmInheritedRelative to parent element font-size
vwViewport width1% of viewportRelative to browser window width
vhViewport height1% of viewportRelative to browser window height
%PercentageVariesRelative to parent property value
ptPoint1.333pxPrint unit; 1pt = 1/72 of 1in
cmCentimeter37.795pxPhysical unit; 1cm = 96px / 2.54
mmMillimeter3.7795pxPhysical unit; 1mm = 1cm / 10
inInch96pxPhysical unit; 1in = 96px (CSS spec)

หน่วยสัมบูรณ์ vs หน่วยสัมพัทธ์ใน CSS

การเลือกระหว่างหน่วยสัมบูรณ์และหน่วยสัมพัทธ์ส่งผลต่อการตอบสนองของ layout ต่อหน้าจอและการตั้งค่าผู้ใช้ที่แตกต่างกัน แต่ละกลุ่มมีข้อดีข้อเสียที่แตกต่างกัน

หน่วยสัมบูรณ์ (px, pt, cm, mm, in)
หน่วยสัมบูรณ์ให้ขนาดทางกายภาพที่เหมือนกันโดยไม่ขึ้นกับบริบท ใช้ px สำหรับ border, shadow และ element ที่ไม่ควรปรับขนาด ใช้ pt สำหรับ stylesheet สำหรับพิมพ์ ข้อกำหนด CSS กำหนดว่า 1in = 96px แม้ขนาดทางกายภาพจริงจะแตกต่างกันตาม DPI ของจอภาพ
หน่วยสัมพัทธ์ (rem, em, vw, vh, %)
หน่วยสัมพัทธ์ปรับขนาดตามบริบทอ้างอิง ใช้ rem สำหรับขนาด font และระยะห่างเพื่อเคารพการตั้งค่าผู้ใช้ ใช้ em สำหรับการปรับขนาดภายใน component (padding สัมพัทธ์กับ font-size ของ element เอง) ใช้ vw/vh สำหรับ layout ที่เต็ม viewport เช่น hero section

ตารางแปลง px เป็น rem ที่พบบ่อย

ตารางนี้ถือว่า root font-size เป็น 16px (ค่าปริยายของเบราว์เซอร์) หากโปรเจกต์ของคุณใช้ base ที่แตกต่างกัน ให้หารค่า pixel ด้วย base ของคุณเพื่อได้ค่าเทียบเท่าใน rem

pxremptการใช้งานทั่วไป
100.6257.5Small caption text
120.759Body text (compact)
140.87510.5Default body text
16112Root font-size (browser default)
181.12513.5Large body text
201.2515H4 heading
241.518H3 heading
32224H2 heading
48336H1 heading
64448Display / hero text

ตัวอย่างโค้ด

ตัวอย่างเหล่านี้แสดงวิธีแปลงหน่วย CSS ด้วยโปรแกรมใน JavaScript, Python, CSS custom properties และ Sass

JavaScript
// px to rem (given root font-size of 16px)
const pxToRem = (px, base = 16) => px / base
pxToRem(24)  // → 1.5

// rem to px
const remToPx = (rem, base = 16) => rem * base
remToPx(1.5) // → 24

// px to vw (given viewport width of 1440px)
const pxToVw = (px, viewport = 1440) => (px / viewport) * 100
pxToVw(360)  // → 25

// Dynamic calculation using getComputedStyle
const rootFontSize = parseFloat(
  getComputedStyle(document.documentElement).fontSize
) // → 16 on most browsers
Python
# CSS unit converter functions

def px_to_rem(px: float, base: float = 16) -> float:
    return px / base

def rem_to_px(rem: float, base: float = 16) -> float:
    return rem * base

def px_to_vw(px: float, viewport: float = 1440) -> float:
    return (px / viewport) * 100

def px_to_pt(px: float) -> float:
    return px * 72 / 96

print(px_to_rem(24))     # → 1.5
print(rem_to_px(2.5))    # → 40.0
print(px_to_vw(720))     # → 50.0
print(px_to_pt(16))      # → 12.0
CSS (calc & custom properties)
/* Define a base scale using rem */
:root {
  --base: 16px;       /* root font-size */
  --space-1: 0.25rem; /* 4px */
  --space-2: 0.5rem;  /* 8px */
  --space-4: 1rem;    /* 16px */
  --space-8: 2rem;    /* 32px */
}

/* Fluid typography: scales between 1rem (16px) and 2.5rem (40px) */
h1 {
  font-size: clamp(1rem, 2.5vw + 0.5rem, 2.5rem);
}

/* Viewport-relative hero height */
.hero {
  height: calc(100vh - 4rem); /* full viewport minus 64px header */
}

/* Percentage-based grid */
.sidebar { width: 25%; }     /* 360px on 1440px screen */
.content { width: 75%; }     /* 1080px on 1440px screen */
SCSS (mixin)
// Reusable px-to-rem function in Sass
@use "sass:math";

$base-font-size: 16px !default;

@function rem($px) {
  @return math.div($px, $base-font-size) * 1rem;
}

// Usage
.card {
  padding: rem(24px);       // → 1.5rem
  margin-bottom: rem(32px); // → 2rem
  border-radius: rem(8px);  // → 0.5rem
  font-size: rem(14px);     // → 0.875rem
}

คำถามที่พบบ่อย

root font-size ปริยายในเบราว์เซอร์คือเท่าไร?
เบราว์เซอร์หลักทั้งหมด (Chrome, Firefox, Safari, Edge) มี root font-size ปริยายเป็น 16px ซึ่งหมายความว่า 1rem = 16px เว้นแต่ผู้ใช้หรือ stylesheet จะแทนที่ font-size ของ element html บางผู้ใช้เพิ่มค่านี้ในการตั้งค่าเบราว์เซอร์เพื่อการเข้าถึง ซึ่งเป็นเหตุผลที่ rem เป็นค่าปริยายที่ดีกว่าสำหรับข้อความแทน px
แปลง px เป็น rem ได้อย่างไร?
หารค่า pixel ด้วย root font-size โดยใช้ base ปริยาย 16px: 24px / 16 = 1.5rem หากโปรเจกต์ของคุณกำหนด html { font-size: 10px } (การ reset ที่พบบ่อย) แล้ว 24px / 10 = 2.4rem สูตรคือ: rem = px / root-font-size เสมอ
rem กับ em ต่างกันอย่างไร?
rem สัมพัทธ์กับ font-size ของ root element (tag html) ในขณะที่ em สัมพัทธ์กับ parent font-size ของ element ปัจจุบัน ซึ่งหมายความว่า rem ให้ขนาดที่สม่ำเสมอตลอดทั้งหน้า ในขณะที่ em ทบทวีเมื่อซ้อนกัน 2em ภายใน parent 2em จะกลายเป็น 4 เท่าของ root size ใช้ rem สำหรับระยะห่างและขนาด font ทั่วโลก และใช้ em เมื่อต้องการให้ขนาดปรับตามข้อความของ component เอง
ควรใช้หน่วย vw หรือ vh เมื่อใด?
ใช้ vw สำหรับ element ที่ควรปรับขนาดตามความกว้างของหน้าต่างเบราว์เซอร์ เช่น hero section แบบเต็มความกว้าง หรือ typography แบบ fluid (clamp ร่วมกับ vw) ใช้ vh สำหรับส่วนเต็มหน้าจอหรือ layout แบบ viewport-height ระวังการใช้ vh บนเบราว์เซอร์มือถือที่ address bar เปลี่ยน viewport height หน่วย dvh (dynamic viewport height) ที่ใหม่กว่าแก้ปัญหานี้ได้
สามารถผสมหน่วย CSS ต่างๆ ใน property เดียวกันได้หรือไม่?
ได้ ฟังก์ชัน CSS calc() ช่วยให้รวมหน่วยใดก็ได้ในนิพจน์เดียว ตัวอย่างเช่น width: calc(100vw - 2rem) ลบ 32px (ที่ base ปริยาย) จากความกว้าง viewport เต็ม นอกจากนี้ยังผสมหน่วยใน clamp() ได้: font-size: clamp(1rem, 2vw + 0.5rem, 2.5rem) สร้าง typography แบบ fluid ที่ปรับขนาดระหว่าง 16px ถึง 40px
1pt ใน CSS มีกี่ pixel?
ใน CSS 1pt = 1/72 ของนิ้ว และ 1 นิ้ว = 96px ดังนั้น 1pt = 96/72 = 1.333px อัตราส่วนนี้ถูกกำหนดไว้ในข้อกำหนด CSS โดยไม่คำนึงถึง DPI ของหน้าจอ Point ใช้เป็นหลักใน stylesheet สำหรับพิมพ์และการสร้าง PDF สำหรับการออกแบบหน้าจอ px หรือ rem เป็นตัวเลือกที่ดีกว่า
การ reset font-size 62.5% ยังเป็นแนวทางที่ดีอยู่หรือไม่?
การกำหนด html { font-size: 62.5% } ทำให้ 1rem = 10px ซึ่งทำให้คำนวณง่ายขึ้นในใจ (24px = 2.4rem) อย่างไรก็ตาม ต้องกำหนด font-size บน element body อย่างชัดเจนและอาจเกิดปัญหากับ component ของบุคคลที่สามที่ถือว่า base เป็น 16px ตามค่าปริยาย ความนิยมในปัจจุบันคือคงค่า 16px ตามปริยายไว้ และใช้ฟังก์ชัน Sass หรือ plugin PostCSS เพื่อจัดการการแปลงแทน