2011-03-25 18 views
8

acabo de leer lo siguiente en http://w3fools.com/#html_forms:¿Por qué una etiqueta de entrada no está permitida directamente dentro de una etiqueta de formulario?

elementos de nivel para no bloque (tales como <input>) no son válidas directamente dentro de <form> etiquetas hasta HTML5.

Nunca había oído hablar de algo en esta línea, y cada tutorial básico de HTML que he visto parece estar bien con poner etiquetas de entrada directamente dentro de una etiqueta de formulario. Entonces mi pregunta tiene tres partes:

  • ¿Es legítima la afirmación anterior?
  • ¿Por qué es este el caso? (¿Fue simplemente un descuido, o los creadores de la especificación HTML intentaron evitar problemas específicos creando esta regla?)
  • ¿Cuál es la forma recomendada de construir un formulario con entradas? (¿Se supone que debemos crear un div o una tabla directamente dentro de la etiqueta del formulario?)
+4

Sí, los hijos directos de los elementos FORM tienen que ser elementos a nivel de bloque. Vea aquí: http://vidasp.net/HTML-structure-diagram.html –

Respuesta

8

Pedagogía de las normas.

  • La declaración es legítima en cuanto a la norma va: en HTML 4.01, el definition for <form> especifica que sólo puede contener elementos de bloque o <script>. En cuanto a lo que permite cada navegador en el mundo, está bien.
  • Solo puedo adivinar que consideran que <form> no es una etiqueta de diseño en absoluto, y quieren que todos los elementos en línea estén contenidos dentro de un elemento de bloque.
  • Sí, se supone que debe colocar un <div>, <table>, <p> o algún otro elemento de presentación de bloque dentro del <form>.
+0

Es tan extraño para mí que la especificación dice "El elemento FORM actúa como contenedor de controles" y "Un formulario puede contener texto y marcas". (párrafos, listas, etc.) además de los controles de formulario, "pero luego no permiten que contenga controles directamente. – StriplingWarrior

1

En primer lugar, me gustaría mencionar que no es realmente sorprendente que los tutoriales HTML te enseñen a hacer las cosas mal - HTML fue prácticamente diseñado para aceptar cualquier forma de hacer las cosas. Puede dejar etiquetas sin cerrar, puede anidarlas incorrectamente y otras cosas, que es una de las razones por las que personalmente uso XHTML.

Esa afirmación parece ser cierta, pero debido a cómo se diseña HTML, no importa en la práctica. XHTML probablemente prohíbe esto.

La forma no es realmente un contenedor de ningún tipo. Parece que a los creadores de la especificación HTML les gustaban elementos como los elementos de nivel de bloque en los que deberías envolver todo. Sin embargo, este es solo mi punto de vista, pero hasta donde he notado, los elementos que no son de bloque no deberían usarse sin un contenedor adecuado para ellos. Es exactamente como no deberías poner elementos sin nivel de bloque en un <blockquote>. Los elementos de nivel de bloque son contenedores para otros elementos.

A div, a table - Creo que incluso un <p> hace lo mismo aquí.

5

La afirmación anterior es verdadera. En HTML, la etiqueta de entrada < > no es un elemento válido de la etiqueta < >. Para que esto valide, debe adjuntar la etiqueta de entrada < > con < campo conjunto > o <div>. Lo cual se demuestra a continuación.

<form action="/" method="post"> 
    <fieldset> 
     Field: <input type="text" name="field" /> 
     <br /> 
     <input type="submit" value="Submit" /> 
    </fieldset> 
</form> 
0

Bueno, de acuerdo con la especificación HTML 4.01 (específicamente section 17.3), esto es técnicamente cierto. Sin embargo, no conozco ningún navegador web que realmente le daría un problema al respecto.

Cuestiones relacionadas