Um conceito básico da linguagem HTML desconhecido não só pela maioria dos iniciantes mas também por muitos desenvolvedores reconhecidamente experientes em marcação HTML é aquele que permite identificar e empregar corretamente os atributos booleanos da linguagem.
Em ciência da computação, booleano é um tipo de dado primitivo que possui dois valores, que podem ser considerados como 0 ou 1, verdadeiro ou falso. Ele é usado em operações lógicas como conjunção, disjunção, disjunção exclusiva, equivalência lógica e negação, que correspondem a algumas das operações da álgebra booleana.
http://pt.wikipedia.org/wiki/Booleano
A definição acima, transcrita da Wikipedia, ilustra com exatidão o conceito de booleano que nós, envolvidos com programação, trazemos desde o início de nossas atividades Web. Algo mais ou menos como: “uma propriedade booleana pode assumir os valores true ou false“.
Contudo quando se trata atributos booleanos da marcação HTML o uso deles é definido nas Recomendações do W3C conforme tradução a seguir:
A presença de um atributo booleno em um elemento representa o valor verdadeiro e a ausência o valor falso.
Se o atributo estiver presente seu valor poderá ser uma string vazia ou o nome do atributo em grafia insensível ao tamanho de caixa e sem espaços em branco antes ou depois do valor (quando colocado entre aspas).
Vamos exemplificar o que estabelece o W3C usando os atributo booleanos da HTML5 controls
e autoplay
para o elemento audio
. Observe a marcação a seguir.
... ... <audio src="BeeGees.mp3" controls="true" autoplay="false"> </audio> ...
Encontra-se marcação como a mostrada acima em matérias e tutoriais publicados em vários blogs e em marcação HTML de vários sites desenvolvidos com uso da HTML5. A especificação não prevê a marcação desta forma e ela não valida, pois valores “true” e “false” não são admitidos para atributos booleanos.
As opções corretas para a marcação mostrada são:
... ... <audio src="BeeGees.mp3" controls> </audio> ...
Neste caso, a presença do atributo controls
é suficiente para que ele seja verdadeiro e a ausência do atributo autoplay
define-o como falso.
... ... <audio src="BeeGees.mp3" controls=""> </audio> ...
Neste caso, usamos o valor “string vazia” para definir o atributo controls
como verdadeiro e a ausência do atributo autoplay
define-o como falso.
... ... <audio src="BeeGees.mp3" controls="controls"> </audio> ...
Neste caso, usamos um valor igual ao nome do atributo para defini-lo como verdadeiro e a ausência do atributo autoplay
define-o como falso.
Convém notar que a opção 1 é usada em marcação HTML5 e as opções 2 e 3 em marcação XHTML5 (em acordo com a sintaxe XML).
Os atributos booleanos previstos na HTML5 são: async
, autofocus
, autoplay
, checked
, controls
, default
, defer
, disabled
, formnovalidate
, ismap
, loop
, multiple
, novalidate
, open
, pubdate
, readonly
, required
, reversed
, scoped
, seamless
, selected
.
Os demais atributos da HTML5 são classificados pela especificação como “atributos enumeráveis” que são aqueles que admitem um determinado valor como uma palavra-chave, uma string, um conjunto de caracteres ou um número.
Convém ressaltar que os atributos contenteditable
e draggable
são do tipo enumerável (não são booleanos) cujos valores possíveis são as palavras-chave “true” e “false”.
Nesta matéria mostrei um conceito básico da HTML que tem sido largamente negligenciado por muitos de nós autores HTML. Espero ter chamado a atenção para o fato e ter contribuido para aumentar o arsenal de conhecimentos dos meus leitores e de todos os que me pestigiam lendo minhas matérias.
Votos de boas marcações e não se esqueça que (por incrível que pareça) é incorreto usar valores “true” e “false” para atributos booleanos da HTML.
Atualização: O conceito de atributos booleanos não foi introduzido pela HTML5, como a matéria pode sugerir. Ele já existia nas versões anteriores da HTML, com a única diferença que para estas o valor “string vazia” não era admitido, este sim, foi criado na HTML5.
Portanto, mesmo em marcação (X)HTML é incorreto usar checked="true"
, selected="true"
, etc.
Observe no screenshot a seguir a mensagem que o validador do W3C retornou ao se submeter para validação um documento XHTML 1.0 Transitional contendo o valor “true” para o atributo checked
.
Em 2006 comecei a publicar nesse blog uma série de desafios CSS que consistiam em…
Há muito tempo que eu não publico um "Teste seu conhecimento". Esta semana, revendo algumas…
Introdução Elementos da marcação HTML podem ser aninhados uns dentro de outros, criando-se uma cadeia…
HTML5? Web universal? É comum eu me deparar com dúvidas sobre a HTML5 não só…
Quem é Tab Atkins Jr? Tab Atkins Jr, um desenvolvedor americano, trabalhou durante muitos anos…
Pessoal, a BrazilJS Conf 2013 disponibilizou para o Maujor cupons de desconto para serem oferecidos…
View Comments
Excelente dica Maujor, obrigado!
Obrigado Maujor. Vivendo e aprendendo (descobrindo).
hehe o défcit de atenção imperando de novo. Obrigado pela atenção, maujor.
@Lucas Sandoval,
Foi dito na matéria:
"Convém ressaltar que os atributos contenteditable e draggable são do tipo enumerável (não são booleanos) cujos valores possíveis são as palavras-chave “true” e “false”. "
Você leu isso: não são booleanos?
Excelente observação Maujor.
Muito interessante saber disso! Obrigado por compartilhar!
Vamos agora aprender a não usar coisas redundantes na marcação HTML.
Maujor, então é incorreto usar "contenteditable=true"? O correto seria usar "contenteditable="contenteditable""?
Muito esclarecedor este post. Excelente!
O instintivo é marcar 'true' ou 'false',é até lógico, mas é meio que uma reeducação,e o HTML5 tá ai pra ajudar né?
Abração, muito bom o post.