A rigor, as style
tags precisam estar dentro head
de um documento HTML? O padrão 4.01 implica isso, mas não é explicitamente declarado:
O elemento STYLE permite que os autores coloquem regras de folha de estilos no cabeçalho do documento. O HTML permite qualquer número de elementos STYLE na seção HEAD de um documento.
Digo "estritamente" porque tenho um aplicativo que coloca elementos de estilo dentro do corpo, e todos os navegadores com os quais testei parecem usar os elementos de estilo. Só estou me perguntando se isso é realmente legal.
html
coding-style
html-head
eaolson
fonte
fonte
style
nabody
, de modo que é bom o suficiente para mim, independentemente do que está implícito nas seções autor das diretrizes.Respostas:
style
deve ser incluído apenas nohead
documento.Além do ponto de validação, uma ressalva que pode lhe interessar ao usar
style
obody
é o lampejo de conteúdo sem estilo . O navegador obteria elementos que seriam estilizados após serem exibidos, alterando o tamanho / forma / fonte e / ou tremulação. Geralmente é um sinal de artesanato ruim. Geralmente você pode se safar de colocarstyle
onde quiser, mas tente evitá-lo sempre que possível.O HTML 5 introduziu um
scoped
atributo que permitiastyle
a inclusão de tags em todo o corpo, mas depois o removeram novamente.fonte
scoped
atributo, consulte caniuse.com/#feat=style-scoped .style
tagsbody
, portanto, apesar da parte de autor da especificação, considero os estilos de corpo válidos. github.com/whatwg/html/issues/1605#issuecomment-235961103Resposta curta
De acordo com a especificação atual, sim, os
style
elementos devem sempre estar nohead
. Não há exceções (exceto umstyle
elemento dentro de umtemplate
elemento , se você quiser contar isso).Esse nem sempre foi o caso historicamente. Se você se preocupa com os detalhes das especificações e seu histórico, continue lendo.
Não importa o que a especificação diz, usando
style
elementos nobody
faz mais ou menos trabalho em todos os principais navegadores. No entanto, é considerada uma má prática, tanto por violar especificações quanto por causar conseqüências indesejáveis, como pior desempenho de renderização ou um "flash de conteúdo não estilizado".Histórico de especificações
style
elementos não existiam no HTML 2 . Eles foram introduzidos no HTML 3.0, onde foram incluídos na lista de elementos que poderiam ser incluídos no The Head Element , mas não incluídos na lista de elementos que poderiam estar presentes no The Body Element . Assim, no momento em que o elemento foi especificado pela primeira vez, ele só pôde ser incluído nohead
.Este permaneceu o caso (embora expresso usando palavras diferentes) até o HTML 5, que introduziu o
scoped
atributo (desde que removido) para osstyle
elementos. Esse atributo, quando presente, tinha como objetivo permitir que umstyle
elemento fosse colocado dentro de um elemento no corpo para estilizar apenas os descendentes desse elemento. No entanto, esse recurso nunca chegou a nenhum navegador real (pelo menos não sem a necessidade de ser ativado por um sinalizador de desenvolvedor) e foi removido das especificações do W3C e do WhatWG "devido à falta de interesse do implementador" . Depois disso,style
elementos foram permitidos apenas em contextos que permitem conteúdo de metadados, que é apenas o cabeçalho. Assim, voltamos às mesmas regras de antes do HTML 5.No entanto, devido a um erro cometido pelas duas organizações de especificações, um índice não normativo de elementos incluídos como apêndice nas duas especificações não foi atualizado adequadamente para refletir a remoção de
scoped
, tornando-o inconsistente com a especificação normativa. Eu apontei isso para o WhatWG e para o W3C e, ao fazê-lo, involuntariamente desencadeou eventos que fizeram com que as duas especificações divergissem.A solução da WhatWG para a inconsistência entre a especificação normativa e o índice não normativo foi aceitar meu patch corrigindo o índice não normativo.
O W3C, por outro lado, rejeitou meu patch equivalente em vez de atualizar a especificação normativa para permitir o uso de
style
elementos nobody
, enquanto ressalta isso com uma nota de que ele pode causar problemas e deve ser feito "com cuidado". O raciocínio por trás dessa mudança foi alinhar as especificações com o comportamento do navegador da vida real.Portanto, a partir de março de 2017, a resposta oficial a essa pergunta dependia de qual organização de padrões você escolheu ouvir. Se você listou as especificações WhatWG (geralmente mais respeitadas), um
style
elemento não era permitido nabody
. Se você listou as especificações do W3C, isso foi permitido, mas não recomendado.Esse estado de coisas tolo foi encerrado (talvez como muitas outras inconsistências) com o tratado de paz de abril de 2019 entre o W3C e o WhatWG , que concordou que as especificações do WhatWG se tornariam o único verdadeiro padrão HTML vivo, com o W3C apenas liberando instantâneos como numerados Especificações HTML em vez de desenvolver uma especificação concorrente em paralelo. Assim, a mudança de 2017 para o fork do W3C que permitiu
style
elementos nobody
não faz mais parte de nenhuma especificação atual; é apenas uma curiosidade da história.Então, hoje, precisamos apenas olhar para a especificação WhatWG para determinar o que é oficialmente permitido. Tem o seguinte a dizer:
CTRL-Fing através da especificação de página única revela que o único elemento cujo modelo de conteúdo inclui conteúdo de metadados é o
head
elemento.O índice não normativo dos elementos que mencionei anteriormente, também confirma que os únicos pais permitidos para um
style
elemento são ahead
ounoscript
elemento.fonte
Enquanto as outras respostas estão corretas, estou surpreso que ninguém tenha explicado onde os padrões não permitem estilos fora do
head
.Na verdade, está na seção The
head
Element (e na DTD ):Sim eu conheço. DTDs são difíceis de ler.
Este é o único lugar em que o
STYLE
elemento ocorre, então, implicitamente, é inválido em outro lugar.fonte
Eles não deveriam sair da cabeça, mas funcionam de qualquer maneira; embora você possa notar um piscar rápido. O site não deve validar com a tag de estilo fora da cabeça, mas isso realmente importa? Além disso, as tags de link também funcionam fora da cabeça, mesmo que não devam.
fonte
style
s chutar.Como as outras respostas declararam, ele realmente não precisa estar lá. No entanto, não será validado. Isso pode ou não ter importância nesse caso, mas lembre-se de que a renderização de html depende inteiramente dos navegadores. Pelo que sei, todos os navegadores usados hoje suportam colocá-lo fora da cabeça, mas você não pode garantir isso para os navegadores futuros e versões futuras do navegador.
Ficar com o padrão e você está mais seguro. Quão mais seguro é o debate.
fonte
A Recomendação W5C do HTML5.2, 14 de dezembro de 2017 (não o rascunho anterior mencionado acima) agora diz que você pode incluir
<style>
.fonte
style
nobody
, por isso estamos de volta a esta sendo inequivocamente proibida. Veja minha resposta se você estiver interessado no caminho sinuoso que chegamos até aqui.Uma marca de estilo em qualquer lugar, mas dentro da
<head>
, não será validada com as regras do W3C.fonte
De acordo com este site, HTML5.1 (em rascunho) e WHATWG permitem que a
<style>
tag seja colocada no corpo:http://www.html.am/tags/html-style-tag.cfm
Também parece ter sido suportado pelos navegadores por um bom tempo. De acordo com esta resposta do StackOverflow, o Firefox 3+, IE6 +, Safari 2+ e Chrome 12+ suportam:
https://stackoverflow.com/a/10989663/297793
fonte
De acordo com a especificação do HTML 5.2 (em rascunho), a tag de estilo é permitida apenas no cabeçalho de um documento.
Rascunho do HTML 5.2 na etiqueta de estilo (18 de agosto de 2016)
fonte
Você pode usar a etiqueta de estilo dentro da seção da cabeça ou do corpo ou também fora da tag html (o HTML externo não é recomendado). Em projetos em tempo real, muitas vezes você pode ver que eles usam tags de estilo fora da tag html
fonte