Công cụ Chuyển Đổi PX Sang REM Miễn Phí

Chuyển đổi pixel sang rem và ngược lại, với cỡ phông cơ sở có thể cấu hình.

px (mặc định trình duyệt: 16)

Bảng tham khảo

PXREM

Cách hoạt động

REM nghĩa là « root em » và tương đối với cỡ phông của phần tử gốc. Theo mặc định, các trình duyệt sử dụng 16 px. Công thức đơn giản: rem = px ÷ cơ sởpx = rem × cơ sở. Sửa đổi cỡ cơ sở ở trên nếu dự án của bạn sử dụng gốc khác.

Câu hỏi thường gặp

Tại sao sử dụng rem thay vì px?

Đơn vị REM thích ứng với thiết lập cỡ phông của người dùng trong trình duyệt của họ, cải thiện khả năng tiếp cận. Nếu người dùng tăng cỡ phông mặc định, các bố cục dựa trên rem điều chỉnh tự động, không như giá trị pixel cố định.

Sự khác biệt giữa em và rem là gì?

EM tương đối với cỡ phông của phần tử cha và có thể cộng dồn trong các phần tử lồng nhau. REM luôn tương đối với cỡ phông của phần tử gốc (<html>), làm cho nó dễ dự đoán hơn.

Nên dùng cơ sở nào?

Hầu hết các dự án sử dụng giá trị mặc định của trình duyệt là 16 px. Một số nhà phát triển định nghĩa html { font-size: 62.5%; } (10 px) cho các phép tính đơn giản hơn. Sử dụng cỡ phông gốc được định nghĩa cho dự án của bạn.

rem thực sự là gì

«Rem» là viết tắt của root em. Đặc tả W3C CSS Values Level 3 định nghĩa nó là «equal to the computed value of font-size on the root element», tức là trên phần tử <html>. Các trình duyệt mặc định <html>16px trừ khi được ghi đè, vì vậy trên một trang vanilla 1rem = 16px, 0.5rem = 8px, 1.5rem = 24px, 2rem = 32px.

Nếu một stylesheet khai báo html { font-size: 20px }, thì 1rem = 20px cho phần còn lại của tài liệu. Nếu người dùng đã tăng mặc định trình duyệt lên 24px (một điều chỉnh phổ biến cho người nhìn kém), 1rem = 24px dù không có ghi đè stylesheet nào, và đó là toàn bộ lập luận về accessibility cho rem trong một câu.

Tại sao rem quan trọng: lập luận về accessibility

Các trình duyệt cung cấp hai cơ chế thu phóng khác nhau cho người dùng, và chúng hoạt động khác nhau đối với các đơn vị:

Đây là lý do tại sao layout được xây dựng bằng rem tôn trọng tùy chọn accessibility của người dùng còn layout xây dựng bằng px thì không. WCAG 2.2 Tiêu chí thành công 1.4.4 (Resize Text, Cấp AA) yêu cầu văn bản có thể được phóng to lên ít nhất 200% mà không mất nội dung hoặc chức năng. Chỉ riêng zoom trình duyệt đáp ứng yêu cầu này về mặt kỹ thuật, nhưng layout dựa trên rem đáp ứng sạch hơn vì chúng tôn trọng cơ chế kích thước font mặc định chi tiết hơn, đó là điều người dùng nhìn kém thực sự điều chỉnh hàng ngày.

Gotcha cộng dồn của em: lý do thúc đẩy dùng rem

Trước khi có rem, cách duy nhất để có typography có thể thu phóng trong CSS là em, vốn tương đối so với font-size của phần tử cha, không phải root. Vấn đề cổ điển: các phần tử lồng nhau với font-size dựa trên em bị cộng dồn.

.list { font-size: 1.2em; }
.list .list { font-size: 1.2em; } /* renders at 1.44× the grandparent */
.list .list .list { font-size: 1.2em; } /* now 1.728× */

Ba danh sách lồng nhau phình to lên gần gấp đôi kích thước body, điều này hầu như không bao giờ có chủ ý. rem giải quyết điều này bằng cách neo vào root mỗi lần, ba phần tử lồng nhau ở 1.2rem đều là 19,2px bất kể độ sâu lồng nhau. Đây là lý do tại sao hầu hết stylesheet hiện đại dùng rem cho font-size và dành em cho các tỉ lệ nội bộ component (kích thước icon nên khớp với chữ button, padding bên trong button mở rộng theo nhãn của nó).

Thủ thuật 62,5%, toán học tiện lợi, accessibility còn tranh cãi

Một pattern được Jonathan Snook phổ biến trong bài viết tháng 5 năm 2011 của ông: đặt html { font-size: 62.5% }. Vì 62,5% × 16 = 10, điều này mặc định tạo ra 1rem = 10px, toán nhẩm tiện lợi. 1.6rem = 16px, 2.4rem = 24px, 4.8rem = 48px. Các nhà thiết kế thích nó vì nó loại bỏ phép tính «chia cho 16» khó chịu ra khỏi mọi giá trị.

Phê bình về accessibility (được nêu ra vào thời điểm đó và được củng cố trong các bài viết sau): việc đặt root font-size thành 62,5% thực chất thu nhỏ bất cứ thứ gì người dùng đã chọn trong tùy chọn trình duyệt. Một người dùng đặt mặc định của họ thành 24px vì nhìn kém sẽ thấy văn bản body ở 15px, phá vỡ toàn bộ điểm của việc dùng rem. Phản biện hiện đại là đặt root thành 62,5% nhưng khai báo rõ ràng body font-size tại 1.6rem (trở lại 16px) để ghi đè của người dùng vẫn cascade đúng cách. Nhiều nhóm bỏ qua thủ thuật hoàn toàn và chấp nhận toán học kém thanh lịch hơn một chút.

Khi nào dùng rem, khi nào dùng px, cách nhìn của Comeau

Bài viết «px or rem?» của Josh W. Comeau (tháng 5 năm 2022, cập nhật tháng 5 năm 2025) cung cấp heuristic một câu hỏi duy nhất hữu ích nhất cho quyết định này. Hỏi: «Giá trị này có nên mở rộng theo khi người dùng tăng kích thước font mặc định của trình duyệt không?» Nếu có, dùng rem. Nếu không, dùng px.

Theo tiêu chí đó:

Bài kiểm tra một câu hỏi tạo ra câu trả lời nhất quán trên hàng nghìn quyết định trong codebase, đó là chiến thắng thực sự, các stylesheet kết quả hoạt động theo cách người dùng kỳ vọng dưới cả zoom lẫn tùy chỉnh font-size.

Tailwind CSS 4 dùng rem ở khắp nơi

Tailwind CSS v4.0 (tháng 1 năm 2025) tích hợp tỉ lệ mặc định hoàn toàn dựa trên rem. Mọi typography token (text-xs 0,75rem đến text-9xl 8rem) và mọi spacing token (p-1 0,25rem, p-4 1rem, m-8 2rem) đều ở dạng rem ngay từ đầu. Tailwind 4 cố tình để root <html> ở mức mặc định 16px của trình duyệt (họ rõ ràng không áp dụng thủ thuật 62,5%) để tùy chọn accessibility của người dùng cascade sạch sẽ. Hàng chục triệu dự án hiện nay tích hợp các design system dựa trên rem mặc định, đây là lập luận mạnh mẽ nhất rằng hệ sinh thái đã hội tụ.

Bảng chuyển đổi ở root 16px mặc định

PixelRemDùng thường gặp
8 px0,5 remNửa đơn vị cơ sở, khoảng cách nhỏ
12 px0,75 remChú thích / chữ nhỏ
14 px0,875 remVăn bản phụ
16 px1 remVăn bản body mặc định
18 px1,125 remThân hơi nhấn mạnh
20 px1,25 remĐoạn dẫn
24 px1,5 remTiêu đề H4; văn bản UI lớn
32 px2 remTiêu đề H3
48 px3 remTiêu đề H2 / hero
64 px4 remTiêu đề H1 / display

Vị trí của rem trong bộ công cụ hiện đại

Rem là mặc định phù hợp cho typography và khoảng cách neo vào typography, nhưng nó không phải câu trả lời cho mọi vấn đề layout. Bộ công cụ hiện đại còn bao gồm:

Cho mọi thứ khác (văn bản body, tiêu đề, padding, chiều rộng button, breakpoint) rem là con đường ít cản trở nhất và mặc định có accessibility tốt nhất.

Câu hỏi thêm

Dự án của tôi dùng kích thước font cơ sở không mặc định thì sao?

Thay đổi trường Base font size ở trên thành bất kỳ thứ gì html { font-size: … } của dự án bạn phân giải ra. Phép tính chuyển đổi vẫn là rem = px ÷ base bất kể base. Nếu codebase của bạn dùng 18px, 32px trở thành 1.78rem; ở 10px (thủ thuật 62,5%) nó trở thành 3.2rem. Lưu ý rằng việc ghi đè root font-size có ảnh hưởng đến accessibility đối với người dùng tùy chỉnh mặc định trình duyệt của họ, xem phần thảo luận về thủ thuật 62,5% ở trên.

Tại sao 0,625rem không kết xuất chính xác thành 10px?

Nó có, về mặt toán học, ở root 16px mặc định, 0.625 × 16 = 10. Nhưng các trình duyệt kết xuất theo độ chính xác subpixel và có thể làm tròn giá trị cuối thành các pixel thiết bị nguyên, vì vậy một border 0.625rem đôi khi có thể xuất hiện hơi khác so với border 10px được mã hóa cứng tùy thuộc vào DPR màn hình. Đối với đường kẻ 1 pixel pixel-perfect, dùng 1px trực tiếp; cho mọi thứ khác, giá trị dựa trên rem là ổn.

Tôi có thể kết hợp rem và px trong cùng một stylesheet không?

Có, và bạn nên. Dùng rem cho những thứ nên mở rộng theo tùy chọn font-size của người dùng (typography, vertical rhythm, breakpoint) và px cho những thứ không nên (border, chi tiết icon, bóng đổ trang trí). Câu hỏi «có nên mở rộng không?» của Comeau là bộ lọc thực tế; câu trả lời ánh xạ gọn gàng vào một trong hai đơn vị hầu như mỗi lần.

Các công cụ build có chuyển đổi px sang rem tự động không?

Có, các plugin PostCSS như postcss-pxtorempostcss-rem-to-responsive-pixel có thể viết lại giá trị px trong CSS bạn viết thành rem trong bước build, với ngưỡng có thể cấu hình (ví dụ: «chuyển đổi mọi thứ ≥ 12px»). Chúng hữu ích khi di chuyển codebase nặng px hiện có. Bộ chuyển đổi trực tiếp như trang này vẫn hữu ích cho các trường hợp đơn lẻ, tra cứu design spec và học toán bằng tay.

Có dữ liệu nào được gửi lên máy chủ không?

Không. Phép chuyển đổi là một phép chia, JavaScript thuần tính toán cục bộ trong trình duyệt của bạn. Không có gì về đầu vào của bạn rời khỏi trang; công cụ hoạt động ngoại tuyến sau khi đã tải.

Công cụ liên quan