{ "$schema": "../schemas/code-crispies-module-schema.json", "id": "html-details-summary", "title": "Details & Summary: Disclosure Widgets", "description": "Create expandable content sections without JavaScript", "mode": "html", "difficulty": "beginner", "lessons": [ { "id": "details-summary-basic", "title": "Your First Disclosure Widget", "description": "The <details> element creates a collapsible section. The <summary> provides the clickable label.

Click the summary to toggle the hidden content - no JavaScript needed!", "task": "Create a <details> element with:
1. A <summary> saying 'Click to reveal'
2. A <p> with the text '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": "Add a
element" }, { "type": "element_exists", "value": "summary", "message": "Add a inside the details" }, { "type": "parent_child", "value": { "parent": "details", "child": "summary" }, "message": "The must be inside
" }, { "type": "parent_child", "value": { "parent": "details", "child": "p" }, "message": "Add a

inside

for the hidden content" } ] }, { "id": "details-open-attribute", "title": "Pre-expanded Details", "description": "By default, <details> is closed. Add the open attribute to show the content initially.

This is a boolean attribute - just add open without a value.", "task": "Add the open attribute to the <details> element to show the content by default.", "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": "Add the 'open' attribute to
" } ] }, { "id": "faq-accordion", "title": "FAQ Accordion", "description": "Multiple <details> elements create an accordion-style FAQ. Each question can be expanded independently.

This is a common pattern for FAQ pages, documentation, and help sections.", "task": "Create an FAQ section with:
1. An <h1> saying 'Frequently Asked Questions'
2. Three <details> elements, each with a question in <summary> and an answer in <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": "Add an

heading for the FAQ title" }, { "type": "element_count", "value": { "selector": "details", "min": 3 }, "message": "Create at least 3
elements for the FAQ" }, { "type": "element_count", "value": { "selector": "summary", "min": 3 }, "message": "Each
needs a for the question" }, { "type": "element_count", "value": { "selector": "details p", "min": 3 }, "message": "Each
needs a

for the answer" } ] } ] }