Com o novo Apple MacBook Pro com tela retina, se você fornecer uma imagem "padrão" em seu site, ela ficará um pouco confusa. Portanto, você deve fornecer uma imagem da retina.
Existe uma maneira de alternar automaticamente para @2x
imagens, como o iOS (com Objective-C) faz? O que encontrei é: CSS para imagens de alta resolução em telas mobile e retina , mas gostaria de poder encontrar um processo automático para todas as minhas imagens, sem CSS ou JavaScript .
É possível?
ATUALIZAÇÃO
Gostaria de enfatizar este artigo interessante sugerido por @Paul D. Waite e uma discussão interessante sobre ele linkada por Sebastian .
html
image
retina-display
jan267
fonte
fonte
Respostas:
Há um novo atributo para a tag img que permite adicionar um atributo retina src, chamado srcset. Não é necessário javascript ou CSS, nem carregamento duplo de imagens.
<img src="low-res.jpg" srcset="high-res.jpg 2x">
Suporte para navegador: http://caniuse.com/#search=srcset
Outros recursos:
fonte
src
IE / Opera sempre solicitará a versão DPI superior.Existem diferentes soluções, cada uma com seus prós e contras. Qual é o melhor para você depende de vários fatores, como a forma como seu site foi projetado, que tipo de tecnologia seus visitantes típicos estão usando, etc. Observe que as telas de retina não se limitam ao Macbook Pro Retina e aos próximos iMacs, mas também incluem dispositivos móveis, que podem ter suas próprias necessidades.
O problema também está intimamente relacionado a imagens em designs responsivos em geral. Na verdade, provavelmente é melhor utilizar técnicas genéricas de design responsivo, em vez de projetar para dispositivos específicos. Afinal, a tecnologia também continuará mudando o tempo todo no futuro.
Algumas das soluções / discussões que observei:
<picture>
tag pode se tornar uma solução apoiada por um grupo de trabalho do W3C e até mesmo da Apple.Como mostram as outras respostas, existem ainda mais técnicas - mas provavelmente nenhuma prática recomendada ainda.
Uma coisa que me pergunto é como testar e depurar algumas dessas técnicas, sem ter o (s) respectivo (s) dispositivo (s) disponível (is) ...
fonte
Uma vez que ninguém mencionou o óbvio ainda, vou colocá-lo por aí: onde possível, apenas use SVG. Eles aparecem em belas resoluções de retina sem nenhum esforço.
O suporte para isso é bom, com o IE8 sendo o principal dinossauro com que se preocupar. Os tamanhos de arquivo compactados geralmente são melhores do que os formatos de bitmap (png / jpg) e as imagens são mais flexíveis; você pode reutilizá-los em diferentes resoluções e reformulá-los se necessário, o que economiza tempo de desenvolvimento e largura de banda de download.
fonte
svg
é com navegadores mais antigos.Aqui está o menos mixin que eu uso para conseguir isso para imagens de fundo. retina.js não funciona para imagens de fundo se você estiver usando dotLess, uma vez que requer seu próprio mixin que usa avaliação de script que não é compatível com dotLess.
O truque com tudo isso é obter suporte para o IE8. Ele não pode definir o tamanho do plano de fundo facilmente, então o caso base (consulta de mídia não móvel) deve ser um ícone simples e não dimensionado. A consulta de mídia então lida com o caso de retina e é livre para usar a classe de tamanho de plano de fundo, já que a retina nunca será usada no IE8.
Amostra de uso:
Isso requer que você tenha dois arquivos:
start_grey-97_12.png
[email protected]
Onde o
2x
arquivo tem resolução dupla para retina.fonte
Basta fornecer imagens de retina para todos e comprimir a imagem até a metade de seu tamanho original dentro do elemento de imagem. Digamos que sua imagem seja
400px
larga e alta - apenas especifique a largura da imagem200px
para torná-la nítida assim:Se a sua imagem for fotográfica, você provavelmente pode aumentar a compactação JPG nela sem torná-la pior, porque os artefatos de compactação JPG provavelmente não serão visíveis quando a imagem for exibida em
2x
: consulte http://blog.netvlies.nl/ design-interactie / retina-revolution /fonte
se suas imagens de fundo, uma maneira simples de fazer isso é:
outra maneira simples é usar este método:
Basta substituir:
com
fonte
Eu descobri essa maneira interessante de fornecer imagens de resolução múltipla.
Na verdade, ele usa CSS, algo que eu queria evitar, e funciona apenas no Safari e no Chrome.
Estou falando sobre
image-set
.Aqui está um exemplo , fornecido pela Apple ( aqui ):
Quero compartilhar também estes dois links:
image-set()
notação @ W3Cfonte
Com JSF você pode criar uma tag Facelets personalizada para evitar a confusão de ter que adicionar
srcset
a cada imagem.No seu,
taglib.xml
você poderia ter algo como:E sua tag pode ser semelhante a:
Que pode ser usado como:
E irá renderizar:
fonte
Esse problema é especialmente complicado com sites responsivos, nos quais uma imagem pode ter largura variável, dependendo do tamanho do navegador. Além disso, ao lidar com um CMS onde vários editores estão potencialmente enviando milhares de imagens, parecia irreal para mim pedir às pessoas que enviassem imagens especialmente compactadas.
Então eu escrevi um script que leva isso em consideração, ele dispara na parte inferior da página e ao final do redimensionamento. Cada vez levando em conta a densidade de pixels e o tamanho que a imagem está ocupando.
http://caracaldigital.com/retina-handling-code/
fonte
Se você não está frustrado com o medo de usar java-script, aqui está um bom artigo http://www.highrobotics.com/articles/web/ready-for-retina.aspx . Tem solução muito simples.
E o exemplo em JSFiddle vale mais que mil palavras.
Usando:
JS:
fonte