2011-05-26 11 views
7

Todos sabemos que es incorrecto utilizar una tabla como ayuda de diseño.¿Es semánticamente correcto tener un formulario HTML establecido en una tabla?

A menudo uso tablas para estructurar formularios. ¿Es semánticamente correcto?

Me pregunto acerca de esto, ya que es lógico que un formulario esté en un diseño de tabla (al menos los formularios que creo), ya que todos los campos tienen etiquetas que corresponden a la entrada esperada en los campos. Los datos obtenidos son definitivamente correctos semánticamente en una tabla. ¿Pero es lo mismo para el formulario?
Tengo la sensación de que es una cuestión de opinión, pero me interesa escuchar el razonamiento de las personas detrás de sus opiniones.

Gracias

+1

"Todos sabemos que es incorrecto utilizar una tabla como una ayuda de diseño" que no sé que. Usas lo que es más simple y funciona. –

+3

Si comprueba la especificación de HTML5, lo dice exactamente en estas palabras: http://www.w3.org/wiki/HTML/Elements/table – Richard

+3

Wow. En mi opinión, la especificación es incorrecta. –

Respuesta

3

============

EDIT: Gracias @Will Martin. En realidad, lo comprobé, parecería que el uso de la tabla para estructurar el formulario IS es semánticamente correcto, ya que se muestra en el documento de estándares w3c. Ver aquí: http://www.w3.org/TR/html401/interact/forms.html#h-17.9.1

============

He leído un artículo (por desgracia, en francés) ayer que básicamente estaba diciendo que no se debe utilizar la tabla para estructurar las formas . (http://www.alsacreations.com/article/lire/1209-display-inline-block.html)

No dice por qué no, pero dice que debe usar la pantalla: inline-block. Sin embargo, ten cuidado, muestra: inline-block es un gran parámetro pero tiene inconvenientes cuando navegas en IE7-6 (no es sorprendente).

Lee este artículo (en Inglés) que explica 'inline-block' =>http://robertnyman.com/2010/02/24/css-display-inline-block-why-it-rocks-and-why-it-sucks/

+0

Separar una etiqueta de una entrada es correcto, siempre que los dos estén explícitamente asociados utilizando FOR y atributos de ID. –

+0

El borrador de estándares HTML5 también contiene ejemplos del uso de elementos de formulario dentro de las tablas: http://www.w3.org/TR/2012/CR-html5-20121217/forms.html#attr-input-readonly. –

0

No es sólo una cuestión de opiniones - hay dos problemas semánticos y prácticos con el uso de tablas con las formas.

En términos generales, las formas simples que consiste sobre todo en label - input pares, tales como formularios de ingreso visto en los sitios web de hoy no debería necesitar ningún marcado adicional, ya que label y elementos de formularios interactivos podrían ser todo lo que necesita en términos de semántica. Cualquier margen adicional se agregaría como equipaje, lo que agregaría un peso innecesario a su página. CSS debe ser flexible para hacer casi cualquier cosa que desee, y fieldset s se puede utilizar para separar las diferentes secciones del formulario.

Pero incluso cuando tenga un formulario que obviamente es una tabla, aún debe considerar otros métodos primero; existen problemas de accesibilidad con tablas y formularios de mezcla, como se indica en this article on 24 Ways. El mismo artículo también muestra cómo podrías adaptar fieldset s para hacer el mismo trabajo, y definitivamente hace una lectura interesante.

0

Esto suena más como "debate" que Q & A. Sin embargo, siempre sentí que cualquier diseño de formulario que exija una estructura de tabla (con la única excepción de las cuadrículas de datos/hojas de cálculo, que son por definición tablas) es una experiencia de usuario poco pensada. Las colecciones de casillas de verificación, entradas etiquetadas, etc. se pueden organizar de forma más flexible (y semántica) sin utilizar tablas.

0

Depende de la forma, creo.Algunas formas pueden tener sentido como una mesa - por ejemplo, una de las que tiene una serie de pares de valores clave:

<table> 
<tr> 
    <th scope="row"><label for="first-name">First Name:</label></th> 
    <td><input type="text" name="first_name" id="first-name" /></td> 
</tr> 
<tr> 
    <th scope="row"><label for="last-name">Last Name:</label></th> 
    <td><input type="text" name="last_name" id="last-name" /></td> 
</tr> 
<tr> 
    <th scope="row"><label for="color">Favorite Color:</label></th> 
    <td><input type="text" name="color" id="color" /></td> 
</tr> 
</table> 

La combinación de elementos etiqueta utilizando los atributos que corresponden a la identificación de los medios de entrada asociados que los lectores de pantalla podrán leer el formulario con sensatez. He agregado elementos TH para indicar la relación semántica dentro de la tabla entre las celdas LABEL y las celdas INPUT.

Sin embargo, hacerlo de esa manera no sería mi primera opción. La presencia del marcado de la tabla hará que sea más laborioso escuchar usando un lector de pantalla, debido al anuncio de cada fila/celda de la tabla. Parte de la información semántica de la tabla (la asociación del encabezado TH con los TD en la fila) realmente duplica el vínculo semántico entre LABEL y INPUT, de modo que con un lector de pantalla puede terminar escuchando dos veces la misma información sobre cómo estas cosas están relacionadas.

En su lugar, me gustaría hacer algo como esto:

<style type="text/css"> 
label { display: block; text-align: right; } 
label input { width: 100px; } 
</style> 

<label for="first-name">First Name: <input type="text" name="first_name" id="first-name" /></label> 

<label for="last-name">Last Name: <input type="text" name="last_name" id="last-name" /></label> 

<label for="color">Favorite Color: <input type="text" name="color" id="color" /></label> 

que le daría el mismo efecto con menos de HTML. Tiene las etiquetas asociadas con sus entradas tanto explícitamente (usando FOR/ID) como implícitamente (porque las INPUT son elementos secundarios de las LABEL). Significa que debe ser capaz de anticipar qué tan amplias deben ser sus entradas, y hay un margen izquierdo irregular debido a que todo el texto se alinea a la derecha.

También existe el problema de agregar casillas de verificación y botones de opción. En su caso, tiene sentido tener la entrada primero y la etiqueta después; pero eso no se ve muy bien con el ejemplo que he dado.

Entonces, básicamente? Formatear formas es un dolor en el trasero. Aunque a menudo consisten en pares nombre-valor que tendrían un sentido lógico como tabla, existen posibles problemas de accesibilidad con ese enfoque. Preferiría mucho evitar las soluciones basadas en tablas para un problema como este, a menos que tenga un motivo convincente para usar tablas.

+0

No estoy seguro de por qué esta respuesta fue downvoted ... Upvoted para balance. –

3

El proyecto de estándares web ha realizado un tutorial completo sobre el por qué y cómo evitar tablas en formularios html. Es una lectura muy fácil y respuestas a todas sus preguntas:

http://www.webstandards.org/learn/tutorials/accessible-forms/

+0

que es un buen enlace. Eso muestra que los problemas con la accesibilidad ocurren al usar tablas como en su ejemplo, afortunadamente no las estoy usando así, las estoy usando como en la respuesta de Jibou, que es la manera correcta (también con FOR y ID) para que un lector de pantalla pueda no tiene problema con la interpretación lógica del formulario. Gracias – Richard

Cuestiones relacionadas