Đến nội dung chính

Khung xương

Dùng để dựng trước hình dạng của nội dung sắp tới, để trang không giật khi dữ liệu về.

Phản hồi

Xem trước trực tiếp

Nguồn

<div class="dc-skel">
  <p class="dc-sr" role="status">내용을 불러오는 중입니다</p>
  <div class="dc-skel__card" aria-hidden="true">
    <div class="dc-skel__shape dc-skel__media"></div>
    <div class="dc-skel__stack">
      <div class="dc-skel__shape dc-skel__line dc-skel__line--title"></div>
      <div class="dc-skel__shape dc-skel__line"></div>
      <div class="dc-skel__shape dc-skel__line dc-skel__line--short"></div>
    </div>
  </div>
</div>
.dc-skel { max-width: 420px; font-family: var(--dc-font); }
.dc-skel__card {
  display: flex; flex-direction: column; gap: var(--dc-3);
  padding: var(--dc-4);
  border: 1px solid var(--dc-line);
  border-radius: var(--dc-r-md);
  background: var(--dc-surface);
}
.dc-skel__stack { display: flex; flex-direction: column; gap: var(--dc-2); flex: 1 1 auto; min-width: 0; }
.dc-skel__shape {
  position: relative; overflow: hidden;
  background: var(--dc-sunken);
  border-radius: var(--dc-r-xs);
}
.dc-skel__shape::after {
  content: ""; position: absolute; inset: 0;
  transform: translateX(-100%);
  background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--dc-text) 9%, transparent), transparent);
  animation: dc-skel-pass 1400ms ease-in-out infinite;
}
.dc-skel__media { height: 140px; border-radius: var(--dc-r-sm); }
.dc-skel__line { height: 12px; }
.dc-skel__line--title { height: 16px; width: 62%; }
.dc-skel__line--short { width: 40%; }
.dc-skel__avatar { flex: none; width: 44px; height: 44px; border-radius: var(--dc-r-full); }
.dc-skel__list { display: flex; flex-direction: column; gap: var(--dc-4); margin: 0; padding: 0; list-style: none; }
.dc-skel__row { display: flex; align-items: center; gap: var(--dc-3); }
@keyframes dc-skel-pass { to { transform: translateX(100%); } }
@media (prefers-reduced-motion: reduce) {
  .dc-skel__shape::after { display: none; }
}

Cách dùng

  • Giữ đúng chiều cao và đúng số dòng như nội dung thật — lệch là trang sẽ giật
  • Dùng cho lần tải đầu; khi tải lại danh sách đã xem, giữ nội dung cũ và chỉ hiện vòng xoay
  • Nó lấp cả một khối, không dùng cho một hai ô nhỏ

Điểm cần lưu ý

  • Đặt aria-hidden cho các khối hình và để lại một dòng chữ cho trình đọc màn hình
  • Đừng để hiệu ứng lấp lánh chạy mãi — khi tải thất bại phải chuyển sang trạng thái lỗi

Tiếp theo