mcpField
V
viewports

viewports

github.com/playful-design测试与质量1685 次安装1 周前更新
代码仓库

关于 viewports

viewports 是用于检查网页响应式布局的技能,会在指定视口尺寸渲染页面并测量溢出、文字裁切、小目标和仅悬停可见的控件。它还检查断点边缘、短屏幕对话框和文本放大,并按宽度报告问题。

主要功能

  1. 01在固定尺寸及断点边缘渲染页面
  2. 02测量横向溢出与文字裁切
  3. 03检查触控视口中的悬停专属控件
  4. 04验证短屏幕叠层内容与操作可达性
  5. 05在 200% 字号下检查布局并按宽度报告

适用场景

  1. 01布局变更后检查多个视口尺寸
  2. 02查找断点附近的响应式问题
  3. 03验证触控设备上的行操作与菜单
  4. 04检查横屏短视口和放大文字下的对话框

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/playful-design/router --skill viewports

安装后在 Claude Code 中输入/viewports确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
overflow.js
agents/
openai.yaml

详细介绍

视口

此技能会以一组固定的宽度和高度渲染页面,并检查每次渲染是否存在横向滚动、文本裁切、目标区域过小,以及只能通过悬停显示的控件。

每种宽度都实际渲染,不靠推断

宽度取精确值:320、375、768、1024 和 1440,以及每个项目断点上下各 1px。根据媒体查询推断出来的宽度不能算作检查结果。任何布局变更后,以及用户指定手机型号或宽度时,都要运行此检查。

打开结果属于 verify。单次渲染内的对齐属于 alignment。安全区域、点击区域和动态视口单位属于 defaults,相关失败需注明其 id。

1. 读取断点

从 CSS、Tailwind 配置或 tokens 中读取断点。将每个断点上下各 1px 的宽度加入固定宽度列表。跳过断点边界的扫描属于 viewports-cross-each-breakpoint。

2. 渲染每种宽度

通过设备模拟,在每种宽度下设置视口。使用 320×568、375×812、768×1024、1024×768 和 1440×900。断点边界的渲染高度设为 800px。在所有小于 1024 的宽度下模拟触摸操作。为每种宽度截取整页截图。根据代码判断布局属于 viewports-render-every-width。

3. 测量每次渲染

在每种宽度下,通过浏览器的 evaluate 调用运行 overflow.js。在该宽度的截图中确认结果之前,将每项结果视为待核查项。

页面不得横向滚动,但页面内的框可以滚动。在 320 宽度下横向滚动 40px 属于 viewports-no-sideways-scroll。

文本不得在没有省略号或截断样式的情况下被框裁切。在 375 宽度下,按钮标签被截掉一半属于 viewports-no-clipped-text。目标区域小于 24px 时,注明 defaults-hit-area。

4. 在触摸宽度下点击

模拟触摸操作,逐一点击页面。行操作、复制按钮和菜单若只在悬停时出现,就需要提供其他显示方式。删除按钮只在悬停行时显示,属于 viewports-no-hover-only-controls。

5. 缩短高度

渲染 812×375,即横屏握持的手机尺寸。在该尺寸下打开每个对话框、底部弹层和菜单。内容应在覆盖层内滚动,且操作按钮始终可触及。对话框中的 Save 按钮落在屏幕下方且无法滚动,属于 viewports-short-heights。

6. 将文本放大一倍

在 1024 宽度下,将根字体大小设为 200%,然后重新渲染。文本应换行,文本框应随之增大,且不得互相重叠。200% 缩放时标签与图标重叠,属于 viewports-text-zoom。因尺寸设为 px 而无法扩展的布局也使用同一 id。

7. 按宽度报告

每种宽度返回一张截图,并标注覆盖层编号,然后按相同顺序列出检查结果。未注明宽度的检查结果属于 viewports-name-the-width。

对照示例

每项检查都包含一组对照:错误写法旁边列出替代写法。

规则错误写法替代写法
viewports-cross-each-breakpoint只在 375 和 1440 下检查也在 767 和 768、1023 和 1024 下检查
viewports-render-every-width“网格会在 md 处折叠,所以移动端没问题”提供 320、375 和 768 下的截图
viewports-no-sideways-scroll在 320 宽度下使用 width: 400px 的卡片为卡片设置 max-width: 100%
viewports-no-clipped-textoverflow: hidden 在 375 宽度下裁切标签标签换行,或截断并提供恢复完整内容的方式
viewports-no-hover-only-controls行操作仅通过 :hover 显示在 (hover: none) 下始终显示
viewports-short-heights对话框的 Save 按钮位于 375px 高的屏幕下方设置 max-height: 100dvh 并使正文可滚动
viewports-text-zoom按钮设置 height: 32px,在 200% 缩放时裁切内容设置 min-height: 2rem 并添加内边距
viewports-name-the-width“页眉重叠了”“在 768 宽度下,页眉与搜索框重叠”

报告

严重性。 HIGH 指页面出现横向滚动、仅悬停时才会显示的控件在触屏设备上无法显示,或在视口高度较小时无法触及的操作。MEDIUM 指文字被截断、文字放大到 200% 时出现重叠,或断点边缘处出现问题。LOW 指未标明宽度的发现。

格式。 每个根本原因列出一条发现,并标明宽度:

1. file:line - [rule-id] at 375, what is wrong (measured values)

如果未找到源代码行,请引用脚本中的元素。然后提供 Rule | Count | Severity 汇总。仍存在任何 HIGH 时标记为 Block,否则标记为 Approve。将无法渲染的宽度标记为 Not verified。

评论

支持 Markdown