{ "$schema": "../../schemas/code-crispies-module-schema.json", "id": "html-details-summary", "title": "HTML Details & Summary", "description": "Twórz rozwijane sekcje bez JavaScript", "mode": "html", "difficulty": "beginner", "lessons": [ { "id": "details-summary-basic", "title": "Pierwszy widget", "description": "Element <details> tworzy zwijany sekcję. Element <summary> zapewnia klikalną etykietę.

Kliknij podsumowanie, aby przełączyć ukrytą treść - bez JavaScript!", "task": "Utwórz element <details> z:
1. Elementem <summary> z tekstem Click to reveal
2. Elementem <p> z tekstem 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": "Dodaj element <details>" }, { "type": "element_exists", "value": "summary", "message": "Dodaj <summary> wewnątrz details" }, { "type": "parent_child", "value": { "parent": "details", "child": "summary" }, "message": "Element <summary> musi być wewnątrz <details>" }, { "type": "parent_child", "value": { "parent": "details", "child": "p" }, "message": "Dodaj <p> wewnątrz <details> dla ukrytej treści" } ] }, { "id": "details-open-attribute", "title": "Domyślnie rozwinięte", "description": "Domyślnie <details> jest zamknięte. Dodaj atrybut open, aby pokazać treść na początku.

To jest atrybut logiczny - po prostu dodaj open bez wartości.", "task": "Dodaj atrybut open do elementu <details>, aby domyślnie pokazać treść.", "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": "Dodaj atrybut open do <details>" } ] }, { "id": "faq-accordion", "title": "Akordeon FAQ", "description": "Wiele elementów <details> tworzy FAQ w stylu akordeonu. Każde pytanie może być rozwijane niezależnie.

Pro tip: Wpisz details*3>summary+p i naciśnij Tab dla rozwinięcia Emmet. *3 tworzy 3 elementy, > zagnieżdża wewnątrz, + dodaje rodzeństwo.", "task": "Utwórz sekcję FAQ z:
1. Nagłówkiem <h1> z tekstem Frequently Asked Questions
2. Trzema elementami <details>, każdy z pytaniem w <summary> i odpowiedzią w <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": "Dodaj nagłówek <h1> dla tytułu FAQ" }, { "type": "element_count", "value": { "selector": "details", "min": 3 }, "message": "Utwórz co najmniej 3 elementy <details> dla FAQ" }, { "type": "element_count", "value": { "selector": "summary", "min": 3 }, "message": "Każdy <details> potrzebuje <summary> dla pytania" }, { "type": "element_count", "value": { "selector": "details p", "min": 3 }, "message": "Każdy <details> potrzebuje <p> dla odpowiedzi" } ] } ] }