Tableless - Padrões Web com Pastel e Caldo de Cana

por Diego Eis Janeiro 11th, 2005

Lições sobre semântica #3

Estava conversando com o Bruno Torres hoje, e estávamos discutindo sobre fazer títulos com image-replacement ou imagens.
Então, temos duas opções:

  1. Usar image-replacements (esconder texto pelo css e colocar a imagem desejada como background do objeto)
  2. Usar imagem “de verdade” com alt´s (texto informativo colocados nas imagens)

Qual a sua opinião?

O post iria ficar bem grande… então, fiz em forma de artigo.
Títulos: Image-Replacement x Imagens

Pode ser interessante ler:

32 Comentários

Michael Granados

Essa é simples… Se você quer colocar Títulos, obviamente você prescisará das tag’s "h1/h2/h3/h4/h5/h6" pra poder ser alvo dos próprios buscadores. Depois você esconde pelo CSS e coloca uma imagem de fundo. Afinal, pra que você quer um titulo com descrição (alt)?
Pagina boa é Página plana. Além do que ajuda na semântica do código. Divamos, é mais "bonito" de se ver…
<h1>Título</h1>
do que..
<img src="minhaimagem.gif" alt="Titulo" />

Conclusão. images-replaceementes é mais semântico

Luiz

Concordo com o Michael, só tenho uma dúvida de acessibilidade em relação a images-replacements, se o usuário estiver utilizando um navegador textual, ou leitor de tela, ou tiver desabilitado imagens? Como será a experiência dele nesses casos? Confesso que uso o recurso de image-replacements mas nunca fiz o teste simulando essas situações!

rAuLpErEiRa

Concordo com Michael tb sobre a semântica, porém tenho a mesma dúvida de acessibilidade que o Luiz possui. Como tratar a semântica e a acessibilidade sem afetar o conceito de um deles??

Aldemir Vieira

Qual o objetivo mesmo? A semântica tem a ver com o que se quer fazer/mostrar. Se é fazer títulos, então as tags H[1-6], elas foram feitas para isso, se for mostrar uma imagem, use a tag apropriada. Simples, não?
O que importa é ter semântica na mente. E pelo que parece, vc quer fazer título, então …

Daniel

Escreve o Título e põe a imagem como background dele e joga o texto pra longe…

é mais certo pq se alguém ver sem css e sem imagens vai conseguir ler com os tamanhos mais adequados e a acessibilidade fica melhor. E se a visita for normal com CSS e imagens vai continuar perfeito.

Newton Wagner

Pois é pessoal, acho que o melhor é usar h1 e fazer o replace mesmo. Em navegadores que não aceitam imagens, talvez seja melhor desabilitar também as CSS, fazendo que que o h1 volte ao normal.

Valent&#237;n Moreira

Acho que é melhor diferenciar entre luxos e necesidades. Necesidade é facer solo texto. Luxos é apresentar o mesmo como imagem.

Asim. XHTML e CSS apresentam nossa versao só texto do nosso título. Ahí entramos no "luxo": eu prefiro controlar o replacement com DOM:

- O pessoal recebe o mesmo efeito.
- O robot ve um <h1>titulo</h1> estándar.
- Eu posso controlar se mostrar ou nao mostrar. Ejemplo: se o cara está utilizando um tradutor on-line, eu nao mostro a imagem e deixo aparecer o texto.

Alem que com CSS é difícil controlar a informaçao caso no cara tenha desativadas as imagems (acontece as veces) e se é um background nao se pode olhar texto alternativo.

Prefiro facer isso com DOM, é mais seguro para tudos (robots e visitantes).

Disculpem os erros na escrita.

Newton Wagner

Valentín, acho que usando a substituição de textos por imagens através do CSS, vc não vai ter problemas com os robots. Eles não pegam o que é exibido no site, e sim o que está escrito no código.

Então se vc tem um texto que, com CSS, substitui por uma imagem, o robot ainda será capaz de encontrar este texto qdo percorrer o site. ;)

William

Com certeza usar image-replacements é a melhor opção.

Jonathas Scott

Bem, está mais do que dito por todos.. porém sempre há a dúvida quanto ao replacements.. outro dia eu lí no listapart, algo sobre isso, mas como estava no trqabalho ficou dificil terminar a leitura, e pelo que parece, nem todos os replacements são bons semânticamente…

é isso. replacement.

Valent&#237;n Moreira

Obrigado Newton pela resposta, mais tenho muito serias sospeitas de que o google nao está indexando algunos textos do site por estar com css visibility:hidden ou display:none.

Sei lá, só sao sospeitas mesmo, e também penso que se eu fosse o google faría isso. Total: ele nao sabe se o Javascript faz visible ele, e mesmo nao entende javascript…

Kaled

É totalmente válido por uma questão de acessibilidade … A página tem que estar acessível não só em imagens, mas também em palavras, para quem assim o queira.

A imagem está represetando algo que vale palavras … Então, uma página acessível tanto em Author mode, quanto em User mode é totalmente necessário.

O título pode ser tranquilimante um image-replacement e imagens(alt).

Bruno Torres

Se todos os browsers fossem como o firefox (sonhando…), seria mais vantagem utilizar <img>s com atributos alt.
O firefox, na falta da imagem — ou no caso de o usuário desabilitar as imagens — exibe o conteúdo do atributo alt com o estilo do elemento que contém a imagem (no caso um <hn&gt;) aplicado.
O opera também aplica o estilo, mas envolve o texto em uma caixa, o que não é bom esteticamente. O IE é o pior de todos, como sempre. Alem de exibir uma caixa em volta do texto, diminui seu tamanho e exibe um ridículo ícone com um ‘x’ vermelho, indicando a falta da imagem.
Portanto acredito ser realmente melhor usar image-replacement.

Leandro Nascimento Camargo

Eu usaria o image-replacemente simsplesmente porque é mais semantico, pois suaria algum Hx com fundo..fora que se fosse visualizado em alguma mídia que não renederizasse imagens …poderíamos fazer com que o texto aparecesse no lugar…não perdendo a conteúdo do tópico/título…

Bruno Torres

O problema é exatamente esse. Usando image replacement (seja FIR ou usando text-indent:-9999px) não há como fazer — pelo menos não usando apenas css — com que o texto apareça caso a imagem não possa ser exibida.
Na minha opinião, usar image replacement é mais semântico, mas o que questionei com o Diego e gerou essa discussão, é se essa é a melhor solução quando se pensa em acessibilidade.
Se formos levar em conta para efeito de acessibilidade apenas os browsers texto, screen readers e mobiles, o image replacement não machuca, já que o texto vai ser exibido no lugar da imagem. Agora se levarmos em conta os browsers gráficos que, por algum motivo, não possam exibir a imagem, aí a questão fica um pouco mais complicada.
A decisão fica por conta do desenvolvedor mas, sem dúvida, é uma boa discussão.

Renato Albano

Hoje em dia a melhor solução é image-replacement pois os browser não estão preparados para o padrão de que o alt é um texto alternativo e deve ser mostrado na falta da imagem e ser formatado como um texto normal inclusive aceitar seleção, link, hover e etc.
Colocar somente a imagem com o texto alt seria mais semântico na minha opnião, porém não sei se esse padrão alternative text é a melhor solução.
Lembro há alguns meses atras na lista arqhp, comentaram sobre a tag object do xhtml 2 que caso o object não fosse carregado mostraria o outro nivel da tag.
Só especulando mesmo talvez algo como:
&lt;img src="image.png" title="image"&gt;texto alternativo&lt;/img&gt;
Caso a image.png não fosse carregada mostraria texto alternativo.
Não sei até que ponto isso é bom ou ruim, só expeculando mesmo.

Abraços

Anderson

Alguém indica um tutorial bacana aê?

Marcelo de Miranda

seria semanticamente correto usar o <hn></hn> e no css
hn{
background-image:url(../img/titulo_bg.gif);
background-position:center center;
background-attachment:fixed;
background-repeat:no-repeat;
}

Samuel

Não concordo com vocês.

1) Imagem-título não é BG para ser colocado como tal no CSS
2) <h1><img alt=’bla’ /></h1> é igual a <h1>bla</h1> para os robots
3) É importante para o USUÁRIO ter o ALT funcionando

Lucas Ferreira

Uma solução para fazer com que o texto apareça, caso a imagem não esteja acessível, usando replacement é o seguinte.

<h3 id="titulo" title="Titulo Qualquer">
<span></span>Titulo qualquer aaaaaaaaaaaaaaaaaaaaaa
</h3>

/* Estilo… */
#titulo {
width: 200px;
height: 15px;
position: relative;
overflow: hidden;
}
#header span {
background: url(IMAGEM-TITULO.gif) no-repeat;
position: absolute;
width: 100%;
height: 100%;
}
Reparem que o texto fica debaixo do span. Caso a imagem de fundo do span não possa ser exibida o texto aparece. Reparem também que não há atributo alt, mas o atributo title faz algo parecido, que é exibir a caixa de diálogo quando o mouse está em cima. Outro ponto a ser considerado é que não há prejuizo quanto a posição dos elementos do layout caso o texto do cabeçalho escondido seja maior que a imagem pois usamos o overflow hidden.
Não sou expert em acessibilidade, confeso, mas isso nos browsers comuns não tem maiores problemas (mozzila, IE, etc etc…). Agora quanto à mobile e outros não sei o comportamento.
Digam os prós e contras…

Abraços, Lucasf

Lucas Ferreira

Correção do código acima:

<h3 id="titulo" title="Titulo Qualquer">
<span></span>Titulo qualquer aaaaaaaaaaaaaaaaaaaaaa
</h3>

/* Estilo… */
#titulo {
width: 200px;
height: 15px;
position: relative;
overflow: hidden;
}
#titulo span {
background: url(IMAGEM-TITULO.gif) no-repeat;
position: absolute;
width: 100%;
height: 100%;
}

e… confesso, com dois "s", por favor hehehe.

Abraços.

Leonardo cabral

O image-replacement é uma opção errônea difundida pela falta de homogeneidade entre a leitura semantica dos navegadores. Ok, é válido. Mas um erro não justifica outro. Pode-se usar uma tag span para definir um título, exibir uma imagem e ocultar um texto, mas semanticamente (e legitimamente) isso não é um título. Hacks para IE também não são corretos porém fazem-se necessários. É uma utopia saudável imaginar que é possível seguir à risca os padrões sem se deparar com possibilidades criativas "foras da lei". Quem sabe no futuro elas não sejam absorvidas durante a evolução. Por mim, use quem quiser, ninguém será apedrejado por isso, eu acho…

ataqlibert

Eu aposto nos h*… afinal, você quer um título não é?

Luciano Dinapoli

Eu estou apostando em uma nova solução: Flash-replacement. Possui duas desvantagens: necessita de Flash e usa javascript. Mas possui muitas vantagens: Se o usuário não tiver javascript ou flash habilitados, ele verá o título sem formatação; o código html fica 100% semântico, pois o flash não é mencionado nele; e pode-se continuar utilizando Hn normalmente. Ou seja: na hora de alterar o texto de um título, basta alterar o html usando um notepad, não preciso recorrer ao editor de imagens, procurar a mesma fonte que foi utilizada, criar uma nova imagem e substituí-la no meu servidor. Particularmente eu prefiro utilizar Flash replacement ao invés do image replacement.

Nhenhenh&#233;m

O Leonardo Cabral matou a pau. O resto, ou melhor, a maioria, só falou BOSTA.

michael

Todo mundo pode falar o que pensa, por isso é que a gente tá aqui: Pra aprender… mesmo que a gente fale BOSTA!

Andr&#233; Cassal

O q poderia ser feito pra resolver a pelea é exatametente como o colega disse, usar os 2, mas…
colocando somente multi classes
<h1 class="title noticias">titulo</h1>

*.title {
background-repeat:no-repeat;
text-indent:-9999px;
}
H1.noticias{
background-image:url(imagem.gif);
}

, e seus demais apetrechos, o detalhe aqui é q deveriamos testar por javascript se as imgs estão desabilitadas (já q não há uma propriedade pra isso, igual a cookieEnabled)e então colocar uma classe no BODY desabilitando todos os titulos em background, tipo assim:

BODY.noImageTitles *.title
{
text-indent:0;
background-image:none;
}

Hoje em dia, com a possibilidade de escrevermos img’s dinâmicas no server com qualquer fonte instalada e apenas devolver ao cliente, devemos pensar não só em semântica mas tb em dinamismo.

Penso que deixar para o CSS a escolha de como o Parser deve agir é uma forma errada, pensemos no código semântico, mas tb pensemos em ter as camadas de funcionalidades bem definidas e (infelizmente) ainda não conseguimos criar regras condicionais no CSS (não no IE pelo menos)

Alan

Não sei exatamente se isso interfere na semântica da coisa, mas quanto ao "problema" de ter que trocar aquela fonte daquela "imagem título" do site com o código <img>, podería-mos usar um titulo.js com document.write(…) por exemplo e chamá-lo no código. Se precisasse trocar a imagem por texto futuramente, bastaria modificar o js.

(particularmente, isso aí quebra um galhão como template)

Danilo Medeiros

oi pessoal, passei por esse problema ha pouco tempo e acho que a melhor solucao veio la do pessoal da ALA - substituir os textos dinamicamente por javascript. Deem uma olhada no artigo:

http://www.alistapart.com/articles/dynatext/

A solucao e otima pq permite a substituicao de textos sem que isso detone o html. E as imagens sao geradas no proprio servidor, o que ainda facilita na administracao de sites dinamicos. A solução apresentada, no entanto, precisa de PHP com algumas bibliotecas graficas.

Fabr&#237;cio Marchezini

Aparentemente a técnica de substituição de textos tem alguns problemas com leitores de tela, o que prejudica a acessibilidade. Foi publicado um estudo mais aprofundado no A List Apart:

http://www.alistapart.com/articles/fir/

Voltar para o topo

Histórico