Communitygithub.com

byteTuto/网站响应式规则

确保 bytetuto.com 每个页面都完全响应式(移动优先,320px → 1920px,无水平滚动)。适用于 site/ 目录下任何页面、CSS、布局、图片或组件的创建或修改,也用于验证影响显示效果的 PR。

网站响应式规则 是什么?

该技能为 bytetuto.com 网站提供了全面的响应式设计规则,要求所有页面在 320px 到 1920px 的六个参考宽度下都必须通过 `python3 scripts/check_responsive.py` 脚本的检查(无水平滚动、无内容溢出、触控目标足够大)。其核心原则是移动优先,使用 `min-width` 媒体查询逐步扩展布局,并采用 `clamp()` 实现流畅排版。技能还规定了 CSS 规则(如无固定宽度、使用 `min-height: 100svh`、安全的触控间距)、图片优化方法(指定宽高、响应式图片集)以及性能指导(尊重 `prefers-reduced-motion`、限制 `devicePixelRatio`)。CI 流程会自动运行检查,任何破坏响应式的 PR 都无法部署。该技能适用于 Claude Code、Cursor 等 AI 编码助手,开发者可在编辑 site/ 目录下文件、提交 PR 前或设计新组件时调用,以强制保持一致的响应式质量。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/byteTuto/website/tree/HEAD/.claude/skills/site-responsive

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

网站始终响应式

一个页面只有在通过 python3 scripts/check_responsive.py 检查后才算完成(无水平滚动,无内容超出屏幕,触控目标足够大),该脚本会在六个参考尺寸上运行。此检查也会在 CI 中执行:破坏响应式的 PR 无法部署。

参考宽度(需全部测试)

宽度用例
320 px小屏 Android、iPhone SE 放大模式
375 px标准 iPhone(目标受众主要来自 TikTok)
414 px大屏手机
768 px平板竖屏
1024 px平板横屏 / 小笔记本电脑
1440 px桌面端

脚本测试的尺寸:320×640、375×667、414×896、768×1024、1024×600(低屏)、1440×900。

CSS 规则

  1. 移动优先:基础样式针对 320 px,然后用 @media (min-width: …) 扩展。断点:600px、900px、1200px(其他地方不应使用魔数;组件可以使用 @container)。
  2. 无固定宽度超过 280 px 而不使用 min() / max-width: 100%:例如 width: min(520px, 100%)。
  3. 流畅排版使用 clamp():标题 clamp(32px, 7vw, 72px),正文最低 16 px(移动端不得低于此值,否则 iOS 会放大输入框)。
  4. 高度:使用 min-height: 100svh(不要用 100vh,它在移动端会被地址栏遮挡)。文本块上绝不使用固定 height。
  5. 侧边距:移动端留 16 px 间距(space-4),加上 env(safe-area-inset-left/right) 适配刘海屏(viewport 已设置 viewport-fit=cover)。
  6. 长文本:URL、命令和文件名使用 overflow-wrap: anywhere;代码块使用 overflow-x: auto 仅限于块内部,绝不作用于页面。
  7. 网格:教程卡片使用 grid-template-columns: repeat(auto-fill, minmax(min(280px, 100%), 1fr))。
  8. 装饰元素(byte/spark 块、canvas)可能溢出时:使用 position: fixed 或父级设置 overflow: clip,尺寸使用 min(vw, px)。
  9. 触控:独立的按钮和链接至少 44 × 44 px(脚本最低要求 24 px,符合 WCAG 2.2),两个目标之间至少间隔 8 px。不应有仅通过悬停(:hover)提供的信息:必须考虑 :focus-visible 和触控状态。
  10. 视频和 iframe(YouTube):aspect-ratio: 16 / 9; width: 100%; height: auto; — TikTok 视频使用 9 / 16 并设置 max-width: 360px。

图片

  • HTML 中始终指定 width 和 height(避免布局偏移 CLS)+ CSS 中设置 max-width: 100%; height: auto。
  • 格式:Logo 和图标使用 SVG,截图使用 WebP/AVIF,并配合 srcset + sizes(例如 480w、960w、1600w)。
  • 首屏以下图片使用 loading="lazy" 和 decoding="async";绝不用于 LCP 主图,主图应使用 fetchpriority="high"。
  • 教程缩略图:aspect-ratio: 16 / 9; object-fit: cover。

Viewport(已设置,不要移除)

<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">

禁止使用:maximum-scale=1、user-scalable=no(阻止缩放,不利于无障碍)。

动画与移动端性能

  • 尊重 prefers-reduced-motion(项目规则)。
  • Canvas:限制 devicePixelRatio 为 2,并在 600 px 以下降低密度(已在 app.js 中实现,保持此原则)。
  • 移动端避免使用叠加的重 backdrop-filter。

验证

# 使用已启动的 check-site 容器(:8088),或不带参数启动本地服务器(site/)
python3 scripts/check_responsive.py                 # 检查 site/ 下所有页面
python3 scripts/check_responsive.py --shots /tmp/rs # 额外按宽度截取 PNG 截图

脚本会在以下情况失败:scrollWidth > 宽度、可见元素超出边缘、触控目标小于 24 px(句子中的链接豁免)或正文小于 16 px。推送前请查看 320 和 375 px 的截图。

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

相关技能