{ "$schema": "../../schemas/code-crispies-module-schema.json", "id": "html-details-summary", "title": "HTML Details & Summary", "description": "Crea secciones expandibles sin JavaScript", "mode": "html", "difficulty": "beginner", "lessons": [ { "id": "details-summary-basic", "title": "Primer widget", "description": "El elemento <details> crea una sección plegable. El <summary> proporciona la etiqueta clickeable.

¡Haz clic en el resumen para mostrar el contenido oculto - sin JavaScript!", "task": "Crea un elemento <details> con:
1. Un <summary> que diga Click to reveal
2. Un <p> con el texto This content was hidden!", "previewHTML": "", "previewBaseCSS": "body { font-family: system-ui; padding: 20px; } details { border: 1px solid #ddd; border-radius: 8px; padding: 15px; } summary { font-weight: 600; cursor: pointer; } summary:hover { color: #1976d2; } details p { margin-top: 15px; color: #666; }", "sandboxCSS": "", "initialCode": "", "solution": "
\n Click to reveal\n

This content was hidden!

\n
", "previewContainer": "preview-area", "validations": [ { "type": "element_exists", "value": "details", "message": "Añade un elemento <details>" }, { "type": "element_exists", "value": "summary", "message": "Añade un <summary> dentro del details" }, { "type": "parent_child", "value": { "parent": "details", "child": "summary" }, "message": "El <summary> debe estar dentro de <details>" }, { "type": "parent_child", "value": { "parent": "details", "child": "p" }, "message": "Añade un <p> dentro de <details> para el contenido oculto" } ] }, { "id": "details-open-attribute", "title": "Expandido por defecto", "description": "Por defecto, <details> está cerrado. Añade el atributo open para mostrar el contenido inicialmente.

Este es un atributo booleano - solo añade open sin valor.", "task": "Añade el atributo open al elemento <details> para mostrar el contenido por defecto.", "previewHTML": "", "previewBaseCSS": "body { font-family: system-ui; padding: 20px; } details { border: 1px solid #ddd; border-radius: 8px; padding: 15px; background: #f9f9f9; } summary { font-weight: 600; cursor: pointer; } details p { margin-top: 15px; color: #666; }", "sandboxCSS": "", "initialCode": "
\n FAQ: What is HTML5?\n

HTML5 is the latest version of the HTML standard with new semantic elements and APIs.

\n
", "solution": "
\n FAQ: What is HTML5?\n

HTML5 is the latest version of the HTML standard with new semantic elements and APIs.

\n
", "previewContainer": "preview-area", "validations": [ { "type": "attribute_value", "value": { "selector": "details", "attr": "open", "value": true }, "message": "Añade el atributo open a <details>" } ] }, { "id": "faq-accordion", "title": "Acordeón FAQ", "description": "Múltiples elementos <details> crean un FAQ estilo acordeón. Cada pregunta puede expandirse independientemente.

Pro tip: Escribe details*3>summary+p y presiona Tab para expansión Emmet. *3 crea 3 elementos, > anida dentro, + añade hermanos.", "task": "Crea una sección FAQ con:
1. Un <h1> que diga Frequently Asked Questions
2. Tres elementos <details>, cada uno con una pregunta en <summary> y una respuesta en <p>", "previewHTML": "", "previewBaseCSS": "body { font-family: system-ui; min-height: 100vh; background: linear-gradient(135deg, #ffecd2 0%, #fcb69f 100%); display: flex; flex-direction: column; justify-content: center; padding: 40px; margin: 0; box-sizing: border-box; } h1 { font-size: 2.5rem; color: #4a4a4a; text-align: center; margin: 0 0 30px 0; } details { background: white; border-radius: 12px; margin-bottom: 15px; padding: 20px; box-shadow: 0 4px 15px rgba(0,0,0,0.1); } summary { font-size: 1.3rem; font-weight: 600; color: #5c5c5c; cursor: pointer; list-style: none; } summary::before { content: '▸ '; color: #fcb69f; } details[open] summary::before { content: '▾ '; } details p { margin: 15px 0 0 0; color: #666; line-height: 1.6; }", "sandboxCSS": "", "initialCode": "", "solution": "

Frequently Asked Questions

\n\n
\n What is HTML5?\n

HTML5 is the latest version of HTML with new semantic elements and APIs.

\n
\n\n
\n Do I need JavaScript?\n

Many interactive features work with pure HTML5, no JavaScript required!

\n
\n\n
\n Is this accessible?\n

Yes! Native HTML elements have built-in keyboard and screen reader support.

\n
", "previewContainer": "preview-area", "validations": [ { "type": "element_exists", "value": "h1", "message": "Añade un encabezado <h1> para el título del FAQ" }, { "type": "element_count", "value": { "selector": "details", "min": 3 }, "message": "Crea al menos 3 elementos <details> para el FAQ" }, { "type": "element_count", "value": { "selector": "summary", "min": 3 }, "message": "Cada <details> necesita un <summary> para la pregunta" }, { "type": "element_count", "value": { "selector": "details p", "min": 3 }, "message": "Cada <details> necesita un <p> para la respuesta" } ] } ] }