Web Design Review Results
Summary
| Item | Value |
|---|---|
| Target URL | file://…/.claude/skills/web-design-reviewer/sample/index.html |
| Framework | None (static HTML) |
| Styling | Inline <style> block in index.html |
| Tested Viewports | Desktop 1280×800, Mobile 375×800 |
| Issues Detected | 8 |
| Issues Fixed | 0 (report only, as requested) |
Screenshots are in .claude/skills/web-design-reviewer/shots/desktop.png and mobile.png.
Detected Issues
[P1] Cards overflow the viewport on mobile
- Page:
/ - Element:
.cardsand.card(index.html:11-12) - Issue: Each card is a fixed 320px with
flex:nonein a non-wrapping row. At 375px only the first card is visible and it is clipped on the right. The other two cards are off-screen and the page scrolls sideways. The hero heading and paragraph are also cut off at the right edge, which suggests the page is wider than the viewport. - Fix:
Alternatively, keep flex and use.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:24px;padding:32px 16px} .card{border:1px solid #ddd;padding:16px} /* drop width:320px and flex:none */flex-wrap:wrapwith.card{flex:1 1 260px}.
[P1] Hero paragraph has insufficient contrast
- Element:
.hero p(index.html:9) - Issue:
#c9b9a6on#f3e9dcis about 1.6:1, against the 4.5:1 AA requirement. The text is nearly unreadable. - Fix:
color:#5a4636, which is about 7:1 on the hero background.
[P1] Price badges are positioned fragilely and overlap
- Element:
.price(index.html:15) - Issue: The badge uses
position:absolutewith hard-codedmargin-top:-40pxandmargin-left:200px. It has no positioned ancestor, so it floats at an arbitrary spot. It sits beside the title instead of at a deliberate corner. On narrower cards it would collide with the title or fall outside the card. - Fix:
Or put the title and price in a flex row with.card{position:relative} .price{position:absolute;top:24px;right:24px;margin:0;...}justify-content:space-between.
[P1] "Order now" CTA is too small
- Element:
.cta(index.html:10) - Issue: The button has 11px text and 4px/8px padding, so it is about 20px tall. That is far below the 44×44px touch target, and it is the page's primary action. White on
#8a5a2bhas acceptable contrast, at about 5.5:1. - Fix:
padding:12px 24px;font-size:16px;min-height:44px;border-radius:4px.
[P2] Missing image alt text and broken images
- Element:
.card img(index.html:21-23) - Issue: The images have no
altattribute.x.pngalso fails to load, so a broken-image icon shows on a grey block. - Fix: Add descriptive alt text, for example
alt="House Blend coffee bag", and pointsrcat real assets. Addobject-fit:coverto.card img.
[P2] No focus or hover states
- Element:
header a,.cta - Issue: No
:focus-visibleor:hoverstyles are defined. Keyboard users get only the browser default, which is hard to see on the dark header. The nav links also have no hover feedback. - Fix:
a:focus-visible{outline:3px solid #f5a623;outline-offset:2px} header a:hover,.cta:hover{text-decoration:underline}
[P2] Card headings use a different font
- Element:
.card h3(index.html:14) - Issue: The headings are Arial sans-serif, while the rest of the page is Georgia serif. The mix looks accidental.
- Fix: Remove the
font-familyoverride, or apply one deliberate heading font to every heading, includingh1.
[P3] Smaller polish items
- Nav on mobile: The three links fit at 375px, but they are about 20px tall and sit close together. Add
padding:12px 0to the links. Considerflex-wrap:wrap, because more items will break the header. - Footer text: At 13px it is small. Use at least 14px.
- Layout width: No
max-widthor centering. At 1280px the cards leave empty space on the right, and wider screens will look unbalanced. Wrap the content in a container withmax-width:1100px;margin:auto. - Hero heading: Use
font-size:clamp(28px,6vw,44px)so it scales on small screens. - Document title:
<title>Brew & Co</title>has an unescaped&. Use&.
Unfixed Issues
All of the above are unfixed because this environment is read-only. The fixes are listed per issue.
Recommendations
- Apply the P1 fixes first, then re-screenshot at 375, 768 and 1280, and add 1920 to check the max-width behavior.
- Move the colors into CSS custom properties (for example
--brown,--cream) so contrast is easy to keep consistent. - Add a tablet check at 768px. The card grid fix should give two columns there, but I haven't verified it.
- My first screenshot call was blocked by the sandbox's command check. Re-running the two screenshot commands separately worked.
试用方式:这是“部分试用”。试用环境没有浏览器工具,所以我提供了一个只会用无头 Chrome 截图的脚本,模型用它截图并用 Read 看图;我做了一个有 8 处故意缺陷的静态页面。试用环境不能改文件,所以只做了检查和报告,没有做修改源码并复查。我复算了对比度(1.6:1 和修复后约 7:1)与报告一致。
它做什么
通过浏览器自动化查看本地、预发布或线上(只读)运行的网站,找出视觉问题并在你的源码里修复。它会在四种视口(375、768、1280、1920 px)下检查元素溢出与重叠、对齐与间距、文字被截断、手机端布局、触控目标、对比度、焦点状态、图片替代文字,以及字体和颜色的一致性。能识别你的框架和样式方案(纯 CSS、SCSS、CSS Modules、Tailwind、styled-components 等),并为每种方案提供修复指南。
工作方式
- 先确认网址,并识别项目和样式方案。
- 截图并获取 DOM,把问题按 P1 到 P3 分级,再追溯到源文件。
- 做最小的修复,刷新后对比修复前后,必要时重复;同一个问题修了三次仍不行就来问你。
- 输出报告:已发现、已修复和未修复的问题。
适合什么场景
清理布局和响应式 bug,发布前做一轮视觉检查。
中风险:它会修改你项目里已有的源码(样式和组件),请先提交或备份,并检查改动。它自己的规则要求只做最小改动、遵循你的代码风格、大改动前先确认、线上环境只读。它需要浏览器自动化(Skill 推荐 Playwright MCP,用 `npx -y @playwright/mcp@latest` 启动,会下载并运行一个包),并且会访问你给的任何网址。部分试用:只试了“检查并出报告”这一半。我做了一个有 8 处故意缺陷的页面,用无头 Chrome 截图代替 Playwright,模型在桌面和手机宽度下全部找出(卡片溢出、对比度 1.6:1、按钮太小、缺 alt、字体不一致、定位重叠等),给的修复建议和对比度数值经我复算是对的。没有试“修改源码并复查”这一半,也没有用 Playwright MCP。