Alsacreations.com - Actualités Les dernières actualités d'Alsacreations.com fr http://www.alsacreations.com/ CSS3 Grid Layout http://www.alsacreations.com/article/lire/1388-css3-grid-layout.html http://www.alsacreations.com/article/lire/1388-css3-grid-layout.html Le module de positionnement "Grid Layout" est une spécification du W3C à l'état de brouillon (Working Draft) dont les premiers jets datent de 2004.

Sa documentation officielle est actuelllement maintenue par quatre contributeurs, dont trois personnes de Microsoft, ainsi que Daniel Glazman, le co-chairman CSS du W3C.

Avertissement La compatibilité de ce module est pour le moins ténue à l'heure actuelle : comme en témoigne l'excellente ressource Can I Use, seul... Internet Explorer 10 (actuellement en version beta) supporte aujourd'hui cette spécification. Mais les autres ténors (Mozilla, Webkit, Opera) sont également intéressés et ne devraient pas tarder à implémenter ce module, au regard des vastes possibilités offertes par ce schéma de positionnement. Il est notamment prévu sur Chrome 19.

Compatibilté navigateurs du module Grid Layout

Navigateurs Versions
Internet Exlorer Internet Explorer 10+

Grid Layout

Le positionnement par grille

Le concept général de Grid Layout (ou "positionnement en grille") est de diviser virtuellement l'espace en zones majeures dans une page ou une application. Concrètement et schématiquement, il s'agira de découper en lignes et en colonnes comme nous le ferions pour un tableau de mise en page.

On y trouve d'ailleurs de nombreuses références d'affichage "tabulaire" avec lignes et colonnes, rowspan et colspan. En cela, ce schéma de positionnement est très similaire aux tableaux HTML ou aux rendus de type display: table, display: table-cell et autre display: table-row.

Mais la différence la plus flagrante est que la grille consiste en une construction de l'esprit et ne nécessite aucun élément HTML ni balisage pour être élaborée. Aucune charpente physique telle que <table>, <tbody>, <tr>, <td> ou <th> n'est nécessaire, ce qui en facilite l'adaptation à différentes tailles d'écrans et de périphériques : inutile d'intervenir sur l'ordre, la nature ou la "sémantique" des éléments HTML, il suffit de modifier le canevas initial pour qu'ils s'y adaptent.

Les propriétés usuelles de Grid Layout

Propriété Détails
grid, inline-grid déclaration d'un contexte de grille
grid-template déclaration d'un "canevas" de cellules nommées (optionnel)
grid-rows, grid-columns déclaration des dimensions de lignes et colonnes
grid-row, grid-column placement d'un élément dans une ligne ou une colonne
grid-cell positionnement d'un élément au sein d'une cellule nommée
grid-row-span, grid-column-span distribution sur plusieurs lignes ou colonnes
grid-row-align, grid-column-align alignement horizontal ou vertical
grid-layer niveau du plan pour éléments superposés

Mise en oeuvre

On crée un "contexte de grille" tout simplement en appliquant la déclaration display: grid à un élément conteneur qui constituera la trame générale. Cette trame sera définie par un schéma virtuel formé de lignes et colonnes définissant des "cellules".

Tous les enfants (directs) de ce conteneur général, sous réserve qu'ils soient originellement de type "block", seront automatiquement affectés par ce contexte particulier et pourront se placer au sein des "cellules" (grid-cell) de la trame.

Exemple 1 (affichage de deux blocs sur une ligne) :

<body>
   <nav>nav</nav>
    <section>section</section>
</body>
body {
    display: grid;
    grid-columns: 250px 300px;
}
nav {
    grid-column: 1; /* placement en colonne 1 */
}
section {
    grid-column: 2; /* placement en colonne 2 */
}

Grille simple

Démonstration

Note compatibilité : le module "Grid Layout", encore en brouillon (Working Draft), ne fonctionne actuellement que sur IE10 et nécessite des préfixes vendeurs -ms- pour être appliqué (par exemple : display: -ms-grid, ou -ms-grid-row: 2). Sur cette page, nous ne mentionnons que la syntaxe finalisée sans préfixe, mais vous devrez les ajouter pour vos tests.

Exemple 2 (grille de 4 emplacements) :

<body>
    <nav>nav</nav>
    <section>section</section>
    <article>article</article>
    <aside>aside</aside>
</body>
body {
    display: grid;
    grid-columns: 250px 400px;
    grid-rows: 100px 300px;
}
nav {
    grid-column: 1; grid-row: 1;
}
section {
    grid-column: 2; grid-row: 1;
}
article {
    grid-column: 1; grid-row: 2;
}
aside {
    grid-column: 2; grid-row: 2;
}

Grille de 4 emplacements

Démonstration

Variante : la syntaxe de templates

Grid Layout autorise la visualisation sous forme de canevas, en nommant explicitement les emplacement de la grille à l'aide de lettres de l'alphabet.

Avertissement Cette variante n'est actuellement reconnue par aucun navigateur, c'est pourquoi les tests demeurent ardus à réaliser, mais en voici le concept général :

Exemple 3 (template) :

#inGrid {
    display: grid;
    grid-template: "hh"
                   "nc"
                   "ff";
}
#inGrid nav {
    grid-cell: "n"; /* placement de <nav> dans l'emplacement "n" */
}

template layout

Les unités de largeur et hauteur

Le modèle d'affichage en grille ne se contente pas d'employer les unités de largeur et hauteur habituelles; il introduit des fonctions complexes permettant de s'adapter à des contextes de contenus différents :

Unité Détails
px, %, em, ex, rem,… pixels, pourcentages, em,… (unités courantes)
fr fraction(s) de l'espace restant
min-content se rapporte à la largeur (ou hauteur) de l'élément le plus petit
max-content se rapporte à la largeur (ou hauteur) de l'élément le plus grand
minmax(min, max) exemple minmax(min-content, 20%) correspond à largeur 20% (ou hauteur), mais au minimum largeur (ou hauteur) du contenu
auto s'adapte à la largeur (ou hauteur) du contenu
fit-content identique à auto et aussi à minmax(min-content, max-content)

Exemple 4 (illustration de l'unité "fr") :

html, body {height: 100%;}
body {
    display: grid;
    grid-columns: 250px 1fr; /* largeur 250px et "espace restant" */
    grid-rows: 100px 1fr;
}
nav {
    grid-column: 1; grid-row: 1;
}
section {
    grid-column: 2; grid-row: 1;
}
article {
    grid-column: 1; grid-row: 2;
}
aside {
    grid-column: 2; grid-row: 2;
}

unité fr

Démonstration

Centrer les éléments

Grid Layout permet d'aligner les contenus verticalement ou horizontalement à l'aide des propriétés grid-row-align et grid-column-align dont les valeurs peuvent être les suivantes :

Valeur Détails
start aligne l'élément au début de la cellule (gauche ou droite selon le sens de la lecture)
end aligne l'élément à la fin de la cellule (gauche ou droite selon le sens de la lecture)
center place l'élément au centre de la cellule
stretch étire l'élément (ses marges) pour occuper tout l'espace dans la cellule

Exemple 5 (multiples centrages) :

html, body {height: 100%;}
body {
    display: grid;
    grid-columns: 250px 250px;
    grid-rows: 250px 250px;
}
nav {
    grid-column: 1; grid-row: 1;
}
section {
    grid-column: 2; grid-row: 1;
    grid-row-align : center;
}
article {
    grid-column: 1; grid-row: 2;
    grid-column-align : center;
}
aside {
    grid-column: 2; grid-row: 2;
    grid-row-align : center;
    grid-column-align : center;
}

alignements

Démonstration

Occuper plusieurs emplacements

Tels les célèbres attributs rowspan et colspan dédiés aux tableaux HTML, le module Grid Layout introduit la possibilité à un élément de s'étaler sur plusieurs emplacements, à la fois horizontalement et verticalement.

Les propriétés CSS grid-row-span et grid-column-span sont chargées d'organiser cette distribution sur plusieurs lignes ou colonnes.

Exemple 6 (column span) :

header {
	grid-column: 1; grid-row: 1;
	grid-column-span: 2;
}
nav {
	grid-column: 1; grid-row: 2;
}
section {
	grid-column: 2; grid-row: 2;
}

column span

Démonstration

Le pseudo-élément ::grid-cell

Le pseudo-élément ::grid-cell offre la faculté de nommer un emplacement de la grille de manière très intuitive afin d'y placer un élément.

Avertissement Ce pseudo-élément n'est encore supporté par aucun navigateur.

Exemple 7 (cellules nommées) :

body {
    display: grid;
    grid-columns: 300px 300px;
    grid-rows: 200px 300px;
}
body::grid-cell("nav") { /* la position "nav" sera en 1ère colonne, 2ième ligne */
    grid-column: 1; grid-row: 2;
}
body nav {
    grid-cell: "nav"; /* on se positionne dans "nav" */
}

Les motifs de répétition

Une fonctionnalité particulièrement intéressante du positionnement sous forme de grilles est de pouvoir appliquer des motifs de répétition de colonnes ou de lignes (appelés "patterns").

Par exemple, si je souhaite répéter le motif de colonnes (50px 1em) dix fois dans la grille, j'écrirai grid-columns: (50px 1em)[10]

Exemple 9 (patterns) :

body {grid-columns: 10px (1fr 10px)[4];}
/* correspond à 10px 1fr 10px 1fr 10px 1fr 10px 1fr 10px */

répétitions

Démonstration

Vous avez dit "responsive" ?

Pour finir cette présentation du modèle de positionnement Grid Layout en apothéose, j'ai gardé le meilleur pour la fin.

L'un des avantages les plus flagrants d'une grille virtuelle, indépendante des éléments HTML qui peuvent s'y placer, est qu'il est extrêmement aisé de modifier la grille selon le contexte. Par exemple, pour s'adapter immédiatement aux différentes tailles d'écran, il suffit de... changer la grille initiale.

Associé aux CSS3 Media Queries, le modèle de positionnement en grille donne toute sa puissance, plus particulièrement si vous avez opté pour une trame sous forme de variante "template". En effet, seul le patron de départ nécessite d'être modifié : inutile d'intervenir sur la structure HTML, ni même sur le positionnement de chaque élément de page.

Exemple 10 (adaptation aux petits écrans) :

body {
    display: grid;
    grid-template: "abcd";
}


@media (max-width: 640px) {
	body {
		display: grid;
		grid-template: "a"
					   "b"
					   "c"
					   "d";
	}
}

adaptation responsive

Démonstration

Conclusion et usage

Vu la compatibilité navigateurs quasi inexistante du module Grid Layout, il est bien entendu utopique d'employer ce type de positionnement en production à l'heure actuelle, même sur des périphériques avant-gardistes. Cependant, la simplicité et la robustesse de ce schéma lui promet un bel avenir : Microsoft a ouvert la voie (mais il faudra attendre de passer à Windows 8), et les autres navigateurs vont sans nul doute lui emboîter le pas rapidement.

Rendez-vous dans quelques années ? :)

Pour aller plus loin sur ce sujet, je vous invite à consulter un exposé (PDF) que j'ai présenté le 8 février 2012 lors du cycle de conférences MS TechDays,  concernant le module Grid Layout ainsi que deux autres avancées CSS3.

]]>
CSS http://www.alsacreations.com/article/lire/1388-css3-grid-layout.html#commentaires 2012-02-09T12:50:03+00:00 Raphael
Bonnes pratiques CSS: le Web ouvert a besoin de vous http://www.alsacreations.com/actu/lire/1394-web-ouvert-css-webkit.html http://www.alsacreations.com/actu/lire/1394-web-ouvert-css-webkit.html Daniel Glazman, coprésident du CSS Working Group (groupe de travail sur CSS du W3C), a écrit un appel à action important: THE OPEN WEB NEEDS YOU *NOW*. C’est une lecture fortement recommandée pour tous les développeurs et designers web. Voici un résumé une paraphrase en français du problème exposé, et quelques préconisations que vous trouverez peut-être utiles.

Ne pas refaire l’erreur d’IE6

Si vous avez un peu suivi l’histoire du Web, vous savez que les situations de monopole ne sont pas bénéfiques pour les standards: l’éditeur de navigateur qui a le monopole ou quasi-monopole peut être tenté de proposer des fonctionnalités sans les proposer comme standards, les créateurs de sites web utilisent du code non-standard qui ne fonctionne que sur le navigateur qui a le monopole, et les éditeurs minoritaires sont tentés d’imiter les comportements non standard du navigateur minoritaire. Un jeu très dangereux pour l’efficacité des standards, qui mène à renforcer les monopoles, diminuer la concurrence et donc l’innovation sur le Web. La stagnation du Web quand Microsoft a arrêté le développement d’Internet Explorer après IE6 et pendant plusieurs années en est une preuve suffisante.

Aujourd’hui, nous sommes devant un nouveau monopole: celui du moteur de rendu WebKit sur les plateformes mobiles (smartphones, tablettes) et au-delà (le nouveau navigateur embarqué de la PlayStation 3 utilise WebKit). Dans les faits, Opera Mini et Opera Mobile restent des concurrents non négligeables sur mobile, mais il est certain que WebKit détient un monopole d’attention chez les créateurs de sites web: nous avons tous commencé à nous intéresser au développement de sites mobiles avec l’arrivée de l’iPhone ou dans les années suivantes avec le succès de l’iPhone et en parallèle celui d’Android.

Pour beaucoup, le Web mobile c’est WebKit et puis c’est tout

C’est une vision à court terme particulièrement dangereuse. Certes, personne ne peut jurer que Windows Phone ne fera pas un flop, que Firefox et Opera arriveront à s’implanter fermement comme navigateurs alternatifs sur Android et d’autres plateformes, ou que de nouvelles plateformes pour mobiles ou tablettes viendront changer un peu la donne. Mais en 2002 beaucoup pensaient que la partie était finie, qu’Internet Explorer avait gagné la guerre et qu’on arrivait à une période de stabilité. En réalité on a eu droit à une période de stagnation (arrêt du développement d’Internet Explorer, entrainant un retard que Microsoft rattrappe à peine) et une redistribution des cartes quelques années plus tard notamment grâce à Firefox. De nombreuses entreprises se mordent encore les doigts d’avoir fait développer des logiciels de gestion dont les interfaces sont compatibles uniquement avec IE6.

En pratique, le problème c’est quoi?

Il y a deux erreurs qui sont commises régulièrement par les développeurs web, et pas uniquement les moins informés:

  • Utilisation du browser sniffing (détection du navigateur via la chaine User-Agent ou d’autres informations) pour réserver une fonctionnalité aux navigateurs WebKit ou à l’iPhone, voire carrément un blocage de l’accès au site mobile pour les navigateurs non-WebKit.
  • Utilisation de propriétés CSS expérimentales avec préfixe -webkit-*, sans doubler ces propriétés par les syntaxes équivalentes pour les autres navigateurs et sans se soucier de la compatibilité.

Ces problèmes sont déjà courants sur des sites destinés à tous les supports (sites développés avec les techniques désormais nommées Responsive Design). Ils sont extrêmement courants sur les sites dédiés aux périphériques mobiles.

Aujourd’hui, les éditeurs de navigateurs minoritaires veulent 1) se faire passer pour des navigateurs WebKit ou pour Safari Mobile en envoyant une chaine User-Agent frelatée (une technique vieille comme le monde, les premières versions d’Internet Explorer le faisaient déjà pour se faire passer pour Netscape!) et 2) lire certaines propriétés CSS  -webkit-*. Le but est d’être compatible avec les sites mobiles qui, pour beaucoup, les mettent à la porte parce que vous comprenez ce soir c’est pas possible c’est une soirée privée WebKit.

Si Mozilla, Opera et Microsoft se prêtent à ce jeu, on risque une spirale infernale bien connue: des fonctionnalités non-standard (jamais proposées comme standards à l’instar de -webkit-text-size-adjust, ou expérimentales et amenées à changer comme feu -webkit-gradient() proposé en 2008 et remplacé par une nouvelle syntaxe avec déjà deux itérations…) commencent à être reconnues par plusieurs navigateurs, deviennent des standards de fait sans que la communauté des éditeurs de navigateurs et des utilisateurs (nous!) ait l’occasion de soulever des problèmes et de proposer des solutions. Quand on veut les améliorer c’est déjà trop tard, la solution plus ou moins bancale est en place et la très grande majorité des développeurs web l’utilise sans sourciller (éventuellement en pestant parce que c’est pas terrible ou limité, mais tant pis).

Alors oui, arriver à un bon standard ça prend du temps, malheureusement ça prend parfois quelques années, et il y a sans doute des choses qui peuvent être améliorées pour arriver à des résultats un peu plus rapides. Mais si en quelques mois une nouvelle proposition expérimentale dans WebKit devient un standard de fait (plutôt qu’un vrai standard communautaire), on risque d’utiliser dans cinq, dix et vingt ans des fonctionnalités mal finies et être condamnés à s’en contenter. Gros problème de qualité en perspective! Vous vous imaginez utiliser aujourd’hui, dans tous les navigateurs, les filtres DirectX d’IE5-6 à la place des effets CSS3 modernes? Moi si on en arrive à ça je pars élever des chèvres dans le Larzac ou alors je m’en fous et je fais du Flash.

Bon, qu’est-ce qu’on peut faire?

Pour éviter que les éditeurs de navigateurs ne cassent les standards du Web, c’est à nous de faire attention à éviter la monoculture WebKit (et à l’avenir tout problème similaire). Il y a deux choses à faire:

  1. Faire passer le message! N’hésitez pas à faire tourner cet article. Vous pouvez même le copier-coller et mettre votre nom à la place du mien, rien à fiche, faites juste tourner. :)

  2. Dans votre propre travail, pensez à la compatibilité avec tous les navigateurs (au moins les versions récentes, pour le support des anciennes versions c’est un autre débat). Je donne quelques conseils ci-dessous, mais vous aurez peut-être plus efficace ou pertinent à proposer en commentaire, alors partagez vos méthodologies et vos idées.

Un peu de méthode

  • Commencez par créer une base fonctionnelle solide avec des fonctionnalités HTML, CSS et JavaScript éprouvées par le temps. Faites simple.

  • Dans le même ordre d’idée, exploitez à fond les fonctionnalités déjà stables: HTML 4 et CSS 2.1 bien sûr, mais aussi les parties de HTML5 et CSS3 qui sont stables et implémentées sans préfixe dans au moins une partie des navigateurs.

    Pour savoir si une fonctionnalité est stable ou non, le site When Can I Use… (caniuse.com) est une mine d’informations. Si une fonctionnalité n’est pas implémentée par la moitié des navigateurs, évitez-la. Si elle est largement implémentée mais que tous les navigateurs requièrent l’utilisation d’un préfixe, gardez à l’esprit que la fonctionnalité n’est sans doute pas stable et pourrait changer radicalement ou même être abandonnée! Enfin, si les navigateurs commencent à proposer la fonctionnalité sans préfixe, elle est probablement stabilisée.

  • Lorsque vous avez décidé d’utiliser une fonctionnalité expérimentale, utilisez au maximum les préfixes des différents moteurs de rendu, et terminez par une version sans préfixe. Ce n’est pas une solution miracle, en partie parce que c’est vraiment pénible et en partie parce qu’il est toujours possible que la syntaxe de la propriété CSS évolue (on a bien dit que c’était expérimental hein), mais tant pis, il faut se retrousser les manches et faire sa part du boulot.

  • Si vous pouvez l’éviter, ne faites pas reposer l’accès aux contenus ou aux fonctionnalités de base sur le support par le navigateur de certaines fonctionnalités expérimentales. Si votre mise en page est nickel dans IE10 avec CSS Grid Layout, mais complètement illisible dans tous les autres navigateurs, vous avez un problème. De même si la mise en page de votre application web mobile repose sur l’implémentation de CSS Flex Box dans WebKit, sachez que Flex Box a été réécrit depuis cette première implémentation, que la nouvelle syntaxe est plutôt différente, et qu’il est possible que votre interface web mobile soit cassée dans d’autres navigateurs… ou même dans de futures versions de WebKit! Par définition, une fonctionnalité expérimentale peut vous exploser à la figure, et les utiliser sur des sites dont vous n’assurez pas la maintenance au quotidien est sans doute une erreur.

À vous maintenant: Quelles méthodes utilisez-vous? Que pouvez-vous améliorer dans vos pratiques? Comment pouvez-vous faire passer le message?

]]>
CSS http://www.alsacreations.com/actu/lire/1394-web-ouvert-css-webkit.html#commentaires 2012-02-09T12:05:16+00:00 fvsch
Chrome débarque officiellement sur Android http://www.alsacreations.com/actu/lire/1389-google-chrome-android.html http://www.alsacreations.com/actu/lire/1389-google-chrome-android.html Une version officielle de Google Chrome pour Android a été publiée. La plate-forme mobile était déjà équipée du "Navigateur" Android par défaut avec un moteur WebKit, ainsi que des applications Opera Mobile, Opera Mini et Firefox. Désormais, Google compte mettre un coup d'accélérateur pour promouvoir son navigateur phare, au-delà du simple moteur de rendu WebKit, et donc indirectement ses applications et services. Après avoir lancé des campagnes de publicité à la télévision, on comprend que Google est motivé par la possibilité d'avoir à disposition un public équipé des dernières fonctionnalités (notamment HTML5) pour proposer des services de plus en plus complets (et addictifs).

Pour le moment, Chrome n'est disponible que pour la version 4.0 de l'OS (Ice Cream Sandwich), celle qui équipe les dernières tablettes et certains smartphones récents, notamment le Galaxy Nexus avec lequel les captures d'écran ci-dessous ont été prises.

Une vidéo de présentation a été conçue pour l'occasion.

L'interface de navigation diffère quelque peu de ce que l'on avait l'habitude de rencontrer avec Android, et fait la part belle à la synchronisation : un compte Google et le tour est joué, les favoris sont synchronisés. L'accent a été mis sur la performance ainsi que la simplicité.

Chrome Android

Les onglets peuvent être repris en l'état depuis la version desktop (Windows/Linux/Mac OS X) du navigateur pour continuer une session de navigation, ou bien dans le sens inverse être envoyés vers le mobile avec l'extension Chrome to Mobile.

Chrome to Mobile

Chrome Android

Pour les développeurs

Du côté des fonctionnalités prises en charges, on retrouve la navigation privée, le support de l'orientation et tout une panoplie d'API gravitant autour de HTML5 :

  • Canvas avec accélération matérielle (y compris requestAnimationFrame)
  • Défilement des éléments en overflow et prise en compte du positionnement fixe
  • La video HTML5
  • Indexed DB
  • Web Workers
  • Web Sockets
  • Media Capture
  • Les types date/datetime pour <input>
  • Application Cache et AppCache API
  • localStorage/sessionStorage
  • Géolocalisation
  • WebSQL
  • File API (dont FileList, FileReader, Blob)

Chrome Android Chrome Android

La fonctionnalité de débogage à distance Remote Debugging permet de prendre le contrôle du développement du mobile avec un ordinateur de bureau.

Chrome Android

]]>
Web http://www.alsacreations.com/actu/lire/1389-google-chrome-android.html#commentaires 2012-02-08T11:00:00+00:00 dew
Initializr http://www.alsacreations.com/web/lire/1383-initializr.html http://www.alsacreations.com/web/lire/1383-initializr.html Vous permet de générer un template HTML5 basé sur HTML5 Boilerplate. Il peut comprendre également Modernizr, jQuery, et Bootstrap, et des instructions de configuration pour plusieurs serveurs web afin d'adapter au mieux les en-têtes HTTP véhiculées. L'ensemble correspond à une arborescence de fichiers classés (HTML, CSS, JavaScript, etc) et préparés pour exploiter au mieux toutes les astuces courantes : Chrome Frame, LESS, Analytics, classes pour Internet Explorer, icônes, robots.txt, et ainsi de suite.

]]>
XHTML et HTML http://www.alsacreations.com/web/lire/1383-initializr.html#commentaires 2012-02-06T23:55:00+00:00 dew
L'élément <mark> pour attirer l'attention http://www.alsacreations.com/astuce/lire/1378-html5-element-mark.html http://www.alsacreations.com/astuce/lire/1378-html5-element-mark.html Sortez votre feutre jaune

Nouveau venu en HTML5, l'élément <mark> est un surligneur de texte. Il marque un passage spécifique, que l'on souhaite mettre en valeur d'une façon particulière, pour attirer l'attention.

Son style par défaut est celui d'un texte surligné en jaune (dans les navigateurs qui le reconnaissent).

mark {
  background-color: yellow;
  color: black;
}

Pour les anciens navigateurs qui ne comprendraient pas ce style par défaut, il suffit de l'ajouter à votre feuille CSS, voire de le personnaliser en choisissant d'autres couleurs.

Usages

Que peut-on imaginer comme usages pratiques à cette balise ? Voici quelques suggestions et une page de démonstration.

Démonstrations

Marquer les mots trouvés dans des résultats de recherche

Par exemple sur la page de résultats, les passages surlignés seront ceux qui correspondent exactement aux termes recherchés. Dans ce cadre, la balise agit comme un marqueur relatif à l'activité de l'utilisateur : c'est lui qui provoque l'application de <mark> à certains passages de texte en fonction de ses actions (ce qu'il a recherché).

<p>5 résultats pour le mot "HTML"</p>
<ul>
  <li>...<mark>HTML</mark> est le langage du web...<a href="#">Lire</a></li>
  <li>Avec CSS, <mark>HTML</mark> est surpuissant. <a href="#">Lire</a></li>
  <li>Les balises <mark>HTML</mark> sont délicieuses. <a href="#">Lire</a></li>
</ul>
Marquer une portion de texte

Il peut s'agir d'un texte modifié ou ajouté par l'éditeur d'un document, voire d'un passage que l'on souhaiterait souligner dans une citation alors qu'il ne l'était pas dans sa version originale.

<p>Il y a quelques années, nous écrivions ceci :</p>
<blockquote>
  <p>A long terme, <mark>XHTML 2 remplacera HTML</mark>, et qu'il sera nécessaire pour les navigateurs et les intégrateurs de s'adapter à ce nouveau langage de balisage.</p>
</blockquote>
<p>En réalité, nous avons vu que HTML5 a remplacé XHTML 2.</p>
Marquer une portion de code source

Un passage spécifique peut être surligné pour s'y référer ultérieurement.

<pre><code><mark>var</mark> i = 3;</code></pre>
<p>Le mot-clé var permet de déclarer une variable en JavaScript.</p>
Marquer le jour actif d'un calendrier

Dans une application devant afficher un agenda ou un module de calendrier, marquer le jour courant avec <mark> peut être approprié, si l'on doit faire référence ultérieurement à cette date dans la page.

Datepicker

Pour les lecteurs d'écran, le texte balisé par <mark> est lu d'une façon constante, au contraite de <strong> et <em> qui marquent un changement d'importance ou ajoutent une emphase.

Prise en charge

Navigateurs Versions
Internet Explorer Internet Explorer 9+
Firefox Firefox 6+
Chrome Chrome 10+
Safari Safari 5+
iOS Safari Mobile 5+
Opera Opera 11+
Android Browser Android Browser 3+

Propriétés de l'élément <mark>

Propriété Détails
Modèles de contenu autorisés Contenu de phrasé
Parents autorisés Tout élément pouvant contenir des éléments de phrasé
Omission de balise Les balises ouvrantes et fermantes sont obligatoires
Style par défaut mark { background-color:yellow; color:black; }

 

]]>
XHTML et HTML http://www.alsacreations.com/astuce/lire/1378-html5-element-mark.html#commentaires 2012-02-04T17:39:00+00:00 dew
HTML5 : Nouveaux éléments de section, article, header, footer, aside, nav http://www.alsacreations.com/article/lire/1376-html5-section-article-nav-header-footer-aside.html http://www.alsacreations.com/article/lire/1376-html5-section-article-nav-header-footer-aside.html Les éléments de section HTML5, une nouvelle façon de penser

Les éléments de section (section, article, nav, aside, header, footer) segmentent des portions du document ou de l'application web, qui possèdent une valeur sémantique particulière ; contrairement à des éléments génériques comme span ou div qui ont un rôle totalement neutre, et ne servent qu'à regrouper d'autres éléments HTML pour leur affecter un style CSS commun, voire pour interagir avec eux via le DOM... Il ne s'agit donc pas de nouveaux éléments avec des noms génériques : c'est bien plus que ça !

HTML5 inclut la majorité des éléments HTML4 pour assurer une rétro-compatibilité avec les navigateurs. Au-delà de ce critère, les groupes de travail qui ont élaboré HTML5 ont su analyser les usages courants et s'adapter aux tendances du web avec (entre autres) les nouvelles façons de trier l'information sur une page web. Des statistiques ont été élaborées sur les attributs id les plus fréquemment attribués aux grands découpages de pages HTML.

Par exemple, une majorité des sites contiennent des informations supplémentaires relatives ou non au contenu principal (que l'on nomme sidebar ou barre latérale). Cette information est alors placée dans un élément <div class="aside"> dédié - qui permet d'affecter des propriétés de styles CSS - mais n'a aucune signification particulière pour un navigateur ou un moteur d'indexation. C'est le cas de tous les autres <div>. Le même principe peut être appliqué pour baliser les différents articles d'un site d'information : pourquoi ne pas prévoir un élément <article> plutôt que de segmenter tout le contenu avec des <div class="article"> ? Ceci en facilitera autant l'extraction d'information, la syndication de contenu, et la structuration du code source.

Liste récapitulative des éléments de section HTML5

Le tableau suivant récapitule les nouveaux éléments de section et leur usage le plus commun, tel que décrit par la spécification.

Nom Détails
<section> Section générique regroupant un même sujet, une même fonctionnalité, de préférence avec un en-tête, ou bien section d'application web
<article> Section de contenu indépendante, pouvant être extraite individuellement du document ou syndiquée (flux RSS ou équivalent), sans pénaliser sa compréhension
<nav> Section possédant des liens de navigation principaux (au sein du document ou vers d'autres pages)
<aside> Section dont le contenu est un complément par rapport à ce qui l'entoure, qui n'est pas forcément en lien direct avec le contenu mais qui peut apporter des informations supplémentaires.
<header> Section d'introduction d'un article, d'une autre section ou du document entier (en-tête de page).
<footer> Section de conclusion d'une section ou d'un article, voire du document entier (pied de page).

Un cas particulier : Internet Explorer <9

Avertissement Pour les versions antérieures à Internet Explorer 9, ces nouveaux éléments ne sont pas reconnus par l'analyseur syntaxique. C'est-à-dire qu'ils ne sont non seulement pas stylés en bloc par défaut, mais également qu'on ne peut leur appliquer aucun style de quelque manière que ce soit.

Une technique alternative consiste à déclarer ces éléments au préalable en JavaScript. Un script (nommé html5shim ou html5shiv) est prévu à cet effet et mis à disposition à cette adresse :

<!--[if lt IE 9]>
<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->

Étant muni d'un commentaire conditionel, il ne sera chargé que pour ces versions spécifiques (Internet Explorer 6 à 8 inclus).

Pour tous les autres moteurs de navigateurs récents, il ne sera pas nécessaire d'appliquer une telle astuce : même si ces éléments n'auront pas de signification particulière pour le moteur de rendu, il sera possible de leur appliquer des styles CSS s'ils ne sont pas affichés en bloc par défaut.

Si vous utilisez déjà une bibliothèque telle que Modernizr, il ne sera pas nécessaire d'appliquer un autre script (tel que html5shim) car celle-ci embarque déjà une déclaration équivalente.

Exemples de documents

Exemple minimal

Voici un schéma basique d'un découpage d'une page HTML5. Précisons bien qu'il ne s'agit pas d'une règle fixe à appliquer à tout document mais juste d'un exemple.

L'en-tête <header>

Plutôt que de se cantonner à un simple <div id="header"> le nouvel élément <header> convient parfaitement à l'introduction d'un document. Tout comme l'élément <nav> qui remplace avantageusement <div id="menu">.

Le contenu principal et annexe

L'élément aside revêt le rôle de barre latérale, et l'élément section est appelé pour regrouper le contenu principal.

Le <footer>

Sans suprise l'élément footer est destiné au pied-de-page. Il peut accueillir des mentions spécifiques, un rappel du titre et du logo, des liens de navigation, etc.

Remarque

Finalement, il suffit de considérer qu'il s'agit d'un remplacement pragmatique de certains éléments, ayant eu un identifiant proche (id="header", id="navigation", id="content"...). Mais ce n'est qu'une impression. Se limiter à ce constat serait incomplet. L'usage de ces nouveaux éléments doit se faire à bon escient.

Exemple détaillé

Le schéma suivant est plus précis et se concentre sur chaque <article>. Il démontre que éléments de section ne se limitent pas à un simple découpage et à une application de styles graphiques mais bien à une meilleure classification sémantique de l'information.

Démonstration

On retrouve ici header, aside, footer alors qu'ils sont déjà utilisés dans d'autres parties du document. C'est un critère important : l'utilisation de ces éléments n'est pas limitée à une occurence par page. Ils peuvent très bien s'appliquer à des contenus locaux, par exemple dans <article> qui représente déjà une portion de contenu. Il peut donc possèder (entre autres) : un en-tête header (avec des titres, des informations sur la date de publication et l'auteur), un pied d'article footer, des infos complémentaires dans un ou plusieurs aside etc.

Les balises en détail

<section>

C'est la plus générique : elle est utilisée lorsqu'aucun autre élément de section n'a pu lui être préféré. Il ne faut cependant pas la confondre avec l'élément div qui n'a aucune valeur sémantique. Les deux ne sont pas interchangeables. La section regroupe un ensemble de contenu d'une même thématique, ou bien un ensemble d'éléments offrant une fonctionnalité spécifique dans une application web.

Pour résumer, on utilise l'élément <section> généralement quand :

  • Ce n'est pas une balise employée uniquement pour styler un élément voire plusieurs éléments
  • D'autres éléments de section ne sont pas appropriées (article, aside ou nav)
  • Il contient naturellement un titre d'introduction
<section>
  <h1>Articles</h1>
    
  <article>
       ...
  </article>
</section>

Documentation sur l'élément <section>

<article>

L'élément <article> est une spécialisation de section autosuffisante, possédant une plus forte valeure sémantique. Il vise à baliser des blocs de contenu utiles que l'on pourrait extraire du document tout en conservant leur sens et leurs informations. Pour déterminer si son usage est approprié, il faut se demander si son contenu pourrait être réutilisable tel quel pour de la syndication (par exemple en le reprenant dans un flux RSS ou en le copiant-collant dans un e-mail). Il est fréquent qu'il soit présent au côté d'autres frères dans un même document.

Des éléments <article> dans un parent <article> sont censés représenter des blocs de commentaires relatifs à cet élément parent.

Dans le cadre d'un site axé sur le cinéma, on pourra se servir d'<article> pour les fiches d'identité de chaque film, pour les biographies des acteurs, pour les produits à acheter, pour chaque actualité ou encore pour chaque contribution d'un utilisateur.

<article>
  <h1>Titre de l'article</h1>
  <p>Contenu de l'article</p>
</article>

Documentation sur l'élément <article>

<aside>

L'élément aside est destiné au contenu indirectement lié à l'article lui-même : il représente ce qui l'entoure, de façon annexe. Par exemple, on pourra s'en servir pour proposer la définition d'un terme, une biographie de l'auteur de l'article, un glossaire, préciser des sources, une liste d'articles en relation... aside n'est donc pas forcément dédié au seul usage d'une barre de contenu latérale.

<aside>
  <h4>Sources de l'article</h4>
  <ul>
    <li><a href="#">Lien 1</a></li>
    <li><a href="#">Lien 2</a></li>
    <li><a href="#">Lien 3</a></li>
  </ul>
</aside>  

Documentation sur l'élément <aside>

<header>

L'élément <header> représente l'en-tête d'une section (section, article...) ou d'une page entière. Il peut contenir un logo, un ou plusieurs titres, d'autres informations d'introduction, une navigation, un formulaire de recherche général.

<article>
  <header>
    <h1>Titre de l'article</h1>
    <p>Auteur : bidule</p>
  </header>
    
  <p>Contenu de l'article</p>
</article>

Documentation sur l'élément <header>

<footer>

L'élément footer représente le pied de page, ou bien la conclusion d'une section. On y place des informations concernant l'auteur, des mentions légales, une navigation ou une pagination (en combinaison avec <nav>), un logo de rappel, des coordonnées, des dates de publication.

<article>
  ...
  <footer>
    <p>Posté par Simon, le 
      <time datetime="2012-02-02">2 février 2012</time>
    </p>
  </footer>
</article>

Documentation sur l'élément <footer>

<nav>

L'élément <nav> est une section de liens de navigation. On peut l'utiliser pour la navigation principale, mais également pour d'autres parties du document devant lister des liens de navigation interne.

<nav>
  <ul>
    <li><a href="index.html">Page d'accueil</a></li>
    <li><a href="contact.html">Contact</a></li>
  </ul>
</nav>

Documentation sur l'élément <nav>

Conclusion

HTML5 dispose d'éléments bien pensés pour un meilleur balisage sémantique de l'information. Le plus difficile n'est pas d'écrire ces nouvelles balises, mais bien de comprendre leur usage. Les confusions qui peuvent survenir (section dans article ou vice-versa par exemple) risquent de créer de longs débats quant à leur emploi : il faudra être vigilant.

]]>
XHTML et HTML http://www.alsacreations.com/article/lire/1376-html5-section-article-nav-header-footer-aside.html#commentaires 2012-02-03T17:00:00+00:00 Simon-K
Modernizr http://www.alsacreations.com/web/lire/1387-modernizr.html http://www.alsacreations.com/web/lire/1387-modernizr.html Modernizr est une bibliothèque JavaScript conçue pour détecter des fonctionnalités spécifiques de HTML et CSS dans les navigateurs. Puisqu'il est inutile d'embarquer un fichier complet de détection dans tous les sites web, un script sur mesure peut être construit en piochant parmi les fonctionnalités détectables. Il sera par exemple possible de savoir si le navigateur supporte les transformations CSS 3D, la vidéo HTML5, Canvas ou SVG, et de prévoir une alternative le cas échéant.

Son usage est très simple, il suffit de copier-coller les quelques lignes générées dans le code source de la page, ou bien dans un fichier externe, puis d'exploiter l'objet Modernizr et ses propriétés (par exemple Modernizr.canvas, Modernizr.fontface, Modernizr.geolocation etc), initialisées aux valeurs booléennes true ou false. La méthode Modernizr.load vise aussi à faciliter le chargement de scripts tiers. Enfin, la bibliothèque embarque une déclaration des éléments HTML5 pour les anciennes versions d'Internet Explorer afin de permettre l'emploi de styles sur ces derniers.

Attention : il ne s'agit pas de moderniser les navigateurs mais uniquement de procéder à une détection, pour éventuellement utiliser d'autres scripts en complément, apportant des fonctionnalités non supportées.

]]>
Javascript http://www.alsacreations.com/web/lire/1387-modernizr.html#commentaires 2012-02-03T16:00:00+00:00 dew
HTML5 : Éléments <figure> et <figcaption> http://www.alsacreations.com/article/lire/1337-html5-elements-figure-et-figcaption.html http://www.alsacreations.com/article/lire/1337-html5-elements-figure-et-figcaption.html Illustration légendée

Inaugurés avec HTML5, les éléments <figure> et <figcaption> fonctionnent de concert pour associer une légende à une illustration ou un autre élément média.

<figure>
  <img src="image.jpg" alt="" />
  <figcaption>Légende associée</figcaption>
</figure>

Élément <figure>

<figure> est une unité de contenu, c'est-à-dire que cet élément sert de conteneur dans lequel s'insèrent divers éléments comme des images, des schémas, des vidéos, des tableaux ou encore des blocs de code. L'objectif est de lier ce contenu à une légende, définie par l'élément <figcaption> (facultatif).

Élément <figcaption>

Enfant direct de <figure>, son rôle est de légender son parent, sous forme de texte et/ou de liens. Il peut se placer avant ou après le contenu principal de <figure>.

Quelques applications dans le monde du livre

Ce fonctionnement se retrouve dans de nombreux ouvrages, y compris les premières encyclopédies pour lesquelles on imprimait des planches de figures à part.

Une gravure avec sa légende
Un diagramme circulaire

Compatibilité navigateur des éléments <figure> et <figcaption>

Navigateurs Versions
Internet Explorer Internet Explorer 9.0+
Firefox Firefox 3.0+
Chrome Chrome 4.0+
Safari Safari 3.1+
iOS Safari 3.2+
Opera Opera 9.0+
Opera Mini 5.0 + et Mobile 10.0
Android Browser Android Browser 4.0+

Un navigateur n'implémentant pas ces éléments affichera le contenu au format brut, sans présentation particulière. Par défaut, le style appliqué est display:block sur les deux éléments, ainsi que des marges sur <figure>. Sous IE<9 il faudra appliquer un shim pour pouvoir leur appliquer un style bloc.

Applications sur le web

Utilisation sans légende

Il est tout à fait envisageable d'insérer <figcaption> avant l'image voire de ne pas le mettre du tout car il est facultatif.

<figure>
  <img src="un-gout-de-fraise.jpg" alt="Proposition pour le thème : Un goût de fraise" />
</figure>

Démonstration

Demonstration image sans légende

Les différents éléments peuvent être stylés en CSS. Dans cet exemple ont été ajoutées à <figure> une bordure et une couleur de fond blanche.

Une image avec sa légende

Dans son usage le plus courant, l'élément <figure> contient une image puis sa légende <figcaption>

<figure>
  <img src="un-gout-de-fraise.jpg" alt="" />
  <figcaption>Proposition pour le thème : <br><em>Un goût de fraise</em> du jeu <a href="http://www.photogame.fr/">PhotoGame</a></figcaption>
</figure>

Démonstration

Visuel de la démonstration 1

Utilisation avancée

Il est prévu de pouvoir regrouper une liste d'images et ainsi les lier à l'aide d'un unique élément <figcaption>.

Une liste d'images
<figure>
  <img src="porto1.jpg" alt="Graffiti dans le sud de Porto" width="181" height="242">
  <img src="porto2.jpg" alt="Balcons dans une rue de Porto" width="181" height="242">
  <img src="porto3.jpg" alt="Chat somnolant au sud de Porto" width="181" height="242">
  <figcaption>Photo d'un voyage à Porto. Ville emplie de graffitis, balcons loufoques et chats profitant des quelques ruines derrière la ville.</figcaption>
</figure>

Démonstration

Un bloc de code

Les illustrations ne sont pas les seuls éléments HTML à pouvoir profiter de <figure> et <figcaption>. On peut également les appliquer à un bloc de code source.

<figure>
   <pre>
      <code>
        <!-- Le code source à exposer -->
      </code>
   </pre>
   <figcaption>Description du code source présenté</figcaption>
</figure>

Démonstration

Une vidéo

Le même principe est appliqué à la balise <video>. Voir aussi l'article : Introduction à la balise <video>.

<figure>
    <video src="video.ogv" width="640" height="480"></video>
    <figcaption>Description de la vidéo</figcaption>
</figure>
Les diagrammes et autres graphes dynamiques

Du côté de Canvas et SVG, le document peut également en profiter. HTML5 ne compte pas que <figure> et <figcaption> dans ses nouveaux éléments mais également <canvas>, qui vous permettra de créer, en association avec JavaScript, des diagrammes, des graphiques, et tout ce qu'une surface de dessin permet de faire. À ce sujet, consultez l'article de David Rousset : Introduction aux APIs graphiques d’HTML5: SVG & Canvas

Choisir <figure> ou <aside> ?

Ces deux éléments sont des unités de contenu mais n'ont pas le même rôle sémantique. Tandis qu'<aside> n'est pas essentiel pour la compréhension de la page (il ne doit être qu'un apport tangentiel), <figure> est lié à celle-ci : il transmet un contenu pertinent, lié au contenu principal, comme le serait une image classique.

Nous pouvons donc résumer la chose comme suit :

  • <aside> : son contenu est périphérique à la page, et son absence ne doit pas gêner la compréhension de celle-ci.
  • <figure> : son contenu contribue à donner du sens et de la compréhension à la page, et son placement n'est pas déterminant.

Propriétés des éléments

<figure>

Propriété Détails
Modèles de contenu autorisés Un élément <figcaption> optionnel, suivi par du contenu de flux
Parents autorisés Tout élément pouvant contenir des éléments du flux
Omission de balise Les balises ouvrantes et fermantes sont obligatoires
Style par défaut figcaption { display:block; margin:1em 40px; }

<figcaption>

Propriété Détails
Modèles de contenu autorisés Contenu de flux
Parents autorisés <figure>
Omission de balise Les balises ouvrantes et fermantes sont obligatoires
Style par défaut figcaption { display:block; }
]]>
XHTML et HTML http://www.alsacreations.com/article/lire/1337-html5-elements-figure-et-figcaption.html#commentaires 2012-02-02T12:00:00+00:00 Okko
-prefix-free http://www.alsacreations.com/web/lire/1381-prefix-free.html http://www.alsacreations.com/web/lire/1381-prefix-free.html Ce script ajoute des préfixes avant les propriétés CSS de façon automatique, pour les navigateurs n'implémentant pas encore celles-ci officiellement. Vous aimez le goût du risque ? Utilisez -prefix-free et facilitez-vous la vie.

]]>
CSS http://www.alsacreations.com/web/lire/1381-prefix-free.html#commentaires 2012-02-01T15:24:22+00:00 Okko
Firefox 10 disponible au téléchargement http://www.alsacreations.com/actu/lire/1379-firefox-10.html http://www.alsacreations.com/actu/lire/1379-firefox-10.html La version 10 de Mozilla Firefox a été dévoilée. Quelques allègements ont été opérés sur l'interface, mais aussi (et surtout) des nouveautés ont été apportées quant aux fonctionnalités supportées :

  • CSS : Support de 3D-Transforms
  • HTML : Support de l'élément <bdi>
  • HTML5 : Meilleure implémentation de IndexedDB
  • Nouvel inspecteur de document et de styles CSS
  • Anti-aliasing pour WebGL
  • Activation du mode plein écran (Fullscren API)
  • Mises à jour automatiques en tâche de fond
  • Meilleure prise en charge des extensions
  • Prise en charge de l'API Touch Events pour la version mobile et meilleure accélération matérielle avec OpenGL ES

Mozilla Firefox 10

Il s'agit également de la première version qui soit estampillée ESR (Extended Support Release), pour rassurer et déployer une version maintenue à long terme surtout dans le monde de l'entreprise. Téléchargement : Windows, Mac OS X, Linux.

Pour les développeurs web, on notera une grande refonte de l'inspecteur HTML/CSS intégré au navigateur, qui se rapproche des outils les plus agréables à utiliser à ce jour.

Firefox 10 Inspecteur

Une vidéo de démonstration en fait la promotion :

Et pour les prochaines versions, que nous prépare Mozilla ? Parmi ce qui est prévu : migration des paramètres depuis Chrome, amélioration de la lisibilité du texte, support de Flash sur Android, vue 3D dans l'inspecteur de code, éventuellement support du protocole SPDY. À plus long terme, la volonté est de pouvoir créer des web apps mieux intégrées au système d'exploitation, d'améliorer l'interface générale (onglets, téléchargements, accueil) et de rendre les mises à jour encore plus transparentes pour l'utilisateur.

]]>
Web http://www.alsacreations.com/actu/lire/1379-firefox-10.html#commentaires 2012-01-31T11:30:00+00:00 dew
HTML5 : structure globale du document http://www.alsacreations.com/article/lire/1374-html5-structure-globale-document.html http://www.alsacreations.com/article/lire/1374-html5-structure-globale-document.html La conception d'une page web en suivant la philosophie du standard HTML5 spécifié par le W3C (ou du standard vivant tel que désigné par le WhatWG) répond à quelques réflexes de base. La structure d'un document (l'imbrication des balises à la racine) est simplfiiée pour répondre aux attentes pragmatiques des intégrateurs et webdesigners.

Un document HTML5 minimal

Sans surprise, les bases d'un code HTML5 ressemblent beaucoup à celles rédigées à l'aide des précédentes versions HTML 4 et XHTML 1.x. Rétro-compatibilité oblige. On y retrouve donc un doctype suivi des éléments les plus courants : <html>, <head>, <title>, <meta>, <link>, <script> et <body>.

<!doctype html>
<html lang="fr">
<head>
  <meta charset="utf-8">
  <title>Titre de la page</title>
  <link rel="stylesheet" href="style.css">
  <script src="script.js"></script>
</head>
<body>
  ...
  <!-- Le reste du contenu -->
  ...
</body>
</html>

Le doctype

La première ligne d'en-tête a été considérablement simplifiée. On peut maintenant retenir un doctype par coeur, sans avoir à le copier-coller.

<!doctype html>

Ce doctype allégé a été mûrement testé et réfléchi : il permet toujours - pour les anciens navigateurs - de rester dans le mode d'interprétation conforme aux standards et d'éviter le mode quirks. On peut remarquer qu'il n'y a pas d'allusion à un quelconque numéro de version. Son rôle est toujours de préciser quel est le type de document qui va suivre, afin de permettre au navigateur de savoir quel langage de la vaste famille SGML il devra interpréter.

L'élément racine <html>

C'est lui qui va recueillir les deux principaux éléments de la hiérarchie : <head> et <body>.

L'attribut lang (sur <html>)

On a tendance à l'oublier : l'attribut lang précise la langue utilisée pour le contenu de la page, lorsqu'il est placé sur la racine <html>.

<html lang="fr">

Une langue bien indiquée sera utile ainsi aux synthèses vocales (pour adopter le bon accent).

Les fameux <head> et <body>

À ce niveau, le code HTML peut être divisé en deux parties : l'en-tête située entre les balises <head> et </head>, qui regroupe toutes les méta-informations, c'est-à-dire les données qui ne sont pas représentées directement à l'écran dans le rendu du document, mais qui lui sont tout de même liées : le titre dans <title> (extrêmement recommandé), les autres méta-informations variées (facultatives : mots-clés, description générale de la page) dans zéro ou plusieurs <meta>, et éventuellement <link>, <script> ou <style>.

La deuxième partie comprend le corps à proprement parler, c'est-à-dire <body>. On y retrouvera tout le reste du contenu HTML, structuré par des balises variées - selon ce que l'on aura à y placer - et dont l'apparence sera affectée par les styles CSS chargés dans <link> et/ou <style>.

L'attribut charset (sur <meta>)

Préciser l'encodage des caractères est primordial pour exploiter la bonne page de code et ne pas se retrouver avec les caractères spéciaux ou accentués. Le choix de l'UTF-8 est désormais préconisé par le W3C pour tous les protocoles échangeant du texte sur internet (dont HTML).

<meta charset="utf-8">

On retrouvera donc très souvent ce codage de caractères, par contre il faut toujours veiller à ce que l'éditeur permettant de coder en HTML (que ce soit un IDE tout-en-un ou un simple éditeur de texte) enregistre le fichier avec le bon encodage, et non en Latin-1 (alias ISO-5589-1) ou ANSI si la balise <meta> indique UTF-8.

Veillez à toujours placer cette déclaration d'encodage avant toutes les autres balises contenues dans la section <head>. En effet, celles-ci sont immédiatement concernées, par exemple <title> qui peut déjà faire appel à des caractères en UTF-8 ; ceci également dans un but de sécuriser l'interprétation des caractères spéciaux et prévenir les injections de contenu indésirables.

L'élément <link>

Dans la majorité des cas, une balise <link> placée dans l'en-tête permet de mettre en relation la page avec d'autres documents externes. La plupart du temps cela concerne les feuilles de style CSS externes avec une relation du type stylesheet, mais il est aussi possible de définir d'autres types de relations (par exemple avec author, icon, prefetch, next, prev, etc).

<link rel="stylesheet" href="style.css">

En HTML5, il n'est plus strictement obligatoire de spécifier l'attribut type.

Pour inclure directement des instructions CSS dans le document HTML sans passer par un fichier externe, <style> est à votre service. Cependant, il vaut mieux faire confiance à un fichier indépendant : il n'y aura qu'un seul code à maintenir pour de multiples pages (voire pour tout le site), et la mise en cache par le navigateur n'en sera que plus efficace.

L'élément <script>

Cet élément permet d'ajouter des scripts (JavaScript) qui vont s'éxécuter côté client dans le navigateur dès leur chargement.

<script src="script.js"></script>  

En HTML5, il n'est plus obligatoire de spécifier l'attribut type. Celui-ci est de toute manière interprété par défaut en text/javascript par tous les navigateurs.

Les autres éléments HTML5

Une fois la structure de base préparée, il est temps de commencer à y placer d'autres éléments HTML pour le contenu à proprement parler : paragraphes, listes, liens, images, vidéos, tableaux de données, formulaires, etc. La majorité des éléments HTML sont toujours au rendez-vous dans HTML5, qui se voit complété par quelques nouveautés pour le balisage. Par exemple :

  • Éléments de section <section>, <article>, <header>, <footer>, <nav> et <aside>
  • Élément <datalist>
  • Éléments <details> & <summary>
  • Éléments <figure> & <figcaption>
  • Éléments média <audio> et <video> complétés par <source>
  • Élément <canvas>
  • Éléments <meter>, <output> et <progress>
  • Élément <time> et <mark>
  • Et tous les autres, que l'on peut retrouver dans une liste complète maintenue par le W3C : HTML : The Markup Language

Pour rappel, tous les nouveaux éléments HTML5 ne sont pas nécessairement reconnus de façon native et cohérente par tous les navigateurs (même les plus récents). Pour certains, il sera possible de trouver des alternatives avec des compléments en JavaScript. Pour d'autres, il faudra patienter jusqu'à une implémentation totale, et évaluer le risque selon le besoin : un nouvel élément sera-t-il tout de même consultable, masqué, ou géré de façon erronée ?

Pour juger de l'état de la prise en charge par les navigateurs, fiez-vous à Caniuse.com qui dresse des tableaux de support complets, ou bien encore à HTML5Please, qui indique de façon rationnelle par rapport aux parts de marché ce qu'il est possible d'utiliser en production pour un maximum de visiteurs.

Templates et boilerplates

Des modèles réfléchis et structurés existent pour faciliter le démarrage d'un nouveau projet web autour de HTML5, et de ses futures évolutions. Ils reprennent la structure globale d'un document, en y ajoutant quelques bonnes pratiques, avec parfois des fichiers de configuration pour le serveur et des feuilles de styles de base, voire même des librairies JavaScript.

HTML5 Boilerplate

HTML5 Boilerplate

Initializr

Initializr 2 par Jonathan Verrecchia

HTML KickStart

HTML KickStart par 99lime

Jetez-vous à l'eau !

Comme on peut le constater, démarrer un document HTML5 est facilement abordable, et reste rétro-compatible, pour peu que les nouveaux éléments soient intégrés de façon intelligente. Étant donné que cette nouvelle version du langage embarque la grande majorité des éléments déjà connus par les précédentes moutures, il n'y aura pas de risque de s'y aventurer progressivement.

HTML5 propose de nouveaux éléments qui ont pour objectif de faciliter l'intégration de médias, d'utiliser des composants plus dynamiques sans avoir besoin de faire appel - à plus long terme - à des extensions propriétaires (Flash, Java, Silverlight). Le balisage propose également d'obtenir une meilleur sémantique, avec tous les aspects bénéfiques qui en découlent (accessibilité, référencement, syndication, interprétation par les moteurs de rendu, etc.)

HTML5 siginifie-t-il obligatoirement l'utilisation de CSS 3 ? Dois-je tout réapprendre ? Pour répondre à ces questions, un article est prévu à cet effet : Les 5 mythes et vérités de HTML5

]]>
XHTML et HTML http://www.alsacreations.com/article/lire/1374-html5-structure-globale-document.html#commentaires 2012-01-30T10:30:00+00:00 Simon-K
HTML5Please http://www.alsacreations.com/web/lire/1377-html5please.html http://www.alsacreations.com/web/lire/1377-html5please.html Cette page claire et bien organisée liste les différentes fonctionnalités tournant autour de HTML5 et leur niveau de support dans les navigateurs : peut-on les utiliser dès à présent, faut-il penser à utiliser une alternative, faut-il les éviter ? Tout ceci en fonction des parts de marché actuelles des navigateurs et de leurs capacités.

]]>
XHTML et HTML http://www.alsacreations.com/web/lire/1377-html5please.html#commentaires 2012-01-26T17:30:11+00:00 dew
Appel à orateurs pour la Kiwi Party 2012 http://www.alsacreations.com/actu/lire/1375-appel-orateurs-pour-la-kiwi-party-2012.html http://www.alsacreations.com/actu/lire/1375-appel-orateurs-pour-la-kiwi-party-2012.html Kiwi Party

La Kiwi Party est un événement réunissant conférences et ateliers, autour des thèmes de la conception web et de ses bonnes pratiques : accessibilité, ergonomie, nouveautés technologiques, conformité aux standards. Pour sa 3è édition, la Kiwi Party aura lieu le vendredi 4 mai 2012 durant toute la journée, à l'Epitech de Strasbourg.

Appel à orateurs...

Microphone

Si vous désirez participer à cet événement en tant qu'orateur, faites-nous part de votre candidature et de vos idées en remplissant le formulaire d'Appel à Orateurs.

Nous organiserons a priori deux sessions de conférences en parallèle : une présentation de 45min en grande salle ainsi que des mini-conf / ateliers de 20 minutes.

Le choix sur le contenu se fera durant le mois de mars et sera détaillé sur le site de la Kiwi Party, nous vous tiendrons bien évidemment informés dès que possible.

Information importante : il s'agit d'un événement dont tous les frais sont intégralement couverts par des sponsors et par Alsacréations. Nous tenons à dédommager autant que faire se peut les orateurs pour leurs déplacements ou hébergements, mais nous ne pourrons certainement pas couvrir tous les frais engagés. À titre d'exemple, la moyenne des défraiements s'élevait autour de 100 euros par orateur l'an passé.

... et aux sponsors

Les sponsors ont un rôle prépondérant pour cet événement puisque c'est grâce à eux qu'il peut avoir lieu et accueillir autant de participants. L'an passé, grâce à Epitech, Kiubi, Eyrolles, Dunod et Devclic, nous avons pu être accueillis dans de magnifiques locaux au centre de Strasbourg, pu rembourser une partie des frais des orateurs, et disposer de lots pour les gagnants du Quiz.

Nous souhaiterions bien évidemment réitérer ces petites attentions cette année et accueillerons avec plaisir tout partenaire qui nous permettrait d'offrir des lots lors des jeux organisés durant la journée ou de participer aux frais.

Sponsors, contactez-nous !

]]>
Alsacréations http://www.alsacreations.com/actu/lire/1375-appel-orateurs-pour-la-kiwi-party-2012.html#commentaires 2012-01-24T21:20:15+00:00 Raphael
HTML5 : Les éléments <details> et <summary> http://www.alsacreations.com/article/lire/1335-html5-details-summary.html http://www.alsacreations.com/article/lire/1335-html5-details-summary.html Un résumé et des détails

Élément <details>

Cet élément permet de baliser un contenu quelconque (texte, image, listes, tableaux, formulaires, etc) ayant pour rôle d'apporter une information ou des détails supplémentaires. Ceux-ci ne doivent cependant pas être obligatoires pour poursuivre la bonne marche de l'application web ou la compréhension du document HTML.

Le navigateur pourra masquer ces informations par défaut, et les déployer à la demande de l'utilisateur (voir exemples visuels ci-après). Une icône pourra indiquer l'état de l'élément : déployé (visible) ou compacté : seul le résumé reste visible. Ce résumé, assimilable à un titre ou une légende, est apporté par <summary>.

Attribut open de l'élément <details>

Si cet attribut est présent, les détails sont exposés à l'utilisateur dès le chargement.

Attribut Valeurs Rôle
open open ou "" ou (vide) Spécifie la visibilité initiale de l'élément (visible ou non à l'utilisateur)

Élément <summary>

Cet élément sert d'intitulé à <details>, en cela il doit être pertinent. Sa fonction s'apparente à une légende ou un résumé donnant du sens au contenu de son parent. Seul <details> peut-être le parent de <summary>. Si <summary>n'est pas présent, il incombe au navigateur de déterminer le libellé de <details>.

Exemples pratiques retrouvés sur systèmes d'exploitation

L'intérêt de ces deux éléments fonctionnant de concert est de mimer ce que l'on retrouve déjà couramment avec les interfaces graphiques des systèmes d'exploitation. Un intitulé est présenté à l'utilisateur, résumant parfois un état, et permettant d'accéder - généralement après un clic - à d'autres informations détaillées.



Compatibilté navigateur des éléments <details> et <summary>

Navigateurs Versions
Chrome Chrome 12.0+
Android Android Browser 4.0+

Un navigateur ne supportant pas ces éléments affichera leur contenu sans comportement particulier.

Utilisation classique

L'élément <details> contient l'élément <summary> lui servant d'intutilé ou de légende, à la suite de celui-ci nous retrouvons le contenu à afficher ou masquer. L'attribut open affichant par défaut le contenu. Pour une utilisation classique l'icône par défaut est une flèche : 

<details open>
   <summary>Caractéristiques techniques</summary>
   <table>
      <tr>
         <th>Nom</th>
         <th>Détails</th>
      </tr>
      <tr>
         <td>Matière</td>
         <td>Inox alimentaire</td>
      </tr>
      <tr>
         <td>Dimensions</td>
         <td>140x120 mm, hauteur 30 mm</td>
      </tr>
   </table>
</details>

L'élément <details> peut aussi contenir des éléments de formulaire.

<form>
   <label for="quantite">Quantité : </label>
   <input type="number" name="nombre" id="quantite">

   <details>
      <summary>Options possibles</summary>
      <fieldset>
      <legend>Choix de la couleur :</legend>
         <p>
         <input type="radio" id="d1" name="couleurs"><label for="d1">Gris</label>
         <input type="radio" id="d2" name="couleurs"><label for="d2">Rouge</label>
         <input type="radio" id="d3" name="couleurs"><label for="d3">Vert</label>
         <input type="radio" id="d4" name="couleurs"><label for="d4">Bleu</label>
         </p>
      <fieldset>
   </details>
   <input type="submit" value="Ajouter au panier">
</form>

Démonstration

Aperçu sous Chrome 16.0

Accessibilité

Dans cet exemple, le groupe de boutons radio est entouré d'un élément <fieldset> (et donc précédé d'un élément <legend> pertinent), comme le demande la Technique WCAG 2.0 H71: Providing a description for groups of form controls using fieldset and legend elements (voir les critères 11.5 à 11.7 du référentiel Accessiweb 2.1 pour les critères de succès WCAG 2.0 et tests RGAA correspondants).

C'est cet élément fieldset qui est entouré d'un élément <details> (et précédé d'un élément <summary>). Une variante de l'exemple où figurerait seulement les 5 boutons radio et leurs étiquettes ainsi que les éléments summary et details aurait été plus courte mais sans fieldset ni legend, la fonction des boutons radio n'est plus explicitée, en particulier dans les lecteurs d'écran actuels.

Concernant l'accessibilité générale des éléments <details> et <summary> ceux-ci ne sont pas accessibles au clavier car il n'est pas possible d'atteindre le marqueur (icône) via la tabulation dans le navigateur l'implémentant début 2012. HTML5 Doctor aborde le sujet, se référer à son article sur ces éléments.

Aller plus loin

Combinaison multiple

Plusieurs blocs <details> peuvent être imbriqués les uns dans les autres, cette pratique reste tout à fait valide.

Modifier le style de l'icône

Il n'y a pas de convention actuellement définie et reconnue par tous les navigateurs pour accéder aux propriétés CSS. Néanmoins avec le moteur WebKit et la pseudo-classe ::-webkit-details-marker vous pouvez modifier l'icône (en forme de flèche par défaut). Le sélecteur details[open], permet de styler l'icône lorsque <details> est déployé.

summary::-webkit-details-marker {
   color:#ADCA48;
   background:#ADCA48;
}

details[open] summary::-webkit-details-marker {
   color:#eaeaea;
   background:#eaeaea;
   outline: 2px solid #ADCA48;
}

Démonstration

Aperçu sous Chrome 16.0

Il est également possible de changer l'icône par défaut à l'aide de la  pseudo-classe :after

summary::-webkit-details-marker {
   display: none
}

summary:after {
   content: "+";
   color: #ADCA48;
   float: left;
   font-size: 1.5em;
   font-weight: bold;
   margin: -5px 5px 0 0;
   padding: 0;
   text-align: center;
   width: 20px;
}

details[open] summary:after {
   content: "-";
}

Démonstration

Aperçu sous Chrome 16.0

Alternative en JavaScript

Voici une alternative basée sur jQuery pour les navigateurs n'implémentant pas encore les éléments <details> et <summary>. Il est important de savoir que ces éléments peuvent être utilisés quelle que soit la prise en charge. Si l'effet est déjà fonctionnel avec des éléments neutres <div> et un complément en JavaScript, il sera profitable de s'orienter vers <details> et <summary> pour les navigateurs qui les supportent nativement, et de continuer à exploiter la version en JavaScript pour les autres.

Tout d'abord faites appel à votre script dans lequel vous intégrerez la fonction permettant d'afficher/masquer les éléments et la dernière version de jQuery en les insérant juste avant la balise de fermeture </body>

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
  <script src="details-summary.js"></script>
</body>

Dans votre fichier details-summary.js, il vous faudra vous assurer que la page est chargée, une fois celle-ci prête il est important de vérifier que le navigateur n'implémente pas les éléments <details> ou <summary> afin de ne pas lancer le script si tel est le cas :

$(document).ready(function() {
 if (!('open' in document.createElement('details'))) {

Une fois la condition validée, pour chaque élément <details> on affiche "son" <summary> à l'aide de la méthode show(). Pour procéder à la détection, l'utilisation de Modernizr peut être plus avantageuse.

Et lorsque l'on clique sur l'élément <summary> une fonction permet d'afficher ou masquer les frères de celui-ci, c'est-à-dire le contenu. Puis on ajoute ou enlève la classe open à l'élément <details> ainsi que la classe html5_details.

    $("details").each(function() {
      $(this).find("summary").show().click(function() {
        $(this).siblings().toggle();
        $(this).parent('details').toggleClass('open');
      });

Avant de fermer la fonction, il reste encore à masquer le contenu si l'attribut open n'est pas présent au sein de la balise <details>. On stocke dans une variable l'attribut open. On vérifie s'il est absent, si tel est le cas, on masque les enfants de <details> excepté <summary> que l'on affiche. 

      var opened = $(this).attr("open");
      if(opened==undefined) {
        $(this).children().hide();
        $(this).children("summary").show();
      }
    });

  // Fermeture de la condition et de $(document).ready
  }
});

Le script établit le comportement dynamique, mais cela n'est pas suffisant pour la présentation : il faut encore ajouter l'icône et cela se passe du côté de la feuille de styles CSS. Rien de plus simple, grâçe à la pseudo-classe ::before et à la classe .open :

.html5_details > summary::before {
  content:"►"; margin-right:"5px";
}
.html5_details.open > summary::before {
  content:"▼"
}

Démonstration

Vous obtenez ainsi le même affichage que par défaut.

Il existe d'autres alternatives :

Propriétés des éléments

<details>

Propriété Détails
Modèles de contenu autorisés Un élément <summary> optionnel, suivi par du contenu de flux
Parents autorisés Tout élément pouvant contenir des éléments de flux, à l'exception de <a> et <button>
Omission de balise Les balises ouvrantes et fermantes sont obligatoires
Style par défaut details { display:block; }

<summary>

Propriété Détails
Modèles de contenu autorisés Contenu de phrasé.
Parents autorisés <details>
Omission de balise Les balises ouvrantes et fermantes sont obligatoires
Style par défaut summary { display:block; }

Ressources en ligne

]]>
XHTML et HTML http://www.alsacreations.com/article/lire/1335-html5-details-summary.html#commentaires 2012-01-19T11:00:00+00:00 Okko
HTML5 : L'élément <datalist> http://www.alsacreations.com/article/lire/1334-html5-element-datalist.html http://www.alsacreations.com/article/lire/1334-html5-element-datalist.html Des suggestions de choix

Inauguré avec la vague HTML5, <datalist> est un élément de formulaire permettant de lier une liste de choix à un élément input. Il est voué à fournir des fonctionnalités d'auto-complétion ou d'auto-suggestion, dans un formulaire classique ou un champ de recherche, voire à d'autres éléments d'entrée, tels que les nouveaux types <input type="range">.

Par défaut, <datalist> demeure invisible. Lors de la frappe, ou en appuyant sur la touche  (flèche bas) , la liste de choix apparaît et autocompléte le champ de formulaire rattaché.

Compatibilté navigateur de l'élément <datalist>

Navigateurs Versions
Firefox Firefox 4.0+
Opera Opera 9.0+
Opera Mobile 10.0+
Internet Exlorer Internet Explorer 10+

Un navigateur ne supportant pas l'élément n'affichera aucune suggestion. Le champ <input> lié restera cependant totalement fonctionnel, l'entrée sera libre. L'exemple présenté dans cet article ne fonctionne que sur les navigateurs compatibles. Pour les alternatives, se rapporter au dernier point.

Utilisation classique

Dans la majorité des situations, il sera utile d'associer un champ d'entrée texte <input type="text"> à une liste de suggestions.

<label for="choix_bieres">Indiquez votre bière préférée :</label>
<input list="bieres" type="text" id="choix_bieres">
<datalist id="bieres">
  <option value="Meteor">
  <option value="Pils">
  <option value="Kronenbourg">
  <option value="Grimbergen">
</datalist>

Démonstration

Datalist IE10

Aperçu sous Internet Explorer 10

Le champ de formulaire (input) et la liste de suggestions (datalist + option) sont reliés grace à la valeur commune des attributs list rattaché à l'input, et id de la datalist.

Utilisation multiple

Il est possible d'utiliser la même liste de suggestions pour plusieurs champs de formulaire. Cela peut être pratique pour les champs dupliqués, il n'y a ainsi qu'une seule liste à maintenir.

<p>
  <label for="choix_bieres">Indiquez votre bière préférée :</label>
  <input list="bieres" type="text" id="choix_bieres">
</p>

<p>
  <label for="choix_bieres_ami">Indiquez le choix de votre ami :</label>
  <input list="bieres" type="text" id="choix_bieres_ami">
  <datalist id="bieres">
    <option value="Meteor">
    <option value="Pils">
    <option value="Kronenbourg">
    <option value="Grimbergen">
  </datalist>
</p>

Démonstration

Alternative vers <select>

Pour les navigateurs ne supportant pas <datalist>, une alternative simple peut être trouvée en complétant le formulaire par un <select>. Le champ primaire reste libre, tandis que la liste de choix est présentée pour ces navigateurs.

<label for="www">Adresse web</label>
<input id="www" type="url" list="urldata" name="adresseweb">
<datalist id="urldata">
  <label for="adresse">ou sélectionner dans la liste</label>
  <select name="adresse" id="adresse">
    <option value="http://www.alsacreations.com/">http://www.alsacreations.com/</option>
    <option value="http://www.bing.com/">http://www.bing.com/</option>
    <option value="http://www.google.fr/">http://www.google.fr/</option>
    <option value="http://www.yahoo.fr/">http://www.yahoo.fr/</option>
  </select>
</datalist>

Démonstration

Datalist avec select

Il appartient ensuite au script traitant les données côté client (navigateur) ou côté serveur de déterminer de quel champ proviennent les données : a priori il faudra prendre en compte la liste de choix uniquement si le champ est laissé libre.

Dans le même ordre d'esprit, un contenu texte stocké dans <datalist>, en-dehors des options, sera affiché par les navigateurs qui ne reconnaissent pas cet élément.

<datalist>
  Votre navigateur ne supporte pas datalist en HTML5
  <option value="option1">Choix1</option>
  <option value="option2">Choix2</option>
  <option value="option3">Choix3</option>
</datali>

Valeurs possibles pour les options

L'étiquette affichée est définie par l'attribut label. Cependant, il est important de garder à l'esprit que la valeur utilisée au final est celle donnée aux attributs value des éléments <option> et non à leur contenu (situé entre la balise ouvrante et la balise fermante) ou à la présence de l'attribut label.

<datalist id="elements">
  <select>
    <option value="sans label ni contenu"></option>
    <option value="sans label avec contenu texte">le texte</option>
    <option value="avec label" label="le label"></option>
    <option value="avec label et texte" label="le label">le texte</option>
  </select>
</datalist>

Si des valeurs différentes sont spécifiées pour deux ou trois de ces possibilités (value, label ou contenu texte), par exemple <option value="kro" label="Kronenbourg, la bière">Kronenbourg</option> le comportement des navigateurs sera disparate :

  • Internet Explorer 10+ se comportera de façon correcte,
  • Opera 9+ affichera un maximum d'informations en combinant value et label mais pas le texte contenu,
  • Mozilla Firefox 9+ affichera de préférence le label, puis le contenu texte, puis la valeur figurant dans l'attribut value

Datalist rendu

Démonstration

Pour les navigateurs ne supportant pas <datalist>, l'élément <select> est toujours affiché en dernier recours, mais ses options sont aussi affectées par les précédentes informations, mais avec une meilleure cohérence dans l'interprétation : toutes les options sont affichées de la même façon. Notons aussi que les options ne peuvent être groupées avec <optgroup> comme dans une liste de choix <select>.

Autres éléments concernés

La liste de données peut être potentiellement appliquée à d'autres éléments d'entrée, et n'est pas limitée à un <input type="text">. Si le navigateur le supporte, elle a pour vocation d'épauler d'autres types, par exemple <input type="range"><input type="email" multiple> ou <input type="url">.

<label for="lumi">Luminosité</label>
<input id="lumi" type="range" list="lumidata" min="0" max="100" value="50" step="1">
<datalist id="lumidata">
  <option label="Minimum" value="0">
  <option label="Maximum" value="100">
</datalist>
<label for="www">Adresse web</label>
<input id="www" type="url" list="urldata">
<datalist id="urldata">
	<option value="http://www.alsacreations.com/">
	<option value="http://www.bing.com/">
	<option value="http://www.google.fr/">
	<option value="http://www.yahoo.fr/">
</datalist>

Datalist Opera

Aperçu sous Opera 11.6

Caractère dynamique

Le contenu de l'élément <datalist> peut être manipulé dynamiquement dans le document, par JavaScript et l'API DOM notamment. Ceci permet d'ajouter ou de supprimer des options à la demande, par exemple en fonction d'un critère local (une case à cocher, une autre condition) ou en fonction du retour d'un appel AJAX avec XMLHttpRequest, voire avec un framework JavaScript tel que jQuery.

Propriétés de l'élément <datalist>

Propriété Détails
Modèles de contenu autorisés Zéro ou plusieurs <option>
Parents autorisés Tout élément pouvant contenir des éléments de phrasé, à l'exception de <a> et <button>
Omission de balise Les balises ouvrantes et fermantes sont obligatoires

Alternatives pour les anciens navigateurs

Cet élément étant présent en dur dans le document HTML, des frameworks JavaScript appropriés (jQuery, Dojo...) ou des scripts spécifiques peuvent aller y piocher les informations pour construire une auto-complétion dynamique.

]]>
XHTML et HTML http://www.alsacreations.com/article/lire/1334-html5-element-datalist.html#commentaires 2012-01-17T12:40:30+00:00 Okko