You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现类似YouTube的可适配屏幕尺寸与主题的预加载器

YouTube风格自适应预加载器实现说明

这类预加载器叫做骨架屏(Skeleton Screen,也叫内容占位加载器),不需要使用图片实现,绝大多数场景下都可以通过纯HTML+CSS实现,仅需极少量JS做动态适配即可。

核心自适应能力实现逻辑

  • 屏幕尺寸适配:骨架屏的布局和尺寸完全使用响应式CSS规则实现,比如用百分比、vw/rem等相对单位定义占位块的宽高,配合媒体查询适配不同屏幕断点下的布局,完全可以做到和实际页面内容结构的自适应逻辑对齐。
  • 深浅主题自动适配:可以通过CSS的prefers-color-scheme媒体查询自动匹配系统主题,也可以配合站点的主题切换JS逻辑修改CSS变量值,就能实时切换骨架屏的背景色、动效色,不需要做多套图片资源。

可直接复用的实现示例

你已有的预加载器隐藏逻辑不需要修改,只需新增骨架屏的HTML结构和CSS样式即可:

HTML结构(放入你的#preloader容器内)

<div id="preloader">
  <!-- 顶部导航占位 -->
  <div class="skeleton-nav"></div>
  <!-- 视频内容区占位 -->
  <div class="skeleton-video"></div>
  <!-- 下方信息区占位 -->
  <div class="skeleton-info">
    <div class="skeleton-line short"></div>
    <div class="skeleton-line"></div>
    <div class="skeleton-line half"></div>
  </div>
</div>

CSS样式(包含响应式和主题适配逻辑)

/* 基础变量定义 */
:root {
  --skeleton-bg: #f2f2f2;
  --skeleton-shine: #e6e6e6;
}
/* 深色主题适配 */
@media (prefers-color-scheme: dark) {
  :root {
    --skeleton-bg: #282828;
    --skeleton-shine: #383838;
  }
}
#preloader {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100vh;
  background: #fff;
  z-index: 9999;
  overflow: hidden;
  padding: 20px;
  box-sizing: border-box;
}
/* 深色模式下预加载器背景适配 */
@media (prefers-color-scheme: dark) {
  #preloader {
    background: #0f0f0f;
  }
}
/* 骨架块通用样式 + 闪动动效 */
.skeleton-nav, .skeleton-video, .skeleton-line {
  background: linear-gradient(90deg, var(--skeleton-bg) 25%, var(--skeleton-shine) 50%, var(--skeleton-bg) 75%);
  background-size: 200% 100%;
  animation: skeleton-shine 1.5s infinite linear;
  border-radius: 4px;
  margin-bottom: 16px;
}
@keyframes skeleton-shine {
  0% { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}
/* 响应式尺寸定义 */
.skeleton-nav {
  height: 40px;
  width: 100%;
}
.skeleton-video {
  aspect-ratio: 16/9;
  width: 100%;
  max-width: 1200px;
  margin: 20px auto;
}
.skeleton-line {
  height: 16px;
  width: 100%;
}
.skeleton-line.short {
  width: 60%;
}
.skeleton-line.half {
  width: 40%;
}
/* 小屏幕适配 */
@media (max-width: 768px) {
  .skeleton-video {
    margin: 12px 0;
  }
  .skeleton-line {
    height: 14px;
  }
}

如果你的站点有手动切换主题的功能,只需要在主题切换的JS逻辑里同步修改:root下的--skeleton-bg和--skeleton-shine两个变量值即可实现预加载器主题同步切换。

内容的提问来源于stack exchange,提问作者Amal nandan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:39:04