{
"$schema": "../../schemas/code-crispies-module-schema.json",
"id": "html-progress-meter",
"title": "HTML Progress & Meter",
"description": "Відображайте статус виконання та вимірювання нативно",
"mode": "html",
"difficulty": "beginner",
"lessons": [
{
"id": "progress-basic",
"title": "Смуги прогресу",
"description": "Елемент <progress> показує виконання завдання. Використовуйте value для поточного прогресу та max для загального.
Примітка: Це не самозакриваючий тег! Пишіть <progress>...</progress> з резервним текстом всередині для старих браузерів.",
"task": "Створіть смугу прогресу, що показує 70% виконання:
1. Додайте <label> з текстом Download:
2. Додайте <progress> з value=\"70\" та max=\"100\"",
"previewHTML": "",
"previewBaseCSS": "body { font-family: system-ui; padding: 20px; } label { display: block; margin-bottom: 8px; font-weight: 500; } progress { width: 100%; height: 20px; border-radius: 10px; } progress::-webkit-progress-bar { background: #e0e0e0; border-radius: 10px; } progress::-webkit-progress-value { background: linear-gradient(90deg, #4caf50, #8bc34a); border-radius: 10px; } progress::-moz-progress-bar { background: linear-gradient(90deg, #4caf50, #8bc34a); border-radius: 10px; }",
"sandboxCSS": "",
"initialCode": "",
"solution": "\n",
"previewContainer": "preview-area",
"validations": [
{
"type": "element_exists",
"value": "progress",
"message": "Додайте елемент <progress>"
},
{
"type": "attribute_value",
"value": { "selector": "progress", "attr": "value", "value": "70" },
"message": "Встановіть value=\"70\" в елементі progress"
},
{
"type": "attribute_value",
"value": { "selector": "progress", "attr": "max", "value": "100" },
"message": "Встановіть max=\"100\" в елементі progress"
},
{
"type": "element_exists",
"value": "label",
"message": "Додайте <label> для смуги прогресу"
}
]
},
{
"id": "progress-indeterminate",
"title": "Невизначений прогрес",
"description": "Коли прогрес невідомий (як при завантаженні), опустіть атрибут value. Це створює анімований невизначений стан.
Корисно для мережевих запитів або процесів з невідомою тривалістю.",
"task": "Створіть індикатор завантаження:
1. Додайте <p> з текстом Loading...
2. Додайте <progress> без атрибута value",
"previewHTML": "",
"previewBaseCSS": "body { font-family: system-ui; padding: 20px; } p { margin-bottom: 10px; color: #666; } progress { width: 100%; height: 8px; border-radius: 4px; } progress::-webkit-progress-bar { background: #e0e0e0; border-radius: 4px; }",
"sandboxCSS": "",
"initialCode": "",
"solution": "
Loading...
\n", "previewContainer": "preview-area", "validations": [ { "type": "element_exists", "value": "progress", "message": "Додайте елемент <progress>" }, { "type": "element_exists", "value": "p", "message": "Додайте <p> з текстом завантаження" } ] }, { "id": "meter-gauge", "title": "Шкали meter", "description": "Елемент <meter> відображає скалярне значення в діапазоні. Використовуйте його для вимірювань, як-от місце на диску, батарея або рейтинги.Battery: