Skip to main content

pour:无障碍检查工具

使用 pour 引擎检查网页和 UI 代码中的 WCAG 2.2 无障碍失败项并进行修复。

来源信息

仓库
pourdev/pour-cli
最近来源活动
2026年10月17日 07:49
检测到的 SKILL.md 语言
英语
星标
0
Forks
0

用途

在创建或修改渲染页面的 HTML、组件、模板或样式时使用;当被问及无障碍、a11y、WCAG、屏幕阅读器、键盘访问、焦点顺序、色彩对比度或替代文本时使用;以及在报告 UI 工作完成之前使用。

必要前提

需要 pour 命令以及用于页面审计的 Chrome 或 Chromium。

操作说明

  1. 对更改的源文件运行 pour check
  2. 在开发服务器上审计渲染页面
  3. 记录审计状态
  4. 在源代码中修复问题
  5. 再次审计
  6. 检查键盘路径

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
pour
description
Check web pages and UI code for WCAG 2.2 accessibility failures with the pour engine, and fix what it finds. Use when creating or changing HTML, components, templates or styles that render a page; when asked about accessibility, a11y, WCAG, screen readers, keyboard access, focus order, colour contrast or alt text; and before reporting UI work as finished.
license
MIT
compatibility
Needs the pour command (npm install -g pour-cli, or npx -y pour-cli) and an installed Chrome or Chromium for page audits. Uses the pour MCP server (pour mcp) when the client has it.
# Checking accessibility with pour pour checks web pages against WCAG 2.2 Level A and AA with its own engine. Its results come in two kinds, and they must be kept apart: - **Violations** are failures the engine can demonstrate from the page. Fix them. - **Needs review** means the engine abstained: the answer depends on something it cannot know, such as whether an image is decorative or whether captions match the audio. Do not count these as failures, and do not change code to make them go away by guessing. List them for the user as things a person needs to look at. A clean result means pour found no failure it can detect. Automated checks cover only part of WCAG, so never tell the user that a page is accessible, compliant or conformant because a pour run came back clean. ## Tools When the MCP tools from `pour mcp` are available, use them: | Tool | Use | | --- | --- | | `pour_audit` | Audit a page. Takes `url` (a running dev server is fine) or `path` (a file on disk), plus `viewport`, `scroll`, `bestPractices`, `exclude`, `detail` and `maxNodes`. A template or component `path` is read as source. | | `pour_focus_order` | The order the Tab key visits the page's controls, each with its accessible name, and the controls a `tabindex="-1"` has put out of reach. | | `pour_screenshot` | A PNG of the page as it is, or through a simulation such as `deuteranopia`, `lowAcuity`, `focusOrder` or `landmarkMap`. | Otherwise use the command line. If `pour` is not installed, `npx -y pour-cli` runs the same command. ```sh pour check src/components/Nav.tsx --format json # source files, no browser pour http://localhost:5173/ --format json # the rendered page pour dist/index.html --format json # a built page on disk pour http://localhost:5173/ --viewport 390x844 # a phone-width layout pour http://localhost:5173/ --filter deuteranopia --shot cb.png pour --filter list # every simulation name ``` Exit codes: 0 nothing found, 1 findings, 2 an error (an address that does not load, a verification challenge, a sign-in page). Exit code 1 is the normal result of finding something, not a broken command. ## Workflow 1. **Source first.** After editing markup, run `pour check` on the changed files (HTML, JSX, TSX, Vue, Svelte, Liquid, Nunjucks). Findings carry the file, line and column. Values that come from code are counted under `abstained`, not judged. 2. **Then the rendered page.** Colour contrast, focus order, computed names and anything built by script exist only in a browser. Start the project's dev server if it is not running, and audit each page the change touches. 3. **Note the state you audited.** Results depend on the viewport width, whether the page was scrolled (`scroll`, or `--scroll`, loads lazy content) and what was open. Audit at the default width, and at 390x844 as well when the change affects a responsive layout. 4. **Fix in the source**, guided by the Fix line the engine gives for each element. Make the smallest change that removes the failure. 5. **Audit again** in the same state and compare. Repeat until the violations in scope are gone, or explain why one remains. 6. **Check the keyboard path** with `pour_focus_order` after changing anything interactive: every control reachable, named, and visited in an order that follows the layout. ## Fixing without hiding - Never make a finding disappear without fixing it. Do not use `exclude`, `aria-hidden="true"`, `role="presentation"`, `tabindex="-1"` or `display: none` on content or controls that people need. - Prefer native HTML to ARIA: `<button>` over a `div` with `role="button"`, a `<label>` over `aria-label`. Add ARIA only when native HTML cannot express the thing. - A control's accessible name must contain its visible text (WCAG 2.5.3). Do not give a button an `aria-label` that differs from the words on it. - Alt text says what an image is for in its context. Use `alt=""` only for images that add nothing. When you cannot tell what an image shows, ask the user rather than invent a description. - For contrast, change the colour where it is defined (a design token or a custom property), then audit again. Quote the ratio pour reports rather than estimating one. - When a fix needs a decision only the user can make (wording, a brand colour, whether content is decorative), ask. ## Reading results - `pour <page> --format json` gives the engine's full results. `violations` and `incomplete` (needs review) hold one entry per rule, with `id`, `impact`, `tags`, `help`, `helpUrl` and `nodes`. Each node has `target` (a CSS path), `html` and `failureSummary`, where the text after `Fix:` is the fix. - `pour_audit` returns a compact form: `totals`, then `violations` and `needsReview`, each rule with its `wcag` criteria and up to `maxNodes` elements, each with `target`, `html`, `message` and `fix`. Pass `detail: "summary"` for the counts alone. - `pour check --format json` gives `files[].findings[]`, each with `kind` (`violation` or `review`), `rule`, `impact`, `sc`, `message`, `fix`, `file`, `line` and `col`. ## Reporting to the user Say what was audited (the address or the files), the viewport, and whether the page was scrolled. Give the violations before and after, by rule, with what changed. List the needs-review items separately, as things for a person to check. Close with what pour cannot check, such as whether alt text is accurate or whether the page makes sense read aloud, not with a claim of compliance. ## When pour cannot run - **No browser:** page audits need Chrome or Chromium; `--browser <path>` names one. `pour check` needs no browser. - **A verification challenge or a sign-in page:** pour will not audit it and exits with 2. Tell the user. `--login` opens a window for them to sign in; it needs a person, so never use it unattended. - **A dev server with a self-signed certificate:** `--insecure`. - **A slow page:** `--wait <ms>` adds settle time after load.
在 GitHub 查看