La tête dans le Flux !

RSS

Posts tagged with "css"

Prefix-free, pour ou contre ?

Nous avons publié récemment un article sur Alsacréations au sujet de -prefix-free, un outil générant automatiquement des préfixes vendeurs sur les propriétés CSS3, selon nécessité.

Cette ressource a certainement autant d’avantages que d’inconvénients…et donc autant de détracteurs que d’aficionados. Le premier argument, indiscutable, est tout simplement que JavaScript n’a théoriquement rien à faire dans une histoire de CSS pur et que rajouter une couche JS uniquement par flemme est un peu exagéré.

Soit. Mais en ce qui me concerne, je suis tout de même plutôt pour :)

Prenons un exemple simple : il y a quelques années, j’ai conçu un certain nombre de sites web avec des éléments avant-gardistes telles que des animations CSS3 (l’exemple choisi des animations vaut pour un large panel d’effets CSS3).

A cette époque, seul Webkit reconnaissait les animations et j’ai - en toute logique - appliqué uniquement un préfixe -webkit- sur mes propriétés.

Lorsque Firefox 5 a supporté les animations CSS3, j’ai eu deux choix : soit je laissais tous ces sites tels quels, donc sans animations sur Firefox; soit je les reprenais un par un et ajoutais un prefixe -moz- pour rendre mes animations compatibles sur ce navigateur. Les parts de marché de Firefox n’étant pas négligeables, j’ai opté pour la seconde alternative (c’est de l’humour, je l’aurais fait de toute façon, hein).

Le temps passant, j’ai continué à produire des sites web pour moi ou des clients, disposant de fonctionnalités CSS3 avec préfixes.

Puis, au fur et à mesure, Opera et Microsoft se sont mis à supporter toutes ces propriétés, avec leurs propres préfixes bien entendu.

Et là, autant dire que je n’avais pas forcément l’envie ni le temps de reprendre un par un tous les sites produits depuis quelques années.

Est-ce ma faute ? Aurais-je dû dès le départ proposer une demi-douzaine de préfixes sur toutes les propriétés CSS3 de tous les sites conçus depuis plusieurs années ? (au risque de surcharger des styles inutilement).

Je n’ai pas la réponse à cette question… mais en toute honnêteté, Prefix-free est une solution viable à ce problème. Grâce à cet outil, mes sites d’hier et d’aujourd’hui seront toujours, immédiatement et automatiquement supportés par le plus vaste panel de navigateurs possible, et s’adapteront à toute nouvelle version d’un navigateur reconnaissant une propriété avant-gardiste.

Je trouve qu’il s’agit d’une excellente assurance-vie pour mes clients.

Latence et chargement ?

Comme beaucoup d’outils de ce genre, -prefix-free nécessite une requête HTTP et un traitement du JavaScript, au détriment des performances du navigateur.

En ce qui me concerne, je considère que les avantages fournis contrebalancent ce handicap. Mais sur mobiles, où les temps de chargement sont prépondérants, la question mérite le détour.

Une solution radicale pourrait-elle consister à ne charger -prefix-free que sur écrans larges ?

Cela signifie que les fonctionnalités CSS3 risquent de ne plus être interprétées du tout si elles requièrent un préfixe. C’est jouable s’il s’agit de propriétés de confort ou de décoration, mais bien évidemment pas pour des parties importantes telles que du positionnement.

if(screen.width>640) {
var prefixfree = document.createElement('script');
prefixfree.src = 'https://raw.github.com/LeaVerou/prefixfree/master/prefixfree.min.js';
prefixfree.type = 'text/javascript';
document.getElementsByTagName('head')[0].appendChild(prefixfree);
}

A méditer bien entendu.

Vous voulez un exemplaire du livre “CSS avancées” dédicacé ?

CSS avancées - vers HTML5 et CSS3

Vous le savez peut-être déjà : la 2è édition de mon livre “CSS avancées - vers HTML5 et CSS3” va sortir dans quelques jours, le 3 février exactement.

Certains m’ont dit être intéressés pour recevoir un exemplaire dédicacés par l’auteur.

Ça tombe bien, c’est possible. Je dispose d’une vingtaine d’exemplaires que je peux vous dédicacer et envoyer personnellement.

Vous aurez même droit à une réduction et si vous habitez en France, je me chargerai des frais de port.

Voici les ouvrages qu’il me reste (stock mis à jour régulièrement) :

  • 8 exemplaires de la 2è édition (2012), à 35€ au-lieu de 38€
  • 5 exemplaires de la 1ère édition (2011), bradés à 25€ au-lieu de 38€

Voici la marche à suivre pour obtenir ces livres dédicacés :

  1. Aller sur Amazon.fr, rubrique “chèque cadeau”.
  2. Vous identifier avec votre compte Amazon ou en créer un en 1 minute
  3. Accédez au formulaire d’envoi de chèques cadeaux par mail
  4. Choisissez le montant correspondant à l’édition souhaitée.. ou plus si vous le souhaitez
  5. Compléter les cases “Pour” et “De” telles que vous aimeriez qu’elles soient sur le chèque-cadeau.
  6. Quelle est l’adresse e-mail du destinataire ? Ne vous trompez pas, il s’agit de raphael@goetter.fr
  7. Message à l’attention du destinataire  : notez ici impérativement votre adresse postale, sans quoi je ne pourrai pas vous envoyer le livre !
    (attention c’est limité en taille et les guillemets doubles ne sont pas pris en compte).
    Si vous souhaitez une dédicace particulière sur le memento, notez-là ici.

Et voilà ! Y’a plus qu’à attendre le facteur : j’effectuerai la première livraison ce vendredi 3 février (jour de la sortie officielle de la 2è édition).

N’hésitez pas à laisser un commentaire s’il y a le moindre problème ou pour toute question.

Je tiendrai à jour ce billet pour correspondre au stock de livres restants.

Quel type de navigation pour les sites mobiles ?

Les menus de navigation sont vraiment une plaie pour les périphériques mobiles, à commencer par le menu horizontal, et - le plus vicieux d’entre tous -, le menu déroulant… (même si nous proposons une solution pertinente sur Alsacréations.)

En y réfléchissant bien, chaque type de navigation est problématique dès lors que l’écran commence à se réduire : il faut non-seulement tenter de tout afficher sur une colonne, mais également agrandir la surface cliquable de chaque lien.

Et quand tout cela est enfin optimisé, il reste un dernier problème, et non des moindres : votre menu occupe à présent toute la taille de l’écran visible de votre page d’accueil !

Forcément, le menu de navigation parfait pour mobile n’existe pas, ou plutôt : il sera différent selon les cas de figure et besoins.

J’ai regroupé ici quelques idées de navigation “responsive” qui pourraient bien s’adapter à nos smartphones. Ils ont sans-doute chacun des avantages et des inconvénients…

Simple adaptation visuelle

goetter.fr

Principe :

Adaptation d’un menu classique pour le Web mobile pour obtenir un affichage sous forme de colonne avec grands boutons.

Réalisation :

Les CSS3 Media Queries sont nos amis pour appliquer une feuille de styles lorsque la taille d’écran se réduit.

Exemple en ligne :

Il y en a un peu partout, dès lors que le webdesigner a fait un premier effort de “responsive design”.

Menu poussé en bas de page

alsacréations

Principe :

La navigation est non seulement adaptée aux petits écrans, mais par un stratagème magique, elle est déplacée en bas du document. L’objectif d’afficher le contenu principal en priorité est atteint.

Réalisation :

Les techniques pour modifier l’ordre d’affichage des éléments HTML relèvent soient de spécifications en brouillon (CSS3 Flexible Model ou Grid Layout), ou de “bidouilles” telles que d’afficher un bloc comme un <tfoot> pour le reléguer en bas.

Exemple en ligne :

C’est cette dernière technique que nous avons utilisée pour http://www.alsacreations.fr

Menu remplacé par une liste select

select menu

Principe :

Le site CSS Tricks propose une idée intéressante : remplacer le menu classique par un élément HTML <select>. Ce type d’élément est généralement très ergonomique sur les smartphones.

Réalisation :

La page HTML contient les deux types d’éléments, tour à tour masqués en display none selon la largeur d’écran. Un coup de JavaScript est nécessaire pour lien les options du select aux pages correspondantes lors du pointage.

Exemple en ligne :

Un tutoriel de CSS Tricks dévoile cette technique : http://css-tricks.com/convert-menu-to-dropdown/

Menu rétractable

menu rétractable

Principe :

Une des solutions adaptée aux menus déroulants, l’idée est d’afficher le menu contracté par défaut, puis lors du clic sur un élément, de dévoiler les sous-menus afférents.

Réalisation :

Il est possible de réaliser ce type de comportement exclusivement en CSS (pour éviter une requête JavaScript ?) à l’aide de la pseudo-classe :target

Exemple en ligne :

Je me suis amusé à réaliser cet exemple : http://ie7nomore.com/fun/responsive-menu/

Menu coulissant latéral

menu coulissant

Principe :

La navigation est masquée (placée en haut ou sur le côté). Un bouton “menu” permet de faire apparaître en glissant la navigation vers la partie visible de l’écran.

Réalisation :

Le bloc de menu peut simplement être positionné en absolu ou relatif avec un décalage. Le clic sur le bouton “menu” modifie la valeur du décalage. Un petit coup de transition CSS3 et le tour est joué.

Exemple en ligne :

Voilà un exemple concret : http://ie7nomore.com/fun/responsive-menu/menu2.html

Menu coulissant vertical (ajout du 30 janvier)

Principe :

Une des (sans-doute) nombreuses variantes de la version précédente : la navigation est placée en haut de page. Seul un bandeau est visible et fixé en haut. Un bouton “menu” permet de faire apparaître en glissant la navigation vers la partie visible de l’écran.

Réalisation :

Le bloc de menu doit avoir une hauteur connue et positionné en “fixed”, puis décalé de sa hauteur. Le clic sur le bouton “menu” modifie la valeur du décalage.

Exemple en ligne :

J’ai appliqué ce principe sur mon site personnel Goetter.fr

Et sinon ?

Cette liste des “bonnes idées” de menus pour mobiles est certainement loin d’être exhaustive.
Je suis preneur d’autres bonnes suggestions, et surtout de vos retours d’expériences, notamment en ce qui concerne la compatibilité ou l’accessibilité (ARIA ?) de toutes ces techniques.

Test perso : hacks CSS et performances des sélecteurs

Avec l’émergence du “Web mobile”, le concept de performance web est en pleine ébullition : on peut comprendre que chaque milliseconde de perdue sur une connexion 3G est un désatre.

Parmi les thèmes où l’on entend tout et son contraire, on trouve l’idée de “Sélecteurs CSS efficients” qui prône l’usage de certains types de sélecteurs au détriment d’autres censés être plus coûteux en performance.

On en vient à diaboliser certains sélecteurs autrefois propres sur eux, voire certaines méthodes de commentaires conditionnels.

J’ai voulu procéder à une petite expérience personnelle pour en tirer quelques conclusions qui n’engagent que moi…

Le test

Le test se déroule ainsi : je crée 4 fichiers HTML composés d’un div de class=”lol” dans lequel se trouve un paragraphe.

Par ailleurs, au sein d’une feuille de styles externe, j’applique la propriété border-radius (reconnue pour être assez gourmande) sur le paragraphe. Le tout répété 1000 fois dans le fichier CSS !

Les seules différences entre les 4 feuilles de styles est le type de déclaration :

  1. fichier CSS 1 : 1000x un sélecteur existant + propriété existante :
    .lol p {border-radius: 1337px;}
  2. fichier CSS 2 : 1000x un sélecteur introuvable + propriété existante :
    .ie7 p {border-radius: 1337px;}
  3. fichier CSS 3 : 1000x un sélecteur existant + propriété inexistante (hack) :
    .lol p {*border-radius: 1337px;}
  4. fichier CSS 4 : 1000x un sélecteur introuvable + propriété inexistante (hack) :
    .ie7 p {*border-radius: 1337px;}

Le but du jeu est de vérifier qu’il existe bel et bien une différence de performances selon les types de sélecteurs et les propriétés.

Résultats

1 : .lol p {border-radius: 1337px;} x1000
  • Chargement des styles : 266ms
  • (Chargement total : 518ms)
  • (Chargement total sur mobile iPhone4 : 2.83s)
2 : .ie7 p {border-radius: 1337px;} x1000
  • Chargement des styles : 265ms
  • (Chargement total : 468ms)
  • (Chargement total sur mobile iPhone4 : 2.79s)
3 : .lol p {*border-radius: 1337px;} x1000
  • Chargement des styles : 360ms
  • (Chargement total : 568ms)
  • (Chargement total sur mobile iPhone4 : 2.49s)
4 : .ie7 p {*border-radius: 1337px;} x1000
  • Chargement des styles : 265ms
  • (Chargement total : 504ms)
  • (Chargement total sur mobile iPhone4 : 2.5s)

Interprétation personnelle

Ce petit test amateur ne prétend pas jouer dans la cour des grands, je n’ai déployé que de maigres moyens (Firebug pour les temps de chargement bureau, et Blaze.io pour le mobile).

Cependant, s’il n’y avait qu’une seule conclusion à en tirer, c’est que les inégalités de latence entre les sélecteurs paraîssent bien minimes, voire négligeables !

A quelques exceptions près, quel que soit le sélecteur (que le navigateur le trouve ou non) et quelle que soit la propriété (hack ou non), le temps de chargement est quasiment identique, en tout cas pour des feuilles CSS de 1000 lignes et environ 34ko.

De très légères disparités apparaissent pour les cas suivants : il semble qu’une propriété “hack” appliquée à un sélecteur existant (cas n°3) soit un peu plus coûteuse en performance pour le navigateur.

J’espère que les conditions d’expérience n’étaient pas trop biaisées et que mes déductions n’en sont pas complètement fausses.

Deuxième édition du livre “CSS avancées” !

J’ai le plaisir de vous annoncer la prochaine parution de la 2è édition du livre “CSS avancées, vers HTML5 et CSS3”, prévue très prochainement (le 3 février 2012), soit un peu moins d’un an après la première version, et déjà annoncée sur Amazon.

Ce remaniement est principalement dû à une activité riche dans le monde de la conception web et plus particulièrement HTML5 et CSS3, mais aussi pour permettre d’aller encore plus loin dans certains thèmes méconnus de CSS2.

Voici une liste non exhaustive des modifications apportées :

  • Des corrections :
    • plusieurs dizaines d’erratas corrigés (typographie, fautes de presse, inexactitudes)
  • Des mises à jour :
    • prise en compte des nouveautés et supports des navigateurs récents (IE10, Firefox 5 à 8, Chrome 12 et plus, etc.)
    • revues des chiffres, statistiques et tableaux présentées dans l’édition précédente
    • syntaxe @font-face pour Internet Explorer mise à jour
    • syntaxe “clearfix” via contenu généré mise à jour
    • mises à jour sur les parties CSS3 box-shadow, gradients et background-size
    • précisions sur les parties HTML5 contenteditable, localstorage, placeholder, required et canvas
    • prise en compte de la refonte des spécifications CSS3 du Modèle de boîte flexible (flexible box model)
    • revue de quelques illustrations tout au long du livre
  • Des ajouts :
    • précisions et exemples sur la pseudo-classe CSS2 :first-child
    • enrichissement du chapitre concernant le positionnement “modèle tabulaire CSS”
    • remaniement de la partie “classes conditionnelles”
    • ajout d’exemples et exercices concernant les pseudo-éléments CSS2 :before et :after,

#Bref, il y avait de quoi m’occuper quelques week-ends et j’espère que le résultat plaira aux lecteurs curieux de se perfectionner au maximum !

Gradient generator de Colorzilla

Un éditeur de dégradés linéaires (et radiaux) CSS3 très intuitif.