113 votes

Images Retina automatiques pour les sites web

Avec le nouveau MacBook Pro d'Apple doté d'un écran retina, si vous fournissez une image "standard" sur votre site web, elle sera un peu floue. Vous devez donc fournir une image retina.

Existe-t-il un moyen de passer automatiquement à @2x comme le fait iOS (avec Objective-C) ? Ce que j'ai trouvé, c'est que CSS pour les images haute résolution sur les écrans mobiles et rétina Mais j'aimerais trouver un processus automatique pour toutes mes images, sans CSS ni JavaScript .

Est-ce possible ?

MISE À JOUR
J'insiste sur ce point intéressant article suggéré par Paul D. Waite et une intéressante discussion à ce sujet, reliée par Sébastien .

0 votes

Pas mal ! Je ne veux pas utiliser de js mais cette solution semble être la bonne.

0 votes

J'ai fait beaucoup de recherches à ce sujet récemment, et jusqu'à présent, je n'ai trouvé aucune solution qui puisse être mise en œuvre sans spécifier une image surdimensionnée pour tout le monde, en utilisant JavaScript ou en utilisant les requêtes de média CSS. J'aimerais voir une solution qui utilise la négociation de contenu http, mais cela nécessiterait le soutien du navigateur.

3 votes

Vous pouvez le faire côté serveur avec PHP : retina-images.complexcompulsions.com

169voto

mtaube Points 543

Il existe un nouvel attribut pour la balise img qui vous permet d'ajouter un attribut retina src, à savoir srcset. Aucun javascript ou CSS n'est nécessaire, pas de double chargement d'images.

<img src="low-res.jpg" srcset="high-res.jpg 2x">

Support des navigateurs : http://caniuse.com/#search=srcset

Autres ressources :

0 votes

<img src="LaunchAirportIcon.png" srcset="LaunchAirportIcon@2x.png 2x">

9 votes

Ce n'est plus seulement webkit, Edge et Firefox le supportent également. caniuse.com/#search=srcset - soit actuellement ~64% des utilisateurs dans le monde. Il faut ensuite tenir compte du fait que très peu d'utilisateurs d'images à haut DPI utiliseront les navigateurs non pris en charge (IE et ancien Android), et enfin qu'il s'agit d'une sécurité intégrée - les utilisateurs qui ne sont pas pris en charge voient simplement une image à DPI normal. Je pense vraiment que c'est prêt à l'emploi.

1 votes

De plus, l'absence de double chargement est un avantage considérable. Cela signifie que vous ne gaspillez jamais la bande passante de qui que ce soit.

14voto

bhell Points 748

Il existe différentes solutions, chacune ayant ses avantages et ses inconvénients. Celle qui vous convient le mieux dépend de plusieurs facteurs, tels que la conception de votre site web, le type de technologie utilisée par vos visiteurs habituels, etc. Notez que les écrans retina ne se limitent pas au Macbook Pro Retina et aux prochains iMacs, mais qu'ils englobent également les appareils mobiles, qui peuvent avoir leurs propres besoins.

Le problème est également étroitement lié aux images dans les conceptions réactives en général. En fait, il est probablement préférable d'utiliser des techniques génériques de responsive design, plutôt que de concevoir pour des appareils spécifiques. Après tout, la technologie ne cessera d'évoluer à l'avenir.

Quelques-unes des solutions/discussions que j'ai notées :

  • Vecteurs dans la mesure du possible, y compris les techniques CSS (dégradés, coins arrondis, etc.), SVG et polices d'icônes.
  • Servir des images à haute résolution ("rétine"), mais les compresser davantage (qualité JPEG), comme suggéré par Yoav Weiss ou laisser les réseaux mobiles les compresser lorsqu'ils en ont vraiment besoin (c'est-à-dire lorsqu'ils sont mobiles), comme le propose Paul Boag .
  • Images adaptatives une solution (principalement) côté serveur. Elle est basée sur un cookie stockant la résolution de l'écran, un serveur web configuré pour servir des images à partir d'un script PHP, et nommé script pour lire le cookie et servir l'image appropriée.
  • Un ensemble de possibilités bien décrite et discutée sur le site Smashing Magazine .
  • Servir des résolutions légèrement plus élevées pour adoucir un peu l'image de la rétine, comme le suggère une vidéo de Paul Boag .
  • La technique @1.5x sur Une liste à part est fondamentalement la même idée.
  • Dans un avenir proche, la <picture> étiquette peut devenir une solution soutenue par un Groupe de travail du W3C et même Apple.
  • A Technique JavaScript proposé par Jake Archebald .
  • Un discussion approfondie des différentes techniques sur les Smashing Magazine et le problème en général.

Comme le montrent les autres réponses, il existe encore d'autres techniques, mais il n'y a probablement pas encore de meilleure pratique.

Une chose que je me demande, c'est comment tester et déboguer certaines de ces techniques, sans avoir le(s) dispositif(s) correspondant(s) à disposition...

12voto

svachalek Points 710

Puisque personne n'a encore mentionné l'évidence, je me permets de la lancer : dans la mesure du possible, utilisez SVG. Ils s'affichent à de belles résolutions rétiniennes sans le moindre effort.

La prise en charge est bonne, IE8 étant le principal dinosaure dont il faut se préoccuper. La taille des fichiers compressés est souvent meilleure que celle des formats bitmap (png/jpg) et les images sont plus souples ; vous pouvez les réutiliser à différentes résolutions et les remodeler si nécessaire, ce qui permet d'économiser du temps de développement et de la bande passante de téléchargement.

0 votes

J'aime votre conseil ! Le seul problème avec svg avec les anciens navigateurs.

16 votes

Et les cas où vous avez des photographies

0 votes

En effet, ils sont excellents à condition que vous ayez une version vectorielle de l'image que vous voulez utiliser, mais je ne crois pas que vous puissiez enregistrer des images matricielles normales en tant que SVG.

9voto

muzzamo Points 423

Voici le mixin less que j'utilise pour réaliser cela pour les images d'arrière-plan. retina.js ne fonctionne pas pour les images d'arrière-plan si vous utilisez dotLess, car il nécessite son propre mixin qui utilise lui-même l'évaluation script qui n'est pas prise en charge dans dotLess.

L'astuce consiste à obtenir la prise en charge d'IE8. Il ne peut pas facilement utiliser la taille de l'arrière-plan, de sorte que le cas de base (requête média non mobile) doit être une icône simple, non mise à l'échelle. La requête média gère alors le cas de la rétine et est libre d'utiliser la classe background-size puisque la rétine ne sera jamais utilisée sur IE8.

.retina-background-image( @path, @filename,@extension, @size )
{
     .background-size( cover );
     background-image: url( "@{path}@{filename}@{extension}" );
         @media only screen and ( -webkit-min-device-pixel-ratio: 2 ),
                only screen and ( -moz-min-device-pixel-ratio: 2 ),
                only screen and ( -o-min-device-pixel-ratio: 2/1 ),
                only screen and ( min-device-pixel-ratio: 2 )
         {
             background-image:url( "@{path}@{filename}@x2@{extension}" );
             background-size:@size @size;
         }
}

Exemple d'utilisation :

.retina-background-image( "../references/Images/", "start_grey-97_12", ".png", 12px );

Pour ce faire, vous devez disposer de deux fichiers :

  • start_grey-97_12.png
  • start_grey-97_12@2x.png

Où le 2x Le fichier est en double résolution pour la rétine.

8voto

webdev Points 146

Il suffit de fournir des images rétina à tout le monde et de réduire l'image à la moitié de sa taille native à l'intérieur de l'élément image. Disons que votre image est 400px large et haute - il suffit de spécifier la largeur de l'image en tant que 200px pour qu'il ait l'air net comme ceci :

<img src="img.jpg" width="200px" height="200px" />

Si votre image est photographique, vous pouvez probablement augmenter la compression JPG sans en aggraver l'aspect, car les artefacts de compression JPG ne seront probablement pas visibles lorsque l'image sera affichée à l'écran. 2x : voir http://blog.netvlies.nl/design-interactie/retina-revolution/

1 votes

Daan Jobsis suggère que pour les images photographiques, cela n'entraîne pas nécessairement une augmentation de la taille des fichiers : voir blog.netvlies.nl/design-interactie/retina-revolution

0 votes

L'idéal est de spécifier une hauteur, afin que le navigateur puisse mettre en page la page avant que l'image ne soit téléchargée.

9 votes

Je ne pense pas que ce soit une bonne idée de fournir un fichier image de plus en plus lourd si ce n'est pas nécessaire...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X