Creación de Menús Desplegables con Select y Data List en HTML
Resumen
¿Cómo crear un formulario Select en HTML?
Muchos hemos interactuado con formularios en línea que nos permiten elegir entre varias opciones desplegables para seleccionar artículos, idiomas o países. Este tipo de funciones se implementan en HTML usando la etiqueta <select>. A continuación, te describimos cómo usarla eficientemente y mejoramos tu conocimiento con prácticas recomendadas para el desarrollo web.
¿Cómo usar la etiqueta Select?
La etiqueta <select> es esencial para crear listas desplegables en formularios HTML. Dentro de esta etiqueta, puede haber múltiples opciones que el usuario podrá seleccionar. Aquí está un ejemplo sencillo de cómo se implementa:
<!DOCTYPEhtml><html><head><title>Select Example</title></head><body><main><labelfor="cursos">Elige un curso:</label><selectname="cursos"id="cursos"><optionvalue="javascript">Curso de JavaScript</option><optionvalue="html5">Curso de HTML5</option><optionvalue="css3">Curso de CSS3</option><optionvalue="web-standards">Curso de Web Standards</option></select></main></body></html>
¿Cuáles son las limitaciones del Select estándar?
Aunque la etiqueta <select> parece sencilla, presenta ciertas limitaciones, especialmente en dispositivos móviles. En escenarios donde hay un gran número de opciones (por ejemplo, 200), buscar un elemento específico puede convertirse en una tarea ardua para el usuario. Esto se debe a la necesidad de desplazarse extensamente para encontrar la opción deseada.
¿Qué son las mejores prácticas al usar Select?
Para superar las limitaciones del <select>, se recomienda una práctica avanzada de desarrollo usando <input> y <datalist>. Este enfoque permite la autocompletación, mejorando así la experiencia del usuario:
<!DOCTYPEhtml><html><head><title>Datalist Example</title></head><body><main><labelfor="cursos">Elige un curso:</label><inputlist="cursos"><datalistid="cursos"><optionvalue="JavaScript"><optionvalue="HTML5"><optionvalue="CSS3"><optionvalue="Web Standards"></datalist></main></body></html>
Con este método:
Los usuarios pueden comenzar a escribir y recibir sugerencias automáticas.
Se reduce el número de opciones visibles, ya que solo se muestran aquellas que coinciden con los caracteres ingresados.
Mejora la accesibilidad y usabilidad en dispositivos móviles.
¿Cómo beneficiarse de estas prácticas en proyectos futuros?
Con las herramientas y conocimientos de cómo usar <select> y <datalist>, puedes crear formularios más eficientes y amigables al usuario. Ahora puedes aplicar estas prácticas para mejorar formularios en diversos proyectos web, ya sea para seleccionar horarios de vuelos, cursos académicos, entre otros.
¡Sigue aprendiendo y aplicando buenas prácticas en tus proyectos! Con estas técnicas, podrás diseñar formularios que no solo funcionen, sino que sean accesibles y agradables para cualquier usuario.
Para crear inputs con una lista de varias opciones, se puede desarrollar de dos maneras diferentes:
.
Etiqueta <select>: Esta permite crear la lista, con las etiquetas <option>:
.
.
Etiqueta <input list = "">: De este modo, se puede utilizar una etiqueta <datalist> con etiquetas <option> dentro del input. De este modo, el usuario puede escribir dentro del input, y filtrar los resultados de la lista:
.
Excelente aporte.
genial
Y pensar que existimos salvajes que hacíamos esto con Javscript 😣
jajajaja justo estaba pensando eso, lo fácil que es con HTML y yo pensaba que solo se lograba con Js. :D
Les comparto este link para estilizar nuestros Select 👉🏼 Dropdown Default Styling
Gracias por el aporte!
Gracias.
Hola!, no concuerdo con que la forma ideal de presentar opciones sea mediante un datalist, usar datalist es muy útil para algunos formularios pero en la mayoría de casos que se me han presentado como desarrollador el select en mi opinión es la opción mas aduecuada a utilizar, en especial cuando la lista de elementos es reducida, el value de las options es un id de base de datos o algo por el estilo. Usar un datalist generalmente hace que el usuario cometa mas errores cuando el valor seleccionado debe existir en la lista de opciones, normalmente porque escriben con algún error o escriben incompleta la opción. También por parte del desarrollo puede generar bugs debido a que la validación de estas opciones depende del desarrollador. En conclusión creo que el datalist es el elemento a utilizar en casos donde la lista de elementos es grande y se vuelve muy engorroso para el usuario hacer el scroll para escoger una opción.
Si, esp fue lo que dijo. Depende de la necesidad del cliente.
Tienes razón, aunque este nuevo input da nuevas opciones.
Muchas gracias! no conocía la etiqueta fieldset ni la de legend!
Disculpen ¿Que hacen exactamente estas etiquetas fieldset y legend? Gracias
Apuntes de la clase:
.
¡Muchas gracias! ¿Qué utilizas para hacer tus notas? Se ven muy ilustrativas y me gustaron mucho. ¡Saludos desde Mérida, Yucatán, México!
ESTO ES LARGO PERO NECESARIO
Yo puse mi código asi
<input list="cursos">
<datalist id="cursos">
<option value="JavaScript" />
<option value="HTML5" />
<option value="CSS3" />
</datalist>
Y en mi navegador no me renderizaba, solo me mostrava una caja de texto.
Pensaba que había un error o mi navegador.
Entendí el verdadero problema.
Estaba haciendo los dos formularios en el mismo documento y debido en la etiqueta <SELECT> del primer formulario el atributo era name="cursos", esto el navegador lo confundio con el segundo código que tenia por igual <input list="cursos"> a pesar de estar señarados por el FORM,
Lo renderizo al poner <input list="cursos2">
aaaa gracias casi lloro porque no salía
Gracias Yair Lira me paso lo mismo me ayudo un monton
Agregado fomulario de selección <select> e <input list> y saltos de linea <br> en cada input para una vista más agradable.
<!DOCTYPE html><html lang="es"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Lista del Super</title><meta name="description" content="No olvides lo que debes comprar en el super"/><meta name="robots" content="index, follow"/></head><body><header></header><main><section><h2>¡Soy la lista del super!</h2><h3>Listado de productos a comprar:</h3><ul><li>Frutas:</li><ol><li><a href="https://www.pequerecetas.com/receta/manzana-18-recetas/">Manzana</a></li><figure><img src="./images/manzanas.png" alt="Deliciosas manzanas" width="100"><figcaption>Manzana roja o verde</figcaption></figure><li><a href="https://www.directoalpaladar.com/recetario/aprovechar-platanos-maduros-recetas-bizcochos-tartas-helados">Platano</a></li><figure><img src="./images/platanos.png" alt="Deliciosos Platanos" width="100"><figcaption>Platanos dulces</figcaption></figure></ol><li>Carnes:</li><ol><li><a href="https://www.cocinacaserayfacil.net/recetas-con-pollo/">Pollo</a></li><figure><img src="./images/pollo.png" alt="Delicioso Pollo" width="100"><figcaption>Carne de pollo</figcaption></figure><li><a href="https://www.cocinafacil.com.mx/recetas/recetas-de-carne-molida/">CarneMolida</a></li><figure><img src="./images/carne-molida.png" alt="Deliciosa carne molida" width="100"><figcaption>Carne de res</figcaption></figure></ol><li>Verduras:</li><ol><li><a href="https://www.directoalpaladar.com/directo-al-paladar/11-recetas-limon-irresistibles-todos-tiempos">Limón</a></li><figure><img src="./images/limon.png" alt="Delicioso limon" width="100"><figcaption>Limon</figcaption></figure><li><a href="https://www.directoalpaladar.com/ingredientes-y-alimentos/nuestras-mejores-47-recetas-zanahoria">Zanahoria</a></li><figure><img src="./images/zanahoria.png" alt="Deliciosa zanahoria" width="100"><figcaption>Zanahoria</figcaption></figure></ol></ul></section><section><h3>Video explicativo de Compras:</h3><figure><video src="images/1- Presentación del curso.mp4" controls preload="auto" width="400" height="225"></video><figcaption>Video en detalle como hacer compras</figcaption></figure></section><section><figure><h3>FormularioResponsable de Compra:</h3><form action=""><label for="nombre-resposable"><span>¿Cuál es el nombre del responsable?</span><input type="text" id="nombre-responsable" placeholder="Introduce tu nombre"><br></label><label for="dia-compra"><span>Fecha que se hará la compra</span><input type="date" id="dia-compra"><br></label><label for="hora-compra"><span>Hora en que se hará la compra</span><input type="time" id="hora-compra"><br></label></form></figure></section><section><figure><h3>FormularioCalendar</h3><form action=""><label for="hora"><span>Horario de Viaje</span><input type="time" id=hora name=hora><br></label><label for="dia"><span>Día del Viaje</span><input type="date" id=dia name=dia><br></label><label for="semana"><span>Semana del Viaje</span><input type="week" id=semana name=semana><br></label><label for="mes"><span>Mes de Viaje</span><input type="month" id=mes name=mes></label><input type="submit"></form></figure></section><section><figure><h3>FormularioCalendarCompleto</h3><form action=""><label for="calendario"><span>CalendarioCompleto</span><input type="datetime-local" id="calendario" name="calendario"></label><input type="submit" value="Me voy de viaje"></form></figure></section><section><figure><h3>Formulario con Autocompletado:</h3><form action=""><label for="nombre"><span>¿Cuál es tu nombre?</span><input type="text" name="nombre" id="nombre" autocomplete="name" required><br></label><label for="correo"><span>¿Cuál es tu email?</span><input type="email" name="correo" id="correo" autocomplete="email" required><br></label><label for="pais"><span>¿Cuál es tu país?</span><input type="text" name="pais" id="pais" autocomplete="country" required><br></label><label for="cp"><span>¿Cuál es tu código postal?</span><input type="text" name="cp" id="cp" autocomplete="postal-code" required></label><input type="submit"></form></figure></section><h3>CrearLista con ComandoSelect-No recomendado</h3><section><figure><form action=""><select name="destinos" id=""><option value="España">España</option>}<option value="Alemania">Alemania</option><option value="Suiza">Suiza</option><option value="Japón">Japón</option><option value="Suecia">Suecia</option><option value="Zimbabue">Zimbabue</option><option value="Chile">Chile</option><option value="México">México</option><option value="Perú">Perú</option><option value="Venezuela">Venezuela</option><input type="submit"></select></form></figure></section><h3>Creación de Lista con Datalist-Práctica recomendada</h3><section><figure><form action=""><input list="destinos2" name="destinos2"><datalist id="destinos2"><option value="España"></option><option value="Alemania"></option><option value="Suiza"></option><option value="Japón"></option><option value="Suecia"></option><option value="Zimbabue"></option><option value="Chile"></option><option value="México"></option><option value="Perú"></option><option value="Venezuela"></option></datalist><input type="submit"></form></figure></section></main><footer><p>Creado con amor por OrlandoAltamiranda con ayuda del TeamPlatzi</p></footer></body></html>
Este proyecto está quedando genial Orlando. Gracias por compartir!!!
Hice una parte solo por curiosa. ¡Genial!
Utilize la etiqueta <datalist> pero con todos los estados de México
<span>Selecciona tu estado</span><input list="estados"><datalist id="estados"><option value="Aguascalientes"></option><option value="Baja California"></option><option value="Baja California Sur"></option><option value="Campeche"></option><option value="Chiapas"></option><option value="Chihuahua"></option><option value="Ciudad de México"></option><option value="Coahuila"></option><option value="Colima"></option><option value="Durango"></option><option value="Guanajuato"></option><option value="Guerrero"></option><option value="Hidalgo"></option><option value="Jalisco"></option><option value="Estado de México"></option><option value="Michoacán"></option><option value="Morelos"></option><option value="Nayarit"></option><option value="Nuevo León"></option><option value="Oaxaca"></option><option value="Puebla"></option><option value="Querétaro"></option><option value="Quintana Roo"></option><option value="San Luis Potosi"></option><option value="Sinaloa"></option><option value="Sonora"></option><option value="Tabasco"></option><option value="Tamaulipas"></option><option value="Tlaxcala"></option><option value="Yucatán"></option><option value="Zacatecas"></option></datalist>
También sería una buena practica dentro del input agregar un placeholder="Selecciona un Curso". :)
Este curso me hace ver lo mal que estan muchas paginas y como pudieron ahorrarse tiempo y esfuerzo de esta manera, para los empiricos sin ofender, por eso es importante estudiar. porque el tiempo que tardas intentando lo inviertes aprendiendo directamente.
Estoy totalmente de acuerdo contigo Edwin. Pero hoy, nosotros tenemos esa información a la mano para hacer las cosas bien en nuestros futuros proyectos :)
Asi es! lo importante es ver los errores para no cometerlos
Algo muy colombiano jeje
Anotaciones:
🤔 <select> permite crear un elemento desplegable con elementos dentro de el.
Se ve muy bonito el formulario
Cordial saludo comunidad
Quiero compartirles una opción que pueden revisar más adelante (manejo de librerias) para sugerir al usuario @gmail, @hotmail etc. como lo hace mercadolibre al momento del login, para que lo tengan en su radar de aprendizaje.
https://platzi.com/blog/librerias-autocompletado-html5/
Opción: Awesomplete
Slds.
Y yo que dudaba si hacer este curso porque pensaba que sabia lo necesario. Pero nunca es suficiente o.O
<input list="cursos">
<datalist id="cursos">
<option value="JavaScript"></option>
<option value="HTML5"></option>
<option value="CSS3"></option>
</datalist>
Ayuda cón este codigo, estoy tratando de visualizar en Google Chrome en Android y me aparece como cualquier caja de texto. No despliega las opciones.
Probé el código y funciona bien. Recuerda que así como tienes el código, debes hacer hover sobre el elemento para que te salga la opción de desplegar
¡Hola!
Como comenta @johncardenasp, no hay error en el código.
Yo lo probé en Android y me funcionó sin problemas. Recuerda que estando en mobile tienes que hacer click encima del input para que te muestre las opciones, porque si no lo haces, de por sí parece como cualquier otro input.
Un saludo.
Les recomiendo hacer un resumen e insertar clml comentario en sus prácticas, o bien solo el enlace.
No me sabia esa de <input list="cursos">, muy bueno y es mas cómodo para uno de usuario que la mayor parte del tiempo se hacen los formularios en dispositivos móviles! Gracias!!
Exactamente!
Yo tampoco lo conocía y me quede sorprendido con esta clase!
Seguimos con la lista !!
<!DOCTYPE html><html lang="es"><head><meta charset="UTF-8"><meta name="description" content="Esta pagina te mostrará recetas"><meta name="robots" content="index,follow"><title>Es mi pagina</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><link rel="stylesheet" href="./css/style.css"></head><body><header><title>Lista del mercadito</title></header><main><h2>Soy tu lista del mercadito!</h2><figure><img
src="./pics/pexels-mark-stebnicki-2383314 (1) (1).jpg" alt="Es un imagen del super" width="340"/><figcaption>Es una imagen del mercadito</figcaption><section><ul><a href="https://www.pequerecetas.com/receta/11-recetas-con-frutas/" target="_blank"><li>Frutas<input type="checkbox"></li></a><ol><li><input list="frutas"><datalist id ="frutas"><option value="Platano"></option><option value="Manzanas"></option><option value="Pera"></option><option value="Uva"></option></datalist></li><li><input list="frutas"><datalist id ="frutas"><option value="Platano"></option><option value="Manzanas"></option><option value="Pera"></option><option value="Uva"></option></datalist></li><li><input list="frutas"><datalist id ="frutas"><option value="Platano"></option><option value="Manzanas"></option><option value="Pera"></option><option value="Uva"></option></datalist></li></ol><a href="https://nl.pinterest.com/blogexquisit/recetas-carnes-y-pollo/" target="_blank"><li>Carnes<input type="checkbox"></li></a><ol><li><input list="carnes"><datalist id="carnes"><option value=" Pollo"></option><option value="Carne Molida"></option><option value="Lechón"></option><option value="Cuy"></option></datalist></li><li><input list="carnes"><datalist id="carnes"><option value=" Pollo"></option><option value="Carne Molida"></option><option value="Lechón"></option><option value="Cuy"></option></datalist></li><li><input list="carnes"><datalist id="carnes"><option value=" Pollo"></option><option value="Carne Molida"></option><option value="Lechón"></option><option value="Cuy"></option></datalist></li></ol><a href="https://www.cocinafacil.com.mx/recetas/recetas-con-verduras/" target="_blank"><li>Verduras<input type="checkbox"></li></a><ol><li><input list="verduras"><datalist id="verduras"><option value="Coliflor"></option><option value="Brocoli"></option><option value="Champiñones"></option><option value="Pepino"></option></datalist></li><li><input list="verduras"><datalist id="verduras"><option value="Coliflor"></option><option value="Brocoli"></option><option value="Champiñones"></option><option value="Pepino"></option></datalist></li><li><input list="verduras"><datalist id="verduras"><option value="Coliflor"></option><option value="Brocoli"></option><option value="Champiñones"></option><option value="Pepino"></option></datalist></li></ol></ul><article></article></section></main><footer></footer></body></html>