Archives mensuelles : février 2012

Effet animé de zoom au survol d’une image en CSS

CSS3 et HTML5 apporte beaucoup de nouveautés. Voyons comment mettre en place un effet de zoom animé en pur CSS 3. Nous utiliserons pour ça les transitions. A noter que cette technique ne fonctionne que sur des navigateurs récents (Safari 4+, Chrome 2+, Firefox 4+, Internet Explorer 10 et Opera 10.6+)

Dans un premier temps nous insérons notre image :

<img class="zoomEffect" src="http://www.w3.org/html/logo/downloads/HTML5_Logo_128.png" alt="HTML5" />

Nous avons mis une classe zoomEffect afin de ne cibler que les images ayant cette attribut.

Il faut ensuite styler notre image et l’animer via CSS :

img.zoomEffect {
    -moz-transition: all 0.5s ease-in-out 0s;
    -webkit-transition: all 0.5s ease-in-out 0s;
    -o-transition: all 0.5s ease-in-out 0s;
    -ms-transition: all 0.5s ease-in-out 0s;
    transition: all 0.5s ease-in-out 0s;
    opacity: 0.7;
}
img.zoomEffect:hover {
    -moz-transform: rotate(5deg) scale(1.10);
    -webkit-transform: rotate(5deg) scale(1.10);
    -o-transform: rotate(5deg) scale(1.10);
    -ms-transform: rotate(5deg) scale(1.10);
    transform: rotate(5deg) scale(1.10);
    opacity: 1;
}

On définit sur notre image une transition (-*-transition) qui s’appliquera à toutes les propriétés en utilisant la valeur all (on peut définir une liste de propriété qui seront animées). Celle-ci durera une demi-seconde (0.5s) et utilisera l’effet ease-in-out. Le dernier paramètre est le délai avant l’animation. 0s indique qu’on lance l’animation immédiatement. J’ai utilisé ici la notation raccourcis mais on peut définir chaque propriété individuellement. Je vous laisse vous reporter à la documentation ou à cet article d’alsacreations sur les transitions.

Au survol de l’image (:hover), on définit une rotation de 5° rotate(5deg) et d’agrandissement de 10% scale(1.10). On met également l’opacité à 100% (opacity: 1) pour un meilleur effet.

Et voila le résultat :

HTML5

Ceci n’est qu’un exemple simple des possibilités du module de transition de CSS3 qui permet de mettre en place des effets d’animation simple afin d’améliorer l’ergonomie de votre site. Pour avoir plus de contrôle sur les effets, il est possible d’utiliser le module d’animation de CSS3 qui permet de créer des keyframes afin de définit précisément les étapes de votre animation.

Edit (21 Avril 2015) : Il est possible de déterminer l’origine de la transformation en utilisant la propriété transform-origin.

img.zoomOriginEffect {
    transition: all 0.5s ease-in-out 0s;
    opacity: 0.7;
}
img.zoomOriginEffect:hover {
    transform: rotate(25deg);
    opacity: 1;
    transform-origin: top left;
}

NB : j’ai volontairement omis les règles CSS liés aux préfixes propriétaires et supprimer le scale.

Présentation de Modernizr

Avec l’arrivée de HTML5 et de toutes les nouveautés gravitant autour (CSS3, API JavaScript, …), il devient maintenant possible de faire de belles et puissantes applications. Un des problèmes qui se pose alors est la compatibilité des navigateurs avec ces fonctionnalités et le support des anciens navigateurs (qui a dit IE6 😉 ).

C’est la qu’intervient la librairie Modernizr. Cette librairie JavaScript permet de connaître les fonctionnalités supportés par le navigateur de votre visiteur afin de pouvoir adapter votre site et l’expérience utilisateur aux possibilités de son navigateur.

Mise en place

La mise en place sur votre site est très aisée. Il suffit de télécharger le script sur le site et d’inclure le fichier js dans votre page (dans le head de préférence) de cette façon :

Il est possible de créer son propre fichier en sélectionnant les fonctionnalités qui vous intéresse afin d’avoir un fichier le plus petit possible.

Modernizr est également utilisable via les CDN de Microsoft ou CDNJS.

Utilisation

Au chargement de votre page, Modernizr va être initialiser et va réaliser plusieurs choses.

Pour IE, il va créer les nouveaux élément introduit par HTML5 (header, footer, section, article, …). Il vous sera alors possible de styler ces éléments via CSS. N’oubliez de leur appliquer la règle CSS suivante si vous souhaitez que ces nouvelles balises soient interprétées en tant que bloc :

header, footer, aside, nav, article {
display: block;
}

Modernizr va également tester les fonctionnalités HTML5 / CSS3 du navigateur et vous permettre de connaître leur statut. Pour cela, l’attribut class de la balise html de votre page sera mis à jour avec la liste des fonctionnalités supportés ou pas. Dans le cas de Firefox 10, nous obtenons :


Les fonctionnalités non supportés sont préfixés par no-. Vous pourrez ainsi styler votre page en fonction du support de certaines fonctionnalités. Par exemple, dans le cas ou la propriété text-shadow (ombrage sur du texte) est supportée, vous rajouterez de l’ombre sur vos textes via CSS et vous pourrez utiliser une image dans le cas où celle-ci n’est pas supportée.

La librairie met à disposition également un objet JavaScript Modernizr qui permet de tester les fonctionnalités via JavaScript et mettre en place un polyfill au besoin. Un polyfill est une librairie JavaScript qui émule la fonctionnalité non supportée. Bonne nouvelle, il y a pratiquement un polyfill pour chaque fonctionnalité (une liste disponible ici).

Voici un exemple qui permet de tester si l’objet canvas est supporté :

Modernizr.canvas //renvoi true ou false

Voici la liste des fonctionnalités testables en natif via Modernizr. Il est possible de rajouter d’autres propriétés via des extensions.

La librairie met également à disposition une méthode load(). Il s’agit d’une fonction de chargement de ressources (CSS et JS). Cette fonctionnalité est issue de la librairie yepnopejs. C’est via cette fonctionnalité que vous allez pouvoir charger vos polyfills.

Modernizr.load({
  test: Modernizr.geolocation,
  yep : 'geo.js',
  nope: 'geo-polyfill.js'
});

Dans le cas où la fonctionnalité de géolocalisation est supportée, le fichier geo.js sera chargé sinon geo-polyfill.js le sera. Il est possible de ne charger que dans le cas où la fonctionnalité est supportée (ou inversement) et de charger plusieurs fichiers. Enfin sachez que le chargement se fait de manière asynchrone et en parallèle.

Conclusion

Modernizr est une librairie très utile si vous souhaitez commencer à tirer parti des avancées d’HTML5 tout en adaptant votre page aux anciens navigateurs. Celle-ci est très populaire et utilisée par de grand nom comme Twitter, Google, Microsoft, The Economist, …

Connaître le nombre de personnes abonnés Google Reader à un flux RSS

Une petite astuce que j’ai découverte par hasard si vous voulez connaître le nombre de personnes qui suivent un blog via Google Reader (pratique pour connaître combien de personnes vous suivent via Google Reader).

Sélectionner le site dont vous voulez connaître le nombre d’abonnés et cliquer sur la flèche puis cliquer sur Afficher les détails et les statistiques.

Accès au menu Détails et statistiques d'un flux RSS dans Google ReaderUne petite pop up s’ouvre avec le nombre d’abonnés et d’autres informations comme la moyenne des posts par semaine, l’URL du flux, et des graphiques concernant l’historique des publications et vos lectures.

Information d'un flux dans Google ReaderPratique !

CSS : Cibler un élément multi-classe

En HTML/CSS, il est possible d’affecter plusieurs classes à un élément. Il peut vous arriver de vouloir styler différemment des éléments qui peuvent avoir des classes multiples.

Prenons comme exemple 2 classes CSS. Vous voulez un style différent par classe et un style spécifique si l’élément contient les 2 classes.

Afin de cibler un élément qui contient les 2 classes, il suffit de « coller » les classes que l’on souhaite cibler :

<style>
.class1 {
   color : red;
}

.class2 {
   color : yellow;
}

.class1.class2 {
    color : blue;
}
</style>

Attention : bien mettre le style des elements ayant les 2 classes aprés les définitions des classes unique car sinon le style sera surchargé 😉