internal/skills/content/html-css-guide/SKILL.md
HTML and CSS guardrails, patterns, and best practices for AI-assisted development. Use when working with HTML/CSS files (.html, .css, .scss, .less), or when the user mentions HTML/CSS. Provides semantic HTML guidelines, accessibility standards, modern CSS patterns, and responsive design conventions specific to this project's coding standards.
npx skillsauth add ar4mirez/samuel html-css-guideInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Applies to: HTML5, CSS3, SCSS/LESS, Responsive Design, WCAG 2.1 AA
min-width media queries<main> once per page; <header>, <footer>, <nav>, <aside> for landmarks<article> for self-contained content; <section> for thematic groups with a heading<figure>/<figcaption> for captioned media; <time datetime="..."> for dates<h1>-<h6>) must follow a logical outline; never skip levels for styling<button> for actions and <a> for navigation; never <div onclick><ul>, <ol>, <dl>) for groups of related items; not <div> sequences<article>
<header>
<h2>Deploying with Zero Downtime</h2>
<time datetime="2025-03-15">March 15, 2025</time>
</header>
<section aria-labelledby="prereqs">
<h3 id="prereqs">Prerequisites</h3>
<ul>
<li>Container runtime (Docker or Podman)</li>
<li>Load balancer with health checks</li>
</ul>
</section>
</article>
<img> must have alt; decorative images use alt=""<label> elements (use for/id)outline: none without a replacementaria-live="polite" for dynamic updates; role="alert" for immediate announcementsaria-expanded, aria-controls, aria-haspopup for disclosure widgets<a href="#main" class="skip-link">Skip to main content</a>
<form aria-labelledby="signup-heading">
<h2 id="signup-heading">Create Account</h2>
<label for="email">Email</label>
<input id="email" type="email" required autocomplete="email"
aria-describedby="email-hint" />
<p id="email-hint" class="hint">We will never share your email.</p>
<button type="submit">Create Account</button>
</form>
card.css, nav.css)@layer for specificity control: reset, base, layout, components, utilities.block__element--modifier) or utility-first -- pick one, stay consistent!important outside utility overrides; fix specificity instead@layer reset, base, layout, components, utilities;
@layer base {
:root {
--color-primary: oklch(55% 0.22 265);
--color-surface: oklch(98% 0.005 265);
--color-text: oklch(20% 0.02 265);
--space-sm: 0.5rem;
--space-md: 1rem;
--space-lg: 2rem;
--radius-md: 0.5rem;
--font-body: system-ui, -apple-system, sans-serif;
}
}
@layer components {
.card { background: var(--color-surface); border-radius: var(--radius-md); padding: var(--space-md); }
.card__title { font-size: 1.25rem; color: var(--color-text); }
.card--featured { border: 2px solid var(--color-primary); }
}
<head> for first contentful paintfont-display: swap for web fonts; prefer system font stacks<picture> with fallbackstransform and opacity to avoid layout reflowscontent-visibility: auto for off-screen sectionswidth/height or aspect-ratio on media to prevent layout shift<picture>
<source srcset="hero.avif" type="image/avif" />
<source srcset="hero.webp" type="image/webp" />
<img src="hero.jpg" alt="Dashboard overview" width="1200" height="630"
loading="lazy" decoding="async" />
</picture>
min-width queriesrem/em for sizing; reserve px for borders and fine details onlyclamp(): font-size: clamp(1rem, 0.5rem + 1.5vw, 1.5rem)@container) for component-level responsivenessUse CSS Grid for page layouts with rows and columns; use Flexbox for single-axis alignment.
/* Grid: 2D page layout */
.page {
display: grid;
grid-template: "header header" auto "sidebar main" 1fr "footer footer" auto / 16rem 1fr;
min-height: 100dvh;
}
/* Flexbox: 1D navigation */
.nav { display: flex; align-items: center; gap: var(--space-md); }
.nav__logo { margin-right: auto; }
.card-container { container-type: inline-size; container-name: card; }
@container card (min-width: 30rem) {
.card { flex-direction: row; align-items: center; }
}
.field:has(input:focus) { outline: 2px solid var(--color-primary); }
.card:has(img) { padding: 0; }
form:has(:invalid) button[type="submit"] { opacity: 0.5; pointer-events: none; }
@layer reset, base, layout, components, utilities;
@layer reset { *, *::before, *::after { box-sizing: border-box; margin: 0; } }
@layer utilities {
.visually-hidden {
clip: rect(0 0 0 0); clip-path: inset(50%); height: 1px;
overflow: hidden; position: absolute; white-space: nowrap; width: 1px;
}
}
:root { color-scheme: light dark; --color-bg: oklch(98% 0.005 265); }
@media (prefers-color-scheme: dark) { :root { --color-bg: oklch(15% 0.02 265); } }
[data-theme="dark"] { --color-bg: oklch(15% 0.02 265); }
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important; transition-duration: 0.01ms !important;
}
}
Perceivable
alt (or alt="" for decorative)Operable
Understandable
<html lang="..."> set correctlyRobust
npx stylelint "**/*.css" # CSS lint
npx stylelint "**/*.css" --fix # CSS lint auto-fix
npx htmlhint "**/*.html" # HTML validation
npx prettier --check "**/*.{html,css,scss}" # Format check
npx prettier --write "**/*.{html,css,scss}" # Format fix
npx lighthouse http://localhost:3000 --output html --view # Audit
npx @axe-core/cli http://localhost:3000 # Accessibility check
npx pa11y http://localhost:3000 # Accessibility test
{
"extends": ["stylelint-config-standard"],
"rules": {
"declaration-no-important": true,
"selector-max-specificity": "0,3,0",
"max-nesting-depth": 3,
"color-function-notation": "modern",
"selector-class-pattern": "^[a-z][a-z0-9]*(__[a-z0-9-]+)?(--[a-z0-9-]+)?$"
}
}
For detailed layout examples, accessibility patterns, and modern CSS features, see:
development
Zig language guardrails, patterns, and best practices for AI-assisted development. Use when working with Zig files (.zig), build.zig, or when the user mentions Zig. Provides comptime patterns, allocator conventions, C interop guidelines, and testing standards specific to this project's coding standards.
tools
WordPress framework guardrails, patterns, and best practices for AI-assisted development. Use when working with WordPress projects, or when the user mentions WordPress. Provides theme development, plugin architecture, REST API, blocks, and security guidelines.
tools
Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs. Use when testing web apps, automating browser interactions, or debugging frontend issues.
tools
Suite of tools for creating elaborate, multi-component web applications using modern frontend technologies (React, Tailwind CSS, shadcn/ui). Use for complex projects requiring state management, routing, or shadcn/ui components - not for simple single-file HTML/JSX pages.