2011-05-11 28 views
39

En mi html tenía curiosidad si era semánticamente correcto utilizar identificadores únicos como <toys></toys> para contener una imagen en lugar de <h2>. Por ejemplo:Uso de etiquetas HTML personalizadas

¿Es preferible tener: <toys class="grid_4 push_2">&nbsp</toys>

con el css:

toys { 
    background: url("toys.png") no-repeat scroll 0 0 transparent; 
    width: 181px; 
    height: 93px; 
    margin-top: -8px; 
    } 

en lugar de: Actualmente tengo: <h1 class="grid_4 push_2">&nbsp</h1>

con el css:

h1 { 
    background: url("toys.png") no-repeat scroll 0 0 transparent; 
    width: 181px; 
    height: 93px; 
    margin-top: -8px; 
    } 

¿Es semánticamente correcto el uso de identificadores únicos como <toys>?

+0

preguntas más grandes sobre el mantenimiento a un lado, si se representa correctamente para su público objetivo, es válido y semánticamente correcto html. – worc

+0

Con un enfoque de componentes, sí lo es (por ejemplo, los componentes React y AngularJs). Sin embargo, no lo recomendaría para uso general (es decir, simplemente tirando nuevas etiquetas en el viento sin un concepto que lo respalde) –

+0

su etiqueta personalizada (elemento) no debe nombrar "juguetes", más bien para evitar colisiones con futuros nombres estándar su nombre de elemento personalizado debe contener un guión (https://www.w3.org/TR/custom-elements/#custom-element-conformance); – comeGetSome

Respuesta

22

Es mejor evitar el uso de etiquetas personalizadas, ya que nunca se sabe cuándo esas etiquetas pueden estandarizarse y tener un uso especial en el futuro.

Lo mejor que puede hacer por su ejemplo, si se quiere evitar el uso de las etiquetas de cabecera, es la siguiente:

<div class="toys grid_4 push_2">&nbsp</div> 

.toys { 
    background: url("toys.png") no-repeat scroll 0 0 transparent; 
    width: 181px; 
    height: 93px; 
    margin-top: -8px; 
} 

Además:

Si no utiliza el estándar HTML las etiquetas al diseñar páginas, no aparecerán de ninguna manera organizada cuando los estilos están deshabilitados. Esto no es un problema, en adelante, pero si por alguna razón necesitas ver una lista de "juguetes" sin estilos, no tendrías suerte a menos que uses <ul> o <ol> con las etiquetas <li>.

ACTUALIZACIÓN:

Como Flimzy señaló en los comentarios, los elementos HTML personalizados tienen ahora su propia especificación del W3C. Sin embargo, aún no son totalmente compatibles.

+0

Gracias por eso. Usted aclaró los problemas que podrían surgir como resultado del uso de etiquetas html personalizadas. – Noob

+19

así que pregunto ... ¿cuál es el sentido de tener etiquetas? ¿No deberían ellos proporcionar un significado semántico? Es curioso que XHTML signifique HTML EXTENSIBLE y, sin embargo, todos siempre se asustaron cuando lo extendió y su marcado no valió. – lukemh

+5

No conozco a ningún gran desarrollador web que piense que XHTML es mejor que el HTML estándar, con formato correcto y con etiqueta cerrada. De hecho, estoy seguro de que muchos desarrolladores nuevos creen que XHTML es sinónimo de XML-HTML, ya que se apega más a los estándares XML que a los estándares HTML anteriores. Para responder a su pregunta, las etiquetas de hecho proporcionan un significado semántico. Un documento HTML es una * vista * de algunos datos. No son los datos en sí. Por lo tanto, las etiquetas proporcionan un significado semántico por la forma en que muestran los datos que representan. "div" significa división, "p" significa párrafo, "sección" significa sección, etc. –

8

Sin duda puede; sin embargo, generalmente es no es una buena idea para hacerlo. En muchos sentidos, HTML5 se está moviendo a algo así, pero genérico; tener etiquetas específicas, si bien es compatible, puede tener resultados muy diferentes entre diferentes navegadores.

1

Sí, eso sería semánticamente correcto.

Sin embargo, es una sintaxis no válida ya que HTML tiene un conjunto definido de etiquetas.

Puede solucionarlo en algunos navegadores.

Dicho esto, ¿cuál es el beneficio de hacer eso? Realmente solo beneficiaría a la persona que tiene que mantener el código fuente.

Para su información, lo que usted propone es más o menos lo que XML es.

0

Si el tipo de documento se establece en XHTML, que debe estar bien. Pero generalmente no es válido para HTML doctypes.

+0

XHTML es de estilo antiguo. Comprueba las especificaciones de HTML5. – BerggreenDK

+0

@BerggreenDK: Entiendo eso y nunca lo he recomendado. – Shaz

0

No desea crear sus propias etiquetas.

Las etiquetas HTML se definen en la especificación HTML.

En lugar de:

<h1 class="grid_4 push_2">&nbsp</h1> 

Usted debe hacer algo como:

<h1 class="toys">&nbsp</h1> 

Sin embargo, usted puede hacer hasta que propias etiquetas XML si.

Pero tenga en cuenta que no todos los navegadores son compatibles con su etiqueta y no podrá personalizarlos con CSS.

está ocurriendo lo mismo con el nuevo HTML5 tags

1

Estoy de acuerdo con @superUntiled, usted debe hacer un buen uso de los selectores CSS (clases y IDs). Entonces, si tiene un objeto de tipo "juguete", debe crear una clase para ese objeto. Luego, puede seleccionar todos sus cars usando CSS simplemente usando el selector .toy.

Algo como esto:

<style> 
.toy { 
    color: red; 
} 
</style> 

<p class="toy">My little car</p> 
39

La mayor parte de estas respuestas son buenos consejos generales, pero no respuestas adecuadas a la pregunta, que creo que es perfectamente legítimo.

HTML5 ya es un objetivo en movimiento; los navegadores implementan especificaciones e innovan a diferentes ritmos. No hay una sola cosa llamada "HTML válido", al menos no que valga la pena usar. Si está construyendo una página pública para cada persona y bot/rastreador en el planeta, entonces ya tiene que A) detectar al cliente y personalizarlo en consecuencia, para páginas complejas/avanzadas o B) hacerlo realmente simple y simple. Si, por otro lado, lo está colocando en una LAN u ocultándolo detrás de un muro de inicio de sesión o desarrollándose a la vanguardia y planificando actualizaciones frecuentes de todos modos, entonces debe sentirse libre de innovar un poco, con discreción. Los desarrolladores de navegadores y los escritores de especificaciones satisfacen sus necesidades, usted puede hacer lo mismo.

Por lo tanto, si desea una etiqueta personalizada, elija con cuidado (aquí señalaré que las probabilidades que alguna vez se convertirían en parte de una especificación formal de la implementación del navegador son totalmente insignificantes), luego vaya por ello. Sin embargo, para hacer que su CSS funcione en IE, tendrá que hacer lo mismo que html5shim y llamar a document.createElement ('toys') en su javascript.

También debería agregar que los elementos personalizados obtienen sus propios estándares y soporte, pero el consenso actual es que todos deberían tener un '-' en el nombre. Así que recomendaría algo como 'x-toys' o 'mis-juguetes' en lugar de solo 'juguetes'. Personalmente, no estoy encantado con la convención, pero entiendo las razones.

+0

Excelente respuesta, especialmente la que se refiere a * la llamada a createElement() * para los navegadores de Internet Explorer. – Cypher

5

ACTUALIZACIÓN (porque todas las respuestas son de edad):

A partir de componentes web de la API se implementa en todos los navegadores importante, en mi opinión, no se puede evitar el uso de etiquetas personalizadas en el futuro. Creo que Web Components se convertirá fácilmente en la corriente principal. Toda la teoría está basada en él: etiquetas personalizadas, atributos personalizados JS personalizados asociados a estos elementos.

Así que lo que digo: no es malo usar sus propias etiquetas hoy en día, pero aún necesita considerar la construcción relacionada con SEO.

1

Seguramente si define una etiqueta y también define dentro de su hoja de estilo lo que debería hacer, ¿eso debería atarla? Incluso si su nueva etiqueta se estandariza más tarde, su hoja de estilo reemplazará al estándar, después de todo para eso son las hojas de estilo.

Por ejemplo, a menudo necesito controlar los saltos de línea en mis páginas. En lugar de utilizar un torpe

<span style="white-space:nowrap">bla bla bla</span> 

cada vez, le adjunto mi texto no roto dentro de mis propias etiquetas y definir en mi hoja de estilo:

nbr { 
    white-space:nowrap; 
} 

por lo

<p> This is some text. <nbr>This is some more text.</nbr></p> 

aparecerá en una línea si hay espacio, de lo contrario la segunda oración aparecerá en la siguiente línea. O, para ser precisos, en todos los navegadores excepto en las versiones anteriores de IE. Para ser de hierro fundido, añadí lo siguiente a cada página de la sección [cabeza] (en Wordpress, sólo tiene que añadir a header.php del tema): -

<!--[if lt IE 9]> 
<script> document.createElement('nbr'); </script> 
<![endif]--> 

O me estoy perdiendo algo?

+0

Sí, te estás perdiendo algo. "Incluso si su nueva etiqueta se estandariza más adelante, su hoja de estilo reemplazará el estándar" es muy ingenua. Como un ejemplo del mundo real, tomemos el elemento ''. Si solo tiene algo como 'white-space: nowrap' en su hoja de estilo, _no__ anulará todos los estilos predeterminados de este elemento, y su documento se romperá horriblemente en los navegadores más nuevos que lo admitan. Entonces no hagas esto Use el protocolo de denominación recomendado para los elementos que diseña usted mismo (es decir, con un guión, ''), o póngalos en un espacio de nombre de su elección (''). –

+0

Acepto hacer esto para una etiqueta de "diseño" que me gustaría tener propiedades específicas. –

Cuestiones relacionadas