TopDev AI Robot TopDev
#Frontend & Web UI

Tối ưu hóa tải Web Fonts và Ảnh: Loại bỏ hoàn toàn Layout Shift (CLS = 0)

Lan Anh (Senior Frontend)
📖 2 phút đọc 💬 1 phản hồi
⚡ Tóm tắt 30 giây bởi TopDev AI
AI Overview

Hiện tượng chữ nhảy nhót và bố cục xô lệch FOIT & FOUT Chắc hẳn bạn đã nhiều lần trải nghiệm cảm giác: Đang chuẩn bị bấm vào một đường link trên điện thoại thì bỗng nhiên font chữ hoặc ảnh tải xong, …

☰ Mục lục bài viết (4 phần) Mở / Đóng mục lục

Hiện tượng chữ nhảy nhót và bố cục xô lệch (FOIT & FOUT)#

Chắc hẳn bạn đã nhiều lần trải nghiệm cảm giác: Đang chuẩn bị bấm vào một đường link trên điện thoại thì bỗng nhiên font chữ hoặc ảnh tải xong, đẩy toàn bộ nội dung thụt xuống, khiến bạn bấm nhầm vào một banner quảng cáo khác.

Đây là lỗi Cumulative Layout Shift (CLS) – kẻ thù số 1 của trải nghiệm người dùng di động.

Dưới đây là phương pháp đưa chỉ số CLS về tuyệt đối bằng 0.000.

1. Tối ưu Web Font với font-display: swap và size-adjust#

Khi dùng font ngoài (như Inter hoặc Roboto), luôn khai báo font fallback hệ thống với thông số điều chỉnh kích thước (size-adjust) để font dự phòng có cùng chiều cao dòng chính xác:

CSS
@font-face {
  font-family: 'Inter';
  src: url('/fonts/inter.woff2') format('woff2');
  font-display: swap;
  font-weight: 400 700;
}

/* Tinh chỉnh font hệ thống để không bị giật khi font Inter tải xong */
@font-face {
  font-family: 'Inter-Fallback';
  src: local('Arial');
  ascent-override: 90%;
  descent-override: 22%;
  line-gap-override: 0%;
  size-adjust: 107%;
}

2. Loại bỏ Layout Shift cho Ảnh bằng CSS aspect-ratio#

Không bao giờ chèn thẻ <img> mà không khai báo kích thước hoặc tỷ lệ khung hình:

HTML
<!-- Khai báo thuộc tính width và height chuẩn -->
<img 
  src="/images/post-cover.webp" 
  alt="Ảnh minh họa" 
  width="800" 
  height="450" 
  class="w-full h-auto aspect-video rounded-xl bg-gray-100 dark:bg-gray-800"
  loading="lazy"
  decoding="async"
/>

Trình duyệt sẽ tự động tính toán tỷ lệ $800 / 450 = 16:9$ và giữ chỗ sẵn một khoảng trống chính xác trước khi ảnh kịp tải về.

Góc thảo luận#

Bạn đã từng dùng công cụ tự động generate fallback font (như @next/font hoặc Astro Font) chưa? Bạn đánh giá điểm CLS trên website của mình thế nào?


Xem thêm nội dung liên quan:

Chia sẻ thảo luận này:

Thảo luận

1 phản hồi

Ý kiến từ cộng đồng kỹ sư TopDev
💬

Tham gia thảo luận

Cộng đồng mở · Đăng nhập 1-chạm qua Google
  1. Hoàng Nam (Tech Lead)
    #1

    Dùng định dạng .woff2 nén siêu tốt kết hợp với tự host font trên cùng domain (Self-hosting fonts) thay vì gọi Google Fonts qua CDN của bên thứ ba vừa tăng tốc độ tải, vừa tuân thủ đạo luật GDPR bảo vệ dữ liệu.

Bài liên quan trong #Frontend & Web UI

1
TopDev AI Companion
AI
✓ Đã sao chép link