{ "$schema": "../../schemas/code-crispies-module-schema.json", "id": "html-details-summary", "title": "HTML Details & Summary", "description": "Створюйте розгортувані секції без JavaScript", "mode": "html", "difficulty": "beginner", "lessons": [ { "id": "details-summary-basic", "title": "Перший віджет", "description": "Елемент <details> створює згортувану секцію. Елемент <summary> надає клікабельний заголовок.

Натисніть на summary, щоб показати прихований вміст - без JavaScript!", "task": "Створіть елемент <details> з:
1. Елементом <summary> з текстом Click to reveal
2. Елементом <p> з текстом 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": "Додайте елемент <details>" }, { "type": "element_exists", "value": "summary", "message": "Додайте <summary> всередину details" }, { "type": "parent_child", "value": { "parent": "details", "child": "summary" }, "message": "Елемент <summary> має бути всередині <details>" }, { "type": "parent_child", "value": { "parent": "details", "child": "p" }, "message": "Додайте <p> всередину <details> для прихованого вмісту" } ] }, { "id": "details-open-attribute", "title": "Розгорнуто за замовчуванням", "description": "За замовчуванням <details> закритий. Додайте атрибут open, щоб показати вміст спочатку.

Це булевий атрибут - просто додайте open без значення.", "task": "Додайте атрибут open до елемента <details>, щоб показати вміст за замовчуванням.", "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": "Додайте атрибут open до <details>" } ] }, { "id": "faq-accordion", "title": "FAQ акордеон", "description": "Кілька елементів <details> створюють FAQ у стилі акордеону. Кожне питання можна розгортати незалежно.

Порада: Введіть details*3>summary+p і натисніть Tab для розгортання Emmet. *3 створює 3 елементи, > вкладає всередину, + додає сусідні.", "task": "Створіть секцію FAQ з:
1. Заголовком <h1> з текстом Frequently Asked Questions
2. Трьома елементами <details>, кожен з питанням у <summary> та відповіддю у <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": "Додайте заголовок <h1> для назви FAQ" }, { "type": "element_count", "value": { "selector": "details", "min": 3 }, "message": "Створіть принаймні 3 елементи <details> для FAQ" }, { "type": "element_count", "value": { "selector": "summary", "min": 3 }, "message": "Кожен <details> потребує <summary> для питання" }, { "type": "element_count", "value": { "selector": "details p", "min": 3 }, "message": "Кожен <details> потребує <p> для відповіді" } ] } ] }