Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> CSS

Đơn vị tuyệt đối (Absolute Units) trong CSS

Giới thiệu

Đơn vị tuyệt đối (absolute units) đại diện cho kích thước vật lý cố định, không phụ thuộc vào font-size, viewport hay parent element. Chúng được định nghĩa dựa trên hệ đo lường thực tế.

Bảng đơn vị tuyệt đối

Đơn vịViết tắtĐịnh nghĩaTương đươngDùng cho
Pixelpx1/96 inch (CSS reference pixel)1px = 1pxMàn hình, border, shadow, radius, breakpoint (có tranh cãi)
Pointpt1/72 inch1pt = 4/3 px ≈ 1.33pxPrint CSS, typography in ấn
Inchin1 inch vật lý1in = 96px = 2.54cmPrint CSS, layout in ấn
Centimetcm1 centimet1cm = 96/2.54 px ≈ 37.8pxPrint CSS
Picapc1/6 inch = 12pt1pc = 16pxPrint CSS, typography truyền thống
Millimetmm1 milimet1mm = 1/10 cm ≈ 3.78pxPrint CSS
Quarter-millimetQ1/40 cm = 0.25mm1Q = 0.96pxPrint CSS, typography chính xác

Quan hệ chuyển đổi (CSS Reference Pixel)

1in = 2.54cm = 25.4mm = 72pt = 6pc = 96px
1px = 1/96 in = 0.264583mm = 0.75pt

Khi nào dùng đơn vị tuyệt đối?

  • px: Border width (1px), border-radius, box-shadow, outline, media query breakpoint (thường dùng), fixed-size icon/image
  • pt, cm, mm, in, pc, Q: Chỉ trong @media print cho layout in ấn chính xác

Ví dụ: Print CSS với đơn vị tuyệt đối

@media print {
  @page {
    size: A4;           /* 210mm × 297mm */
    margin: 2cm;        /* Lề 2cm */
  }
  
  body {
    font-size: 12pt;    /* 12pt chuẩn in ấn */
    line-height: 1.5;
  }
  
  .page-break { page-break-before: always; }
  .no-print { display: none; }
  
  /* Đơn vị tuyệt đối chính xác cho in */
  .logo { width: 5cm; height: 3cm; }
  .signature { margin-top: 3cm; }
}

Tại sao KHÔNG dùng px cho font-size/layout responsive?

  • Không scale theo user preference (browser zoom, system font size)
  • Vi phạm accessibility (WCAG 1.4.4 Resize text)
  • Khó maintain: thay đổi scale toàn hệ thống phải sửa hàng chục chỗ
  • Không responsive tự nhiên trên màn hình high-DPI

Best Practice hiện đại

/* 1. Chỉ dùng px cho "hairline" - đường viền mỏng nhất */
.hairline { border-bottom: 1px solid #eee; }

/* 2. Font-size, spacing dùng rem/em */
html { font-size: 100%; }  /* 16px mặc định, respect user setting */
body { font-size: 1rem; }
h1 { font-size: clamp(2rem, 5vw, 4rem); }

/* 3. Breakpoint dùng rem/em (accessibility) */
@media (min-width: 48rem) { ... }  /* 768px @ 16px base */

/* 4. Print CSS dùng đơn vị vật lý */
@media print {
  .page { width: 21cm; margin: 2cm auto; }
}