Le Post de MCNEXT

Les articles des consultants de MCNEXT

Archives de Catégorie: HTML5

Animer vos pages web avec CSS3

Il n’est un secret pour personne que la nouvelle norme HTML5, et la norme CSS3 qui l’accompagne, ont pour objectif de rendre à terme obsolète l’utilisation de plugins tiers comme Flash ou Silverlight. A ce titre, une nouvelle API permettant d’animer les éléments d’une page web est actuellement en cours de normalisation par le W3C, l’organisme en charge de mettre au point les nouveaux standards de demain.

Cette nouvelle API, bien qu’actuellement à l’état de brouillon et disséminée dans plusieurs modules de la norme CSS3, a déjà été largement implémentée dans les dernières versions des navigateurs que nous connaissons tous (à l’exception d’Internet Explorer 10 qui se fait attendre) et est donc d’ores et déjà exploitable.

Nous allons étudier chacune des nouveautés qui nous permet d’animer nos sites. Notez néanmoins que bien que les différents acteurs du monde du web se soient déjà mis d’accord sur une syntaxe commune, l’utilisation de préfixes CSS est encore pour le moment d’usage. Le but de ceux-ci est de permettre aux développeurs d’être en mesure de différencier les différents navigateurs, afin de pouvoir effectuer le cas échéant de menus réglages.

Par soucis de brièveté, dans les exemples qui suivront ces différents préfixes seront omis pour ne conserver que la syntaxe qui devrait devenir définitive à terme.

Les transformations

Tout d’abord, de nouvelles propriétés CSS3 vont nous permettre de transformer nos éléments HTML de manière inédite. Pour cela, on utilise la propriété CSS transform associée à une fonction de transformation. Ces fonctions de transformation vont nous permettre par exemple de modifier les dimensions de l’élément (translate / translate3d), de le faire pivoter sur lui-même (rotate / rotate3d) sur un ou plusieurs de ses axes, de l’étirer (skew) ou d’appliquer une transformation matricielle (matrix / matrix3d). Comme vous le voyez, la plupart de ces transformation existent en version 2D ou 3D. Par ailleurs, il est généralement possible de les appliquer sur un seul axe à la fois, avec par exemple rotateX, rotateY et rotateZ.

.mon-element {
    /* L'élément pivotera de 30 degrés dans le sens horaire */
    transform: rotate(30deg);
}

Notez – et c’est important – que toutes ces transformations se font à la fois sur l’élément et son contenu, que le flux d’affichage de la page n’est pas modifié et que cette opération se fait à un niveau graphique. Par exemple lors d’un étirement, le texte inclus dans l’élément sera lui aussi transformé.

La propriété CSS transform s’accompagne de plusieurs autres propriétés permettant de préciser certains éléments d’affichage. Par exemple, la propriété transform-origin permet d’indiquer à partir de quel point de l’élément la transformation doit s’appliquer. Si l’on reprend notre précédent exemple de la rotation, on peut ainsi préciser que celle-ci doit s’appliquer non pas sur le centre de l’élément – comme c’est le cas par défaut – mais par exemple à dix pixels de haut et dix pixels de large de son coin supérieur gauche.

.mon-element {
    transform: rotate(30deg);
    /* La transformation s'appliquera avec un point d'origine différent */
    transform-origin: 10px 10px;
}

Lorsque la transformation s’applique en trois dimensions, il est possible avec la propriété backface-visibility de préciser si l’on souhaite ou non que le dos de l’élément soit visible. La propriété perspective permet quand à elle de modifier la perspective selon laquelle un objet est perçu dans l’espace.

La transformation en elle-même se fait sans effet d’animation. Il est néanmoins possible de rendre cette transformation dynamique en utilisant les pseudo-éléments CSS comme :hover ou :focus.

a.mon-lien:hover {
    /* Multiplie par deux la largeur et la hauteur de l'élément
       lorsque le curseur de la souris le survole */
    transform: scale(2,2);
}

Les transitions

Il est courant dans une page web de vouloir modifier dynamiquement l’apparence d’un élément, que ce soit ses dimensions, la taille du texte qu’il contient, ou ses couleurs. Toutefois, ces opérations se faisaient jusqu’à maintenant en Javascript, et elles étaient généralement assez abruptes (sauf à utiliser des moteurs d’animation comme celui de jQuery). Le changement de couleur de fond d’un élément se faisait par exemple instantanément.

Grâce à la nouvelle propriété CSS3 transition, il est maintenant possible de préciser que l’on souhaite que certaines caractéristiques d’un élément changent progressivement lorsque celles-ci sont altérées. Concrètement, lorsque par exemple on modifie la largeur d’un élément de 100 pixels à 200 pixels, il est possible d’indiquer au moteur de rendu du navigateur que la transition entre ces deux états doit se faire en passant par tous les états intermédiaires (les valeurs entre 100 et 200), et non pas instantanément. L’utilisation de Javascript devient alors caduque, car tout se fait en CSS.

La déclaration de ces effets de transition s’effectue en indiquant à quelle propriété elle s’applique, et combien de temps doit durer la transition. Il est possible de cumuler plusieurs propriétés dans la même déclaration, comme on le voit dans l’exemple suivant :

.mon-element {
    transition: width 2s, height 2s, transform 2s;
}

Il est possible d’appliquer ces effets sur n’importe quelle propriété CSS. Lorsque la valeur de l’une de celles-ci sera altérée, de quelque manière que ce soit (Javascript, pseudo-element CSS, …), si un effet de transition a été appliqué à l’élément, alors la transition se fera automatiquement selon les paramètres spécifiés.

On peut également préciser directement dans la propriété transition ou par le biais de la propriété transition-timing-function un effet "d’assouplissement" (en anglais : easing), permettant d’altérer la manière dont la transition va s’appliquer dans le temps. Par exemple, on peut indiquer que l’on souhaite que la transition commence très rapidement, puis ralentisse sur la fin. Pour cela il existe déjà plusieurs mots-clefs standardisés (linear, ease, ease-in, ease-out, ease-in-out), mais on peut également utiliser la fonction cubic-bezier pour avoir un contrôle plus fin sur ce timing. Vous pouvez d’ailleurs vous amuser à tester différents effets sur ce site.

.mon-element {
    transition: width 3s cubic-bezier(.99, .01, -.01, .01);
}

Dernière possibilité offerte par la propriété transition-delay : différer le lancement de la transition. Comme la durée de la transition elle-même, la valeur de cette propriété peut être indiquée en secondes (s) ou en millisecondes (ms).

Dans l’exemple suivant nous appliquons un effet de transition en utilisant séparément chacune des propriétés CSS3 distinctes, plutôt qu’en les rassemblant par le biais de la propriété transition :

.mon-element {
    transition-property: font-size;
    transition-duration: 5s;
    transition-timing-function: ease-in-out;
    transition-delay: 1000ms; /* Équivalent à 1 seconde */
}

Cette effet de transition s’appliquera donc sur la propriété font-size (la taille des caractères autrement dit), il durera cinq secondes mais ne commencera qu’une seconde après que la propriété ait été altérée. Par ailleurs l’effet s’effectuera selon le timing ease-in-out (légèrement plus rapide au début et à la fin).

Voici un exemple de code Javascript modifiant la valeur du style CSS font-size d’un élément. Ce code permettrait de provoquer l’exécution de l’effet de transition :

document.getElementsByClassName('mon-element')[0].style.fontSize = '48px';

Les animations

Les animations avec CSS3 sont cousines des transitions, à l’exception qu’elles peuvent être répétées en boucle, et qu’elles offrent un contrôle plus fin sur la manière dont va évoluer l’apparence des éléments du DOM.

A la base d’une animation, il y a la notion de keyframe. Une keyframe n’est pas une propriété CSS mais une règle. Elle permet d’indiquer la suite d’états par lesquels l’élément du DOM va transiter au cours de l’animation.

@keyframes mon-animation {
    0% {
        background-color: red;
    }

    25% {
        background-color: green;
    }

    75% {
        background-color: blue;
    }

    100% {
        background-color: yellow;
    }
}

Dans cet exemple, nous indiquons que l’élément auquel sera appliquée l’animation devra avoir un fond de couleur rouge au début de celle-ci, puis vert au premier quart, puis bleu au troisième quart, puis jaune à la fin. Les mots-clefs from et to peuvent remplacer respectivement 0% et 100%, mais n’importe quelle valeur entre 0 et 100 est aussi acceptée.

Ensuite pour appliquer cette animation à un élément, on utilise la propriété animation proprement dite :

.mon-element {
    animation: mon-animation 5s;
}

Le minimum est d’indiquer la durée souhaitée de l’animation. Mais il est également possible, comme pour les transitions, d’indiquer un effet d’assouplissement, et un délai d’attente avant le lancement de l’animation. Par ailleurs, les animations disposent également des propriétés animation-iteration-count et animation-direction. La première permet d’indiquer combien de fois l’animation doit s’effectuer (on peut utiliser le mot-clef infinite pour que celle-ci tourne en boucle), et la seconde, si l’animation doit s’effectuer toujours dans le même ordre (mot-clef normal), ou si celui-ci doit s’inverser entre deux itérations (mot-clef reverse), ce qui s’avère très pratique lorsque l’on veut par exemple faire tourner un élément dans un sens puis dans l’autre.

.mon-element {
    animation: mon-animation 5s;
    animation-timing-function: linear;
    animation-delay: 2s;
    animation-iteration-count: infinite;
    animation-direction: alternate;
}

Les animations disposent enfin d’une dernière propriété : animation-play-state. Celle-ci permet de contrôler l’exécution de l’animation, avec la possibilité de mettre celle-ci en pause pour la continuer plus tard. Cela permet donc d’imaginer des scénarios où l’utilisateur peut piloter l’exécution de l’animation grâce au Javascript ou aux pseudo-éléments CSS.

.mon-element {
    animation: mon-animation 5s;
    animation-play-state: running;
}

.mon-element:hover {
    animation-play-state: paused;
}

Pour aller plus loin

Si vous souhaitez consulter la documentation complète des transformations, transitions et animations en CSS3, je vous recommande chaudement l’excellent site W3Schools. Vous pourrez y consulter des démonstrations, mais aussi créer les vôtres grâce à un système de bac-à-sable interactif très bien conçu qui vous permettra de vous entraîner à maîtriser toutes ces nouvelles propriétés.

Avec tout cela il devient beaucoup plus simple d’animer nos pages web. Toutefois, la création d’animations complexes reste fastidieuse à réaliser sans outils dédiés. On peut noter l’arrivée prochaine du nouveau logiciel Adobe Edge, qui est d’ores et déjà disponible en version béta, et dont l’objectif est précisément de permettre la création de contenu web animé en utilisant les nouveaux standards HTML5, CSS3 et le langage Javascript.

Animations, transitions, et mise en place du charme de partage dans les applications Metro en HTML et Javascript

Dans cette série sur la réalisation de l’application Metro "Parle moi de…" en HTML et Javascript, nous avons vu :

Les animations et les transitions permettent de donner vie à l’application, et de donner un ressenti plus organique lors de la manipulation de l’application. C’est particulièrement important dans les applications tactiles car c’est un contexte dans lequel les applications peuvent paraître "cassées" lorsqu’elles ne sont pas assez réactives. Nous allons aborder dans ce webcast les différentes façon de gérer ces transitions et ces animations pour les applications Metro en HTML et Javascript. Une fois de plus, l’API WinJS fournie par Microsoft comporte tout une API qui va nous pouvoir nous aider. Si vous maîtrisez des librairies javascript comme jQuery, vous pourrez également les mettres à contribution, de la même façon que sur vos sites web. Une dernière façon de donner vie à vos écrans peut être d’utiliser directement les transitions CSS3.

Une autre façon de donner plus de vie à votre application est de permettre de partager son contenu. Pour ce faire, Windows propose le charme de partage. Grâce à ce charme, vos utilisateurs peuvent partager vos contenus vers d’autres applications, comme par exemple les applications de Contact (pour partager dans Facebook, Twitter, …), ou Courrier (pour envoyer ces informations par mail). Nous allons donc vous présenter comment implémenter le charme de partage dans votre application.

Dans le prochain épisode de cette série, nous verrons les étapes à respecter pour publier votre application dans le Windows Store.

Préférences et stockage local dans les applications Metro en HTML et Javascript

Dans cette série sur la réalisation de l’application Metro "Parle moi de…" en HTML et Javascript, nous avons vu

Parmis les charmes proposés dans Windows 8, nous avons le charme de paramètres. Il permet à l’utilisateur d’accéder aux paramètres de l’application, ainsi qu’aux paramètres du système. Dans vos applications Metro, les écrans de préférences et de paramétrage de l’application doivent être accessibles à travers le charme de paramètres (cela fait partie des points vérifiés lors de la certification dans le store). C’est également un bon endroit pour mettre votre fenêtre "A propos" si vous souhaitez en mettre une, ou pour mettre un lien sur l’aide. Dans les applications en HTML et Javascript, nous disposons d’un contrôle SettingsFlyout qui va nous permettre d’implémenter des écrans de préférence. Nous allons voir comment ajouter un lien dans le charme de paramètres, et comment réaliser un écran avec le contrôle SettingsFlyout.

Si vous proposez un écran de préférences, il faudra également stocker les choix de l’utilisateur pour pouvoir les réutiliser. Nous allonc donc également voir comment stocker ces préférences en local. Nous verrons aussi comment bénéficier du roaming, afin d’utiliser ces préférences sur les différents ordinateurs associés à un utilisateur.

Dans le prochain épisode, nous verrons comment ajouter des animations pour améliorer les transitions et le ressenti utilisateur, et comment implémenter le charme de partage.

Gestion des résolutions d’écran et des états visuels dans les applications Metro en HTML et Javascript

Dans cette série sur la réalisation de l’application Metro "Parle moi de…" en HTML et Javascript, nous avons vu

Nous allons maintenant voir la gestion des résolutions d’écran et des états visuels de l’application.

Windows 8, bien que résolument tactile, reste Windows. Il n’y a donc pas de résolution d’écran fixée. La résolution minimale supportée est de 1024 pixels, mais il est fréquent aujourd’hui de trouver des écrans en 1920px, y compris sur des portables, et on commence à voir apparaitre des écrans avec des résolutions beaucoup plus importantes.

Par ailleurs, une application Metro peut être dans différents états visuels, correspondant à l’ergonomie de cette nouvelle génération de Windows. L’application peut être affichée au format portrait ou paysage, mais elle peut aussi être en mode "snap", c’est à dire qu’elle est affichée côte à côte avec une autre application. On a dans ce cas une application "snappée" (avec un espace de 320 pixels), et une application "filled" qui occupe le reste de l’espace. Le fait de "snapper" des applications n’est accessible que si votre terminal est en orientation paysage, et que votre écran à une résolution d’au mois 1366 pixels.

Votre application Metro doit impérativement gérer ces différentes résolutions, ainsi que les états visuels (il n’est pas possible pour l’application de refuser de se "snapper"), sous peine d’être refusée dans le processus de certification dans le store.

Nous allons donc voir comment gérer ces paramètres en utilisant les mediaqueries de CSS3, ou à travers l’API javascript.

Dans le prochain épisode de cette série, nous verrons comment utiliser le charme de paramètres et comment stocker des données en local.

Multilangue dans les applications Metro en HTML et Javascript

Jusqu’ici, nous avons découvert comment mettre en place notre projet, puis comment tirer parti du charme de recherche et des contrôles comme la ListView pour notre application "Parle moi de…"

Dans ce 3e épisode, nous allons voir comment rendre notre application multilangue en Français et en Anglais.

Lorsqu’on souhaite tirer parti du multilangue dans une application Metro, il faut prendre différents aspects en compte. Nous allons évidemment vouloir traduire les textes utilisés. Nous allons aussi avoir besoin de changer certaines images selon la langue, à commencer par l’icone de notre application, l’écran de démarrage, le logo etc. Nous allons également avoir besoin de fournir des traductions pour les méta données de notre application comme par exemple son titre ou sa description, et déclarer les différentes langues gérées par notre application. Le but étant que les utilisateurs puissent avoir cette information lorsqu’ils consulteront notre application dans le magasin d’applications Windows.

Dans le prochain épisode, nous verrons comment gérer efficacement les différentes résolutions d’écran et comment gérer les différents états visuels de notre application.

Charme de recherche, ListView et Zoom sémantique dans les applications Metro en HTML et Javascript

Dans le précédent épisode de cette série, nous avons créé le projet pour l’application "Parle moi de…". Dans ce second épisode, nous allons aborder différents aspects essentiels à notre application. Nous allons tout d’abord intégrer le charme de recherche, afin de pouvoir lancer des recherches depuis Windows.

Nous allons ensuite découvrir l’utilisation d’éléments de base des applications Metro en HTML comme l’utilisation des templates et du binding. Nous appliquerons ces concepts dans l’utilisation du contrôle de liste (ListView) pour afficher le résultat de la recherche. Ce contrôle est essentiel dans les applications de style Metro car il vous permet d’afficher une liste d’éléments sous la forme de tuiles. Dans les applications Metro en HTML et Javascript, ce contrôle ListView permet d’afficher les éléments soit sous la forme d’une grille (dans l’esprit de l’écran de démarrage Windows 8), soit sous la forme d’une liste (plus traditionnelle).

Pour terminer, nous approfondirons ces concepts en mettant en place le zoom sémantique à partir de la liste. Le but du zoom sémantique est de proposer une vue sémantiquement différente de la liste. L’utilisation typique est de fournir une vue des regroupements de données utilisés, et de permettre ainsi un système de "Jump-List" entre ces regroupements. En mode tactile, cette fonctionnalité est déclenchée par la gesture de zoom, d’où le terme de zoom sémantique.

 

Dans le prochain épisode, nous verrons les différentes étapes pour rendre notre application multilangue.

Créer une application Metro pour Windows 8 en HTML et Javascript

Les applications Metro dans Windows 8 permettent des ergonomies plus simples et plus fluides, et adaptées à une utilisation tactile. Il est possible de réaliser ces applications avec différentes plateforme de développement : C++/XAML, C# ou VB / XAML, ou HTML / Javascript.

Nous vous proposons une série de vidéos pour découvrir la réalisation d’applications Metro en HTML et javascript.

Il y a quelques temps déjà, à l’occasion de la version Developper Preview, nous avions présenté l’ergonomie de Windows 8, ainsi que les fondamentaux sur les applications Metro en HTML et Javascript

Nous avions également présenté l’anatomie des applications Metro en HTML et javascript

Avec la sortie de la version Release Preview de Windows 8, nous vous proposons maintenant de découvrir la réalisation d’une application Metro en HTML et Javascript, à travers le développement de l’application "Parle moi de…". Cette application permet de faire des recherches dans différents fournisseurs de contenus comme Wikipédia ou Youtube.

Dans le premier épisode de cette série, nous vous proposons de découvrir la mise en place du projet. Cette mise en place passe par l’intégration de librairie javascript comme jQuery, et quelques informations sur les bonnes pratiques concernant l’utilisation du javascript. Vous pourrez aussi découvrir combien il est simple, grâce à Visual Studio, d’ajouter des pages et de naviguer dans les éléments du projet

Nous continuerons cette série avec différents articles et vidéos associées, pour découvrir le développement de ce genre d’application, étape par étape.

Dans le prochain épisode, nous verrons comment tirer parti du charme de recherche, et comment inclure un contrôle de type ListView dans notre application.

Suivre

Recevez les nouvelles publications par mail.