Não consegui encontrar uma resposta definitiva para saber se as tags personalizadas são válidas no HTML5, assim:
<greeting>Hello!</greeting>
Não encontrei nada de uma forma ou de outra:
http://dev.w3.org/html5/spec/single-page.html
E as tags personalizadas parecem não validar com o validador W3C.
html
custom-element
d13
fonte
fonte
Respostas:
A especificação de elementos personalizados está disponível no Chrome e Opera e está disponível em outros navegadores . Ele fornece um meio de registrar elementos personalizados de maneira formal.
Os elementos personalizados fazem parte de uma especificação W3 maior chamada Componentes da Web , juntamente com Modelos, Importação de HTML e Sombra DOM.
No entanto, a partir deste excelente artigo no Google Developers sobre o Custom Elements v1:
Alguns Recursos
fonte
É possível e permitido:
http://www.w3.org/TR/html5/infrastructure.html#extensibility-0
Mas, se você deseja adicionar interatividade, precisará tornar seu documento inválido (mas ainda totalmente funcional) para acomodar os 7 e 8 do IE.
Consulte http://blog.svidgen.com/2012/10/building-custom-xhtml5-tags.html (meu blog)
fonte
NB A resposta abaixo estava correta quando foi escrita em 2012. Desde então, as coisas mudaram um pouco. A especificação HTML agora define dois tipos de elementos personalizados - "elementos personalizados autônomos" e "elementos internos personalizados". O primeiro pode ir a qualquer lugar onde se espera conteúdo de frases; que é a maioria dos lugares dentro do corpo, mas não por exemplo, filhos de elementos ul ou ol ou em elementos de tabela que não sejam elementos td, th ou caption. O último pode ir aonde quer que o elemento que eles estendem possa ir.
Isso é realmente uma consequência do acúmulo do modelo de conteúdo dos elementos.
Por exemplo, o elemento raiz deve ser um
html
elemento.O
html
elemento pode conter apenas um elemento head seguido por um elemento body.O
body
elemento pode conter apenas conteúdo de Fluxo onde o conteúdo de fluxo é definido como os elementos: a, abbr, endereço, área (se for um descendente de um elemento do mapa), artigo, aparte, áudio, b, bdi, bdo, blockquote, br, botão, tela, citar, código, comando, datalist, del, detalhes , dfn, div dl, em, embed, fieldset, figura, rodapé, formulário, h1, h2, h3, h4, h5, h6, cabeçalho, hgroup, hr, i, iframe, img, input, ins, kbd, keygen, etiqueta, mapa, marca, matemática, menu, medidor, nav, noscript, objeto, ol, saída, p, pré, progresso, q, rubi, s, samp, script, seção, selecionar, pequeno, extensão, forte, estilo ( se o atributo de escopo estiver presente), sub, sup, svg, table, textarea, time,u, ul, var, vídeo, wbr e textoe assim por diante.
Em nenhum momento o modelo de conteúdo diz "você pode colocar quaisquer elementos que desejar neste", o que seria necessário para elementos / tags personalizados.
fonte
Elementos e atributos personalizados básicos
Os elementos e atributos personalizados são válidos em HTML, desde que:
x-
data-
Por exemplo,
<x-foo data-bar="gaz"/>
ou<br data-bar="gaz"/>
.Uma convenção comum para elementos é
x-foo
;x-vendor-feature
é recomendado.Isso lida com a maioria dos casos, pois é raro que um desenvolvedor precise de todo o poder necessário para registrar seus elementos. A sintaxe também é adequadamente válida e estável. Uma explicação mais detalhada está abaixo.
Atributos e elementos personalizados avançados
A partir de 2014, há uma maneira nova e muito aprimorada de registrar elementos e atributos personalizados. Ele não funciona em navegadores mais antigos, como o IE 9 ou o Chrome / Firefox 20. Mas permite que você use a
HTMLElement
interface padrão , evite colisões, use nomes quex-*
não sejam e que não sejamdata-*
nomes e defina comportamento e sintaxe personalizados para o navegador respeitar . Requer um pouco de JavaScript sofisticado, conforme detalhado nos links abaixo.Rochas HTML5 - Definindo novos elementos em HTML
WebComponents.org - Introdução aos elementos personalizados
W3C - Componentes da Web: elementos personalizados
Sobre a validade da sintaxe básica
O uso
data-*
de nomes de atributos personalizados é perfeitamente válido há algum tempo e até funciona com versões mais antigas do HTML.W3C - HTML5: extensibilidade
Quanto aos nomes de elementos personalizados (não registrados), o W3C recomenda fortemente contra eles e os considera não-conformes. Mas são necessários navegadores para suportá-los, e os
x-*
identificadores não entrarão em conflito com as especificações HTML futuras e osx-vendor-feature
identificadores não entrarão em conflito com outros desenvolvedores. Um DTD personalizado pode ser usado para solucionar qualquer navegador exigente.Aqui estão alguns trechos relevantes dos documentos oficiais:
W3C - HTML5: conformidade de documentos
WhatWG - HTML Standard: Elementos DOM
fonte
Eu gostaria de salientar que a palavra "válido" pode ter dois significados diferentes nesse contexto, sendo que um deles é potencialmente, um, válido.
Um documento HTML com tags personalizadas deve ser considerado HTML5 válido? A resposta para isso é claramente "não". A especificação lista exatamente quais tags são válidas em quais contextos. É por isso que um validador HTML não aceita um documento com tags personalizadas ou com tags padrão nos lugares errados (como uma tag "img" no cabeçalho).
Um documento HTML com tags personalizadas será analisado e renderizado de maneira padrão e claramente definida nos navegadores? Aqui, talvez surpreendentemente, a resposta seja "sim". Embora o documento não seja tecnicamente considerado válido como HTML5 válido, a especificação HTML5 especifica exatamente o que os navegadores devem fazer quando virem uma tag personalizada: em resumo, a tag personalizada age como uma
<span>
- não significa nada e não faz nada por padrão, mas pode ser estilizado por HTML e acessado por javascript.fonte
Os elementos HTML personalizados são um padrão emergente do W3 no qual tenho contribuído, permitindo que você declare e registre elementos personalizados com o analisador. Você pode ler as especificações aqui: Especificação de elementos personalizados do W3 Web Components . Além disso, a Microsoft suporta uma biblioteca (escrita por ex-desenvolvedores da Mozilla), chamada X-Tag - facilita ainda mais o trabalho com os Componentes da Web.
fonte
dom.webcomponents.enabled
paratrue
.Para fornecer uma resposta atualizada, refletindo as páginas modernas.
Tags personalizadas são válidas se,
1) Eles contêm um traço
2) Eles são XML incorporados
Isso pressupõe que você esteja usando o doctype HTML5
<!doctype html>
Considerando essas restrições simples, agora faz sentido fazer o possível para manter sua marcação HTML válida (pare de fechar as tags como
<img>
e<hr>
, é tolo e incorreto, a menos que você use um doctype XHTML, do qual provavelmente não precisa).Como o HTML5 define claramente as regras de análise, um navegador compatível poderá lidar com qualquer tag que você lançar, mesmo que não seja estritamente válida.
fonte
Citando a seção Extensibilidade da especificação HTML5 :
Portanto, se você estiver usando a serialização XML do HTML5, é legal fazer algo assim:
No entanto, se você estiver usando a sintaxe HTML, ficará muito mais limitado no que poderá fazer.
Mas essas instruções são direcionadas principalmente aos fornecedores de navegadores, que supostamente forneceriam estilo visual e funcionalidade para quaisquer elementos personalizados que escolherem criar.
Para um autor, no entanto, embora possa ser legal incorporar um elemento personalizado na página (pelo menos na serialização XML), você não receberá nada além de um nó no DOM. Se você deseja que seu elemento personalizado realmente faça algo ou seja renderizado de alguma maneira especial, verifique a especificação de Elementos Personalizados .
Para obter uma cartilha mais suave sobre o assunto, leia a Introdução aos componentes da Web , que também inclui informações sobre o Shadow DOM e outras especificações relacionadas. Essas especificações ainda estão em rascunhos no momento - você pode ver o status atual aqui - mas estão sendo ativamente desenvolvidas.
Como exemplo, uma definição simples para um
greeting
elemento pode ser algo como isto:Isso indica ao navegador para renderizar o conteúdo do elemento entre aspas e prefixado pelo texto "Simon says:", que é estilizado com a cor cinza. Normalmente, uma definição de elemento personalizada como essa seria armazenada em um arquivo html separado que você importaria com um link.
Embora você também possa incluí-lo em linha, se desejar.
Eu criei uma demonstração de trabalho da definição acima usando a biblioteca Polyfill Polyfill, que você pode ver aqui . Observe que isso está usando uma versão antiga da biblioteca Polymer - as versões mais recentes funcionam de maneira bastante diferente. No entanto, com as especificações ainda em desenvolvimento, isso não é algo que eu recomendaria usar no código de produção de qualquer maneira.
fonte
basta usar o que quiser, sem qualquer declaração dom
adicione seu próprio estilo (display: block) e ele funcionará com qualquer navegador moderno
fonte
data-*
atributos são válidos no HTML5 e, mesmo no HTML4, todos os navegadores usados para respeitá-los. Adicionar novas tags é tecnicamente aceitável, mas não é recomendado apenas porque:I usar tags personalizados apenas em locais que o Google não se importa, para ecample em um iframe motor de jogo, eu fiz um
<log>
tag que continha<msg>
,<error>
e<warning>
- mas através de JavaScript somente. E foi totalmente válido, de acordo com o validador. Até funciona no Internet Explorer com seu estilo! ;]fonte
<inventory>
,<item type="potion" sprite="2">
- por isso é melhor para ser chamado SGML + CSS em vez de HTML, apesar de que os elementos HTML que possuem definição trabalhe como está - Botões, listas, ... #Tags personalizadas não são válidas em HTML5. No entanto, atualmente, os navegadores oferecem suporte para analisá-los e você também pode usá-los usando o css. Portanto, se você quiser usar tags personalizadas para os navegadores atuais, poderá. Mas o suporte pode ser retirado quando os navegadores implementarem os padrões W3C estritamente para analisar o conteúdo HTML.
fonte
<center>
e<marquee>
?Sei que essa pergunta é antiga, mas tenho estudado esse assunto e, embora algumas das afirmações acima estejam corretas, elas não são a única maneira de criar elementos personalizados. Por exemplo:
funcionaria perfeitamente bem (nas versões mais recentes do Google Chrome, IE, FireFox e Safari móvel até agora). Tudo o que você precisa é apenas de um caractere alfa (az, AZ) para iniciar a tag e, em seguida, você pode usar qualquer um dos caracteres não alfa depois. Se em CSS, você deve usar o "\" (barra invertida) para encontrar o elemento, como seria necessário Query \ ^ {...}. Mas em JS, você apenas chama como vê. Espero que isto ajude. Veja o exemplo aqui
-Mink CBOS
fonte