Retour d'expérience sur une CSS mobile-first/responsive

Retour d'expérience sur une CSS mobile-first/responsive (le 28 décembre 2012)

Chose promise chose due, je vous présente plus avant la dernière CSS de ce site, et un petit retour d'expérience sur une approche mobile-first.

Reprenons les objectifs énoncés dans le billet précédent et détaillons !

Lisibilité

Pour le dire clairement, j'en avais marre d'entendre que mon site était pas assez lisible, et moi-même je recherchais avant tout un confort de lecture tous périphériques confondus.

En postulat de base, j'ai fixé la taille de fonte à 16 pixels, et utilisé la police Roboto, très agréable à lire sur petit écran comme sur un grand. D'ailleurs, sur les grands écrans, la taille se porte même à 17 pixels, rien que pour vos yeux (fatigués s'entend).

Côté contrastes, bien sûr, les valeurs des couleurs ont été choisies en utilisant les outils habituels. Allez lire « Les contrastes de texte sur Openweb », cela m'évitera de devoir tout ré-expliquer ici ce qui a été mieux expliqué là-bas.

Le principal point qui bloquait sur mes précédentes CSS était le nombre de caractères par ligne, trop élevé. Cette fois, je l'ai réglé très simplement par un max-width: 40em; qui, d'après plusieurs essais, permettait un bon compromis (les grandes lignes ne me gênent pas, ce qui me handicape fortement pour comprendre que des lignes plus courtes sont plus agréables pour la plupart des utilisateurs).

Sinon le mot d'ordre était : de l'air, de l'espace, aérons ! Vivent les padding et autres margin à grands renforts d'em.

Bien évidemment, j'ai repris divers éléments de mon « nano-framework » CSS autoproclamé, RÖCSSTI.

Une CSS mobile-first

Disons-le tout clair, à l'instant où j'écris, cette CSS est la seule que j'ai conçue en mobile-first. Donc, pardonnez-moi d'avance si je dis des évidences ou des bêtises.

La première chose qui est bizarre en mobile-first, c'est justement de fonctionner à l'envers. Quoi qu'en disent certains puristes, en milieu professionnel, je pars toujours de la version desktop pour atteindre la version mobile. Non pas que l'approche mobile-first soit mauvaise, mais elle est peu répandue (mes clients ont parfois déjà du mal à penser « petit écran », alors « petit écran d'abord »…).

Donc vos CSS d'habitude jonchées de @media (max-width: 640px) { voient plutôt arriver des @media (min-width: 400px) {. C'est une habitude à prendre.

Le but du jeu est de définir le cœur de votre CSS pour le mobile, un tri rigoureux s'impose, vous ne devez garder que le strict nécessaire, et le cas échéant, fixer d'entrée de jeu des règles qui vont servir (là, il faut bien faire attention à éviter les redéfinitions). Pour cela, RÖCSSTI ainsi que ma précédente CSS m'ont bien aidé pour ne pas perdre de temps à cause d'oublis.

Le principal ennemi du mobile-first, c'est… notre écran quand nous codons ! Comment penser petit écran alors que mon propre écran ne l'est pas ? Il y a bien l'option « je fais un changement dans ma CSS et je teste de suite sur un petit écran », mais c'est pénible.

J'ai trouvé un très bon allié en la Web Developper Toolbar, notamment grâce à l'option Redimensionner > Modèles Adaptatifs.

Modèles Adaptatifs de Firefox

C'est vraiment très pratique, ainsi, l'impact d'une modification peut être vu très rapidement dans plein de résolutions. On est d'accord, cela ne remplace pas des tests, mais c'est vraiment un outil très bien.

La règle d'or : il faut à tout prix être bien satisfait d'un palier pour envisager une résolution supérieure, quitte à chipoter et fignoler.

Des performances

L'approche mobile-first va de pair avec une contrainte forte de performances. Pour cela, pas trop de souci, les Data-URL se sont chargées d'afficher les quelques rares images (ces images PNG ont été fortement optimisées avant d'être transformées), et sinon les propriétés de CSS3 viennent générer les quelques effets pour embellir ce thème quelque peu épuré.

Côté CSS, c'est un poids très raisonnable : 3,2 ko minifiée et compressée (avec donc des gradients et des Data-URL aux codes particulièrement lourds).

Afin de diminuer le poids du JavaScript par rapport à l'ancien skin, je me suis orienté vers jQuery In parts (jQuip), largement suffisant pour mes besoins, et bien plus léger que jQuery.

Au final, les chiffres sont assez satisfaisants, cela donne sur la page d'accueil :

  • selon Web Page Test, le first view est à moins de 2 secondes et le repeat view est à moins d'une seconde sur un navigateur de type desktop,
  • d'après le même test, le poids total de la page est à 58 ko pour 8 requêtes.
  • Côté mobile, selon Mobitest et Web Page Test, les temps de rendu sur mobile sont en moyenne en-dessous de deux secondes et demi. L'approche mobile-first y est pour beaucoup !

Je pourrais encore améliorer en me passant totalement de JavaScript ou en optimisant plus son utilisation (ce qui est tout à fait possible), mais cela viendra dans un second temps. Avoir beaucoup travaillé les performances lors de la précédente refonte m'a fait gagner énormément de temps. Le gros du boulot étant déjà fait, je n'avais qu'à me concentrer sur ce que je faisais de nouveau.

Du responsive

Je n'avais pas d'idée précise en démarrant la CSS, j'ai légèrement tatonné selon les périphériques, mais les choix sont venus rapidement : le contenu impose les adaptations avec les contraintes de lecture. Par exemple, les images de mon portfolio passent côte à côte passés les 500 pixels pour une raison simple : elles font toutes 200 pixels de largeur. En prévoyant une marge de sécurité entre ces images histoire de faire respirer le contenu (il y en a deux maximum par réalisation), le tour est joué.

C'est le même principe pour la gestion du menu et des images du portfolio sur la plus haute résolution prévue : en prévoyant une marge de sécurité, j'ai pu facilement m'amuser avec CSS pour les faire sortir du contenu. Du coup, le site profite facilement des meilleures résolutions.

La propriété qui m'a énormément aidé est la suivante : max-width: 40em;. Au lieu de raisonner en largeur fixe, j'ai raisonné en largeur maximale. Du coup, cela m'a beaucoup facilité la vie tout en solutionnant mon postulat de lisibilité de facto.

Après, j'ai ajouté petit à petit les effets CSS3 à partir de certains paliers pour soulager les plus petits écrans de rendus non indispensables.

La grosse (et bonne) surprise a été la gestion du zoom global : le site répond très bien au zoom global, avant comme arrière.

Et Internet Explorer dans tout cela ?

Disons-le assez franchement, les vieilles versions d'Internet Explorer ont été le cadet de mes soucis. Les visites sur mon site sont à 10% pour IE toutes versions confondues, et la version 9 et 10 représentent 60% de ces 10%. Autrement dit, j'ai considéré que les vieilles versions d'IE étaient quantité négligeable. Et les autres skins sont toujours disponibles si ça dérange.

Dans un second temps, je pourrai ajouter quelques classes conditionnelles pour améliorer le tout sous les IE inférieurs au 9, c'est tout à fait envisageable et faisable, le ciblage par classes conditionnelles n'interfèrant pas avec la CSS « normale ».

En conclusion

Faire une approche mobile-first est un exercice de style intéressant (si vous me permettez ce jeu de mot). Cela nous invite à casser les habitudes « je démarre en desktop et je cache des contenus » pour dire « je construis au fur et à mesure ». Cette approche est très efficace : les « petits écrans » se retrouvent à rendre le strict minimum au lieu de se taper le boulot à double, et ce sont les plus hautes résolutions qui encaissent une CSS plus « lourde ». Je mets « lourde » entre guillemets, car vu le poids de la CSS, c'est vraiment peanuts.

Ce n'est pas difficile en soi, c'est une petite gymnastique intellectuelle à prendre. Je n'ai pas pris énormément de temps pour la réaliser, c'est l'affaire de 2 bonnes journées de travail.

À mon humble avis, cette approche sera standard dans quelques années, le temps de se débarrasser des navigateurs qui la gênent fortement (IEs inférieurs au 9) et d'éduquer nos clients ainsi que nous-mêmes à cette manière de travailler. Elle a le mérite de mieux équilibrer les rendus et les performances entre les divers périphériques.

La sensation qui m'a motivé tout le long était l'impression de faire une CSS plus efficace, une CSS bio en quelque sorte.

Si vous voulez étudier la CSS, je vous invite à la lire ici : ND Mobfirst non minifiée. Attention, des morceaux d'humour débile peuvent s'être glissés dedans.

Par contre, une chose me sidère : j'ai écrit la base de la structure de ce site il y a presque 9 ans, même si je l'ai légèrement modifiée depuis, la structure n'a que peu évolué. Vous ne trouvez pas in-cro-yable que le code que j'ai pondu (avant même que le Web Mobile existe) me permette de faire de telles choses 9 ans après ? L'expression « je développe des sites pour les navigateurs du futur » prend ainsi une sacrée dimension.

Songez à cette pérennité quand on mettra en doute les standards du Web.

Permalien :

Flux RSS des commentaires de ce billet : https://www.nicolas-hoffmann.net/rss/commentaires.php?id_news=1524

7 commentaires

Posté par Monique le 29/12/2012 à 0:41:54
Bonjour,

Je ne connaissais pas la police Roboto, et je la découvre avec plaisir (sourire)
Et je confirme, 17px, ce n'est que du bonheur pour mes mauvais yeux, fatigués de plus à cette heure !

J'apprécie aussi le contraste (fort sans être agressif), les lignes courtes, le contenu aéré (interlignes, paragraphes...).

Donc je donne 10/10 pour la lisibilité !

Merci aussi pour ce retour d'expérience très détaillé.

Amicalement,
Monique
Posté par Emmanuel le 29/12/2012 à 0:43:29
Mieux (à mon goût) que les modèles adaptifs de la devToolbar : Ctrl + Shift/maj + M sur Firefox. Par le menu : Firefox > Développement Web > Vue adaptive.
Posté par Victor Brito le 29/12/2012 à 1:55:22
Ah ! c'est malin d'avoir évoqué la RÖCSSTI ! La chanson folklorique du sketch de Marie-Thérèse Porchet sur la leçon de géographie suisse m'est tout de suite revenue à l'esprit ! (grand sourire)

Plaisanterie à part, j'ai goûté en connaisseur l'humour de certains de tes commentaires CSS. (clin d’oeil)

Plus sérieusement encore, attention aux classes conditionnelles : les navigateurs non ciblés peuvent être gênés en matière de performance par les règles CSS qui y font appel (c'est, d'ailleurs, la mise en garde de Corine Schillinger dans son livre).

Soit dit en passant, il serait judicieux d'appliquer la propriété border-radius aux smilles pour éviter un effet cadre peu esthétique.
Posté par Kaelig le 29/12/2012 à 3:03:22
Oh, un dev qui teste ses sites que sous Windows :p La police Calibri n'est dispo que sous Windows, donc le reste des périphériques va afficher de la Times pour ce qui est des titres.
Posté par Nico le 29/12/2012 à 8:46:47
Tous : merci pour les retours ! (sourire)

Victor : bien vu pour le border-radius, c'est corrigé !

Kaelig : c'est un bête oubli, corrigé, merci pour la remarque ! (clin d’oeil)
Posté par Jonathan Path le 31/01/2014 à 10:32:43
Super article, j'avais besoin de lire un article comme celui-ci pour vraiment m'y mettre!
Posté par Nico le 31/01/2014 à 10:44:53
Jonathan : tu apprécieras alors ce billet : http://www.nicolas-hoffmann.net/source/1604-Retour-experience-refonte-Prezenz-CSS-responsive-mobile-first.html (clin d’oeil)

Ajouter un commentaire









L'option « Se souvenir de mes informations » utilise un cookie, elle ne sera pas effective si vous les avez désactivés.

Les balises HTML ne seront pas interprétées, il est donc inutile d'en mettre. Par contre, les sauts de lignes de votre commentaire seront pris en compte, ne mettez donc pas de <br />, le site s'en chargera. Bien sûr, un commentaire vide ne sera pas ajouté !

L'auteur (autrement dit moi) n'est pas responsable des éventuelles fautes d'orthographe dans les commentaires.
Tout propos raciste et/ou insultant sera supprimé sans préavis. Les commentaires hors de propos destinés à faire de la pub pour des sites seront également supprimés sans ménagement.

Je vous prie de me pardonner, j'ai énormément de mal à lire le "langage" SMS, il n'est donc pas du tout interdit de s'abstenir de l'utiliser. Qui plus est, vous avez sûrement un clavier digne de ce nom et pas celui d'un téléphone portable. Ne vous gênez pas pour utiliser l'option "Prévisualiser" si vous voulez vous relire avant de poster, je vous en remercie d'avance !

Cet article a été écrit par Nicolas Hoffmann.

Ce site est la propriété de Nicolas Hoffmann.
Tous droits réservés, les textes du blog sont publiés sous licence CC BY-NC-SA.