Este é um que eu não tive que enfrentar antes. Preciso usar alt tags em todas as imagens em um site, incluindo aquelas usadas pelo atributo CSS background-image.
Não existe nenhuma propriedade CSS como esta até onde eu sei, então qual é a melhor maneira de fazer isso?
title
atributo ao (s) elemento (s) com a (s) imagem (ns) de fundo, mas isso não faz sentido para todos os elementos. Por que você tem que fazer isso? Você está tentando lidar com imagens que não carregam ou está tentando obter uma dica de ferramenta sobre as que carregam?<div>
mesmo que não valide que você ainda tem o keyterm nele e o Google adora.Respostas:
As imagens de fundo podem apresentar dados! Na verdade, isso geralmente é recomendado quando a apresentação de ícones visuais é mais compacta e fácil de usar do que uma lista equivalente de anúncios de texto. Qualquer uso de sprites de imagem pode se beneficiar dessa abordagem.
É bastante comum que ícones de listas de hotéis exibam comodidades. Imagine uma página que listasse 50 hotéis e cada hotel tivesse 10 comodidades. Um CSS Sprite seria perfeito para esse tipo de coisa - melhor experiência do usuário porque é mais rápido. Mas como você implementa tags ALT para essas imagens? Site de exemplo .
A resposta é que eles não usam
alt
texto, em vez disso, usam otitle
atributo no div que o contém.HTML
CSS
De acordo com o W3C (veja os links acima), o atributo title tem a mesma finalidade que o atributo alt
Título
alt
fonte
Neste artigo do Yahoo Developer Network ( link arquivado ), sugere-se que, se você absolutamente deve usar uma imagem de fundo em vez do elemento img e do atributo alt, use os atributos ARIA da seguinte maneira:
O caso de uso no artigo descreve como o Flickr escolheu usar imagens de fundo porque o desempenho foi muito melhorado em dispositivos móveis.
fonte
Acho que você deveria ler este post de Christian Heilmann. Ele explica que as imagens de fundo são APENAS para fins estéticos e não devem ser usadas para apresentar dados, portanto, estão isentas da regra de que toda imagem deve ter texto alternativo.
Trecho (grifo meu):
Eu concordo com ele.
fonte
background-size
ebackground-position
com uma<img>
tag normal ? Isso torna o posicionamento de suas imagens de fundo bastante flexível, por exemplo, em um espaço de herói responsivo, onde a imagem provavelmente contém uma mensagem criticamente importante.Conforme mencionado em outras respostas, não há atributo alt (suportado) para uma tag div apenas para a tag img.
A verdadeira questão é por que você precisa adicionar o atributo alt a todas as imagens de fundo do site? Com base nessa resposta, ele o ajudará a determinar qual rota seguir em sua abordagem.
Visual / Textual: Se você está simplesmente tentando adicionar um fallback textual para o usuário se a imagem não carregar, simplesmente use o atributo title. A maioria dos navegadores fornece uma dica de ferramenta visual (caixa de mensagem) quando um usuário passa o mouse sobre a imagem e, se a imagem não for carregada por qualquer motivo, ela se comporta da mesma forma que um atributo alt apresentando texto quando a imagem falha. Essa técnica ainda permite que o site acelere o tempo de carregamento, mantendo as imagens definidas como planos de fundo.
Leitores de tela: a opção intermediária, isso varia porque tecnicamente manter suas imagens como planos de fundo e usar a abordagem de atributo de título deve funcionar como sugerido acima, "Os agentes de usuário de áudio podem falar as informações do título em um contexto semelhante." No entanto, isso não é garantido que funcione em todos os casos, inclusive alguns leitores podem ignorar tudo juntos. Se você acabar optando por essa abordagem, também pode tentar adicionar rótulos de ária para ajudar a garantir que os leitores de tela os identifiquem.
SEO / Search Engines: Aqui está o grande problema, se você fosse como eu, você adicionou suas imagens de fundo, tudo estava bom. Então, meses depois, o cliente (ou talvez você mesmo) percebeu que você está perdendo o melhor do SEO por não ter alt's para suas imagens. Lembre-se de que o atributo title não tem peso nos mecanismos de pesquisa , de acordo com minha pesquisa e conforme mencionado em um artigo aqui: https://www.searchenginejournal.com/how-to-use-link-title-attribute-correctly /. Portanto, se seu objetivo for SEO, você precisará ter uma tag img com o atributo alt. Uma abordagem possível é apenas carregar imagens reais muito pequenas no site com atributos alt, dessa forma você obtém todo o SEO e não precisa reajustar o CSS existente no lugar. No entanto, isso pode levar a um tempo de carregamento adicional dependendo do tamanho e o Google realmente olha o caminho das imagens ao indexar. Resumindo, se você está indo por esse caminho, apenas aceite o que precisa ser feito e inclua as imagens reais em vez de usar fundos.
fonte
A crença geral é que você não deve usar imagens de fundo para coisas com valor semântico significativo, então não há realmente uma maneira adequada de armazenar dados alternativos com essas imagens. A questão importante é o que você fará com esses dados alternativos. Você deseja que seja exibido se as imagens não carregarem? Você precisa dele para alguma função programática na página? Você pode armazenar os dados arbitrariamente usando propriedades css criadas sem significado (pode causar erros?) OU adicionando imagens ocultas que têm a imagem e a tag alt, e então quando você precisa de imagens de fundo alt, você pode comparar a imagem caminhos e, em seguida, manipular os dados como quiser, usando algum script personalizado para simular o que você precisa. Não conheço nenhuma maneira de fazer o navegador lidar automaticamente com algum tipo de atributo alt para imagens de fundo.
fonte
A maneira clássica de fazer isso é colocar o texto na div e usar uma técnica de substituição de imagem.
com background-image sendo a classe onde você atribui a imagem de fundo e ela poderia ser a classe de substituição de imagem de HTML5boilerplates, abaixo:
fonte
Este artigo do W3C diz o que eles acham que você deve fazer https://www.w3.org/WAI/GL/wiki/ARIATechnique_usingImgRole_with_aria-label_forCSS-backgroundImage
e tem exemplos aqui http://mars.dequecloud.com/demo/ImgRole.htm
entre os quais
Ainda assim, se, como no exemplo acima, o elemento que contém a imagem de fundo for apenas um contêiner vazio, eu pessoalmente prefiro colocar o texto lá e ocultá-lo usando CSS; exatamente onde você mostra a imagem:
fonte
Esta é minha solução para esse tipo de problema:
Crie uma nova classe em CSS e posicione fora da tela. Em seguida, coloque seu texto alternativo em HTML antes da propriedade que chama sua imagem de plano de fundo. Pode ser qualquer tag,
H1
,H2
,p
, etc.CSS
HTML
fonte
Não está claro para mim o que você deseja.
Se você deseja que uma propriedade CSS renderize o valor do atributo alt, então talvez você esteja procurando a função de atributo CSS, por exemplo:
Se você quiser colocar o atributo alt em uma imagem de fundo, então ... isso é estranho porque o atributo alt é um atributo HTML enquanto a imagem de fundo é uma propriedade CSS. Se você quiser usar o atributo HTML alt, então acho que você precisa de um elemento HTML correspondente para colocá-lo.
Por que você "precisa usar alt tags em imagens de fundo": isso é por uma razão semântica ou por alguma razão de efeito visual (e se sim, qual efeito ou razão)?
fonte
Você pode fazer isso colocando a
alt
tag emdiv
onde sua imagem aparecerá.Exemplo:
fonte
alt
atributo a um<div>
alt
atributo adiv
!!