Menu

Atributos HTML: sintaxe, class, id, data-* e booleanos

Os atributos acrescentam informação a um elemento HTML: para onde um link leva, o que uma imagem mostra, qual classe CSS se aplica. Veja a sintaxe, os atributos globais que todo elemento aceita, class e id, atributos booleanos e atributos data-*.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

O que são atributos HTML

Um atributo acrescenta informação a um elemento. Ele vai dentro da tag de abertura, escrito como um nome, um sinal de igual e um valor entre aspas: name="value". Um elemento pode ter quantos atributos quiser, separados por espaços.

href diz ao link para onde ir, src e alt descrevem a imagem, type, placeholder e required configuram o input. Cada elemento tem seu próprio conjunto de atributos, e alguns (os atributos globais abaixo) funcionam em qualquer elemento.

Regras de sintaxe

<input type="text" name="city" value="Paris" disabled>
  • Nome, sinal de igual, valor entre aspas. Aspas duplas são a convenção; aspas simples também funcionam (title='Say "hi"' é o jeito de colocar aspas duplas dentro de um valor).
  • Os nomes não diferenciam maiúsculas de minúsculas. CLASS e class são o mesmo atributo. Os valores diferenciam: class="Box" e class="box" são classes diferentes.
  • Aspas são opcionais sem espaços, mas use aspas mesmo assim. class=big box dá ao elemento a classe big e um segundo atributo, sem sentido, chamado box.
  • A ordem não importa. <img alt="" src="a.png"> é o mesmo que <img src="a.png" alt="">.
  • Cada nome uma vez por elemento. Se um atributo aparece duas vezes, o navegador fica com o primeiro e descarta o segundo sem avisar.

Atributos booleanos

Alguns atributos são ligado ou desligado. Neles, a presença significa verdadeiro, e o valor é ignorado. disabled, checked, required, readonly, hidden, multiple, autofocus e open funcionam todos assim.

O terceiro botão fica desativado mesmo com o valor false, porque o navegador só verifica se o atributo está lá. Para desligar um atributo booleano, remova-o. No JavaScript, button.disabled = false faz exatamente isso.

O atributo class

class dá a um elemento um ou mais nomes que CSS e JavaScript usam para encontrá-lo. Vários elementos podem compartilhar uma classe, e um elemento pode ter várias classes, separadas por espaços:

Cada classe extra soma suas regras por cima. No CSS uma classe é selecionada com um ponto (.card); no JavaScript, element.classList.add('featured') e classList.remove as alteram. Classes são o jeito normal de estilizar: a maior parte do seu CSS vai mirar em classes.

O atributo id

id dá a um elemento um nome que precisa ser único na página. Use quando você precisa de exatamente um elemento: o destino de um link, um <label for> ou document.getElementById.

Clicar no label coloca o foco no input, porque for="email" aponta para id="email". O link rola até #pricing porque o fragmento no href corresponde ao id.

classid
Quantos elementos podem compartilharQuantos quiserUm (único)
Valores por elementoVários, separados por espaçoUm
Seletor CSS.name#name
Uso típicoEstilizar grupos de elementosDestinos de link, labels, um elemento específico no JavaScript

Um id não pode ter espaços. Comece com uma letra para facilitar o uso no CSS: #2col não é um seletor CSS válido sem escape.

Atributos globais

Estes atributos funcionam em qualquer elemento:

AtributoO que faz
idNome único do elemento
classLista de nomes de classe separados por espaço
styleCSS inline, como style="color: red"
titleTexto de dica mostrado ao passar o mouse
langIdioma do conteúdo, como lang="fr"
dirDireção do texto: ltr, rtl ou auto
hiddenEsconde o elemento (booleano)
tabindexTorna um elemento focável com Tab, ou define a ordem
contenteditablePermite que o usuário edite o texto do elemento
data-*Seus próprios dados, lidos com JavaScript

O atributo lang tem uma página própria porque afeta leitores de tela, tradução e busca.

Atributos data-*

Quando você precisa guardar um valor seu num elemento, comece o nome com data-. Qualquer nome funciona depois do prefixo, e o JavaScript lê os valores por element.dataset, com os hífens convertidos em camelCase:

data-product-id vira dataset.productId. Os valores sempre voltam como strings, então converta com Number() antes de fazer contas. O CSS também consegue selecioná-los: [data-price="4.50"].

Erros comuns

  • Escrever class duas vezes. <div class="a" class="b"> fica só com a. Coloque as duas num único atributo: class="a b".
  • Repetir um id. Dois elementos com o mesmo id quebram links com #, labels e getElementById, que retorna só o primeiro. Use uma classe para qualquer coisa repetida.
  • disabled="false" ou checked="false". O atributo continua presente, então continua ligado. Remova-o.
  • Valores sem aspas com espaços. alt=My photo define alt como My. Coloque aspas em todo valor.
  • Inventar atributos sem data-. <div price="4"> é HTML inválido e pode colidir com um futuro atributo padrão. Use data-price.

Perguntas frequentes

O que é um atributo HTML?

Um atributo é uma informação extra escrita dentro da tag de abertura como name="value". Ele configura o elemento: href define para onde um link leva, src e alt descrevem uma imagem, class e id permitem que CSS e JavaScript encontrem o elemento.

Qual a diferença entre class e id no HTML?

Um id precisa ser único na página e identifica um único elemento, para links com #fragment, <label for> e getElementById. Uma class pode ser compartilhada por vários elementos, e um elemento pode ter várias classes separadas por espaços. Use classes para estilizar.

Como coloco várias classes num elemento HTML?

Coloque todas num único atributo class, separadas por espaços: <div class="card featured dark">. Escrever class duas vezes não funciona: o navegador fica só com o primeiro.

Os atributos HTML precisam de aspas?

As aspas são opcionais quando o valor não tem espaços nem caracteres especiais, mas colocar aspas sempre é o hábito seguro. class=big box dá ao elemento a classe big mais um atributo separado chamado box.

Por que meu botão continua desativado com disabled="false"?

disabled é um atributo booleano: a presença dele significa verdadeiro, seja qual for o valor. Para ativar o elemento, remova o atributo, ou defina button.disabled = false no JavaScript, o que o remove.

Posso inventar meus próprios atributos HTML?

Use o prefixo data-: data-price="12" ou data-user-id="7" são válidos em qualquer elemento e podem ser lidos no JavaScript por element.dataset. Nomes inventados sem o prefixo são HTML inválido.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR