Warning: include(/home/domains/disenamos.com/web/includes/header_inc.php) [function.include]: failed to open stream: No such file or directory in /home/.parsley/sosa/disenamos.com/articulos/css/formularios_con_estilo/index.php on line 3

Warning: include() [function.include]: Failed opening '/home/domains/disenamos.com/web/includes/header_inc.php' for inclusion (include_path='.:/usr/local/php5/lib/php:/usr/local/lib/php') in /home/.parsley/sosa/disenamos.com/articulos/css/formularios_con_estilo/index.php on line 3

Diseñamos

CSS

Formularios con estilo

Esta es una breve explicación que te servirá de guia para crear formularios totalmente accesibles usando XHTML estricto para la estructura y hojas de estilo en cascada (css) para darle formato.

En el siguiente articulo, trataré de mostrar como construir un formulario accesible mediante elementos XHTML y como darle forma utilizando hojas de estilo.


Este artículo está dirigido a aquellas personas, que estando familiarizadas con el lenguaje html, quieren extender sus posibilidades al diseño accesible mediante XHTML+CSS, usando estandares del diseño para la web.


Para el ejemplo he elegido un formulario de contacto, pero las técnicas empleadas pueden aplicarse a cualquier tipo de formulario que imaginemos.


En nuestro formulario, tendremos tres cajas de texto, una lista desplegable y un botón. Las cajas de texto a su vez, serán de dos tipos, una textarea, y dos elementos input


Para empezar, crearemos un formulario simple, contenido dentro de un div, algo más o menos como lo siguiente.



<div id="cform">
<form method="post" action="#">
<textarea name="notes" rows="13" cols="55"></textarea>
<input type="text" name="name" title="Tu Nombre" />
<input type="text" name="mail" title="Tu dirección de correo" />
<select name="food">
<option>Pizza</option>
<option>Hamburguesa</option>
<option>Lechuga</option>
<option>Tomate</option>
<option>Cebolla</option>
<option>M&M's</option>
<option>Smartie<s/option>
<option>Cacaolat</option>
</select>
<input type="submit" id="submit" name="send" value="Enviar »" title="Pulsa una vez para enviar el mensaje, y espera a la pantalla de confirmación" />
</form>
</div>

Como pueden ver en el siguiente enlace, los elementos del formulario están creados, pero la verdad es que poco podemos hacer dejándolos así.


A continuación añadiremos una serie de elementos complementarios, que mejoraran la accesibilidad y por defecto la experiencia del usuario.


Para lograr este objetivo, necesitamos indicar al usuario como utilizar estos elementos, en XHTML tenemos la etiqueta label, que se puede asociar a casi cualquier elemento dentro de un formulario, además, para reforzar la lógica dentro del contexto, tenemos las etiquetas fieldset y optgroup, que nos permite crear grupos de elementos dentro del formulario. Combinando todo esto obtenemos el siguiente codigo.



<div id="cform">
<form method="post" action="#">
<fieldset><legend>Formulario de Ejemplo</legend><br />
<div>
<label for="notes">Cuerpo del Mensaje:</label>
<textarea name="notes" rows="13" cols="55"></textarea><br />
</div>
<div>
<label for="name">Nombre:</label>
<input type="text" name="name" title="Tu Nombre" /><br />
</div>
<div>
<label for="mail">Dirección de correo:</label>
<input type="text" name="mail" title="Tu dirección de correo" /><br /
</div>
<div>
<label for="food">Elige tu comida favorita</label>
<select name="food">
<option value="">Seleccionar ... </option>
<optgroup label="Dieta Basica">
<option>Pizza</option>
<option>Hamburguesa</option>
</optgroup>
<optgroup label="Verde">
<option>Lechuga</option>
<option>Tomate</option>
<option>Cebolla</option>
</optgroup>
<optgroup label="Fruta">
<option>M&M's</option>
<option>Smarties</option>
<option>Cacaolat</option>
</optgroup>
</select><br />
</div>
<div>
<input type="submit" id="submit" name="send" value="Enviar »" title="Pulsa una vez para enviar el mensaje, y espera a la pantalla de confirmación"
</div>
</fieldset>
</form>
</div>

Ya tenemos nuestro formulario construido, totalmente accesible, y con un codigo valido XHTML1.1, creo que es el turno del empezar con nuestra hoja de estilo.


Para el diseño, quiero utilizar la propiedad float, todos los elementos estaran contenidos dentro de un div de 480px de ancho, flotando a la izquierda.



html, body {
font-family:"Trebuchet MS", Verdana, sans-serif;
background-color:#FAFBFC
}
#cform {
width:480px;
margin:80px auto 0 auto
}
fieldset div input {
float:left;
width:194px;
padding:0.15em
}
html>body label {
display:block
}
input {
width:316px
}
select {
width:200px
}
textarea {
float:left;
padding:0;
margin:10px;
width:180px;
height:180px
}
input#submit {
padding:0.15em;
margin:10px 0;
width:200px;
font:bold 100% Verdana, Helvetica, Arial, sans-serif
}

Estamos casi en el proceso final, hasta el momento, tenemos todos los elementos posicionados a la izquierda, hemos declarado el tamaño por defecto y tan solo nos quedan los toques finales, para obtener resultados como este.


Si mirais el codigo del ejemplo final, podreis ver que he usado la propiedad overflow:auto; para el elmento fieldset, añadiendo esto conseguimos que actue como un contenedor, rodeando por completo todos los elementos flotantes. Tambien quisiera señalarles el uso que haremos de las pseudo-clases :active, :hover y :focus, para reforzar el impacto visual, captando la atención sobre el elemento en cuestión, estos pequeños detalles son los que facilitan la navegación al usuario.


Como ven, las posibilidades son inmensas. Con un poco máas de trabajo se pueden construir formularios muy complejos , pero eso lo dejaremos para un artículo próximo. Por ahora espero que esta explicación os sirva al menos como ayuda para vuestros proyectos.

Comentarios sobre este artículo

14/06/05 eltovar dice:

Excelente, lo que siempre quise saber sobre formularios y temi preguntarselo a Sosa. Good Work.

14/06/05 Daniel dice:

Sencillo. Claro. Y bueno. No se puede pedir más :-D Muchas gracias, muy interesante.

14/06/05 torresburriel dice:

Echo en falta que hagáis una referencia a los navegadores y plataformas en los que funcionan correctamente estas soluciones...

14/06/05 estorde dice:

Por desgracia alguno de los estilos en los que te apoyas para diseñar el formulario no son soportados por Explorer, que para suerte o desgracia a dia de hoy es el navegador mas utilizado por los internautas.

Las pseudo-clases no son soportadas, al igual que tampoco el "hack" que utilizas para convertir el fieldset en una caja (overflow).

A pesar de ello, es de agradecer la explicación, pero se agradecería un poco más completa.

14/06/05 Federico dice:

"casi", "este" y "enlace". Me parece que tendrían que pensar un poco más el texto para los enlaces.

15/06/05 Rodrigo dice:

Muy interesante.

El atributo "for" del elemento LABEL siempre apunta a un id. Te falta indicar los atributos id en cada uno de tus INPUT y TEXTAREA.

De la manera en que están ahora, el elemento LABEL no hace nada, es decir, no está marcando que tal texto representa tal control, no hay ninguna ventaja sobre accesibilidad como lo estás mencionando en tu artículo.

Podrías también, agregar un accesskey para cada LABEL, de esta manera lograrías hacer un formulario mas accesible aún.

Pero lo demás, muy interesante :)

15/06/05 Daniel Niquet dice:

Excelente Tuto-articulo, siempre uno anda buscando la mejor presentacion para sus formularios, y como que hay mucho material en la red, pero este en especial es sencillo, facil de entender. Me parece excelente, te doy un 10 alex.

15/06/05 Alex Sancho dice:

Gracias a todos por vuestros comentarios, solo quisiera aclarar que soy consciente de que las tecnicas utilizadas no renderizan por igual en todos los navegadores, pero el articulo esta planteado desde un punto de vista de codigo estricto, no teniendo en cuenta este tipo de detalles. Sobre lo que comenta Rodrigo, hasta donde yo se, y corregirme si me equivoco, es cierto que el elemento for, se asocia al elemento id, pero no es algo obligado, si no se añade el id, el for, se asocia al elemento que acompaña.
Sobre las accesskeys, personalmente, no creo que mejoren la usabilidad del formulario, prefiero usarlos para la navegación, pero no es algo aplicable a este articulo.

Salu2 a todos y gracias de nuevo.

15/06/05 Federico dice:

Si incluís el id, cuando clickeas sobre LABEL, automaticamente te selecciona el INPUT. Con name no ocurre eso, al menos no en IE6 y Opera 8.

15/06/05 Rodrigo dice:

Alex, no es algo obligado, sí, pero sí no incluís el ID, el elemento LABEL se asocia implicitamente a los controles que están encerrados dentro de sus etiquetas de inicio y cierre (creo que eso quisiste decir con lo de "acompaña").

A ver si me explico. El código que tenes ahora es:

<label for="name">Nombre:</label><input type="text" name="name" title="Tu Nombre" />

Para que esté asociado implícitamente, sin necesidad de usar ID, tendría que ser:


<p><label>Nombre: <input type="text" name="name" title="Tu Nombre" /></label></p>

Otra cosa, NAME es un atributo que está en XHTML como deprecado; lo correcto sería usar ID y NAME juntos, como lo dicen las especificaciones del W3C.

El tema de las accesskeys:

1. Mejoran la usabilidad del formulario: Para formularios de carga de datos, por ejemplo, a veces especificar atajos de teclado puede resultar en formularios mas rápidos de llenar para data entries, por ejemplo.

2. Mejoran la accesibilidad del formulario: Proveer accesskeys para elementos complicados como los formularios, mejorarían la accessibilidad para aquellos usuarios que no dispongan de mouse o dispositivos de señalización en su equipo, por ejemplo.

En tu artículo creo que hablas de accesibilidad. Para mí si tendrían que ir, si tu objetivo es hacer un formulario accesible, como lo nombrás.

La usabilidad y la accesibilidad son 2 cosas totalmente diferentes, por favor, no metamos los 2 conceptos en la misma bolsa como lo hacen el 90% de autores web-standards-friendly :D

15/06/05 Alex Sancho dice:

Pienso que es más un tema de preferencias que otra cosa, no me imagino un formulario con 10 o 12 campos y cada uno con su accesskey, creo que lo único que se consigue es confundir al usuario con tanta tecla, cuando el tabulador es un elemento perfecto para moverse por el.
En cuanto al tema de las etiquetas, os doy la razon totalmente, la forma correcta es asociarlo a una id.

24/06/05 Moises Cortez dice:

Muy buen tema y bueno pienso incorporarme mas en este site

06/07/05 ViB dice:

Hola Alex
esto es una gran coincidencia, justo ayer y a proposito de un tutorial que encontré en Pictment .com hace algún tiempo ya, me decidí a postear un tutorial en español sobre el mismo tema (Formularios y CSS) y ¡ahora me encuentro con el tuyo!¡Que buena cosa! Parece que somos unos cuantos los inconformes con estos formularios cuadrados...En mi tute (aparte del posicionamiento que tú bien describes acá)también hablo de como aplicar backgrounds a elementos de formularios y esas cosas...En fin, tamos en la misma cuerda y eso es bueno!
Saludos

15/07/05 elQueFaltaba dice:

Hoy mismo apareció una información a la que os gustaría echar una ojeada (via Stylegala)

http://www.flog.co.nz/2005/04/27/arc-adams-radiocheckbox-customisation/

Se trata de la posibilidad de dar estilos a elementos checkbox y radiobutton .. muy buen artículo.

saludos
eQF

11/12/05 esto pu dice:

767676677776

11/12/05 tete dice:

no esta mal la esplicacion

Discute sobre este artículo