Formularios y mensajes de error
- Domingo, 24 de Julio de 2005 a las 19:49 CET
- Guardado en: XHTML
Warning: sprintf() [function.sprintf]: Too few arguments in /home/armoniaspiralstatic/armonia.spiral-static.org/ecrire/tools/multicat/functions.php on line 85
Warning: sprintf() [function.sprintf]: Too few arguments in /home/armoniaspiralstatic/armonia.spiral-static.org/ecrire/tools/multicat/functions.php on line 85
Warning: sprintf() [function.sprintf]: Too few arguments in /home/armoniaspiralstatic/armonia.spiral-static.org/ecrire/tools/multicat/functions.php on line 85
Warning: sprintf() [function.sprintf]: Too few arguments in /home/armoniaspiralstatic/armonia.spiral-static.org/ecrire/tools/multicat/functions.php on line 85
Una parte muy a tener en cuenta a la hora de desarrollar nuestras aplicaciones Web son los formularios. Estos han de ser simples, consistentes, comprensibles, accesibles, etc. En este artículo de hoy voy a enseñaros la forma en la que suelo hacer mis formularios, y los motivos por los que he elegido determinados detalles que acostumbro a usar.
Para hacer más sencilla la comprensión de todo esto he creado un sencillo ejemplo con un mismo formulario dividido en tres estados distintos, donde cada uno de ellos muestra una etapa de la "vida de un formulario".
Primera etapa: Formulario en estado normal
La primera etapa de todo formulario es aquella en la que nos lo encontramos por primera vez, impoluto, limpio completamente, esperando ser cumplimentado y enviado.
Es una etapa muy importante, ya que debemos conseguir que de un simple vistazo el formulario sea comprensible para el usuario. Y por si fuera poco, hemos de usar nuestro lenguaje de marcado favorito de forma correcta, preocupándonos además por la accesibilidad del formulario.
Hay diversas cosas que suelo realizar siempre que hago un formulario. Una de ellas es englobarlo con el elemento fieldset con un atributo title bien descriptivo, y colocándole su correspondiente legend:
<fieldset title="Formulario general en estado normal que realiza una función determinada">
<legend>Formulario general en estado normal</legend>
</fieldset>
Otra cosa imprescindible es el uso de los label. A todos los controles del formulario, salvo a los botones, les coloco su label correspondiente. Debo destacar que normalmente acostumbro a englobar todo el control con el label además de usar el atributo for de este, me explico:
<label for="cajaTexto1">Caja de Texto 1 <span class="obligatorio">(Obligatorio)</span><br />
<input type="text" id="cajaTexto1" name="cajaTexto1" maxlength="255" title="Caja de Texto. (Campo obligatorio, con un límite de 255 caracteres.)" />
</label>
Como podeis ver, toda la caja de texto se encuentra englobada dentro de un label, y este a su vez hace uso del atributo for para referenciar a la caja de texto. Hay personas que sólo hacen uso del atributo for, pero hay algunos agentes de usuario que todavía no soportan esta forma de referenciación, así que procuramos mantener ambas formas para evitar incompatibilidades.
Si os fijais, la caja de texto usa el atributo maxlength, que nos permite limitar el número de caracteres que van a poder introducirse en ella. Si se conoce este límite, es más que recomendable hacer uso de este atributo, para ahorrarnos sustos si, por ejemplo, los datos van a guardarse en una Base de Datos y al usuario le da por meter un capítulo entero de El Quijote.
Además también es recomendable dotar a todos y cada uno de los controles del formulario del atributo title, explicando brevemente qué se debe hacer en ese control, y si es posible, informar de las limitaciones: obligatorio o no, tipos de datos que acepta, (sólo números, sólo letras, etc.) Con respecto a este mismo tema, en el texto del label, y para que el usuario tenga acceso a esta información a golpe de vista, suelo añadir también de forma muy breve, las limitaciones del campo. Las englobo en un span para poder manejarlas posteriormente de forma sencilla con CSS.
Por destacar otro detalle, en el ejemplo podéis ver que en el desplegable hago uso de optgroup para dividir los grupos de elementos que componen el control. Es importante que useis este elemento si vuestros desplegables necesitan subdividir en grupos los elementos, nada de usar option con guiones ni nada de eso.
<label for="combo">Desplegable <span class="obligatorio">(Obligatorio)</span><br />
<select id="combo" name="combo" title="Desplegable con 5 opciones divididas en 2 grupos. (Obligatorio elegir una opción)">
<optgroup label="Grupo 1">
<option selected="selected" value="1">Opción 1</option>
<option value="2">Opción 2</option>
</optgroup>
<optgroup label="Grupo 2">
<option value="3">Opción 3</option>
<option value="4">Opción 4</option>
<option value="5">Opción 5</option>
</optgroup>
</select>
</label>
Ver ejemplo para el formulario en estado normal
Segunda etapa: Formulario con mensajes de error
Esta etapa, obviamente, no siempre va a ocurrir, pero debemos tener especial cuidado a la hora de controlarla, porque un formulario con mensajes de error poco claros, e incluso liosos o inexistentes, hará que todo el proceso se vaya al garete.
Mis formularios suelen tener tres formas de aviso distintas para los errores:
- Mensaje general con una lista de puntos a comprobar
- Estilos CSS distintos en los controles incorrectos
- Mensaje informativo breve junto a cada control incorrecto
Todos estos mensajes han de destacar de forma muy clara por encima del aspecto normal del formulario, para que así el usuario pueda localizarlos y comprenderlos sin el menor esfuerzo.
Si observais el ejemplo, lo podreis ver claramente. Tonos rojos para todos los mensajes, un grosor de borde significativo para los controles incorrectos, y un pequeño texto junto a cada uno de ellos.
Mirando el código del mensaje general justo al comienzo del fieldset os dareis cuenta de que he usado el elemento big con un span interno que contiene un texto llamativo que luego oculto con CSS. Esto lo hago pensando en los usuarios que no tienen los estilos CSS activados. Puesto que no se percataran de los estilos con tonos rojos y demás, les doy un elemento "distinto" y un texto impactante para que su atención se centre sobre el mensaje de forma más sencilla.
<div class="mensaje error">
<p><big><span>*** !ATENCIÓN!</span> Encabezado error</big></p>
<p>Etiam porta semper nisl. Aenean lacus risus, condimentum id, pharetra in, dictum vel, quam. Maecenas non mauris ut dolor cursus dignissim.</p>
<ul title="Lista de puntos a verificar">
<li>Debes rellenar el campo obligatorio "Caja de Texto 1"</li>
<li>El campo "Caja de Texto 2" no tiene un formato correcto. Sólo se aceptan caracteres alfanuméricos</li>
</ul>
<hr />
</div>
Ver ejemplo para el formulario con mensajes de error
Tercera etapa: Formulario ejecutado de forma satisfactoria
Esta es una etapa meramente informativa, y no es absolutamente necesario, ya que un formulario puede terminar con una redirección a otra página, con un mensaje simple porque no se necesite tener el formulario de nuevo, etc.
De todas formas la estructura es exactamente igual que la del mensaje general de errores de la etapa anterior, salvo que con unos estilos distintos en tonos "menos preocupantes" que el rojo. También, del mismo modo que antes, pienso en los usuarios con CSS desactivado colocando un mensaje llamativo que capte su atención incluso sin estilos.
Avisos, (trackbacks)
Los avisos para este post están cerrados.
Comentarios
-
#182 - Escrito por manu, el Domingo 24 Julio 2005 a las 22:48 CET.
esta muy bien el post, aun que creo que la mejor forma de destacar un error es con el rojo normal (#F00) por que por ejemplo, con el ejemplo que pones, aun siendo un color muy diferente, es en la misma tonalidad, por lo que "no" distrae.
-
#183 - Escrito por Federico, el Domingo 24 Julio 2005 a las 22:50 CET.
BIG is bigger but STRONG is stronger. ;)
¿BIG en lugar de STRONG?
Por cierto, title es un no-no. ¿Por qué no usas una definition list mejor? Sobre todo porque si se lo aplicas a UL, los LI lo tapan. Es decir, cuando tenés el mouse sobre UL, en realidad lo tenes sobre LI. Se llama implementación y como no está estandarizado, no se puede culpar a nadie. :) -
#184 - Escrito por Juan G. Hurtado, el Domingo 24 Julio 2005 a las 23:52 CET.
Hombre Manu, ¡cuanto tiempo! Me alegro de verte por aquí ;) Es lógico que cuanto más contraste en el color, más "llamativo" se vuelve. Para cualquier persona sin deficiencias visuales, la gama de colores del ejemplo es lo suficientemente distinta como para apreciarse al nivel que requiere la situación. Para personas con discapacidad visual crearía una hoja de estilos alternativa con unos colores distintos, en la que, probablemente, usaría el rojo "clásico".
Federico, tienes toda la razón, debía haber puesto un strong, pero no sustituyendo al big, sino complementandolo, es decir, colocar ambos para crear un efecto visual sin estilos lo suficientemente impactante.
Con respecto a la segunda parte de tu mensaje, creo que no he entendido nada xD ¿Qué quieres decir?
Saludos! -
#185 - Escrito por Juan G. Hurtado, el Domingo 24 Julio 2005 a las 23:54 CET.
Por cierto Federico, veo en mi Opera 8.01 bajo Linux que el menú superior del ejemplo no se ve correctamente. ¿Tienes idea de por qué ocurre? No he logrado dar con el problema.
¡Gracias! -
#186 - Escrito por Federico, el Lunes 25 Julio 2005 a las 02:13 CET.
Que estás usando el atributo title para decir "Lista de puntos a verificar" que en realidad es el titulo (titulo as in heading) de la seccion. El problema es que usar title esperando que haga un mouseover para verlo no es recomendable, no sólo por el mouse, sino que como se lo estás usando en UL, al hacer mouseover sobre LI, no funciona. Bajate Opera 8 y probalo. Y como te dije: no es algo que esté estandarizado, así que ningún browser está haciendo las cosas mal.
Y sobre lo mismo te recomendaba usar una definition list:
DL > DT (Lista de puntos a verificar) + DD (punto 1) + DD (punto 2). -
#187 - Escrito por Federico, el Lunes 25 Julio 2005 a las 02:30 CET.
IE6 también tenía problemas con el menú. Dos navegadores contra uno. ;)
#menu-principal {
display:block;}
#menu-principal ul {
margin:0;
padding-left:40px;}
#general {
clear:both;}
-
#188 - Escrito por Juan G. Hurtado, el Lunes 25 Julio 2005 a las 08:40 CET.
Mil gracias Federico, en IE tampoco lo había probado ya que no lo tenía a mano. Para que se vea correctamente en IE no basta con lo que me das, he tenido que añadir un hack:
* html #menu-principal ul {
padding-left:160px;}
Ahora sólo me queda conseguir que en el elemento activo no se vea el borde inferior, para que quede consistente ese aspecto de solapa :)
Con respecto a lo del atributo title en las listas, no creo que sea tan incorrecto. A mí el tooltip al colocar el ratón encima me es totalmente indiferente, sólo añado el title para dar un poco más de sentido "interno", (o semántico), a la lista.
Lo de usar una lista desordenada, o una de definiciones es una opción personal creo yo. Tal y como tú lo propones me parece perfectamente válido, semántico, correcto, etc. Pero para mi gusto personal, en este caso concreto queda mejor una lista desordenada :)
Saludos y gracias. -
#312 - Escrito por Jose Maenuel, el Sábado 22 Octubre 2005 a las 01:55 CET.
Mi pregunta es ya que estoy estudiando Ing en systemas y me han dejado un trabajo de hacer este mismo portal de comentarios el cual LA PERSONA OBSERBA EL ANUNCIO y escribe tal como lo estoy haciendo y que automaticamente suba lo que he escrito ya que en la pagina WEB que reremos presentar es una pagina de JOVES EN PROBRELAS este es el proyecto y queremos ponerle algunos comentarios de los jovenes ok gracias
me seria mas util si me regalaran este archivo de como se usa ok
-
#313 - Escrito por Juan G. Hurtado, el Domingo 23 Octubre 2005 a las 00:13 CET.
¡No he entenido absolutamente nada de lo que has dicho! xD
Hacer un comentario
Los comentarios para este post están cerrados.






