É possível criar e usar tags HTML diretamente
(maurycyz.com)- No HTML, mesmo usando nomes de tags não reconhecidos, o navegador os trata como elementos genéricos
- No CSS, é possível usar esse nome de tag como seletor para definir estilos e controlar a exibição
- Usar nomes com hífen (
-) ajuda a evitar conflitos com futuros padrões do HTML - Em vez de
ou, usar tags personalizadas com significado melhora a legibilidade do código - Mesmo em estruturas aninhadas complexas, fica mais fácil entender a estrutura só pelo nome das tags, o que facilita a manutenção
Como usar tags HTML personalizadas
-
O navegador renderiza tags desconhecidas como elementos de bloco genéricos
- Esse é um comportamento normal definido pelo padrão HTML, e é possível controlá-las visualmente com CSS
- Por exemplo, você pode definir uma tag como `` e estilizar no CSS com
cool-thing { ... }
-
Se o nome da tag incluir hífen (
-), não haverá risco de conflito caso novos elementos sejam adicionados ao padrão HTML no futuro- Ex.:
,
- Ex.:
Melhorando a legibilidade e a estrutura
- Em vez de
ou, usar tags com nomes significativos torna o código mais fácil de entender- Por exemplo, em vez de
, você pode usar
- Por exemplo, em vez de
- Em estruturas aninhadas com ``, é difícil identificar onde cada tag de fechamento corresponde, mas com nomes de tags explícitos a estrutura fica mais clara
- Se dentro de
houver elementos comoe ``, a estrutura do DOM fica intuitiva de entender
- Se dentro de
Exemplo de código
- Forma tradicional
Hello, World! - Usando tag personalizada
Hello, World!- No CSS, você pode aplicar estilos como
cool-thing { display: block; font-weight: bold; text-align: center; ... }
- No CSS, você pode aplicar estilos como
Conclusão
- Ao aproveitar a flexibilidade permitida pelo padrão HTML para definir tags, é possível escrever uma marcação estrutural com alta legibilidade
- Porém, se já existir uma tag semântica apropriada definida, o ideal é priorizar o uso da tag existente
1 comentários
Comentários do Hacker News
Enfatiza que
não é uma tag não reconhecida Apresenta seu [post no blog](https://dashed-html.github.io) e explica queé tratado como HTMLUnknownElement até que o WHATWG o adicione como novo elemento, masé um **HTMLElement válido**, útil para layout e estilização Se for atualizado com a JavaScript Custom Elements API, torna-se um **elemento customizado definido** Esse é o comportamento padrão em todos os navegadores, e o W3C HTML Validator também reconhece elementos customizados com hífen como HTMLElement No entanto, a regra `[hidden]{display:none}` da folha de estilos UA padrão não é herdada, então é preciso defini-la manualmente Comoédisplay:blockpor padrão graças à folha de estilos UA, em elementos customizados também é preciso definir a propriedadedisplaymanualmente É possível distinguir elementos definidos e não definidos com os seletores CSS:definede:not(:defined)O Declarative Shadow DOM (``) também cria da mesma forma elementos customizados não definidoshiddené um atributo de apresentação HTML (presentation attribute) A folha de estilos UA se aplica igualmente aos elementos customizados, e a regra[hidden]não existehiddené um exemplo de atributo que em si é interpretado como estilo, comoalign="right"-), o que teria permitido integrar namespaces XML de forma natural Menciona que seria até possível converter dois-pontos em hífens no nginx ou no apache Termina em tom nostálgico, dizendo que “não dá para voltar para 1999”Aponta que a estrutura aninhada de
no código de exemplo é excessiva Sugere que seria mais adequado usar **tags semânticas** como,eCompartilha a experiência de ter usado elementos customizados por 3 a 4 anos A ideia é inteligente, mas complicada na prática Usar tags customizadas demais prejudica a legibilidade e dificulta distinguir entre elementos de bloco e inline Como abordagem equilibrada, mantém as tags padrão e usa tags customizadas apenas para elementos em forma de componente, como
eOs subcomponentes são diferenciados com o atributoslot, como em `` Prefere limitar classes a modificações e customização, e representar a estrutura com slots< !app-header />usando um truque com nós de comentárioslotem CSS, basta usar algo comodiv[slot="hero-blurb"]Por padrão, tags customizadas funcionam como `` Se necessário, é possível definir comportamento com a Custom Element API
Apresenta uma tag customizada chamada
para fazer o oposto deQuando o JS está desativado, ela pode ocultar determinada área Compartilha o link do projeto@media (scripting)do CSS permite obter o mesmo efeito só com CSS puro Anexa um link para a documentação do MDNCompartilha a experiência de ter recriado manualmente a antiga tag ``, removida dos navegadores Implementou com jQuery e manipulação de visibility, e diz que se surpreendeu ao descobrir que o navegador aceitava tags arbitrárias Como o código tinha umas 10 linhas, não chegou a publicá-lo, mas supõe que deve haver muitas tentativas parecidas
blinkem vez de.blink, ele será aplicado diretamente à tagObserva que exemplos como
epodem ser substituídos por tags HTML reais Usar,e `` seria mais apropriadoTags customizadas são renderizadas como inline por padrão, como ``, mas basta definir um valor padrão de
displaycom CSS No passado isso era evitado por causa de problemas com namespaces, mas quando o padrão passou a permitir hífen (-), o risco de conflito desapareceu Também funcionam normalmente em seletores CSS e podem ser acessadas comquerySelectorDá a entender que HTML moderno por si só já é expressivo o bastante, sem precisar de frameworks como VuePara definir um estilo padrão para todos os elementos customizados, basta fazer assim
Lembra que o IE antigo não reconhecia tags HTML5, então resolveu isso com um script que criou por volta de 2010 Bastava criar a tag uma vez com JS para que o IE passasse a reconhecê-la, e depois era possível removê-la sem problemas Diz que foi assim que percebeu que também era possível renderizar tags arbitrárias Compartilha junto um post antigo do blog