Communitygithub.com

SamuelChien/mega-skills-collection

Patrones de accesibilidad web para cumplimiento de WCAG 2.2, incluyendo ARIA, navegación por teclado, lectores de pantalla y pruebas.

¿Qué es mega-skills-collection?

Este conjunto de habilidades proporciona una guía completa y práctica para implementar accesibilidad web según los criterios de WCAG 2.2. Incluye patrones comprobados de HTML semántico, uso correcto de ARIA (roles, estados y propiedades), navegación eficiente mediante teclado, y diseño de formularios accesibles. También cubre consideraciones de contraste de color y buenas prácticas para evitar anti-patrones comunes. El contenido está estructurado con ejemplos de código en HTML, CSS y React (TypeScript), lo que lo hace útil para desarrolladores que trabajan con frameworks modernos. Es compatible con herramientas de pruebas como lectores de pantalla (VoiceOver, NVDA) y testing de teclado. La habilidad está diseñada para equipos de desarrollo front-end, diseñadores de UI/UX y cualquier profesional que busque garantizar que sus aplicaciones web sean utilizables por personas con discapacidades visuales, motoras o cognitivas.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/SamuelChien/mega-skills-collection/tree/HEAD/accessibility-wcag

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Accesibilidad y WCAG

HTML Semántico

<!-- Usa elementos semánticos en lugar de divs genéricos -->
<header>
  <nav aria-label="Navegación principal">
    <ul>
      <li><a href="/" aria-current="page">Inicio</a></li>
      <li><a href="/productos">Productos</a></li>
      <li><a href="/acerca-de">Acerca de</a></li>
    </ul>
  </nav>
</header>

<main>
  <article>
    <h1>Detalles del Producto</h1>
    <section aria-labelledby="especificaciones-heading">
      <h2 id="especificaciones-heading">Especificaciones</h2>
      <dl>
        <dt>Peso</dt>
        <dd>1.2 kg</dd>
        <dt>Dimensiones</dt>
        <dd>30 x 20 x 10 cm</dd>
      </dl>
    </section>
  </article>
</main>

<footer>
  <p>&copy; 2024 Nombre de la Empresa</p>
</footer>

Usa <nav>, <main>, <article>, <section>, <aside> en lugar de <div> para puntos de referencia. Los lectores de pantalla utilizan estos elementos para navegar por la página.

Patrones ARIA

function Modal({ isOpen, onClose, title, children }) {
  if (!isOpen) return null;

  return (
    <div
      role="dialog"
      aria-modal="true"
      aria-labelledby="modal-title"
      onKeyDown={(e) => e.key === "Escape" && onClose()}
    >
      <h2 id="modal-title">{title}</h2>
      <div>{children}</div>
      <button onClick={onClose} aria-label="Cerrar diálogo">
        <XIcon aria-hidden="true" />
      </button>
    </div>
  );
}

function Tabs({ tabs, activeIndex, onChange }) {
  return (
    <div>
      <div role="tablist" aria-label="Secciones de configuración">
        {tabs.map((tab, i) => (
          <button
            key={tab.id}
            role="tab"
            id={`tab-${tab.id}`}
            aria-selected={i === activeIndex}
            aria-controls={`panel-${tab.id}`}
            tabIndex={i === activeIndex ? 0 : -1}
            onClick={() => onChange(i)}
            onKeyDown={(e) => handleArrowKeys(e, i, tabs.length, onChange)}
          >
            {tab.label}
          </button>
        ))}
      </div>
      {tabs.map((tab, i) => (
        <div
          key={tab.id}
          role="tabpanel"
          id={`panel-${tab.id}`}
          aria-labelledby={`tab-${tab.id}`}
          hidden={i !== activeIndex}
          tabIndex={0}
        >
          {tab.content}
        </div>
      ))}
    </div>
  );
}

Navegación por Teclado

function handleArrowKeys(
  event: React.KeyboardEvent,
  currentIndex: number,
  totalItems: number,
  onSelect: (index: number) => void
) {
  let newIndex = currentIndex;

  switch (event.key) {
    case "ArrowRight":
    case "ArrowDown":
      newIndex = (currentIndex + 1) % totalItems;
      break;
    case "ArrowLeft":
    case "ArrowUp":
      newIndex = (currentIndex - 1 + totalItems) % totalItems;
      break;
    case "Home":
      newIndex = 0;
      break;
    case "End":
      newIndex = totalItems - 1;
      break;
    default:
      return;
  }

  event.preventDefault();
  onSelect(newIndex);
}

Todos los elementos interactivos deben ser alcanzables mediante teclado. Tab para navegación por enfoque, Enter/Espacio para activación, teclas de flecha para navegación dentro del componente.

Accesibilidad en Formularios

function SignupForm() {
  return (
    <form aria-labelledby="form-title" noValidate>
      <h2 id="form-title">Crear Cuenta</h2>

      <div>
        <label htmlFor="email">Dirección de correo electrónico</label>
        <input
          id="email"
          type="email"
          required
          aria-required="true"
          aria-describedby="email-hint email-error"
          aria-invalid={hasError ? "true" : undefined}
        />
        <p id="email-hint">Nunca compartiremos tu correo electrónico.</p>
        {hasError && (
          <p id="email-error" role="alert">
            Por favor, introduce una dirección de correo electrónico válida.
          </p>
        )}
      </div>

      <button type="submit">Crear Cuenta</button>
    </form>
  );
}

Color y Contraste

:root {
  --text-primary: #1a1a1a;      /* 15.3:1 sobre blanco */
  --text-secondary: #595959;    /* 7.0:1 sobre blanco */
  --text-on-primary: #ffffff;   /* Asegurar 4.5:1 sobre color de marca */
  --border-focus: #0066cc;      /* Anillo de enfoque visible */
}

*:focus-visible {
  outline: 3px solid var(--border-focus);
  outline-offset: 2px;
}

.error-message {
  color: #d32f2f;
  /* No confiar solo en el color - agregar icono o prefijo de texto */
}
.error-message::before {
  content: "Error: ";
  font-weight: bold;
}

WCAG AA requiere una relación de contraste de 4.5:1 para texto normal, 3:1 para texto grande (18px negrita o 24px regular).

Anti-patrones

  • Usar div y span para elementos clicables en lugar de button o a
  • Eliminar contornos de enfoque sin proporcionar un indicador alternativo
  • Confiar solo en el color para transmitir información (rojo para error, verde para éxito)
  • Usar aria-label cuando el texto visible ya etiqueta el elemento
  • Reproducción automática de medios sin un mecanismo de pausa
  • Falta de enlace de salto de navegación para usuarios de teclado

Lista de Verificación

  • Todos los elementos interactivos accesibles mediante teclado (Tab, Enter, Escape, Flechas)
  • Puntos de referencia HTML semánticos utilizados (nav, main, article, section)
  • Las imágenes tienen texto alt descriptivo (o alt="" para decorativas)
  • El contraste de color cumple con WCAG AA (4.5:1 texto normal, 3:1 texto grande)
  • Indicadores de enfoque visibles en todos los elementos interactivos
  • Las entradas de formularios tienen elementos <label> asociados
  • Los mensajes de error se anuncian a los lectores de pantalla mediante role="alert"
  • Página probada con lector de pantalla (VoiceOver, NVDA) y solo con teclado

Individual skills in this repo

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

SamuelChien/mega-skills-collection

Security audit, hardening, threat modeling (STRIDE/PASTA), Red/Blue Team, OWASP checks, code review, incident response, and infrastructure security for any project.

SamuelChien/mega-skills-collection

Arquitecto de Soluciones Principal y Consultor Tecnológico de Andru.ia. Diagnostica y traza la hoja de ruta óptima para proyectos de IA en español.

SamuelChien/mega-skills-collection

Ingeniero de Sistemas de Andru.ia. Diseña, redacta y despliega nuevas habilidades (skills) dentro del repositorio siguiendo el Estándar de Diamante.

SamuelChien/mega-skills-collection

Estratega de Inteligencia de Dominio de Andru.ia. Analiza el nicho específico de un proyecto para inyectar conocimientos, regulaciones y estándares únicos del sector. Actívalo tras definir el nicho.

SamuelChien/mega-skills-collection

2D game development principles. Sprites, tilemaps, physics, camera.

SamuelChien/mega-skills-collection

3D game development principles. Rendering, shaders, physics, cameras.

SamuelChien/mega-skills-collection

Expert in building 3D experiences for the web - Three.js, React Three Fiber, Spline, WebGL, and interactive 3D scenes. Covers product configurators, 3D portfolios, immersive websites, and bringing depth to web experiences.

SamuelChien/mega-skills-collection

Accessibility audit skill for scanning, fixing, and verifying WCAG 2.2 Level A and AA compliance across React, Next.js, Vue, Angular, Svelte, and plain HTML codebases. Use when auditing accessibility, fixing a11y violations, checking color contrast, generating compliance reports, or integrating accessibility checks into CI/CD pipelines.

SamuelChien/mega-skills-collection

Ab Test Analyzer - Auto-activating skill for Data Analytics. Triggers on: ab test analyzer, ab test analyzer Part of the Data Analytics skill category.

SamuelChien/mega-skills-collection

A B Test Config Creator - Auto-activating skill for ML Deployment. Triggers on: a b test config creator, a b test config creator Part of the ML Deployment skill category.

SamuelChien/mega-skills-collection

When the user wants to plan, design, or implement an A/B test or experiment. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "conversion experiment," "statistical significance," or "test this." For tracking implementation, see analytics-tracking.

SamuelChien/mega-skills-collection

Acceptance Criteria Creator - Auto-activating skill for Enterprise Workflows. Triggers on: acceptance criteria creator, acceptance criteria creator Part of the Enterprise Workflows skill category.

SamuelChien/mega-skills-collection

Use when a coding task should be driven end-to-end from issue intake through implementation, review, deployment, and acceptance verification with minimal human re-intervention.

SamuelChien/mega-skills-collection

Accessibility Audit Runner - Auto-activating skill for Frontend Development. Triggers on: accessibility audit runner, accessibility audit runner Part of the Frontend Development skill category.

SamuelChien/mega-skills-collection

You are an accessibility expert specializing in WCAG compliance, inclusive design, and assistive technology compatibility. Conduct audits, identify barriers, and provide remediation guidance.

SamuelChien/mega-skills-collection

Manage Discord channel access — approve pairings, edit allowlists, set DM/group policy. Use when the user asks to pair, approve someone, check who's allowed, or change policy for the Discord channel.

SamuelChien/mega-skills-collection

Create unified specification packages across Business, Development, and Design teams. Staged elaboration (L0 Vision → L1 Requirements → L2 Team Detail → L3 Acceptance Criteria) to build shared understanding. Does not write code.

SamuelChien/mega-skills-collection

Research a company or person and get actionable sales intel. Works standalone with web search, supercharged when you connect enrichment tools or your CRM. Trigger with "research [company]", "look up [person]", "intel on [prospect]", "who is [name] at [company]", or "tell me about [company]".

SamuelChien/mega-skills-collection

Create forensically sound bit-for-bit disk images using dd and dcfldd while preserving evidence integrity through hash verification.

SamuelChien/mega-skills-collection

Validate messaging consistency across website, GitHub repos, and local documentation generating read-only discrepancy reports. Use when checking content alignment or finding mixed messaging. Trigger with phrases like "check consistency", "validate documentation", or "audit messaging".

Skills relacionados