Estrictamente hablando, ¿las style
etiquetas deben estar dentro head
de un documento HTML? El estándar 4.01 implica eso, pero no se establece explícitamente:
El elemento STYLE permite a los autores colocar reglas de hoja de estilo en el encabezado del documento. HTML permite cualquier número de elementos STYLE en la sección HEAD de un documento.
Digo "estrictamente hablando" porque tengo una aplicación que pone elementos de estilo dentro del cuerpo, y todos los navegadores con los que he probado parecen usar los elementos de estilo. Me pregunto si eso es realmente legal.
html
coding-style
html-head
eaolson
fuente
fuente
style
en elbody
, así que eso es lo suficientemente bueno para mí, independientemente de lo que está implícito en las secciones autor únicamente.Respuestas:
style
se supone que debe incluirse solo enhead
el documento.Además del punto de validación, una advertencia que puede interesarle al usar
style
en elbody
es el destello de contenido sin estilo . El navegador obtendría elementos que se diseñarían después de mostrarse, lo que los haría cambiar de tamaño / forma / fuente y / o parpadeo. Generalmente es un signo de mala artesanía. En general, puede salirse con la suya enstyle
cualquier lugar que desee, pero trate de evitarlo siempre que sea posible.HTML 5 introdujo un
scoped
atributo que permitíastyle
incluir etiquetas en todas partes del cuerpo, pero luego lo eliminaron nuevamente.fuente
scoped
atributo, consulte caniuse.com/#feat=style-scoped .style
etiquetas, porbody
lo que, a pesar de la parte del autor de la especificación, considero que los estilos de cuerpo son válidos. github.com/whatwg/html/issues/1605#issuecomment-235961103Respuesta corta
Según la especificación actual, sí, los
style
elementos siempre deben estar en elhead
. No hay excepciones (excepto unstyle
elemento dentro de untemplate
elemento , si desea contar eso).Este no siempre ha sido el caso históricamente. Si te interesan los detalles de la especificación y su historial, sigue leyendo.
No importa lo que diga la especificación, el uso de
style
elementos en elbody
hace más o menos trabajo en todos los principales navegadores. Sin embargo, se considera una mala práctica tanto porque viola las especificaciones como porque puede causar consecuencias indeseables como un peor rendimiento de representación o un "destello de contenido sin estilo".Historial de especificaciones
style
los elementos no existían en HTML 2 . Se introdujeron en HTML 3.0, donde se incluyeron en la lista de elementos que podrían incluirse en The Head Element , pero no en la lista de elementos que podrían estar presentes en The Body Element . Por lo tanto, en el momento en que el elemento se especificó por primera vez, solo se podía incluir enhead
.Este siguió siendo el caso (aunque expresado con una redacción diferente) hasta HTML 5, que introdujo el
scoped
atributo (ya eliminado) para losstyle
elementos. Este atributo, cuando estaba presente, estaba destinado a permitir que unstyle
elemento se coloque dentro de un elemento en el cuerpo para diseñar solo los descendientes de ese elemento. Sin embargo, esa característica nunca llegó a ningún navegador real (al menos no sin necesidad de habilitarse a través de un indicador de desarrollador) y se eliminó de las especificaciones W3C y WhatWG "debido a la falta de interés del implementador" . A partir de entonces, losstyle
elementos solo se permitieron en contextos que permiten contenido de metadatos, que es solo la cabeza. Por lo tanto, volvimos a las mismas reglas que antes de HTML 5.Sin embargo, debido a un error cometido por ambas organizaciones de especificaciones, un índice no normativo de elementos incluidos como apéndice en ambas especificaciones no se actualizó correctamente para reflejar la eliminación de
scoped
, lo que lo hace inconsistente con la especificación normativa. Señalé esto tanto al WhatWG como al W3C , y al hacerlo, involuntariamente, pusimos en marcha eventos que causaron que las dos especificaciones divergieran.La solución de WhatWG a la inconsistencia entre la especificación normativa y el índice no normativo fue aceptar mi parche corrigiendo el índice no normativo.
El W3C, por otro lado, rechazó mi parche equivalente a favor de actualizar las especificaciones normativas para permitir el uso de
style
elementos en elbody
, al tiempo que advierte que puede causar problemas y debe hacerse "con cuidado". El razonamiento detrás de este cambio fue hacer que la especificación se alineara con el comportamiento real del navegador.Por lo tanto, a partir de marzo de 2017, la respuesta oficial a esta pregunta dependió de la organización de estándares que eligió escuchar. Si enumeró la especificación WhatWG (generalmente más respetada), entonces
style
no se permitió un elemento en elbody
. Si enumeraste la especificación W3C, entonces estaba permitido, pero no recomendado.Esta situación tonta se terminó (tal vez como muchas otras inconsistencias) con el tratado de paz de abril de 2019 entre el W3C y WhatWG , que acordó que la especificación WhatWG se convertiría en el único estándar HTML vivo real, con W3C simplemente lanzando instantáneas de él como numeradas Especificaciones HTML en lugar de desarrollar una especificación competitiva en paralelo. Por lo tanto, el cambio de 2017 a la bifurcación W3C que permitió
style
elementos en elbody
ya no es parte de ninguna especificación actual; Es simplemente una curiosidad de la historia.Entonces, hoy, solo necesitamos mirar la especificación WhatWG para determinar lo que está oficialmente permitido. Tiene esto que decir:
CTRL-Fing a través de la especificación de una sola página revela que el único elemento cuyo modelo de contenido incluye contenido de metadatos es el
head
elemento.El índice no normativo de elementos que mencioné arreglar anteriormente también confirma que los únicos padres permisibles para un
style
elemento son un elementohead
onoscript
.fuente
Si bien las otras respuestas son correctas, me sorprende que nadie haya explicado dónde los estándares no permiten estilos fuera de
head
.En realidad está en la sección sobre The
head
Element (y en el DTD ):Sí, lo sé. Los DTD son difíciles de leer.
Este es el único lugar donde se
STYLE
produce el elemento, por lo que implícitamente no es válido en otro lugar.fuente
Se supone que no deben salir de la cabeza, pero funcionan de todos modos; aunque podrías notar un parpadeo rápido. El sitio no debe validarse con la etiqueta de estilo fuera de la cabeza, pero ¿eso realmente importa? Además, las etiquetas de enlace también funcionan fuera de la cabeza, aunque no se supone que lo hagan.
fuente
style
patada en s.Como las otras respuestas han dicho, en realidad no necesita estar allí. Sin embargo, no se validará. Esto puede o no importar en este caso, pero tenga en cuenta que la representación de html depende completamente de los navegadores. Por lo que sé, todos los navegadores usados de hoy en día soportarán ponerlo fuera de la cabeza, pero no puede garantizarlo para los futuros navegadores y futuras versiones del navegador.
Cumpla con el estándar y estará más seguro. Cuánto más seguro es para mucho debate.
fuente
La Recomendación HTML5.2 W3C, 14 de diciembre de 2017 (no el borrador anterior mencionado anteriormente) ahora dice que puede incluir
<style>
.fuente
style
en elbody
, por lo que volvemos a que esto está prohibido sin ambigüedades. Vea mi respuesta si está interesado en el camino sinuoso por el que llegamos aquí.Una etiqueta de estilo en cualquier lugar
<head>
que no sea el interior no se validará con las reglas del W3C.fuente
Según este sitio, HTML5.1 (en borrador) y WHATWG permiten que la
<style>
etiqueta se coloque en el cuerpo:http://www.html.am/tags/html-style-tag.cfm
También parece haber sido compatible con los navegadores durante bastante tiempo. De acuerdo con esta respuesta de StackOverflow, Firefox 3+, IE6 +, Safari 2+ y Chrome 12+ lo admiten:
https://stackoverflow.com/a/10989663/297793
fuente
De acuerdo con la especificación HTML 5.2 (en borrador), la etiqueta de estilo solo se permite en el encabezado de un documento.
Borrador HTML 5.2 en la etiqueta de estilo (18 de agosto de 2016)
fuente
Puede usar la etiqueta de estilo dentro de la sección de la cabeza o la sección del cuerpo o también fuera de la etiqueta html (no se recomienda el html lateral). En proyectos en tiempo real, muchas veces puedes ver que usan la etiqueta de estilo al costado de la etiqueta html
fuente