valor todas tipos son que los lleno las etiquetas etiqueta entre elementos elemento ejemplos diferencia cuáles atributos atributo html w3c

tipos - todas las etiquetas de html y sus atributos



¿Son los elementos vacíos y los elementos vacíos lo mismo? (2)

He estado escribiendo HTML desde los años 90, pero acabo de colgroup elementos colgroup y col . Según MDN , col es un elemento nulo y la etiqueta final está prohibida .

Omisión de etiqueta: la etiqueta de inicio es obligatoria, pero, como es un elemento nulo, está prohibido el uso de una etiqueta de finalización.

Nunca antes había oído hablar de un elemento vacío. MDN no tiene una página con elementos nulos, pero la página de elementos vacía dice:

Nota: En casos muy raros, los elementos vacíos se conocen como elementos vacíos. Este es un nombre incorrecto y debe evitarse.

Sin embargo, la especificación W3 se refiere a elementos vacíos solamente y nunca menciona elementos vacíos:

Un elemento vacío es un elemento cuyo modelo de contenido nunca le permite tener contenidos bajo ninguna circunstancia. Los elementos vacíos pueden tener atributos.

Así que me pregunto:

  1. Si estos son lo mismo, ¿deberían llamarse elementos vacíos y nunca elementos vacíos? En ese caso, ¿la especificación de W3 es obsoleta y no se puede confiar? ¿O debería tener prioridad la especificación W3, incluso si está desactualizada?
  2. Si no son lo mismo, ¿es <col span="2" /> sintaxis válida o debería ser <col span="2"> (sin la barra) porque la etiqueta final está prohibida? Puede que tenga la idea equivocada de "etiqueta final" pero siempre he pensado que /> (como en <br /> y <img /> ) es una especie de etiqueta final.

El término "elemento vacío" proviene de SGML, en el que se basaron los estándares HTML anteriores a HTML5, y donde se utiliza la palabra clave VACÍO para representar elementos con un modelo de contenido vacío. Esto es lo que dice la especificación de HTML 4 :

El contenido permitido para un elemento se llama su modelo de contenido . Los tipos de elementos que están diseñados para no tener contenido se llaman elementos vacíos . El modelo de contenido para dichos tipos de elementos se declara utilizando la palabra clave "VACÍO".

Con una declaración de ejemplo para el elemento img :

Este ejemplo ilustra la declaración de un tipo de elemento vacío:

<!ELEMENT IMG - O EMPTY>

  • El tipo de elemento que se está declarando es IMG .
  • El guión y la siguiente "O" indican que la etiqueta final puede omitirse, pero junto con el modelo de contenido "VACÍO", esto se refuerza a la regla de que la etiqueta final debe omitirse.
  • La palabra clave "VACÍO" significa que las instancias de este tipo no deben tener contenido.

XML define un "elemento vacío" de manera muy diferente:

[Definición: Un elemento sin contenido se dice que está vacío .]

La diferencia aquí es que XML no dice que un "elemento vacío" es "un elemento cuyo modelo de contenido está vacío". En su lugar, simplemente dice que un "elemento vacío" es uno que no tiene contenido. Esto es independiente de si el tipo de documento o el esquema XML definen o no ese elemento específico por no tener contenido por necesidad; El propio XML por naturaleza no impone tales restricciones.

Un término adicional, "etiqueta de elemento vacío", se usa para describir la sintaxis de acceso directo /> comúnmente utilizada para indicar elementos vacíos (de nuevo, independientemente de si están o no vacíos por definición). Esto también se conoce comúnmente como sintaxis de "cierre automático".

El término "elemento vacío" es nuevo para HTML5 . Tiene la misma definición que la definición pre-HTML5 de "elemento vacío": es decir, un elemento que solo tiene una etiqueta inicial, no tiene etiqueta final y no puede tener ningún contenido. Aunque la especificación W3C HTML5 no hace referencia al término "elemento vacío", el término "etiqueta de elemento vacío" como se describe en XML se usa en un documento relacionado :

En la sintaxis HTML, los elementos vacíos son elementos que siempre están vacíos y nunca tienen una etiqueta final. Todos los elementos enumerados como nulos HTML5 o en una especificación de extensión, DEBEN estar en formato políglota tienen la forma sintáctica de una XML XML ( <foo/> ). Otros elementos NO DEBEN utilizar la sintaxis de la etiqueta del elemento vacío XML.

Parece que los estándares HTML modernos ahora prefieren la definición XML y evitan la definición anterior. Esto parece apropiado, porque el HTML moderno ya no es una aplicación SGML, sino un lenguaje de marcado por derecho propio . (Tampoco es XML, pero ahí es donde entra en juego el marcado políglota).

Entonces, para resumir:

  • Un elemento vacío es uno que no tiene contenido, independientemente de si se le permite tener contenido en primer lugar.
  • Un elemento vacío es aquel que no puede tener ningún contenido.

Además, se puede decir que todos los elementos vacíos son elementos vacíos por definición, pero un elemento vacío no representa necesariamente un elemento vacío.

En respuesta a tus preguntas:

  1. Si estos son lo mismo, ¿deberían llamarse elementos vacíos y nunca elementos vacíos? En ese caso, ¿la especificación de W3 es obsoleta y no se puede confiar? ¿O debería tener prioridad la especificación W3, incluso si está desactualizada?

    Los elementos como area , br , col e img conocen con mayor precisión como elementos vacíos, como en HTML5. También se consideran vacíos, pero solo porque no pueden ser "no vacíos".

    No tengo ni idea de por qué MDN tiene un artículo que dice "[''Elementos vacíos''] es un nombre incorrecto y se debe evitar". cuando usa el nombre en la mayoría de sus referencias HTML de todos modos. No veo ninguna razón para no confiar en las especificaciones oficiales.

  2. Si no son lo mismo, ¿es <col span="2" /> sintaxis válida o debería ser <col span="2"> (sin la barra) porque la etiqueta final está prohibida? Puede que tenga la idea equivocada de "etiqueta final" pero siempre he pensado que /> (como en <br /> y <img /> ) es una especie de etiqueta final.

    <col span="2" /> solo es sintaxis válida porque HTML5 lo reconoce como una forma popular de marcar elementos vacíos gracias a XHTML, y no permitirlos rompería innecesariamente la compatibilidad de validación con muchos documentos XHTML que de otra manera se validarían como HTML5. El mismo HTML5 define /> que carece de significado (con una excepción específica que no es realmente relevante aquí), por lo que en realidad <col span="2" /> en HTML5 simplemente representa una col con solo una etiqueta de inicio y sin etiqueta final, y es por lo tanto, idéntico a <col span="2"> , aunque compatible con XML.


Lo que usted cita como "especificación W3" es una referencia no autorizada. La Recomendación HTML 4.01 del W3C se refiere a elementos vacíos como elementos con contenido declarado EMPTY , es decir, elementos que no pueden tener ningún contenido. No utiliza la frase "elemento vacío" en absoluto.

Los borradores de HTML5 especifican los elementos que son elementos vacíos en HTML 4.01 que tienen un modelo de contenido "vacío" pero que en realidad no definen dicho modelo. En su lugar, menciona HTML5 y dice que "no pueden tener ningún contenido".

Así que la confusión está en los borradores de HTML5. Independientemente de esto, es importante distinguir entre elementos vacíos / vacíos que no pueden (según las especificaciones y las reglas de análisis realmente aplicadas) tener ningún contenido y elementos que simplemente tengan contenido vacío, como elementos <p> vacíos ( mala práctica) y elementos <td> vacíos (generalmente mala práctica, pero válidos y en ocasiones adecuados).