{
"$schema": "../../schemas/code-crispies-module-schema.json",
"id": "html-datalist",
"title": "Datalist",
"description": "Proporciona sugerencias para campos de texto sin JavaScript",
"mode": "html",
"difficulty": "beginner",
"lessons": [
{
"id": "datalist-basic",
"title": "Campo con sugerencias",
"description": "El elemento <datalist> proporciona sugerencias de autocompletado para campos. Conéctalo usando el atributo list en el input que coincida con el id del datalist.
Los usuarios pueden escribir libremente - ¡las sugerencias son solo ayudas!",
"task": "Crea un selector de navegador: 1. Añade un <label> que diga Navegador: 2. Añade un <input> con list=\"browsers\" 3. Añade un <datalist id=\"browsers\"> con opciones para Chrome, Firefox y Safari",
"previewHTML": "",
"previewBaseCSS": "body { font-family: system-ui; padding: 20px; } label { display: block; margin-bottom: 8px; font-weight: 500; } input { width: 100%; padding: 10px; border: 1px solid #ccc; border-radius: 6px; font-size: 16px; } input:focus { outline: 2px solid #1976d2; border-color: transparent; }",
"sandboxCSS": "",
"initialCode": "",
"solution": "\n\n",
"previewContainer": "preview-area",
"validations": [
{
"type": "element_exists",
"value": "datalist",
"message": "Añade un elemento <datalist>"
},
{
"type": "attribute_value",
"value": { "selector": "input", "attr": "list", "value": "browsers" },
"message": "Conecta el input al datalist usando list=\"browsers\""
},
{
"type": "element_count",
"value": { "selector": "option", "min": 3 },
"message": "Añade al menos 3 elementos <option> dentro de <datalist>"
},
{
"type": "element_exists",
"value": "label",
"message": "Añade un <label> para el campo"
}
]
},
{
"id": "datalist-countries",
"title": "Selector de países",
"description": "Los datalist funcionan genial para listas largas como países. Los usuarios pueden escribir para filtrar sugerencias al instante.
El atributo value es lo que se ingresa, y puedes añadir texto de visualización después.",
"task": "Crea un campo de país: 1. Añade un <label> que diga País: 2. Añade un <input> con list=\"countries\" 3. Añade un <datalist id=\"countries\"> con al menos 4 opciones de países",
"previewHTML": "",
"previewBaseCSS": "body { font-family: system-ui; padding: 30px; background: linear-gradient(135deg, #e0f7fa 0%, #b2ebf2 100%); min-height: 100vh; margin: 0; box-sizing: border-box; } label { display: block; margin-bottom: 10px; font-weight: 600; color: #00695c; } input { width: 100%; padding: 12px 15px; border: 2px solid #26a69a; border-radius: 8px; font-size: 16px; background: white; } input:focus { outline: none; border-color: #00695c; box-shadow: 0 0 0 3px rgba(38,166,154,0.2); }",
"sandboxCSS": "",
"initialCode": "",
"solution": "\n\n",
"previewContainer": "preview-area",
"validations": [
{
"type": "element_exists",
"value": "datalist",
"message": "Añade un elemento <datalist>"
},
{
"type": "attribute_value",
"value": { "selector": "datalist", "attr": "id", "value": "countries" },
"message": "Establece id=\"countries\" en el datalist"
},
{
"type": "attribute_value",
"value": { "selector": "input", "attr": "list", "value": "countries" },
"message": "Conecta el input usando list=\"countries\""
},
{
"type": "element_count",
"value": { "selector": "option", "min": 4 },
"message": "Añade al menos 4 opciones de países"
}
]
}
]
}