Chọn đúng đơn vị quyết định giao diện có co giãn tốt hay không. Bài này phân biệt đơn vị tuyệt đối, tương đối, đơn vị theo khung nhìn và các hàm toán học calc(), min(), max(), clamp().
Bạn sẽ học được
- Phân biệt px, em, rem, %
- Dùng vw, vh, dvh, ch cho bố cục co giãn
- Tính toán với calc()
- Làm cỡ chữ và khoảng cách co giãn với clamp()
Một số khái niệm
| Đơn vị | Tính theo | Dùng cho |
|---|---|---|
| px | Điểm ảnh CSS (cố định) | Viền, bóng, chi tiết nhỏ |
| rem | Cỡ chữ của phần tử gốc html (mặc định 16px) | Cỡ chữ, khoảng cách: khuyên dùng |
| em | Cỡ chữ của chính phần tử (hoặc cha) | Padding của nút theo cỡ chữ nút |
| % | Kích thước của phần tử cha | Chiều rộng cột |
| vw / vh | 1% chiều rộng / cao khung nhìn | Khối toàn màn hình |
| dvh | Chiều cao khung nhìn động (trừ thanh địa chỉ điện thoại) | Màn hình đầu trên điện thoại |
| ch | Độ rộng ký tự 0 | Giới hạn độ dài dòng chữ: max-width: 70ch |
| fr | Phần không gian còn lại (Grid) | Cột lưới |
Khuyến nghị: dùng rem cho cỡ chữ và khoảng cách để tôn trọng cài đặt cỡ chữ của người dùng (người cao tuổi thường phóng to chữ trong trình duyệt); px cho viền mảnh; %, fr cho bố cục.
em và rem khác nhau thế nào
<style>
html { font-size: 16px; }
.hop { font-size: 20px; border: 1px solid #ccc; padding: 6px; margin: 6px 0; }
.em { font-size: 1.5em; } /* 1.5 x 20px = 30px (theo cha) */
.rem { font-size: 1.5rem; } /* 1.5 x 16px = 24px (theo html) */
</style>
<div class="hop">Cha 20px
<div class="em">1.5em = 30px</div>
<div class="rem">1.5rem = 24px</div>
</div>Kết quả hiển thị
calc(), min(), max(), clamp()
<style>
.khung { width: calc(100% - 40px); margin: 0 20px; background: #e3f2fd; padding: 8px; box-sizing: border-box; }
.tieu-de { font-size: clamp(1.25rem, 4vw, 2.5rem); color: #1565c0; margin: 8px 0; }
.the { width: min(100%, 360px); background: #e8f5e9; padding: 10px; border-radius: 8px; }
.doan { max-width: 60ch; }
</style>
<div class="khung">calc(100% - 40px)</div>
<h2 class="tieu-de">Cỡ chữ clamp: thu nhỏ cửa sổ để thấy co giãn</h2>
<div class="the">min(100%, 360px): không quá 360px</div>
<p class="doan">Giới hạn dòng khoảng 60 ký tự giúp đọc dễ hơn trên màn hình rộng.</p>Kết quả hiển thị
clamp(min, ưu-tiên, max): giá trị ưu tiên (thường theo vw) nhưng không nhỏ hơn min, không lớn hơn max. Đây là cách làm cỡ chữ co giãn không cần media query.
Các kiểu giá trị khác
- Từ khóa:
auto,none,inherit,transparent,currentColor(màu chữ hiện tại). - Thời gian:
s,ms; góc:deg,turn. - Viết tắt (shorthand):
margin: 10px 20px(trên-dưới, trái-phải);margin: 1px 2px 3px 4px(theo chiều kim đồng hồ: trên, phải, dưới, trái). - Số 0 không cần đơn vị:
margin: 0.
Mẹo hay
Đặt html { font-size: 100%; } (không đặt px cố định) để tôn trọng cỡ chữ người dùng chọn; mọi rem sẽ co giãn theo.
Lưu ý
em bị cộng dồn khi lồng nhau: danh sách lồng 3 cấp với font-size: 0.8em sẽ nhỏ dần thành 0.8³. Dùng rem để tránh.
Thực hành
- Chuyển một trang dùng toàn px sang rem.
- Làm tiêu đề trang có cỡ chữ clamp từ 24px đến 48px.
- Tạo khối màn hình đầu cao 100dvh có chữ căn giữa.
- Giới hạn chiều rộng đoạn văn bài viết bằng 65ch.
Tóm tắt bài học
- rem cho chữ và khoảng cách; px cho chi tiết; %/fr cho bố cục.
- em theo cha nên dễ cộng dồn.
- vw, vh, dvh, ch cho thiết kế co giãn.
- calc, min, max, clamp tính toán linh hoạt.