<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="/feed.xsl" type="text/xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:base="https://www.ffoodd.fr" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>La vie en #ffoodd</title>
		<link>https://www.ffoodd.fr/feed/</link>
		<atom:link href="https://www.ffoodd.fr/feed/index.xml" rel="self" type="application/rss+xml" />
		<description>Intégrateur web à Nantes.</description>
		<language>fr-FR</language>
				<item>
					<title>Masquage accessible de pointe</title>
					<link>https://www.ffoodd.fr/masquage-accessible-de-pointe/</link>
					<description>&lt;p&gt;La classe de masquage accessible &lt;code&gt;.visually-hidden&lt;/code&gt; — anciennement &lt;code&gt;.sr-only&lt;/code&gt; dans Bootstrap — a beaucoup évolué au fil du temps. C’est pour ça que j’ai publié &lt;a href=&quot;https://www.ffoodd.fr/cache-cache-css/&quot;&gt;&lt;cite&gt;cache-cache CSS&lt;/cite&gt;&lt;/a&gt; il y a quelques années, qui récapitulait l’état de l’art à ce moment.&lt;/p&gt;
&lt;p&gt;Mais il n’y a pas que les techniques CSS qui évoluent… Les navigateurs, aussi. Et parfois, ça requièrs de l’adaptation !&lt;/p&gt;
&lt;h2 id=&quot;un-cas-legendaire&quot; tabindex=&quot;-1&quot;&gt;Un cas légendaire&lt;/h2&gt;
&lt;p&gt;Louis-Maxime Piton — un des mainteneurs de &lt;a href=&quot;https://boosted.orange.com/&quot;&gt;Boosted (en anglais)&lt;/a&gt; et inévitablement contributeur à &lt;a href=&quot;https://getbootstrap.com/&quot;&gt;Bootstrap (en anglais)&lt;/a&gt; — a &lt;a href=&quot;https://github.com/twbs/bootstrap/pull/37533&quot;&gt;proposé un correctif (sur GitHub, en anglais)&lt;/a&gt; il y a plus de deux ans pour contourner &lt;a href=&quot;https://stackoverflow.com/questions/31057955/why-are-table-borders-not-collapsing-when-caption-is-positioned/32063028#32063028&quot;&gt;un problème provoqué par le masquage accessible appliqué à une légende de tableau (sur StackOverflow, en anglais)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Les &lt;code&gt;caption&lt;/code&gt;, lorsqu’ils sont en position absolue, sont considérés comme des cellules de tableaux anonymes — et ça met la grouille dans la fusion des bordures, l’indispensable &lt;code&gt;border-collapse: collapse&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Le correctif proposé est simplissime, bien qu’il puisse théoriquement poser des problèmes : n’appliquer la position absolue que si l’élément n’est pas un &lt;code&gt;caption&lt;/code&gt;. C’est l’état actuel &lt;a href=&quot;https://github.com/twbs/bootstrap/blob/53171ad564b2d01bff7613d7210e93a5197a367b/scss/mixins/_visually-hidden.scss&quot;&gt;du &lt;em lang=&quot;en&quot;&gt;mixin&lt;/em&gt; dans Bootstrap (sur GitHub, en anglais)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;En résumé, voici la modification :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.visually-hidden:not(caption)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; absolute &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;en-cas-de-debordement&quot; tabindex=&quot;-1&quot;&gt;En cas de débordement&lt;/h2&gt;
&lt;p&gt;La semaine dernière, l’ami &lt;a href=&quot;https://www.djangojanny.net/&quot;&gt;Django Janny&lt;/a&gt; a relancé &lt;a href=&quot;https://gist.github.com/ffoodd/000b59f431e3e64e4ce1a24d5bb36034?permalink_comment_id=5468620#gistcomment-5468620&quot;&gt;le sujet sur Gist (en anglais) avec un cas marginal&lt;/a&gt; : un élément qui déborde, à l’intérieur d’un élément masqué visuellement.&lt;/p&gt;
&lt;p&gt;En général, on ne masque qu’une portion de texte de cette façon : aucun élément bloc ne devrait s’y trouver — ni, en réalité, aucun enfant. La majorité du temps, le masquage accessible respecte implicitement les mêmes règles qu’un attribut &lt;code&gt;aria-label&lt;/code&gt; par exemple : un texte simple et concis.&lt;/p&gt;
&lt;p&gt;Mais c’est une règle implicite, et à ma connaissance aucune contre-indication n’a jamais été mentionnée quant à l’utilisation du masquage accessible sur une portion de DOM plus riche. Je l’ai par exemple fait lorsque j’ai amélioré les liens d’évitements sur &lt;a href=&quot;https://getbootstrap.com/docs/5.3/getting-started/introduction/&quot;&gt;la documentation de Bootstrap (en anglais)&lt;/a&gt;, dont le conteneur est masqué visuellement — mais il apparaît à la prise de focus, nous faisant passer à côté du problème…&lt;/p&gt;
&lt;p&gt;Depuis (au moins) 2019, les éléments en débordement deviennent focusables dans la plupart des navigateurs, pour palier un défaut d’accessibilité : ne pas pouvoir interagir avec un élément masqué par un débordement. &lt;a href=&quot;https://cassey.dev/til/2019-11-19-overflow-scroll-gets-focus/&quot;&gt;Cassey Lottman a retracé ce changement dans son article &lt;cite lang=&quot;en&quot;&gt;Elements with overflow: scroll become focusable&lt;/cite&gt; (en anglais)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ce qui, dans un élément masqué visuellement, devient un piège : on ne voit (évidemment) pas le focus.&lt;/p&gt;
&lt;p&gt;La solution proposée par Django — et après quelques tests, la seule qui paraisse fonctionner — est d’&lt;a href=&quot;https://codepen.io/djangounet/pen/WbNpmMP?editors=1111&quot;&gt;empêcher le débordement sur les enfants d’un élément masqué visuellement (sur CodePen, en anglais)&lt;/a&gt; :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.visually-hidden *&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;overflow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; hidden &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;la-totale&quot; tabindex=&quot;-1&quot;&gt;La totale&lt;/h2&gt;
&lt;p&gt;Voici donc la version mise à jour de la technique de masquage accessible :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.visually-hidden,
.visually-hidden-focusable:not(:focus, :focus-within)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;border&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0 &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;clip-path&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;inset&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;50%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1px &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;margin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; -1px &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;overflow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; hidden &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;padding&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0 &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1px &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;white-space&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; nowrap &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;.visually-hidden:not(caption),
.visually-hidden-focusable:not(caption):not(:focus, :focus-within)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; absolute &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;.visually-hidden *,
.visually-hidden-focusable:not(:focus, :focus-within) *&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;overflow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; hidden &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;J’en ai profité pour &lt;a href=&quot;https://github.com/twbs/bootstrap/pull/41286&quot;&gt;proposer ce changement dans Bootstrap (sur GitHub, en anglais)&lt;/a&gt; — en citant Django bien entendu — et pour mettre à jour &lt;a href=&quot;https://gist.github.com/ffoodd/000b59f431e3e64e4ce1a24d5bb36034&quot;&gt;le Gist servant souvent de référence (en anglais)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Notez par ailleurs quelques autres changements succincts :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;J’ai renommé &lt;code&gt;.sr-only&lt;/code&gt; en &lt;code&gt;.visually-hidden&lt;/code&gt; pour me conformer aux usages des &lt;em lang=&quot;en&quot;&gt;frameworks&lt;/em&gt; populaires,&lt;/li&gt;
&lt;li&gt;Et nettoyé un peu le support de navigateurs anciens : plus de &lt;code&gt;clip&lt;/code&gt; désormais, car &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/CSS/clip-path&quot;&gt;&lt;code&gt;clip-path&lt;/code&gt; est très largement supporté&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;La variante pour démasquer le contenu lors de la prise de focus n’est plus une remise à zéro, mais une autre classe conditionnée à l’état : &lt;code&gt;.visually-hidden-focusable:not(:focus, :focus-within)&lt;/code&gt;, à l’instar de ce qui est fait &lt;a href=&quot;https://github.com/twbs/bootstrap/pull/32440&quot;&gt;dans Bootstrap depuis cinq ans déjà (sur GitHub, en anglais)&lt;/a&gt; mais avec &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/CSS/:not&quot;&gt;la syntaxe moderne de &lt;code&gt;:not()&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
</description>
					<pubDate>Tue, 11 Mar 2025 01:00:00 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/masquage-accessible-de-pointe/</guid>
					<frDate>11 mars 2025</frDate>
				</item>
				<item>
					<title>25&lt;sup&gt;e&lt;/sup&gt; jour de web</title>
					<link>https://www.ffoodd.fr/25e-jour-de-web/</link>
					<description>&lt;p&gt;C’est un exercice très intéressant, car nous avons deux contraintes très spécifiques pour le thème visuel annuel :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;le format calendrier&lt;/strong&gt; : 24 cases à ouvrir, une par jour…&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;l’illustration&lt;/strong&gt;, réalisée bénévolement après un appel sur nos différents réseaux sociaux — et généralement reçue moins de quinze jours avant l’ouverture du calendrier !&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Et plus les contraintes sont exotiques, plus les solutions sont astucieuses !&lt;/p&gt;
&lt;p&gt;C’était une très chouette expérience &lt;a href=&quot;https://www.24joursdeweb.fr/2023&quot;&gt;en 2023&lt;/a&gt;, avec l’illustration de &lt;a href=&quot;https://sophie-rocher.com/&quot;&gt;Sophie Rocher&lt;/a&gt; qui m’a inspiré un calendrier tout en fenêtres et en lumières. Je me suis beaucoup amusé et vous invite à jeter un œil aux CSS.&lt;/p&gt;
&lt;p&gt;Pour 2024, &lt;a href=&quot;https://laurefevrier.myportfolio.com/&quot;&gt;Laure Février&lt;/a&gt; nous a gratifiés d’une illustration riche en décorations : boules de Noël, couleurs, chats et lutins ! Maintenant, à moi de jouer pour en extraire la substantifique moelle et réaliser une intégration cohérente qui tire parti et mette en valeur l’illustration de Laure.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt; : certains exemples de code ne sont pas présents dans l’article, je vous encourage à inspecter le code directement &lt;a href=&quot;https://www.24joursdeweb.fr/&quot;&gt;sur site&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;le-calendrier&quot; tabindex=&quot;-1&quot;&gt;Le calendrier&lt;/h2&gt;
&lt;h3 id=&quot;les-blobs&quot; tabindex=&quot;-1&quot;&gt;Les Blobs&lt;/h3&gt;
&lt;p&gt;Le premier élément qui nous a plu dans cette nouvelle illustration, c’est le « cadre » offert par la forme en arrière-plan. Appelons-le Blob.&lt;/p&gt;
&lt;p&gt;Je savais en voyant cette forme que je pourrais mobiliser une astuce CSS rarement utile : le fait que &lt;code&gt;border-radius&lt;/code&gt; est en réalité une propriété raccourcie. On trouve parfois une utilisation avec quatre valeurs, une pour chaque angle — par exemple &lt;code&gt;border-top-left-radius&lt;/code&gt;… Mais saviez-vous que chacune de ces valeurs est également une propriété raccourcie, qui peut prendre deux valeurs ?&lt;/p&gt;
&lt;p&gt;La logique est simple : avec une seule valeur, vous définissez le rayon du cercle ; avec deux valeurs, vous définissez les axes horizontaux et verticaux d’une ellipse.&lt;/p&gt;
&lt;p&gt;Et si vous comptez bien, ça signifie que vous pouvez utiliser huit valeurs distinctes dans la propriété &lt;code&gt;border-radius&lt;/code&gt;, et c’est drôlement pratique pour dessiner des formes irrégulières sans passer par un &lt;code&gt;path&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Et puisque je suis un flemmard notoire, j’ai farfouillé les internets pour trouver un générateur de formes irrégulières basées sur &lt;code&gt;border-radius&lt;/code&gt;. Évidemment, j’en ai trouvé plusieurs, et j’ai utilisé &lt;a href=&quot;https://codepen.io/LekovicMilos/pen/omVzYv&quot;&gt;celui de Milos Lekovic&lt;/a&gt; que &lt;a href=&quot;https://codepen.io/ffoodd/pen/RNbVRmR&quot;&gt;j’ai fourché pour définir une couleur d’arrière-plan&lt;/a&gt; au lieu d’appeler une image qui retourne une 404.&lt;/p&gt;
&lt;p&gt;Ça donne quelque chose comme ça, répété pour chacune des 24 cases du calendrier :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.calendar &gt; :first-child&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;border-radius&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 65% 35% 34% 66% / 58% 30% 70% 42%&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;les-boules-de-noel&quot; tabindex=&quot;-1&quot;&gt;Les boules de Noël&lt;/h3&gt;
&lt;p&gt;C’est le second élément le plus marquant dans l’illustration. Leur forme circulaire et leurs couleurs sont très présentes, et clairement un élément visuel sur lequel capitaliser. Il y en a quatre, et cette fréquence m’a immédiatement fait comprendre comment réutiliser cet élément visuel : &lt;strong&gt;les numéros de chaque case&lt;/strong&gt;, symbole fort du calendrier de l’avent.&lt;/p&gt;
&lt;p&gt;Il existe des solutions simples pour les quelques éléments de langages visuels présents dans les boules de l’illustration :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;C’est un cercle : on utilise la même valeur pour la hauteur et la largeur afin d’avoir un carré parfait, puis &lt;code&gt;border-radius: 50%&lt;/code&gt; pour un cercle.&lt;/li&gt;
&lt;li&gt;C’est une sphère : un &lt;code&gt;radial-gradient()&lt;/code&gt; pour l’arrière-plan et &lt;code&gt;box-shadow&lt;/code&gt; pour renforcer l’effet visuel de relief font très bien le boulot.&lt;/li&gt;
&lt;li&gt;C’est brillant : un &lt;code&gt;conic-gradient()&lt;/code&gt; couplé à un &lt;code&gt;radial-gradient&lt;/code&gt; en &lt;code&gt;mask-image&lt;/code&gt; sur un pseudo-élément donne un reflet suffisamment convaincant.&lt;/li&gt;
&lt;li&gt;C’est coloré : la fonction &lt;code&gt;color-mix()&lt;/code&gt; permet de décliner la couleur de la boule et de ses effets en fonction d’une seule couleur en entrée.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.day-number&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;background&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--color-number-bg&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;radial-gradient&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;circle at 66% 66%&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; #fff9&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; transparent 50%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;border-color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;color-mix&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;in srgb&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--color-number-bg&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; #fff 50%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;box-shadow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0 0 1rem #fff&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;color-mix&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;in srgb&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--color-number-bg&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; #000 50%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;.day:nth-child(3n + 1)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;--color-number-bg&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; #eb8181&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token selector&quot;&gt;.day:nth-child(3n + 2)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;--color-number-bg&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; #439d7d&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token selector&quot;&gt;.day:nth-child(3n + 3)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;--color-number-bg&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; #ffed9f&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;.day-number::before&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;background&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;conic-gradient&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;transparent 10%&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; #fff 33% 66%&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; transparent 90%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;border-radius&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 50%&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;mask-image&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;radial-gradient&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;transparent 60%&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; #0003 60%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;L’accroche de la boule est une version simplifiée de celle dans l’illustration, simplement appliquée en image d’arrière-plan sur un pseudo-élément.&lt;/p&gt;
&lt;p&gt;Et voilà, de jolies boules de Noël pour décorer notre calendrier !&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;C’est déjà très joli, mais ces boules suspendues ont clairement &lt;strong&gt;envie de bouger&lt;/strong&gt;, non ?&lt;/p&gt;
&lt;h2 id=&quot;les-animations&quot; tabindex=&quot;-1&quot;&gt;Les animations&lt;/h2&gt;
&lt;p&gt;Je savais qu’une animation légère était possible — et clairement, il fallait que ça reste très léger pour ne pas donner envie de vomir à tout le monde…&lt;/p&gt;
&lt;p&gt;Commençons par un cas simple.&lt;/p&gt;
&lt;h3 id=&quot;les-boules-de-noel-en-css&quot; tabindex=&quot;-1&quot;&gt;Les boules de Noël en CSS&lt;/h3&gt;
&lt;p&gt;Le mouvement de pendule, ou de balancier, est une animation que je n’ai pas eu l’occasion de travailler auparavant. Elle me paraissait relativement complexe, et une bonne candidate pour une technologie d’animation que je n’avais pu utiliser jusqu’à présent : &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/CSS/CSS_motion_path&quot;&gt;&lt;em lang=&quot;en&quot;&gt;motion path&lt;/em&gt; en CSS&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&quot;motion-path&quot; tabindex=&quot;-1&quot;&gt;&lt;i lang=&quot;en&quot;&gt;Motion path&lt;/i&gt;&lt;/h4&gt;
&lt;p&gt;C’est une spécification déjà datée, plutôt simple car inspirée de SVG, mais dont le support est disparate. En l’occurrence, l’utilisation de &lt;code&gt;offset-path&lt;/code&gt; (pour le tracé de l’animation) et &lt;code&gt;offset-distance&lt;/code&gt; (pour la position sur le tracé) suffit à atteindre la cible, avec un support satisfaisant.&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@keyframes&lt;/span&gt; balance&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token selector&quot;&gt;50%&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;offset-distance&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 26%&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;.day-number&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;animation&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; balance 4s ease-in-out infinite&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;offset-distance&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 24%&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;offset-path&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ellipse&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;6.75rem 5rem at 50% -6%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;offset-rotate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; reverse&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;will-change&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; offset-distance&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et voilà une animation de la position (de 24 à 26%) sur un tracé elliptique, qui se répète à l’infini.&lt;/p&gt;
&lt;p&gt;Cependant, malgré l’utilisation de &lt;code&gt;will-change&lt;/code&gt;, cette méthode d’animation est vraiment peu performante et Lighthouse indiquait clairement ce problème, perceptible à l’œil nu.&lt;/p&gt;
&lt;h4 id=&quot;retour-aux-transformations&quot; tabindex=&quot;-1&quot;&gt;Retour aux transformations&lt;/h4&gt;
&lt;p&gt;Revenons-en aux basiques des animations CSS performantes : &lt;code&gt;transform&lt;/code&gt; !&lt;/p&gt;
&lt;p&gt;Après quelques nœuds au cerveau, j’ai pu appréhender le mouvement de pendule : c’est effectivement une simple rotation, mais avec un point d’origine éloigné à l’aide d’un &lt;code&gt;transform-origin: 50% -300%&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Une rotation légère (de &lt;code&gt;3deg&lt;/code&gt; à &lt;code&gt;-3deg&lt;/code&gt;) et un délai différent toutes les trois boules (sur une ligne de 4) rend l’animation très organique, et relativement naturelle.&lt;/p&gt;
&lt;p&gt;Une étape supplémentaire aurait pu permettre d’améliorer encore les performances : utiliser les propriétés individuelles de transformation à la place des fonctions (en l’occurrence &lt;code&gt;rotate&lt;/code&gt; au lieu de &lt;code&gt;transform: rotate()&lt;/code&gt;). Bien que mise en place, cette modification n’a eu qu’un effet négligeable sur les performances.&lt;/p&gt;
&lt;h3 id=&quot;l-entete&quot; tabindex=&quot;-1&quot;&gt;L’entête&lt;/h3&gt;
&lt;p&gt;L’illustration elle-même, dans l’entête, était livrée au format SVG. C’est chouette car ça permet une grande souplesse dans l’implémentation.&lt;/p&gt;
&lt;p&gt;Pour éviter de trop s’éloigner de l’intégration habituelle des thèmes annuels, j’ai conservé l’intégration de l’illustration en CSS via &lt;code&gt;background-image&lt;/code&gt; et la fonction &lt;code&gt;url()&lt;/code&gt;. Fort heureusement, des animations déclarées dans le SVG source sont exécutées même dans ce contexte, ce qui permet de travailler dans le fichier source directement.&lt;/p&gt;
&lt;h4 id=&quot;les-animations-svg&quot; tabindex=&quot;-1&quot;&gt;Les animations SVG&lt;/h4&gt;
&lt;p&gt;Ma première initiative était d’utiliser &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/SVG/SVG_animation_with_SMIL&quot;&gt;les animations SVG SMIL&lt;/a&gt;, et notamment &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/SVG/Element/animateTransform&quot;&gt;l’élément &lt;code&gt;&amp;lt;animateTransform&amp;gt;&lt;/code&gt;&lt;/a&gt; pour animer &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform#rotate&quot;&gt;l’attribut &lt;code&gt;rotate&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Je ne l’avais jamais employé et ai eu du mal à comprendre son fonctionnement, notamment que l’effet s’applique sur le parent et par conséquent que les coordonnées (par exemple, le &lt;code&gt;x&lt;/code&gt; des rotations dans &lt;code&gt;values&lt;/code&gt;) devaient correspondre au &lt;code&gt;transform-origin&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-svg&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-svg&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;g&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;transform-origin&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;200 0&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;transform&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;translate(-172)&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;animateTransform&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;values&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;-0.5 200 0;0.5 200 0;-0.5 200 0&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; 
										&lt;span class=&quot;token attr-name&quot;&gt;attributeName&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;transform&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;rotate&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; 
										&lt;span class=&quot;token attr-name&quot;&gt;dur&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;4s&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;repeatCount&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;indefinite&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; 
										&lt;span class=&quot;token attr-name&quot;&gt;additive&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;sum&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;g&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;À noter que pour que les autres transformations (notamment la translation) soient cumulées avec la rotation animée, l’ajout de l’attribut &lt;code&gt;additive=&amp;quot;sum&amp;quot;&lt;/code&gt; est indispensable.&lt;/p&gt;
&lt;h4 id=&quot;desactiver-les-animations&quot; tabindex=&quot;-1&quot;&gt;Désactiver les animations&lt;/h4&gt;
&lt;p&gt;On a beau être bénévoles, on essaie de faire au mieux — et en l’occurrence respecter les préférences utilisateur. Dans le cas des animations, le minimum sur le plan technique est d’honorer la &lt;i lang=&quot;en&quot;&gt;media query&lt;/i&gt; &lt;code&gt;prefers-reduced-motion&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Dans le cas de cette illustration, nous ne pouvons pas utiliser la méthode JavaScript &lt;code&gt;svg.pauseAnimations()&lt;/code&gt; puisque le SVG est embarqué via CSS — il n’est pas dans le DOM.&lt;/p&gt;
&lt;p&gt;L’astuce que j’ai trouvée dans les bas-fonds des internets est de définir un &lt;code&gt;display: contents&lt;/code&gt; sur l’élément &lt;code&gt;&amp;lt;g class=&amp;quot;boule&amp;quot;&amp;gt;&lt;/code&gt; animé : &lt;code&gt;&amp;lt;animateTransform&amp;gt;&lt;/code&gt; perd sa cible et devient donc inerte. Ça fonctionne, et ça n’est &lt;strong&gt;que&lt;/strong&gt; du CSS !&lt;/p&gt;
&lt;p&gt;Cette portion de CSS est embarquée dans le SVG au sein d’un élément &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@media&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;prefers-reduced-motion&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; reduce&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token selector&quot;&gt;.boule&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token property&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; contents&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;mais-web-kit&quot; tabindex=&quot;-1&quot;&gt;Mais… WebKit&lt;/h5&gt;
&lt;p&gt;WebKit (le moteur de rendu de Safari, notamment) n’affiche plus du tout les groupes affublés d’un &lt;code&gt;display: contents&lt;/code&gt;, que ce soit sur Epiphany ou Safari &lt;i lang=&quot;en&quot;&gt;Technology Preview 209&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;C’est &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=284634&quot;&gt;le premier ticket de bug ouvert sur WebKit (en anglais)&lt;/a&gt; dans le cadre de ce chantier. Cette astuce n’est donc pas viable pour le moment…&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Re-changement de stratégie&lt;/strong&gt; : on va utiliser des animations et transformations &lt;strong&gt;CSS, dans le SVG, dans le CSS&lt;/strong&gt; ! Ça n’est pas aussi compliqué qu’il y parait.&lt;/p&gt;
&lt;h4 id=&quot;css-dans-svg-dans-css&quot; tabindex=&quot;-1&quot;&gt;CSS dans SVG dans CSS&lt;/h4&gt;
&lt;p&gt;L’animation des boules est récupérée et adaptée aux groupes correspondants dans le SVG, en composant les transformations pour conserver le &lt;code&gt;translate&lt;/code&gt; indispensable au bon placement des groupes dans l’illustration.&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.boule&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;transform-origin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 50% 0%&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;transform&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--translate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@media&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;prefers-reduced-motion&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; no-preference&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@keyframes&lt;/span&gt; balance&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token selector&quot;&gt;50%&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;transform&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--translate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;rotate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;-3deg&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;token selector&quot;&gt;.boule&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token property&quot;&gt;animation&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; balance 6s ease-in-out infinite&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token property&quot;&gt;transform&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--translate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;rotate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;3deg&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La translation étant propre à chacun des groupes, elle est définie à l’aide d’une propriété personnalisée sur l’élément lui-même — à l’instar du délai de l’animation :&lt;/p&gt;
&lt;pre class=&quot;language-html&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;g&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;boule&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token special-attr&quot;&gt;&lt;span class=&quot;token attr-name&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token value css language-css&quot;&gt;&lt;span class=&quot;token property&quot;&gt;--translate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;translateX&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;-172px&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;animation-delay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; .5s&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;l-origine-des-animations-css-dans-un-svg&quot; tabindex=&quot;-1&quot;&gt;L’origine des animations CSS dans un SVG&lt;/h5&gt;
&lt;p&gt;Mais là, &lt;strong&gt;surprise&lt;/strong&gt; : les boules semblent suivre la même animation, comme si l’origine de la rotation était la même pour les quatre !&lt;/p&gt;
&lt;p&gt;Après quelques recherches, j’ai découvert qu’il fallait indiquer &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/CSS/transform-box#fill-box&quot;&gt;&lt;code&gt;transform-box: fill-box&lt;/code&gt;&lt;/a&gt; aux éléments dans un SVG pour que &lt;code&gt;transform-origin&lt;/code&gt; ait un effet sur eux, sans quoi c’est en réalité la &lt;code&gt;viewBox&lt;/code&gt; qui sert d’origine à toutes les transformations CSS au sein d’un SVG ! Il suffisait de le savoir…&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.boule&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;transform-box&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; fill-box&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et ça fonctionne !&lt;/p&gt;
&lt;h4 id=&quot;oui-mais&quot; tabindex=&quot;-1&quot;&gt;Oui, mais…&lt;/h4&gt;
&lt;p&gt;En cherchant à vérifier le respect des préférences liées aux animations, j’ai pu constater que les émulateurs proposés dans les outils de développement de WebKit et Chromium ne propageaient pas l’état de la préférence aux SVG embarquées dans un &lt;code&gt;background-image&lt;/code&gt; CSS — alors que c’est fonctionnel avec la préférence modifiée sur le système.&lt;/p&gt;
&lt;p&gt;Voici donc &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=283894&quot;&gt;le bug numéro deux chez WebKit (en anglais)&lt;/a&gt; et &lt;a href=&quot;https://issues.chromium.org/issues/381770607&quot;&gt;le même bug chez Chromium (en anglais)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ce sont les derniers, promis.&lt;/p&gt;
&lt;h4 id=&quot;plot-twist-les-performances&quot; tabindex=&quot;-1&quot;&gt;&lt;i lang=&quot;en&quot;&gt;Plot twist&lt;/i&gt; : les performances&lt;/h4&gt;
&lt;p&gt;Je récapitule :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Nous avons des animations qui fonctionnent en CSS, à la fois côté CSS global et à l’intérieur du SVG de l’illustration ;&lt;/li&gt;
&lt;li&gt;Elles respectent les préférences utilisateur ;&lt;/li&gt;
&lt;li&gt;Et utilisent les techniques d’animation recommandées pour de bonnes performances.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Pas mal, non ?&lt;/p&gt;
&lt;p&gt;Mais alors… &lt;strong&gt;Pourquoi l’animation de l’illustration semble grippée&lt;/strong&gt;, sur Chromium et WebKit ?&lt;/p&gt;
&lt;p&gt;Figurez-vous que c’est un choix délibéré de ces moteurs de rendu. Il semble que l’utilisation d’animations CSS dans un SVG embarqué en CSS soit trop peu courant pour faire l’effort de les optimiser lors du rendu. &lt;strong&gt;Je suis le seul à faire ce genre de choses, alors ?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Après une micro-formation avec Anthony Ricaud sur les outils de développement de Chromium, nous avons pu identifier le problème et avancer une correction possible : sortir les éléments animés du SVG principal pour que les animations soient effectivement dans le CSS global, et pas embarquées dans le SVG.&lt;/p&gt;
&lt;p&gt;En exportant les quatre éléments à animer, j’ai pu les inclure dans des pseudos-éléments sans avoir à modifier le DOM. Parfait !&lt;/p&gt;
&lt;p&gt;Reprendre les animations revenait presque à faire un copier-coller. J’ai surtout eu à &lt;strong&gt;ajuster les dimensions et positions des boules pour chaque point de rupture&lt;/strong&gt; ; jusqu’à présent, jouer avec les &lt;code&gt;background-size&lt;/code&gt; et &lt;code&gt;background-position&lt;/code&gt; suffisaient, mais ce n’est plus le cas.&lt;/p&gt;
&lt;p&gt;C’est assez verbeux (trop pour être affiché ici), mais ça permet en contrepartie de charger moins de SVG sur les petits écrans qui ne les affichent pas.&lt;/p&gt;
&lt;h2 id=&quot;au-dela-des-preferences&quot; tabindex=&quot;-1&quot;&gt;Au-delà des préférences&lt;/h2&gt;
&lt;p&gt;Jusqu’à présent, les animations ne sont actives que si l’utilisateur n’a pas exprimé de préférence qui s’y oppose. Mais idéalement, chaque utilisateur doit pouvoir interrompre ou déclencher les animations sans devoir passer par les réglages de son système.&lt;/p&gt;
&lt;h3 id=&quot;un-bouton-pour-les-interrompre-toutes&quot; tabindex=&quot;-1&quot;&gt;Un bouton pour les interrompre toutes&lt;/h3&gt;
&lt;p&gt;Puisque toutes nos animations sont implémentées en CSS, une propriété magique permet d’en définir l’état : &lt;code&gt;animation-play-state&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;La fonctionnalité elle-même est plutôt simple, en s’appuyant sur un bouton.&lt;/p&gt;
&lt;pre class=&quot;language-html&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;button&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;hero-button&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;aria-pressed&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;false&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	Stopper les animations
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;une-pincee-de-java-script&quot; tabindex=&quot;-1&quot;&gt;Une pincée de JavaScript&lt;/h4&gt;
&lt;p&gt;Difficile de s’en passer pour écouter le clic et mettre à jour une classe &lt;code&gt;.reduced-motion&lt;/code&gt; sur le &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;, tout comme l’état du bouton avec &lt;code&gt;aria-pressed&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;pauseAnimations&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;window&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;matchMedia&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;(prefers-reduced-motion: no-preference)&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;matches&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; button &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;querySelector&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;.hero-button&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    button&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addEventListener&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;click&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;body&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;classList&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toggle&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;reduced-motion&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; pressed &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; button&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getAttribute&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;aria-pressed&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;true&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      button&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setAttribute&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;aria-pressed&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;pressed&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;passive&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

window&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addEventListener&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;DOMContentLoaded&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;pauseAnimations&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;un-etat-personnalise-en-css&quot; tabindex=&quot;-1&quot;&gt;Un état personnalisé en CSS&lt;/h4&gt;
&lt;p&gt;Une propriété personnalisée permet de gouverner l’état de toutes les animations de façon cohérente.&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@media&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;prefers-reduced-motion&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; reduce&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token selector&quot;&gt;.hero-button&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; none&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@media&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;prefers-reduced-motion&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; no-preference&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token selector&quot;&gt;.boule&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token property&quot;&gt;animation&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; balance 6s ease-in-out infinite &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--state&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; running&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	
	&lt;span class=&quot;token selector&quot;&gt;.reduced-motion&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token property&quot;&gt;--state&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; paused&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Rien de bien méchant finalement, mais… ça prend du temps ! Et clairement, ça pourrait toujours être amélioré !&lt;/p&gt;
&lt;h2 id=&quot;bilan&quot; tabindex=&quot;-1&quot;&gt;Bilan&lt;/h2&gt;
&lt;p&gt;Ce travail est vraiment un &lt;i lang=&quot;en&quot;&gt;rush&lt;/i&gt;, avec seulement quelques jours (travaillés de surcroît) pour proposer une intégration créative qui soit d’une qualité suffisante pour ne pas subir l’ire d’un lectorat exigeant, et parfois intransigeant.&lt;/p&gt;
&lt;p&gt;Certaines fonctionnalités sont arrivées tardivement, après le lancement du calendrier — j’avais enchaîné plusieurs nuits très courtes avant le lancement pour finir dans les temps, et ça n’a pas suffi.&lt;/p&gt;
&lt;p&gt;Mais &lt;strong&gt;j’ai pu terminer en profitant des conseils des lecteurices, auteurices et camarades de discussion sur IRC&lt;/strong&gt; — qui furent très enrichissants : merci à tous ceux qui ont participé, j’espère qu’ils se reconnaitront !&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Post-Scriptum&lt;/strong&gt; : cet article est focalisé sur le défi de l’intégration du thème annuel, mais nous avons aussi fait le choix en amont de changer de CMS. Grâce à un impressionnant travail de Joachim Robert (qui s’est également fendu d’&lt;a href=&quot;https://blog.professeurjoachim.com/billet/2024-11-22-30-jours-de-kirby-pour-24-jours-de-web&quot;&gt;un article rétrospectif sur la migration vers Kirby&lt;/a&gt; que je vous encourage à lire), c’est un succès — mais ça ajouté au défi puisque nous avons eu beaucoup d’ajustements à faire sur l’intégration commune, notamment sur l’affichage du contenu riche des articles.&lt;/p&gt;
</description>
					<pubDate>Wed, 08 Jan 2025 01:00:00 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/25e-jour-de-web/</guid>
					<frDate>8 janvier 2025</frDate>
				</item>
				<item>
					<title>Les astuces derrière « l’Invasion du HTML mutant »</title>
					<link>https://www.ffoodd.fr/astuces-ateliers-html-mutant/</link>
					<description>&lt;p&gt;Un atelier devant par définition impliquer les participants, j’ai fait le choix de créer un mini-jeu en guise de support. C’est &lt;a href=&quot;https://www.ffoodd.fr/devfest.2024/jeu/&quot;&gt;un site statique disponible en ligne&lt;/a&gt;, &lt;a href=&quot;https://github.com/ffoodd/html-mutant&quot;&gt;open-sourcé sur GitHub&lt;/a&gt; — pour que vous puissiez l’améliorer !&lt;/p&gt;
&lt;p&gt;Quand je dis statique, c’est statique : le dépôt a une unique dépendance, &lt;a href=&quot;https://github.com/lukejacksonn/servor&quot;&gt;servor&lt;/a&gt;, chargée de fournir un serveur HTTP basique pour travailler en local  et servor n’a elle-même aucune dépendance. Le reste n’est que HTML, CSS et JavaScript.&lt;/p&gt;
&lt;p&gt;Ça m’a permis de revenir aux fondamentaux, considérablement gagner en efficience ; mais surtout… découvrir tout un tas de trucs et astuces !&lt;/p&gt;
&lt;h2 id=&quot;la-mecanique-du-jeu&quot; tabindex=&quot;-1&quot;&gt;La mécanique du jeu&lt;/h2&gt;
&lt;p&gt;En démarrant le jeu, vous commencerez par personnaliser votre personnage. Le seul objectif de cette étape est de découvrir la structure visuelle d’un niveau, en vous permettant de vous impliquer personnellement dans le jeu. Les valeurs choisies seront appliquées dès que possible à tous les personnages du jeu, dans une sorte de représentation en miroir.&lt;/p&gt;
&lt;p&gt;Après avoir choisi votre personnage, un niveau d’entraînement vous familiarise avec la mécanique très simple du jeu : une portion de code à compléter et soumettre, exécutée en direct, qui affecte la zone envahie progressivement par des mutants ! Ce code est dans la plupart des niveaux les options passées à un &lt;code&gt;mutationObserver&lt;/code&gt;, mais parfois aussi dans la fonction de rappel.&lt;/p&gt;
&lt;p&gt;En cas d’échec comme en cas de réussite, une fenêtre modale vous informera. Parlons-en, de cette fenêtre modale !&lt;/p&gt;
&lt;h2 id=&quot;les-particularites-de-dialog&quot; tabindex=&quot;-1&quot;&gt;Les particularités de &lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;J’en parlais &lt;a href=&quot;https://www.paris-web.fr/2022/conferences/decouvrez-le-bon-html-et-economisez-du-js-et-du-css.php&quot;&gt;en 2022 à Paris Web&lt;/a&gt; puis &lt;a href=&quot;https://devfest2022.gdgnantes.com/sessions/decouvrez_le_bon_html_et_economisez_du_js_et_du_css&quot;&gt;au devFest Nantes&lt;/a&gt; dans mon sujet « &lt;a href=&quot;https://www.ffoodd.fr/devfest/#slide-1&quot;&gt;Découvrez &amp;quot; le bon HTML &amp;quot; et économisez du JS et du CSS &lt;/a&gt;», &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/HTML/Element/dialog&quot;&gt;l’élément &lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt;&lt;/a&gt; est extrêmement intéressant et devrait à terme supplanter toutes les implémentations de fenêtres modales dans les différentes bibliothèques de composants.&lt;/p&gt;
&lt;p&gt;Dans l’atelier, je m’en sers en plusieurs endroits :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;pour afficher les règles du jeu dans l’écran d’accueil ;&lt;/li&gt;
&lt;li&gt;pour interrompre un niveau, quand le nombre de mutants dépasse la centaine ;&lt;/li&gt;
&lt;li&gt;pour informer d’un échec lors d’une soumission de code qui ne fonctionne pas ;&lt;/li&gt;
&lt;li&gt;pour informer de la réussite, dans le cas contraire — et permettre de passer au niveau suivant.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;ouvrir-la-fenetre&quot; tabindex=&quot;-1&quot;&gt;Ouvrir la fenêtre&lt;/h3&gt;
&lt;p&gt;La plupart sont ouvertes programmatiquement, en réaction à un événement. Rien de plus simple : il suffit de récupérer une référence à l’élément &lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt; à l’aide de &lt;code&gt;querySelector()&lt;/code&gt; ou une référence à un identifiant via l’accès aux propriétés nommées, ou &lt;a href=&quot;https://html.spec.whatwg.org/multipage/nav-history-apis.html#named-access-on-the-window-object:html-elements-2&quot;&gt;&lt;i lang=&quot;en&quot;&gt;named properties access&lt;/i&gt; (en anglais)&lt;/a&gt;, et d’invoquer &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/HTMLDialogElement/showModal&quot;&gt;la méthode &lt;code&gt;showModal()&lt;/code&gt; (sur MDN, en anglais)&lt;/a&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;querySelector&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;dialog&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;showModal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;sans-java-script-externe&quot; tabindex=&quot;-1&quot;&gt;Sans JavaScript externe&lt;/h4&gt;
&lt;p&gt;Une exception toutefois, pour éviter d’ajouter un écouteur d’événement inutile : la fenêtre des règles du jeu est invoquée grâce à un gestionnaire d’événement HTML &lt;code&gt;onclick&lt;/code&gt; :&lt;/p&gt;
&lt;pre class=&quot;language-html&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;button&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token special-attr&quot;&gt;&lt;span class=&quot;token attr-name&quot;&gt;onclick&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token value javascript language-javascript&quot;&gt;rules&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;showModal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Règles du jeu&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;dialog&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;rules&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;role&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;dialog&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;aria-label&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;Règles du jeu&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;dialog&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;aparte-la-projection-des-identifiants-html-en-objets-globaux&quot; tabindex=&quot;-1&quot;&gt;Aparté : la projection des identifiants HTML en objets globaux&lt;/h5&gt;
&lt;p&gt;Dans cet exemple, j’invoque l’ouverture de la fenêtre modale avec &lt;code&gt;rules.showModal()&lt;/code&gt;, sans avoir défini la variable &lt;code&gt;rules&lt;/code&gt;. Comment est-ce possible ? En résumé, tout élément porteur d’un attribut &lt;code&gt;id&lt;/code&gt; devient mécaniquement une propriété globale de l’objet &lt;code&gt;window&lt;/code&gt;, et devient donc accessible directement par son nom. C’est spécifié sous le joli nom de &lt;a href=&quot;https://html.spec.whatwg.org/multipage/nav-history-apis.html#named-access-on-the-window-object&quot;&gt;&lt;i lang=&quot;en&quot;&gt;Named Access on Window Object&lt;/i&gt; (en anglais)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;C’est drôlement pratique, non ? Figurez-vous que c’est aussi un vecteur d’attaque méconnu faisant partie d’un groupe sobrement intitulé &lt;a href=&quot;https://domclob.xyz/&quot;&gt;&lt;i lang=&quot;en&quot;&gt;DOM clobbering&lt;/i&gt; (en anglais)&lt;/a&gt;. Je vous encourage à parcourir &lt;a href=&quot;https://cheatsheetseries.owasp.org/cheatsheets/DOM_Clobbering_Prevention_Cheat_Sheet.html&quot;&gt;les recommandations de l’OWASP pour mitiger le &lt;i lang=&quot;en&quot;&gt;DOM clobbering&lt;/i&gt; (en anglais)&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&quot;accessibilite&quot; tabindex=&quot;-1&quot;&gt;Accessibilité&lt;/h4&gt;
&lt;p&gt;La méthode &lt;code&gt;showModal()&lt;/code&gt; permet d’ouvrir une fenêtre modale, pas une simple boîte de dialogue — en respectant les exigences en matière d’accessibilité : la &lt;i lang=&quot;en&quot;&gt;focus&lt;/i&gt; est mécaniquement piégé dedans, la fermeture est possible avec la touche &lt;kbd&gt;Échap&lt;/kbd&gt;, etc.&lt;/p&gt;
&lt;h3 id=&quot;l-arriere-plan&quot; tabindex=&quot;-1&quot;&gt;L’arrière-plan&lt;/h3&gt;
&lt;p&gt;Une fois la fenêtre modale ouverte, on peut s’appliquer à la styler. Là où moult bibliothèques de composants imposent une &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; (voire plusieurs) pour servir d’arrière-plan à la fenêtre, la version native est livrée avec &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/CSS/::backdrop&quot;&gt;un pseudo-élément &lt;code&gt;::backdrop&lt;/code&gt;&lt;/a&gt; qui s’étend naturellement sur tout le &lt;i lang=&quot;en&quot;&gt;viewport&lt;/i&gt; et est promue, avec la fenêtre modale, par-dessus le reste de la page dans ce qui est spécifié sous le nom de &lt;i lang=&quot;en&quot;&gt;top layer&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;Vous n’avez plus qu’à lui appliquer une couleur, une opacité ou que sais-je encore. Dans le jeu, j’ai utilisé une propriété au nom évocateur de &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/CSS/backdrop-filter&quot;&gt;&lt;code&gt;backdrop-filter&lt;/code&gt;&lt;/a&gt; pour appliquer un effet de flou grisé sur l’arrière-plan.&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;dialog::backdrop&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;backdrop-filter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grayscale&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;50%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;blur&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;.25rem&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;les-dimensions&quot; tabindex=&quot;-1&quot;&gt;Les dimensions&lt;/h3&gt;
&lt;p&gt;Ne maîtrisant pas le mode de consultation du jeu, j’ai utilisé un peu de CSS moderne pour la largeur de la fenêtre modale afin qu’elle ait une largeur fluide, mais avec des valeurs minimum et maximum.&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;dialog&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;max-inline-size&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;clamp&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;50vw&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 100%&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 67.5rem&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La propriété  &lt;code&gt;max-inline-size&lt;/code&gt; est la &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/CSS/CSS_logical_properties_and_values&quot;&gt;propriété logique&lt;/a&gt; correspondant à &lt;code&gt;max-width&lt;/code&gt; dans le cas du Français. Et &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/CSS/clamp&quot;&gt;la fonction &lt;code&gt;clamp()&lt;/code&gt;&lt;/a&gt; est un petit bijou, dont j’abuse déjà copieusement dans &lt;a href=&quot;https://ffoodd.github.io/chaarts/pie-charts.html&quot;&gt;chaarts (en anglais)&lt;/a&gt; pour obtenir un pseudo-booléen en CSS en fonction d’une valeur, comme expliqué &lt;a href=&quot;https://www.ffoodd.fr/devquest/#slide-27&quot;&gt;slide 27 de ma conférence « Dessine-moi un graphique (en CSS) »&lt;/a&gt; donnée au &lt;a href=&quot;https://devfest2023.gdgnantes.com/sessions/dessine_moi_un_graphique__en_css_/&quot;&gt;devFest Nantes 2023&lt;/a&gt;, &lt;a href=&quot;https://2024.touraine.tech/talk/ioc2x2nW4KV5zrt69ZQm&quot;&gt;TNT #24&lt;/a&gt; et &lt;a href=&quot;https://www.devquest.fr/sessions/dessine-moi-un-graphique-en-CSS&quot;&gt;DevQuest 2024&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;fermer-la-fenetre&quot; tabindex=&quot;-1&quot;&gt;Fermer la fenêtre&lt;/h3&gt;
&lt;p&gt;J’ai évoqué la capacité de fermer la modale avec la touche &lt;kbd&gt;Échap&lt;/kbd&gt;, mais l’élément &lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt; tire d’autres super-pouvoirs du fait d’être natif, et notamment son association avec un élément &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt;. C’est parfaitement naturel, puisqu’une fenêtre modale permet généralement de valider ou annuler une action associée à une saisie.&lt;/p&gt;
&lt;p&gt;C’est pourquoi la valeur &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/HTML/Element/form#method&quot;&gt;&lt;code&gt;dialog&lt;/code&gt; est ajoutée à la &lt;code&gt;method&lt;/code&gt;&lt;/a&gt; de soumission d’un formulaire. Elle ne correspond pas à une méthode HTTP comme &lt;code&gt;get&lt;/code&gt; ou &lt;code&gt;post&lt;/code&gt;, mais bien à un contexte HTML, et permet de fermer directement la fenêtre modale parente. L’utilisation est fort simple :&lt;/p&gt;
&lt;pre class=&quot;language-html&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;form&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;fermer&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;dialog&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et, pour revenir à du HTML à l’ancienne : saviez-vous qu’un bouton à l’autre bout du DOM peut soumettre un formulaire ? Il suffit de lui indiquer le formulaire à soumettre :&lt;/p&gt;
&lt;pre class=&quot;language-html&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;form&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;fermer&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Fermer la fenêtre&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et voilà : c’est un bouton de type &lt;code&gt;submit&lt;/code&gt; qui soumettra le formulaire avec l’identifiant &lt;code&gt;fermer&lt;/code&gt;, qui lui-même fermera la fenêtre de dialogue. C’est beau, non ? Et &lt;a href=&quot;https://www.w3.org/TR/2006/WD-web-forms-2-20060821/#formAttribute&quot;&gt;cet attribut date (au moins) de 2006, dans les spécifications W3C des Web Forms (en anglais)&lt;/a&gt; dont les premiers brouillons remontent à 2004…&lt;/p&gt;
&lt;h2 id=&quot;les-emojis&quot; tabindex=&quot;-1&quot;&gt;Les émojis&lt;/h2&gt;
&lt;p&gt;Pour cet atelier, j’avais besoin de méchants envahisseurs, et de décors. Clairement pas le temps de faire des illustrations à la main, ni les moyens d’acheter des visuels. Une quête sur les internets m’a appris que le type de visuels que je cherchais se nomme les &lt;i lang=&quot;en&quot;&gt;top down tileset&lt;/i&gt;, ces petits décors et personnages généralement en 8-bit avec une perspective écrasée.&lt;/p&gt;
&lt;p&gt;À force de regarder des visuels en 8-bit, j’ai fini par faire le lien avec une vieille habitude dans mes supports de conférences : les émojis décoratifs en fin de titre. Bon sang, mais c’est bien sûr ! Des émojis !&lt;/p&gt;
&lt;p&gt;Les émojis sont formidables. Ce sont des points Unicode, purement textuels, et extrêmement nombreux désormais avec des pelletées de nouveautés dans chaque version d’Unicode. Il y a même des variantes, composées en séquence !&lt;/p&gt;
&lt;h3 id=&quot;les-personnages&quot; tabindex=&quot;-1&quot;&gt;Les personnages&lt;/h3&gt;
&lt;p&gt;Le meilleur exemple de séquence Unicode à mon avis sont les personnages : le neutre Personne 🧑 peut devenir un homme 👨 ou une femme 👩 en y ajoutant le point unicode du genre masculin ♂️ ou féminin ♀️, séparé par une jointure de largeur zéro (&lt;i lang=&quot;en&quot;&gt;zero-width joiner&lt;/i&gt;, &lt;code&gt;‍&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Pour obtenir un pompier 👨‍🚒, on ajoute simplement un camion de pompier 🚒 à une personne 🧑 ! N’est-ce pas génial, franchement ? Et on peut évidemment y ajouter le genre et le teint.&lt;/p&gt;
&lt;h3 id=&quot;la-personnalisation&quot; tabindex=&quot;-1&quot;&gt;La personnalisation&lt;/h3&gt;
&lt;p&gt;Ainsi &lt;a href=&quot;https://www.ffoodd.fr/devfest.2024/jeu/0-0/index.html&quot;&gt;le premier palier permet de personnaliser le genre et le teint du héros&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Le formulaire n’est composé que de deux groupes de bouton radio, chacun ayant une valeur correspondant au point Unicode concerné.&lt;/p&gt;
&lt;pre class=&quot;language-html&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;fieldset&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;legend&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Genre&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;legend&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;input&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;radio&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;genre&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;feminin&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;♀️&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;label&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;feminin&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Féminin&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;label&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;input&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;radio&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;genre&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;masculin&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;♂️&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;label&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;masculin&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Masculin&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;label&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;input&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;radio&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;genre&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;neutre&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;checked&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;label&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;neutre&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Neutre&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;label&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;fieldset&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Lors de la soumission, les deux valeurs sélectionnées sont poussées dans le &lt;code&gt;localStorage&lt;/code&gt; et ré-employées dès que possible dans la suite du jeu. Pour certains méchants, il suffit de concaténer le caractère du méchant avec les deux sélections : voilà comme un Mage 🧙 devient une Mage au teint sombre 🧙🏿‍♀️.&lt;/p&gt;
&lt;h3 id=&quot;les-decors&quot; tabindex=&quot;-1&quot;&gt;Les décors&lt;/h3&gt;
&lt;p&gt;J’ai un peu lutté avec les décors, demandant même de l’aide à mon camarade Clément Étienne. Et finalement, je suis revenu aux émojis : certains ont un caractère paysager intéressant, il suffit de les agrandir un peu…&lt;/p&gt;
&lt;p style=&quot;font-size:16rem;margin:0;padding:0;text-indent:0;text-align:center&quot; role=&quot;presentation&quot;&gt;🏔️&lt;/p&gt;
&lt;h3 id=&quot;les-navigateurs&quot; tabindex=&quot;-1&quot;&gt;Les navigateurs&lt;/h3&gt;
&lt;p&gt;Les navigateurs et systèmes d’exploitation ont leur propre livrée d’émojis, avec des supports disparates et des rendus variés. Pour palier cet écueil, j’ai opté pour une solution très simple technologiquement parlant : une typographie. Et à ce jeu-là, j’avais déjà ma préférée : &lt;a href=&quot;https://github.com/mozilla/twemoji-colr&quot;&gt;la Twemoji-COLR par Mozilla (sur GitHub, en anglais)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Les utilisateurs de Mozilla ne verront pas grand chose de nouveau : elle est embarquée dans Firefox sous le nom de Twemoji Mozilla, ce qui permet de tenter d’utiliser la version locale en CSS.&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@font-face&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;font-display&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; swap&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;font-family&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Twemoji Mozilla&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;font-style&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; normal&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;font-weight&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 400&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;local&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Twemoji Mozilla&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token url&quot;&gt;&lt;span class=&quot;token function&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string url&quot;&gt;&#39;/assets/fonts/Twemoji.woff2&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;woff2&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et le tour est joué : les utilisateurs de Firefox ne chargeront rien, et les autres téléchargeront une typographie pour afficher la même chose que Firefox. Choisissez mieux votre navigateur, la prochaine fois !&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://www.ffoodd.fr/images/2024/11/firefox.png&quot; alt=&quot;Capture d’écran de l’inspecteur de Polices de Firefox, pour la Twemoji Mozilla.&quot; width=&quot;348&quot; height=&quot;102&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;figcaption&gt;Firefox indique bien « système » pour l’origine de la typographie.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h4 id=&quot;web-kit&quot; tabindex=&quot;-1&quot;&gt;WebKit&lt;/h4&gt;
&lt;p&gt;Comme souvent quand je prépare un sujet, je me suis heurté à quelques limites des navigateurs. En l’occurrence, WebKit, le moteur de Safari et Epiphany, a des problèmes avec les variantes de teinte de la Twemoji-COLR. J’ai pu ouvrir &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=281739&quot;&gt;un ticket sur leur Bugzilla (en anglais)&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;la-coloration-syntaxique-sans-js&quot; tabindex=&quot;-1&quot;&gt;La coloration syntaxique sans JS&lt;/h2&gt;
&lt;p&gt;Dans la mécanique du jeu, des portions de code sont affichées (pour faire un « code à trous ») et du code est saisi des éléments &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt; et &lt;code&gt;&amp;lt;textarea&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Et pour lire et écrire du code, la coloration syntaxique est drôlement pratique et agréable ! Mais charger un script tel que &lt;a href=&quot;https://prismjs.com/&quot;&gt;PrismJS (en anglais)&lt;/a&gt; ou &lt;a href=&quot;https://highlightjs.org/&quot;&gt;highlight.js (en anglais)&lt;/a&gt; m’a toujours semblé démesuré pour la valeur ajoutée. Le bloc de code se retrouve charcuté dans le DOM, où des &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; avec des classes plus ou moins lisibles saucissonnent chaque portion de texte en fonction de son rôle syntaxique. C’est carrément indigeste.&lt;/p&gt;
&lt;p&gt;Mais au moment où je préparais cet atelier, Heikki Lotvonen a publié un article ahurissant : &lt;a href=&quot;https://blog.glyphdrawing.club/font-with-built-in-syntax-highlighting/&quot;&gt;&lt;cite lang=&quot;en&quot;&gt;Font with Built-In Syntax Highlighting&lt;/cite&gt; (en anglais)&lt;/a&gt;. C’est à mon sens, une petite révolution : une typographie tirant parti des fonctionnalités OpenType et notamment la table COLR. Fini les tartines de &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;, place à un code lisible et propre !&lt;/p&gt;
&lt;p&gt;Si les détails d’implémentation OpenType vous intéressent, je vous encourage à lire l’article. De mon côté, je me suis focalisé sur la personnalisation de la palette, rendues possibles en CSS avec &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/@font-palette-values&quot;&gt;&lt;code&gt;@font-palette-values&lt;/code&gt; (sur MDN, en anglais)&lt;/a&gt; et la propriété &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/@font-palette-values/override-colors&quot;&gt;&lt;code&gt;override-colors&lt;/code&gt; (sur MDN, en anglais)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Voilà ce que ça donne pour le jeu, dans lequel je profite de l’utilisation de propriétés personnalisées CSS pour la gestion des couleurs :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@font-palette-values&lt;/span&gt; --syntaxHighlighter&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;font-family&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;FontWithASyntaxHighlighter&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;override-colors&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
		0 &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--foreground&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		4 rebeccapurple&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		5 &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--accent&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		7 &lt;span class=&quot;token function&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;--muted&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Le rendu est pas mal, non ?&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://www.ffoodd.fr/images/2024/11/code.png&quot; alt=&quot;Bloc de code avec coloration syntaxique et champs de formulaires.&quot; width=&quot;480&quot; height=&quot;158&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;Et c’est de la pure amélioration progressive : si votre navigateur ne supporte pas la table COLR, la règle &lt;code&gt;@font-palette-values&lt;/code&gt; ou la propriété &lt;code&gt;override-colors&lt;/code&gt;, vous aurez juste du texte brut avec la &lt;i lang=&quot;en&quot;&gt;monospace&lt;/i&gt; par défaut.&lt;/p&gt;
&lt;h2 id=&quot;les-space-invaders&quot; tabindex=&quot;-1&quot;&gt;Les &lt;i lang=&quot;en&quot;&gt;Space Invaders&lt;/i&gt;&lt;/h2&gt;
&lt;p&gt;Le dernier point sur lequel je me suis beaucoup amusé, c’est le niveau des aliens. L’émoji &lt;i lang=&quot;en&quot;&gt;alien monster&lt;/i&gt; 👾 ressemble beaucoup, beaucoup, beaucoup aux vaisseaux de &lt;i lang=&quot;en&quot;&gt;Space Invaders&lt;/i&gt;. Pour un jeu d’invasion, ça tombe bien.&lt;/p&gt;
&lt;p&gt;J’ai donc voulu assumer la référence : arrière-plan noir, animation des envahisseurs qui défilent vers le bas, et… un compteur de score.&lt;/p&gt;
&lt;h3 id=&quot;les-compteurs&quot; tabindex=&quot;-1&quot;&gt;Les compteurs&lt;/h3&gt;
&lt;p&gt;Pour ceux qui font du CSS depuis longtemps, vous avez peut-être déjà entendu parler des &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/CSS/CSS_counter_styles/Using_CSS_counters&quot;&gt;compteurs CSS&lt;/a&gt;. Notre score correspondra simplement au nombre d’aliens présents.&lt;/p&gt;
&lt;p&gt;Cependant, si notre compteur commence à &lt;code&gt;1&lt;/code&gt; et peut monter jusqu’à &lt;code&gt;100&lt;/code&gt; — et sachant que le jeu original disposait d’un compteur sur cinq chiffres — le rendu ne sera ni élégant ni une belle citation. Heureusement, &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/CSS/@counter-style&quot;&gt;CSS nous permet de personnaliser le style du compteur avec &lt;code&gt;@counter-style&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pour obtenir un compteur sur cinq chiffres, affichant des &lt;code&gt;0&lt;/code&gt; avant la valeur du compteur, voici la déclaration utilisée :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@counter-style&lt;/span&gt; invasion&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;system&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; numeric&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;symbols&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;0&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;1&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;2&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;3&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;4&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;5&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;6&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;7&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;8&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;9&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;pad&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 5 &lt;span class=&quot;token string&quot;&gt;&quot;0&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;speak-as&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; numbers&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;web-kit-encore&quot; tabindex=&quot;-1&quot;&gt;WebKit (encore)&lt;/h4&gt;
&lt;p&gt;Là aussi, WebKit est limité : les compteurs CSS ne sont pas incrémentés quand on ajoute des éléments au DOM. C’est &lt;a href=&quot;https://la-grange.net/karl/&quot;&gt;Karl Dubost&lt;/a&gt; qui a ouvert &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=281277&quot;&gt;ce ticket sur Bugzilla (en anglais)&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;les-couleurs&quot; tabindex=&quot;-1&quot;&gt;Les couleurs&lt;/h3&gt;
&lt;p&gt;Un autre point saillant pour citer visuellement &lt;i lang=&quot;en&quot;&gt;Space Invaders&lt;/i&gt;, ce sont les couleurs vives. L’émoji utilisé vient avec une couleur qu’on ne peut pas surcharger, donc on va devoir l’altérer. Cette technique n’est pas récente, mais extrêmement utile : l’accumulation de &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/CSS/filter&quot;&gt;filtres CSS&lt;/a&gt; pour atteindre la bonne couleur.&lt;/p&gt;
&lt;p&gt;C’est un exercice compliqué, et je remercie Barrett Sonntag pour son &lt;a href=&quot;https://codepen.io/sosuke/pen/Pjoqqp&quot;&gt;générateur de filtres pour convertir du noir vers un code héxadécimal (sur CodePen, en anglais)&lt;/a&gt;. La seule contrainte est de commencer par du noir ce qui se résout facilement en appliquant en premier &lt;code&gt;grayscale(100%) brightness(0%)&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;mu-tant[type=&quot;invaders&quot;]:nth-child(1n + 1)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grayscale&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;100%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;brightness&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;0%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;invert&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;15%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sepia&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;90%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;saturate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;5339%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;hue-rotate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;6deg&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;brightness&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;96%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;contrast&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;127%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;mu-tant[type=&quot;invaders&quot;]:nth-child(2n + 1)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grayscale&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;100%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;brightness&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;0%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;invert&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;66%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sepia&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;82%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;saturate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;4488%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;hue-rotate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;88deg&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;brightness&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;117%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;contrast&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;129%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;mu-tant[type=&quot;invaders&quot;]:nth-child(3n + 1)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grayscale&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;100%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;brightness&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;0%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;invert&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;9%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sepia&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;90%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;saturate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;7442%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;hue-rotate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;247deg&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;brightness&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;91%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;contrast&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;149%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;mu-tant[type=&quot;invaders&quot;]:nth-child(4n + 1)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grayscale&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;100%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;brightness&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;0%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;invert&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;91%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sepia&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;27%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;saturate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;1428%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;hue-rotate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;1deg&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;brightness&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;110%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;contrast&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;104%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;C’est verbeux, mais ça fonctionne !&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://www.ffoodd.fr/images/2024/11/invaders.png&quot; alt=&quot;Des lignes d’aliens aux couleurs vives sur un fond noir, et un score en haut à droite en monospace.&quot; width=&quot;480&quot; height=&quot;457&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;figcaption&gt;Plutôt ressemblant, non ?&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h2 id=&quot;les-web-components&quot; tabindex=&quot;-1&quot;&gt;Les &lt;i lang=&quot;en&quot;&gt;Web Components&lt;/i&gt;&lt;/h2&gt;
&lt;p&gt;Et dire que je n’ai parlé que de HTML et CSS, pour le moment… Je ne m’étendrai pas autant, mais côté JavaScript, je me suis (un peu trop) amusé avec les &lt;i lang=&quot;en&quot;&gt;Web Components&lt;/i&gt;. En résumé :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;mu-tant&amp;gt;&lt;/code&gt; est le composant qui affiche un mutant, et gère sa mutation : un changement d’attribut, de valeur d’attribut, de contenu, de descendance, etc. Le tout à intervalle irrégulier, et de façon désordonnée.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;code-runner&amp;gt;&lt;/code&gt; étend la fonctionnalité du formulaire pour normaliser les réponses et les envoyer au &lt;code&gt;&amp;lt;play-ground&amp;gt;&lt;/code&gt;. Pour le clin d’œil, l’événement qui permet de diffuser les réponses est intitulé &lt;code&gt;voightkampff&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;play-ground&amp;gt;&lt;/code&gt; est le composant le plus critique : il déclenche l’invasion, surveille l’événement &lt;code&gt;voightkampff&lt;/code&gt;, exécute le code soumis, et donne le verdict (en ouvrant la fenêtre modale appropriée).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dans tout ça, j’ai énormément joué avec les &lt;code&gt;mutationObserver&lt;/code&gt;, les intervalles et les minuteurs, les émojis, et la génération de valeurs aléatoires.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot; tabindex=&quot;-1&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Si tout ce fatras vous rend curieux, je vous invite à visiter &lt;a href=&quot;https://github.com/ffoodd/html-mutant/tree/main&quot;&gt;le dépôt du jeu sur GitHub&lt;/a&gt; et à en faire ce que vous voulez !&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://www.ffoodd.fr/images/2024/11/invasion.png&quot; alt=&quot;Niveau 2-1 : le fantôme, dans lequel il faut configurer les options du mutationObserver pour enrayer l’invasion. Les fantômes apparaissent sur un décor nuageux, au milieu duquel émerge un pont ressemblant au Golden Gate, à San Francisco.&quot; width=&quot;480&quot; height=&quot;276&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;Et si vous vous lancez dans le jeu, je vous invite à consulter &lt;a href=&quot;https://www.ffoodd.fr/devfest.2024/#slide-1&quot;&gt;les &lt;i lang=&quot;en&quot;&gt;slides&lt;/i&gt; adossés au jeu&lt;/a&gt;. En avançant, vous verrez que chaque mutant a son slide. N’avancez pas trop vite, car le &lt;i lang=&quot;en&quot;&gt;slide&lt;/i&gt; suivant donne la réponse…&lt;/p&gt;
&lt;p&gt;Faites chauffer votre inspecteur !&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;note&quot; tabindex=&quot;-1&quot;&gt;Note&lt;/h3&gt;
&lt;p&gt;Cet article fait partie du « &lt;i lang=&quot;en&quot;&gt;Advent of Tech 2024 Onepoint&lt;/i&gt; », &lt;a href=&quot;https://dev.to/onepoint/advent-of-tech-2024-onepoint-le&quot;&gt;une série d’articles tech&lt;/a&gt; publiés par &lt;a href=&quot;https://dev.to/onepoint&quot;&gt;Onepoint sur dev.to&lt;/a&gt; pour patienter jusqu’à Noël.&lt;/p&gt;
</description>
					<pubDate>Mon, 18 Nov 2024 01:00:00 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/astuces-ateliers-html-mutant/</guid>
					<frDate>18 novembre 2024</frDate>
				</item>
				<item>
					<title>Mon épopée au devQuest</title>
					<link>https://www.ffoodd.fr/mon-epopee-au-devquest/</link>
					<description>&lt;p&gt;&lt;strong&gt;La première édition du &lt;a href=&quot;https://www.devquest.fr/&quot;&gt;devQuest&lt;/a&gt; avait lieu à Niort le 14 juin dernier. Et pour une première édition, c’était incroyablement réussi !&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un nouveau joueur dans la cour des CFP, ça n’est pas si courant ! J’ai postulé par curiosité à cet événement, dont la page d’annonce était très attractive… Et j’étais retenu pour ma conférence « &lt;a href=&quot;https://www.devquest.fr/sessions/dessine-moi-un-graphique-en-CSS&quot;&gt;Dessine-moi un graphique (en CSS)&lt;/a&gt; » !
Accompagné de deux collègues nantaises, Céline Mérand et Charline Humeau — retenues avec leur &lt;em&gt;quickie&lt;/em&gt; « &lt;a href=&quot;https://www.devquest.fr/sessions/dedramatisons-l-accessibilite&quot;&gt;Dédramatisons l’accessibilité&lt;/a&gt; » — nous sommes partis à l’aventure à Niort.&lt;/p&gt;
&lt;p&gt;Je vous raconte cette épopée ?&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;le-folklore-du-dev-quest&quot; tabindex=&quot;-1&quot;&gt;Le folklore du devQuest&lt;/h2&gt;
&lt;p&gt;Le devQuest se tenait &lt;a href=&quot;https://www.vivre-a-niort.com/services-publics/les-equipements/parc-des-expositions/index.html&quot;&gt;au Dôme du parc des expositions de Niort&lt;/a&gt;, un lieu agréable et enchanteur grâce à sa disposition circulaire. Trois salles étaient occupées :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La forge, la plus grande salle.&lt;/li&gt;
&lt;li&gt;L’astrarium, la seconde salle de conférence — dans laquelle mes collègues et moi sommes intervenus.&lt;/li&gt;
&lt;li&gt;Et le laboratoire, qui accueillait les ateliers.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vous l’aurez deviné avec le nom des salles : les organisateurs ont mis en place une ambiance festive et ludique très réussie !&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Des &lt;strong&gt;énigmes&lt;/strong&gt; à résoudre, sous forme de quiz accessibles via des QR codes disséminés sur les stands.&lt;/li&gt;
&lt;li&gt;Un &lt;strong&gt;décorum&lt;/strong&gt; léger, mais bien présent, pour donner le ton !&lt;/li&gt;
&lt;li&gt;Une musique d’&lt;strong&gt;ambiance à la taverne&lt;/strong&gt;, pour se sentir comme dans son RPG préféré.&lt;/li&gt;
&lt;li&gt;Des &lt;strong&gt;étendards&lt;/strong&gt; devQuest pour encadrer chaque scène, une coquetterie vraiment sympathique pour habiller le lieu.&lt;/li&gt;
&lt;li&gt;Des partenaires qui ont joué le jeu avec des stands ludiques et quelques &lt;em&gt;goodies&lt;/em&gt; qui sortent de l’ordinaire — et notamment un stand pour la boutique Sortilèges, avec quelques jeux proposés à l’essai !&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;J’ai également beaucoup apprécié l’ouverture de la journée, lancée par un générique digne d’un jeu vidéo et un maître du jeu pour nous présenter la guilde des organisateurs, de leurs partenaires et leur quête initiatique pour réussir cette première édition. Et les remerciements pour lancer la journée, ça met vraiment de bonne humeur !&lt;/p&gt;
&lt;h2 id=&quot;les-recits-de-la-tradition-orale&quot; tabindex=&quot;-1&quot;&gt;Les récits de la tradition orale&lt;/h2&gt;
&lt;p&gt;Deux &lt;em&gt;tracks&lt;/em&gt; de conférences et une d’ateliers : la journée était bien chargée et le choix parfois difficile !&lt;/p&gt;
&lt;p&gt;J’ai moi-même conté une histoire, &lt;a href=&quot;https://www.ffoodd.fr/devquest/&quot;&gt;« Dessine-moi un graphique (en CSS) » que vous retrouverez chez moi&lt;/a&gt;. J’ai beaucoup apprécié l’aventure, et les retours sont plutôt positifs.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://www.ffoodd.fr/images/2024/06/feedback.png&quot; alt=&quot;Détail des votes : Fun, 4 votes ; J’ai beaucoup appris : 21 votes ; Très intéressant : 28 votes ; Bon orateur : 19 votes ; Trop complexe : 2 votes.&quot; width=&quot;480&quot; height=&quot;126&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;figcaption&gt;Retours glânés sur OpenFeedback&lt;/figcaption&gt;&lt;/figure&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;level-up-ta-conf&quot; tabindex=&quot;-1&quot;&gt;&lt;em&gt;Level up&lt;/em&gt; ta conf&lt;/h3&gt;
&lt;p&gt;La &lt;em&gt;keynote&lt;/em&gt; d’ouverture était assurée par &lt;a href=&quot;https://jlandure.dev/&quot;&gt;Julien Landuré&lt;/a&gt; et &lt;a href=&quot;https://www.linkedin.com/in/annabelle-koster/&quot;&gt;Annabelle Koster&lt;/a&gt;, figures bien connues de la scène nantaise — entre autres choses pour leur implication dans le GDG de Nantes, qui organise chaque année le devFest.&lt;/p&gt;
&lt;p&gt;Les organisateurs du devQuest ont souligné dans leur introduction le soutien qu’ils ont reçu des organisateurs du devFest Nantes, et cette conférence montrait bien la valeur inestimable de l’expérience partagée : 12 ans d’existence, d’une première édition confidentielle et artisanale à un événement gigantesque rassemblant des milliers de personnes.&lt;/p&gt;
&lt;p&gt;Ce retour d’expérience d’une équipe d’organisateurs est vraiment enrichissant, et je le partagerai dès que possible à nos camarades organisateurs de l’Atlantique Day chez Onepoint à Nantes, mais aussi à mes copains organisateurs de Paris Web. On peut toujours s’améliorer !&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;arretons-de-de-tester-nos-applications&quot; tabindex=&quot;-1&quot;&gt;Arrêtons de (dé)tester nos applications&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/luifr10&quot;&gt;Louis Fredice Njako Molom&lt;/a&gt; et &lt;a href=&quot;https://github.com/stanlee974&quot;&gt;Stanley Servical&lt;/a&gt; ont mené un atelier sur la validation de cas d’utilisation centrés utilisateurs, articulés autour de la solution &lt;a href=&quot;https://orange-opensource.github.io/uuv/&quot;&gt;UUV&lt;/a&gt; qu’ils éditent au sein de l’organisation GitHub Orange OpenSource.&lt;/p&gt;
&lt;p&gt;Je n’ai pas pu assister à cet atelier — étant moi-même sur scène au même moment — mais ils ont déjà mené cet atelier au dernier Devoxx et j’ai pu découvrir la solution UUV récemment. Cet outil s’appuie sur les standards actuels du test (Cucumber, Cypress ou Playwright — au choix ! — et aXe) et permet de rédiger ses cas de tests en langage naturel.&lt;/p&gt;
&lt;p&gt;Des dictionnaires dédiés à certains aspects (notamment l’accessibilité) et un assistant (une application Electron) permettent à n’importe quel intervenant sur un projet de rédiger un cas de test. C’est la promesse (tenue) et je trouve ça assez incroyable.&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;ne-jouez-plus-solo&quot; tabindex=&quot;-1&quot;&gt;Ne jouez plus solo&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/julienlibert/&quot;&gt;Julien Libert&lt;/a&gt; a découvert le &lt;em&gt;mob programming&lt;/em&gt; en conférence, et nous transmet dans une conférence son expérience après une année de pratique ! De la théorie à la pratique (avec son lot d’aménagements loin de la théorie), il nous raconte ce qui a fonctionné — ou non ! — et quelques anecdotes intéressantes sur la réalité du terrain.&lt;/p&gt;
&lt;p&gt;Mon passage préféré : l’utilisation du &lt;em&gt;mob programming&lt;/em&gt; en guise d’entretien technique lors des recrutements. Pas de problème à tiroir ou d’exercice en mode &lt;em&gt;fizz buzz&lt;/em&gt;, mais un problème sélectionné en amont par la candidate elle-même — qui a donc le temps de potasser — et la solution mise en œuvre est déroulée en binôme le jour de l’entretien.&lt;/p&gt;
&lt;p&gt;Je trouve énormément d’avantages à cette pratique !&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;chrome-devtools-from-zero-to-hero&quot; tabindex=&quot;-1&quot;&gt;&lt;em&gt;Chrome Devtools from zero to hero&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/simonbelbeoch/&quot;&gt;Simon Belbeoch&lt;/a&gt; nous conduit dans une quête annexe : dépasser le basique &lt;code&gt;console.log()&lt;/code&gt; en jouant dans les outils de développement.&lt;/p&gt;
&lt;p&gt;Des autres méthodes de l’objet &lt;code&gt;console&lt;/code&gt; — que j’ai découverte en créant des CLI en Node… —  aux outils de simulation de troubles visuels en passant par le &lt;code&gt;debugger;&lt;/code&gt;, nous avons vu du paysage et des couleurs !&lt;/p&gt;
&lt;p&gt;Le seul bémol que j’apporterai est de restreindre le sujet, dès le titre, à Chrome… alors que toutes ces fonctionnalités existent dans Firefox ou Safari.&lt;/p&gt;
&lt;p&gt;Et je préfère Firefox !&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;dedramatisons-l-accessibilite&quot; tabindex=&quot;-1&quot;&gt;Dédramatisons l’accessibilité&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/celine-merand/&quot;&gt;Céline&lt;/a&gt; et &lt;a href=&quot;https://www.linkedin.com/in/charlinehumeau/&quot;&gt;Charline&lt;/a&gt; ont pu rejouer leur conférence, qui brosse un portrait de l’accessibilité web  bien loin des clichés habituels : moche, compliqué, cher, etc. En vingt minutes, elles réussissent un véritable tour de force : sensibiliser au handicap, illustrer avec des situations concrètes, apporter des ressources théoriques et proposer des outils concrets pour mettre le pied à l’étrier.&lt;/p&gt;
&lt;p&gt;Et leur conférence sortait du lot : c’était la seule catégorisée UX / UI de toute la journée !&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;la-recompense-de-la-quete&quot; tabindex=&quot;-1&quot;&gt;La récompense de la quête&lt;/h2&gt;
&lt;p&gt;Une première édition est toujours un pari risqué.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Les spectateurs seront-ils au rendez-vous ?&lt;/strong&gt; Le plan initial visait 150 personnes, nous étions plus de 400 !&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;L’appel à sujets sera-t-il visible et fructueux ?&lt;/strong&gt; L’équipe a reçu plus de 160 propositions, la sélection s’est avérée rude !&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Les partenaires trouveront-ils un intérêt ?&lt;/strong&gt; Avec 19 partenaires présents, le moins qu’on puisse dire est que c’est un grand oui !&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Et surtout… va-t-on réussir à aller au bout de l’expédition ?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;L’équipe du devQuest s’est entourée pour bénéficier d’expériences enrichissantes, et a su apporter beaucoup de personnalité à ce nouveau venu dans le circuit des conférences. Leur motivation et leurs convictions ont permis aux participants et orateurs de passer une excellente journée, distrayante, faite de rencontres et d’apprentissages.&lt;/p&gt;
&lt;p&gt;J’en repars en ayant glâné de nouvelles connaissances, découvert quelques personnes et passé un très bon moment.&lt;/p&gt;
&lt;p&gt;Bravo à l’équipe du devQuest, et merci à onepoint de nous permettre de partir en expédition pour des quêtes de ce genre !&lt;/p&gt;
</description>
					<pubDate>Tue, 18 Jun 2024 16:09:15 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/mon-epopee-au-devquest/</guid>
					<frDate>18 juin 2024</frDate>
				</item>
				<item>
					<title>HTML comme fondation</title>
					<link>https://www.ffoodd.fr/html-comme-fondation/</link>
					<description>&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt; : cet article est la traduction de &lt;a href=&quot;https://www.htmhell.dev/adventcalendar/2022/17/&quot;&gt;ma contribution au calendrier de l’avent de HTMHell, Modern HTML as a foundation for progressive enhancement&lt;/a&gt; !&lt;/p&gt;
&lt;p&gt;Vous êtes peut-être familier avec le concept d’amélioration progressive. En résumé, c’est une méthode permettant de s’assurer que l’utilisateur dispose d’&lt;strong&gt;une version viable&lt;/strong&gt; de votre page quelque soit son contexte — connexion limitée, navigateur désuet, etc. — mais aussi de rendre ladite page plus &lt;strong&gt;résiliente&lt;/strong&gt; (par exemple aux erreurs JavaScript).&lt;/p&gt;
&lt;p&gt;L’amélioration progressive débute par la base :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;le &lt;strong&gt;contenu&lt;/strong&gt;,&lt;/li&gt;
&lt;li&gt;balisé avec &lt;strong&gt;HTML&lt;/strong&gt;,&lt;/li&gt;
&lt;li&gt;stylé avec &lt;strong&gt;CSS&lt;/strong&gt;,&lt;/li&gt;
&lt;li&gt;enrichi avec &lt;strong&gt;JavaScript&lt;/strong&gt;,&lt;/li&gt;
&lt;li&gt;et amélioré pour l’accessibilité avec &lt;strong&gt;ARIA&lt;/strong&gt; (en cas de besoin uniquement).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Chacune de ces étapes devrait fonctionner telle quelle et améliorer les étapes précédentes sans les abîmer. En d’autres termes, il vous faut rédiger votre HTML indépendamment du CSS ou du JavaScript que vous y appliquerez ensuite.&lt;/p&gt;
&lt;p&gt;Cela étant dit, il paraît évident que mieux vous connaissez chaque étape de la liste, plus votre page devrait être robuste. &lt;strong&gt;JavaScript est omniprésent&lt;/strong&gt; donc je présume que vous en êtes familier. &lt;strong&gt;ARIA devient de plus en plus visible&lt;/strong&gt; depuis quelques années, donc on peut supposer que même sans connaître ARIA vous utilisez une bibliothèque ou un outil s’en occupant très bien. &lt;strong&gt;CSS s’améliore constamment&lt;/strong&gt; et j’imagine que votre veille vous permet de découvrir des nouveautés quotidiennement ou presque…&lt;/p&gt;
&lt;p&gt;Mais quid de HTML ? Fait-il partie de votre &lt;strong&gt;veille technique&lt;/strong&gt; ? Voyez-vous fréquemment passer des nouveautés HTML dans vos flux d’information ? Pas très souvent, je présume.&lt;/p&gt;
&lt;p&gt;Mais voilà. HTML est un standard vivant donc les spécifications changent, les navigateurs améliorent leurs supports en permanence — avec &lt;a href=&quot;https://wpt.fyi/interop-2022&quot;&gt;Interop 2022&lt;/a&gt; par exemple — donc il y a des nouveautés, côté spécifications ou côté navigateurs ; et certains d’entre eux sont destinés à devenir des versions natives de composants JavaScript basés sur un amas de &lt;code&gt;div&lt;/code&gt; depuis des lustres.&lt;/p&gt;
&lt;p&gt;Et si nous pouvions améliorer la couche HTML pour ce genre de composants, rendant le balisage plus résilient au passage ?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Avertissement&lt;/strong&gt; : il faut voir HTML comme &lt;strong&gt;une fondation, en aucun cas un remplacement&lt;/strong&gt; de votre composant JavaScript existant. Si votre composant requière ARIA, ne tentez pas de l’implémenter sans. Autrement dit, tentez systématiquement de fournir la meilleure expérience utilisateur possible et ne vous préoccupez pas trop de l’expérience développeur. Vous pourriez être intéressé par &lt;a href=&quot;https://adrianroselli.com/2022/10/under-engineered-patterns-for-a11ytoconf.html#References&quot;&gt;la série d’articles sur les composants sous-conçus d’Adrian Roselli&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Allons faire une ballade !&lt;/p&gt;
&lt;h2 id=&quot;details-et-summary-comme-base-pour-le-motif-de-conception-disclosure&quot; tabindex=&quot;-1&quot;&gt;&lt;code&gt;details&lt;/code&gt; et &lt;code&gt;summary&lt;/code&gt; comme base pour le motif de conception &lt;em&gt;disclosure&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;Remémorez-vous ces boutons « Voir plus » qui font apparaître des contenus supplémentaires quand vous les activez. Rendre ce genre de composant accessible nécessite généralement que vous implémentiez le motif de conception ARIA &lt;em&gt;disclosure&lt;/em&gt;, basé sur un bouton et l’attribut &lt;code&gt;aria-expanded&lt;/code&gt; pour communiquer l’état.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; et &lt;code&gt;summary&amp;gt;&lt;/code&gt; sont les candidats parfaits pour ça. Comme leur nom l’indique, ce motif de balisage va afficher un résumé (&lt;em&gt;summary&lt;/em&gt;) et masquer les détails associés, mais les rendre disponibles lors de l’activation du résumé. &lt;a href=&quot;https://thepaciellogroup.github.io/AT-browser-tests/test-files/details-summary.html&quot;&gt;L’implémentation par les navigateurs&lt;/a&gt; et &lt;a href=&quot;https://caniuse.com/details&quot;&gt;le support&lt;/a&gt; sont excellents.&lt;/p&gt;
&lt;p&gt;Ça semble plutôt sympa, non ? Alors pourquoi s’embarrasser avec le motif de conception &lt;em&gt;disclosure&lt;/em&gt; et ne pas préférer utiliser &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; et &lt;code&gt;&amp;lt;summary&amp;gt;&lt;/code&gt; systématiquement ? Pour faire simple, les interactions ne sont pas exactement celles attendues par vos utilisateurs, et le support par les navigateurs et technologies d’assistance n’est pas encore idéal — &lt;a href=&quot;https://www.scottohara.me/blog/2022/09/12/details-summary.html&quot;&gt;comme l’a démontré Scott O’Hara&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Mais alors… peut-on l’utiliser comme la fondation de notre motif de conception ARIA &lt;em&gt;disclosure&lt;/em&gt; ? &lt;a href=&quot;https://codepen.io/ffoodd/pen/XWYmmGj&quot;&gt;Découvrons ça (sur CodePen)&lt;/a&gt; !&lt;/p&gt;
&lt;p&gt;Rien de magique ici : pour améliorer et harmoniser le support des technologies d’assistance, on transforme le motif HTML en &lt;em&gt;disclosure&lt;/em&gt; en ajoutant à l’élément &lt;code&gt;&amp;lt;summary&amp;gt;&lt;/code&gt; le rôle &lt;code&gt;button&lt;/code&gt; et l’attribut &lt;code&gt;aria-expanded&lt;/code&gt; pour expliciter l’état, et en s’assurant que le contenu masqué l’est pour tout le monde avec l’attribut &lt;code&gt;hidden&lt;/code&gt;. L’attribut &lt;code&gt;open&lt;/code&gt; sur l’élément &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; se charge de tout ça nativement, mais &lt;a href=&quot;https://www.scottohara.me/blog/2022/09/12/details-summary.html#impact-of-removing-the-default-disclosure-triangle&quot;&gt;on ne peut pas se reposer dessus dès qu’on personnalise le marqueur triangle par défaut&lt;/a&gt; (ce qu’on fera à n’en pas douter) : on doit implémenter le motif de conception &lt;em&gt;disclosure&lt;/em&gt; complet pour éviter des restitutions incohérentes entre navigateurs et technologies d’assistance.&lt;/p&gt;
&lt;p&gt;De plus, saviez-vous que les navigateurs basés sur Chromium permettent de trouver le contenu masqué par &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; lors d’une recherche sur la page ? C’est une fonctionnalité qui va être standardisée en HTML avec &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/hidden#the_hidden_until_found_state&quot;&gt;la valeur &lt;code&gt;until-found&lt;/code&gt; pour l’attribut &lt;code&gt;hidden&lt;/code&gt;&lt;/a&gt; mais ça n’est pas censé être le cas des contenus masqués par le motif de conception &lt;em&gt;disclosure&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Comme vous l’avez peut-être compris, utiliser &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; et &lt;code&gt;&amp;lt;summary&amp;gt;&lt;/code&gt; enrichis avec le motif de conception ARIA &lt;em&gt;disclosure&lt;/em&gt; ne fera aucune différence pour la plupart des utilisateurs… mais si d’aventure votre JS ou votre CSS ne fonctionne pas, votre balisage sémantique prendra le relai et restera interactif — avec toutes ses limitations actuelles dans les technologies d’assistance.&lt;/p&gt;
&lt;p&gt;Faites d’ailleurs attention en utilisant ces éléments comme fondation : ils ne sont pas le bon choix &lt;a href=&quot;https://daverupert.com/2019/12/why-details-is-not-an-accordion/&quot;&gt;pour des accordéons&lt;/a&gt;, &lt;a href=&quot;https://melsumner.github.io/details-as-a-menu&quot;&gt;un menu déroulant&lt;/a&gt;, &lt;a href=&quot;https://cloudfour.com/thinks/a-details-element-as-a-burger-menu-is-not-accessible/&quot;&gt;un menu « burger »&lt;/a&gt;, &lt;a href=&quot;https://adrianroselli.com/2019/04/details-summary-are-not-insert-control-here.html&quot;&gt;un groupe d’onglets ou une fenêtre modale&lt;/a&gt;… Restez sémantiques !&lt;/p&gt;
&lt;p&gt;Et si je vous disais qu’il y a d’autres éléments HTML améliorables progressivement de la sorte ? On jette un œil ?&lt;/p&gt;
&lt;h2 id=&quot;output-comme-une-live-region&quot; tabindex=&quot;-1&quot;&gt;&lt;code&gt;output&lt;/code&gt; comme une &lt;em&gt;live region&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;Avez-vous déjà eu besoin d’alimenter une &lt;em&gt;live region&lt;/em&gt; pour communiquer des changements aux utilisateurs de lecteurs d’écran — parfois &lt;a href=&quot;https://www.ffoodd.fr/cache-cache-css/&quot;&gt;masquée visuellement en CSS&lt;/a&gt; ? C’est assez fréquent de nos jours, et vous retrouverez une gestion des &lt;em&gt;live regions&lt;/em&gt; dans la plupart des &lt;em&gt;frameworks&lt;/em&gt; : Angular a un &lt;code&gt;LiveAnnouncer&lt;/code&gt; dans son CDK Accessibilité, et &lt;a href=&quot;https://make.wordpress.org/accessibility/handbook/markup/wp-a11y-speak/&quot;&gt;WordPress a un script interne &lt;code&gt;wp.a11y.speak()&lt;/code&gt;&lt;/a&gt;… &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/Accessibility/ARIA/ARIA_Live_Regions&quot;&gt;Les &lt;em&gt;live regions&lt;/em&gt; ARIA s’appuient sur trois rôles spécifiques : &lt;code&gt;status&lt;/code&gt;, &lt;code&gt;log&lt;/code&gt; et &lt;code&gt;alert&lt;/code&gt;&lt;/a&gt;, chacune ayant un comportement légèrement différent.&lt;/p&gt;
&lt;p&gt;Mais saviez-vous qu’un élément HTML est une &lt;em&gt;live region&lt;/em&gt; native, avec un rôle implicite &lt;code&gt;status&lt;/code&gt; ? &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/HTML/Element/output&quot;&gt;Je vous présente &lt;code&gt;&amp;lt;output&amp;gt;&lt;/code&gt;&lt;/a&gt; ! &lt;a href=&quot;https://thepaciellogroup.github.io/AT-browser-tests/test-files/output.html&quot;&gt;L’implémentation par les navigateurs est complète&lt;/a&gt; et &lt;a href=&quot;https://caniuse.com/mdn-html_elements_output&quot;&gt;le support est excellent&lt;/a&gt;. Cependant certains couples de navigateurs et technologies d’assistance précis sont défectueux, comme &lt;a href=&quot;https://www.scottohara.me/blog/2019/07/10/the-output-element.html&quot;&gt;Scott O’Hara (à nouveau) l’a démontré&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://codepen.io/ffoodd/pen/rNvqGBB&quot;&gt;Rendons &lt;code&gt;&amp;lt;output&amp;gt;&lt;/code&gt; encore plus robuste en le transformant en &lt;em&gt;live region&lt;/em&gt; ARIA (sur CodePen)&lt;/a&gt; !&lt;/p&gt;
&lt;p&gt;Vous vous en souvenez peut-être, expliciter les rôles des éléments HTML était nécessaire il y a quelques années — pour les &lt;em&gt;landmarks&lt;/em&gt;, principalement — afin d’améliorer le support des navigateurs et technologies d’assistance. C’est d’ailleurs toujours une pratique encouragée par &lt;a href=&quot;https://www.numerique.gouv.fr/publications/rgaa-accessibilite/methode-rgaa/criteres/#crit-12-6&quot;&gt;le critère 12.6 du RGAA&lt;/a&gt;. Nous nous sommes habitués à écrire &lt;code&gt;&amp;lt;main role=&amp;quot;main&amp;quot;&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;header role=&amp;quot;banner&amp;quot;&amp;gt;&lt;/code&gt;, etc.&lt;/p&gt;
&lt;p&gt;Un autre point positif avec &lt;code&gt;&amp;lt;output role=&amp;quot;status&amp;quot;&amp;gt;&lt;/code&gt; est que ça vous permet de styler vos &lt;em&gt;live regions&lt;/em&gt; en sélectionnant l’élément &lt;code&gt;output&lt;/code&gt; : spécificité moins élevée, et la possibilité d’appliquer des styles de base renforcés — avec &lt;em&gt;CSS containment&lt;/em&gt;, par exemple ?&lt;/p&gt;
&lt;h3 id=&quot;une-live-region-particuliere-le-toast&quot; tabindex=&quot;-1&quot;&gt;Une &lt;em&gt;live region&lt;/em&gt; particulière : le toast !&lt;/h3&gt;
&lt;p&gt;Il existe aussi un cas d’usage pour une &lt;em&gt;live region&lt;/em&gt; affichée visuellement. Je n’irais pas très loin sur le sujet, car il a déjà été traité dans un grand nombre d’articles de grande qualité :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.scottohara.me/blog/2019/07/10/the-output-element.html&quot;&gt;Scott O’Hara l’a mentionné dans The Output Element&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;une précision technique après &lt;a href=&quot;https://www.scottohara.me/blog/2019/07/08/a-toast-to-a11y-toasts.html&quot;&gt;A toast to an accessible toast… abordant les considérations d’expérience utilisateur&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;mais aussi &lt;a href=&quot;https://adrianroselli.com/2020/01/defining-toast-messages.html&quot;&gt;Adrian Roselli avec Defining toast message&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Attention&lt;/strong&gt; : si votre toast ou votre &lt;em&gt;live region&lt;/em&gt; contient des éléments interactifs, vous devriez probablement utiliser un rôle &lt;code&gt;dialog&lt;/code&gt; ou &lt;code&gt;alertdialog&lt;/code&gt; au lieu d’un élément &lt;code&gt;&amp;lt;output&amp;gt;&lt;/code&gt;. Cela dit… il y a peut-être un élément HTML plus indiqué pour ça !&lt;/p&gt;
&lt;h2 id=&quot;une-boite-de-dialog&quot; tabindex=&quot;-1&quot;&gt;Une boîte de &lt;code&gt;dialog&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Je ne vais pas creuser beaucoup &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/HTML/Element/dialog&quot;&gt;l’élément &lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt;&lt;/a&gt;, mais explorons tout de même ce qu’il fait nativement comparé au &lt;a href=&quot;https://www.w3.org/WAI/ARIA/apg/patterns/dialogmodal/&quot;&gt;modèle de conception ARIA dialog&lt;/a&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;il a un rôle &lt;code&gt;dialog&lt;/code&gt; implicite,&lt;/li&gt;
&lt;li&gt;si on l’ouvre avec la méthode &lt;code&gt;showModal()&lt;/code&gt; :
&lt;ul&gt;
&lt;li&gt;il a une propriété &lt;code&gt;aria-modal=&amp;quot;true&amp;quot;&lt;/code&gt; implicite,&lt;/li&gt;
&lt;li&gt;il peut être fermé avec la touche Échap,&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;il piège le focus en son sein — mais permet d’atteindre la fenêtre du navigateur, c’est toujours discuté…&lt;/li&gt;
&lt;li&gt;il restaure le focus à l’élément qui a déclenché l’ouverture, lors de sa fermeture,&lt;/li&gt;
&lt;li&gt;il rend le reste du document &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/inert&quot;&gt;&lt;code&gt;inert&lt;/code&gt;&lt;/a&gt; automatiquement.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mais il y a plus ! Voyez plutôt :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/CSS/::backdrop&quot;&gt;Le pseudo-élément &lt;code&gt;::backdrop&lt;/code&gt;&lt;/a&gt; permet de styler l’arrière-plan superposé vraiment facilement.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/CSS/:modal&quot;&gt;La pseudo-classe &lt;code&gt;:modal&lt;/code&gt;&lt;/a&gt; s’applique lorsque &lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt; est ouvert avec la méthode &lt;code&gt;showModal()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Si votre boîte de dialogue contient un formulaire, utiliser l’attribut &lt;code&gt;method=&amp;quot;dialog&amp;quot;&lt;/code&gt; sur le formulaire permet à votre bouton de soumission de fermer la boîte de dialogue en transmettant les données.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L’élément &lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt; seul n’est pas (encore) suffisamment cohérent entre les différents navigateurs et technologies d’assistance, &lt;a href=&quot;https://www.scottohara.me/blog/2019/03/05/open-dialog.html&quot;&gt;comme Scott O’Hara (de nouveau) l’a remarqué&lt;/a&gt;, mais vous avez saisi le principe : qu’en serait-il si on l’enrichissait en appliquant le motif de conception ARIA &lt;em&gt;dialog&lt;/em&gt;, et en s’appuyant sur le comportement natif pour économiser quelques lignes de JavaScript ?&lt;/p&gt;
&lt;p&gt;C’est plus ou moins &lt;a href=&quot;https://web.dev/building-a-dialog-component/&quot;&gt;ce qu’Adam Argyle a exploré avec son composant &lt;em&gt;dialog&lt;/em&gt; sur web.dev&lt;/a&gt; avec quelques astuces sympathiques à apprendre — gardez cependant à l’esprit que &lt;a href=&quot;https://twitter.com/aardrian/status/1586792250113232896&quot;&gt;les contenus sur web.dev ne sont pas testés avec des technologies d’assistance ni contre les WCAG&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://css-tricks.com/dialog-components-roll-your-own/&quot;&gt;Construire un composant &lt;em&gt;dialog&lt;/em&gt; n’est vraiment pas évident&lt;/a&gt;, et &lt;a href=&quot;https://www.smashingmagazine.com/2021/07/accessible-dialog-from-scratch/&quot;&gt;Kitty Giraudel a détaillé ce dont vous avez besoin pour faire un bon composant &lt;em&gt;dialog&lt;/em&gt;&lt;/a&gt;. Depuis la rédaction de ces articles, le support de &lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt; s’est considérablement amélioré et &lt;a href=&quot;https://wpt.fyi/interop-2022&quot;&gt;fait même partie  d’Interop 2022&lt;/a&gt;, donc attendez-vous à ce que le support s’améliore encore en ces derniers jours de 2022.&lt;/p&gt;
&lt;p&gt;C’est probablement l’exemple le moins évident, puisqu’en parlant d’amélioration progressive l’élément &lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt; pourrait être un mauvais choix : il ne peut tout bonnement pas fonctionner sans JavaScript. Mais si votre JavaScript est en panne pour une raison inopinée, vos écouteurs d’événement pourraient toujours fonctionner.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot; tabindex=&quot;-1&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;HTML est incroyable. Ça n’est pas suffisant pour proposer un expérience accessible à tous les utilisateurs, comme &lt;a href=&quot;https://daverupert.com/2020/02/html-the-inaccessible-parts/&quot;&gt;Dave Rupert l’a mis en exergue il y a deux dans HTML: the inaccessible parts&lt;/a&gt; — bien que certains de ces exemples ne sont plus d’actualité, corrigés dans les navigateurs ou technologies d’assistance.&lt;/p&gt;
&lt;p&gt;Mais ne pas être parfait est probablement toujours mieux qu’être neutre, n’est-ce pas ?&lt;/p&gt;
&lt;p&gt;Je crois que c’est le genre de choses qu’HTML permet : &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; et &lt;code&gt;&amp;lt;summary&amp;gt;&lt;/code&gt; finiront par être implémentés et restitués de façon cohérente aux technologies d’assistance, rendant les enrichissements avec ARIA caduques. Le travail de Scott, du test très avancé aux articles de blogs et à l’ouverture de tickets de bug, est la voie à suivre. Les implémentations complètes dans les bibliothèques comme &lt;a href=&quot;https://a11y-dialog.netlify.app/&quot;&gt;a11y-dialog de Kitty Giraudel&lt;/a&gt; permettent de gagner en maturité et de clarifier les attentes pour ces composants. Et avec l’augmentation des usages, les navigateurs et technologies d’assistance vont certainement reconsidérer leurs priorisations, dans des opérations comme Interop ou &lt;a href=&quot;https://aria-at.w3.org/&quot;&gt;ARIA-AT&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Alors utilisons, testons, et aidons les navigateurs et technologies d’assistance à supporter ces nouveaux éléments HTML !&lt;/p&gt;
</description>
					<pubDate>Thu, 22 Dec 2022 17:53:57 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/html-comme-fondation/</guid>
					<frDate>22 décembre 2022</frDate>
				</item>
				<item>
					<title>L’état des champs</title>
					<link>https://www.ffoodd.fr/l-etat-des-champs/</link>
					<description>&lt;p&gt;Mais en arrivant sur la page, ledit champ est vide — et par conséquent, invalide.&lt;/p&gt;
&lt;h2 id=&quot;le-souci&quot; tabindex=&quot;-1&quot;&gt;Le souci&lt;/h2&gt;
&lt;p&gt;Lorsque vous appliquez des styles à un champ invalide (en utilisant la pseudo-classe &lt;code&gt;:invalid&lt;/code&gt;), ils seront donc appliqués dès le chargement de la page si ce champ est également affublé de l’attribut &lt;code&gt;required&lt;/code&gt;. Dommage !&lt;/p&gt;
&lt;p&gt;C’est ce qui a conduit &lt;a href=&quot;https://nota-bene.org/&quot;&gt;Stéphane Deschamps&lt;/a&gt; à ouvrir &lt;a href=&quot;https://github.com/w3c/html/issues/1073&quot;&gt;une issue sur le Github du W3C&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;l-etat-indetermine&quot; tabindex=&quot;-1&quot;&gt;L’état indéterminé&lt;/h3&gt;
&lt;p&gt;Quelques échanges plus tard, on évoque l’existence de l’état indéterminé pour les cases à cocher, boutons radios et barres de progression &lt;a href=&quot;https://www.w3.org/TR/html5/disabled-elements.html#selector-indeterminate&quot;&gt;dans la spécification HTML5&lt;/a&gt; qui pourrait porter le statu quo sur l’invalidité de notre champ. Cet état est facile à cibler en CSS à l’aide de la pseudo-classe &lt;code&gt;:indeterminate&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;le-brouillon-du-module-4-des-selecteurs&quot; tabindex=&quot;-1&quot;&gt;Le brouillon du module 4 des sélecteurs&lt;/h3&gt;
&lt;p&gt;Dans &lt;a href=&quot;https://drafts.csswg.org/selectors-4/#user-pseudos&quot;&gt;le brouillon du module de niveau 4 des sélecteurs CSS&lt;/a&gt;, une nouvelle pseudo-classe tente de résoudre ce problème : &lt;code&gt;:user-invalid&lt;/code&gt;. Vous noterez par ailleurs que le paragraphe descriptif n’est pas à jour puisqu’il évoque la première dénomination de ce nouveau sélecteur, à savoir &lt;code&gt;:user-error&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Mais vous l’aurez compris, il s’agit d’un brouillon et ce nouveau sélecteur est très loin d’avoir été implémenté où que ce soit.&lt;/p&gt;
&lt;h2 id=&quot;un-contournement-possible&quot; tabindex=&quot;-1&quot;&gt;Un contournement possible&lt;/h2&gt;
&lt;p&gt;Une idée m’est venue en lisant un article du calendrier de l’avent Digitpaint intitulé &lt;a href=&quot;https://advent2017.digitpaint.nl/2/&quot;&gt;Fantastic form pseudo selectors&lt;/a&gt;, dans lequel le premier exemple implémente un label flottant non pas au &lt;code&gt;:focus&lt;/code&gt; sur le champ, mais lors du début de saisie grâce à la pseudo-classe &lt;code&gt;:placeholder-shown&lt;/code&gt;. Génie !&lt;/p&gt;
&lt;p&gt;Cette pseudo-classe est active uniquement lorsque le &lt;code&gt;placeholder&lt;/code&gt; est affiché, autrement dit tant qu’aucune saisie n’a été effectuée dans le champ. Et ça, ça ressemble beaucoup à une partie de l’énoncé de notre problème du jour. Nous pourrions donc faire en sorte de &lt;strong&gt;distinguer un champ invalide vierge d’un champ invalide ayant été saisi&lt;/strong&gt;, avec les sélecteurs suivants :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;
&lt;span class=&quot;token selector&quot;&gt;input:invalid&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;box-shadow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; none&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;input:invalid:not(:focus)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;box-shadow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0 0 0 2px red&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;input:invalid:placeholder-shown&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;box-shadow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; none&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et bien a priori, ça fonctionne !&lt;br /&gt;
Et bonne nouvelle, &lt;a href=&quot;https://caniuse.com/#feat=css-placeholder-shown&quot;&gt;&lt;code&gt;:placeholder-shown&lt;/code&gt; est décemment supporté&lt;/a&gt;. Je vous ai même fait &lt;a href=&quot;https://codepen.io/ffoodd/pen/PEzoYO&quot;&gt;un petit CodePen pour jouer&lt;/a&gt;.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/l-etat-des-champs/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h3 id=&quot;remarques-post-publication&quot; tabindex=&quot;-1&quot;&gt;Remarques post-publication&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Note&lt;/strong&gt; : Merci à &lt;a href=&quot;https://vincent-valentin.name/&quot;&gt;Vincent&lt;/a&gt; qui me fait réfléchir, &lt;a href=&quot;https://twitter.com/htmlvv/status/943832913937928192&quot;&gt;dans une discussion sur Twitter&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Note&lt;/strong&gt; : &lt;a href=&quot;https://twitter.com/GaetanBt/status/943842968754061312&quot;&gt;Gaëtan me signale&lt;/a&gt; que sur Chrome, le placeholder ne peut pas être vide pour que cette astuce fonctionne.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Note&lt;/strong&gt; : &lt;a href=&quot;https://twitter.com/johan_ramon/status/943844529597272065&quot;&gt;Johan me signale&lt;/a&gt; que le comportement observé de visu était également vocalisé par les lecteurs d’écran. Là, ça devient vraiment gênant !&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;pourquoi-pas-not&quot; tabindex=&quot;-1&quot;&gt;Pourquoi pas &lt;code&gt;:not()&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Peut-être supposez-vous (à juste titre) qu’au lieu d’utiliser deux sélecteurs différents, nous pourrions styler directement les champs invalides dont le &lt;code&gt;placeholder&lt;/code&gt; n’est pas affiché, grâce à &lt;code&gt;input:invalid:not(:placeholder-shown)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Le fait est que le support de &lt;code&gt;:invalid&lt;/code&gt; est &lt;a href=&quot;https://caniuse.com/#search=%3Ainvalid&quot;&gt;bien meilleur&lt;/a&gt; que celui de &lt;code&gt;:placeholder-shown&lt;/code&gt; ; de plus, vous n’êtes pas sans savoir que CSS est un langage tolérant à l’erreur. Quand un navigateur rencontre un sélecteur qu’il ne comprend pas, &lt;strong&gt;il ignore l’ensemble du bloc de déclaration concerné&lt;/strong&gt; — et ce pour une bonne raison : être capable d’appliquer les styles suivants.&lt;/p&gt;
&lt;p&gt;Ainsi les navigateurs ne comprenant pas &lt;code&gt;:placeholder-shown&lt;/code&gt; (Internet Explorer et Edge au premier rang) n’appliqueraient pas nos styles dédiés aux champs invalides. Et ça, a priori, ce n’est pas ce qu’on veut ! Alors en utilisant deux sélecteurs, le seul inconvénient est que &lt;strong&gt;les navigateurs ne comprenant pas le second sélecteur conservent leur comportement actuel&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Et ça, c’est mieux.&lt;/p&gt;
&lt;h2 id=&quot;au-final&quot; tabindex=&quot;-1&quot;&gt;Au final&lt;/h2&gt;
&lt;p&gt;Je ne pense pas que ce soit une bonne idée, je tiens à le préciser. Cette combinaison n’a pas vocation à être employée de la sorte, ce n’est qu’un détournement un peu tordu, il est vrai. Mais bon, j’aime les petits défis en CSS, ne m’en voulez pas !&lt;/p&gt;
&lt;h3 id=&quot;un-precedent&quot; tabindex=&quot;-1&quot;&gt;Un précédent&lt;/h3&gt;
&lt;p&gt;Après de petites recherches sur les internets, j’ai trouvé plusieurs références à cette combinaison de sélecteurs antérieures à cet article, toutes remontant finalement à &lt;a href=&quot;https://css-tricks.com/form-validation-ux-html-css/&quot;&gt;un article sur la validation des formulaires en CSS&lt;/a&gt; rédigé par &lt;a href=&quot;https://twitter.com/chriscoyier&quot;&gt;Chris Coyier&lt;/a&gt; en 2016.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/l-etat-des-champs/#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Un véritable &lt;em&gt;CSS trick&lt;/em&gt; !&lt;/p&gt;
&lt;ol class=&quot;footnotes-list small mt2 pt2 pb2&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Amusez-vous à commenter le second sélecteur pour voir le comportement ordinaire. &lt;a href=&quot;https://www.ffoodd.fr/l-etat-des-champs/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Pour la question du support et de la tolérance à l’erreur, Chris Coyier préfère évoquer @supports plutôt que d’accumuler les sélecteurs. Ça ne me paraît pas nécessaire dans le cas présent, mais à réfléchir ! &lt;a href=&quot;https://www.ffoodd.fr/l-etat-des-champs/#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;</description>
					<pubDate>Thu, 21 Dec 2017 15:09:15 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/l-etat-des-champs/</guid>
					<frDate>21 décembre 2017</frDate>
				</item>
				<item>
					<title>Calculez</title>
					<link>https://www.ffoodd.fr/calculez/</link>
					<description>&lt;p&gt;Traditionnellement, quand on veut partager une largeur en trois portions égales, on écrit &lt;code&gt;width: 33.3333%;&lt;/code&gt;. Alors oui, d’accord, à l’époque pré-industrielle nous n’avions pas vraiment le choix. Mais aujourd’hui ?&lt;/p&gt;
&lt;h2 id=&quot;les-decimales-arbitraires&quot; tabindex=&quot;-1&quot;&gt;Les décimales arbitraires&lt;/h2&gt;
&lt;p&gt;Savez-vous ce qui pêche avec les décimales ? Plusieurs choses, en fait — à commencer par le fait que vous définissez &lt;strong&gt;arbitrairement&lt;/strong&gt; à quelle décimale vous vous arrêtez…&lt;/p&gt;
&lt;h3 id=&quot;la-precision&quot; tabindex=&quot;-1&quot;&gt;La précision&lt;/h3&gt;
&lt;p&gt;Et bien oui, forcément : si vous faites &lt;code&gt;33.33333% × 3&lt;/code&gt;, vous n’obtenez pas 100 %. &lt;strong&gt;Il vous manque 0.00001 %&lt;/strong&gt;. Négligeable ? Peut-être.&lt;/p&gt;
&lt;h3 id=&quot;les-arrondis-et-la-troncature&quot; tabindex=&quot;-1&quot;&gt;Les arrondis et la troncature&lt;/h3&gt;
&lt;p&gt;Mais si je vous rappelle qu’IE &lt;strong&gt;tronque systématiquement les valeurs à la deuxième décimale&lt;/strong&gt;, ça peut commencer à jouer un peu. En effet sur IE 11 il vous manque donc &lt;code&gt;0.01 %&lt;/code&gt; sur votre largeur totale.&lt;/p&gt;
&lt;p&gt;Et si je vous rappelle que sur la même valeur, Chrome va &lt;strong&gt;arrondir à la treizième décimale&lt;/strong&gt; ? Plutôt compliqué à anticiper.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Et alors ?&lt;br /&gt;
OSEF !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Admettons. On ne vit qu’une fois, après tout…&lt;/p&gt;
&lt;p&gt;C’est probablement anecdotique effectivement, puisque dans le pire des cas vous n’aurez qu’un pixel de plus ou de moins. Cependant si ce « détail » vous intrigue, il est plutôt bien détaillé dans cet article d’Alex Kilgour intitulé &lt;a href=&quot;https://cruft.io/posts/percentage-calculations-in-ie/&quot;&gt;Browser Rounding and Fractional Pixels&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Personnellement, je me sens un peu sale en laissant traîner des valeurs arbitraires — comme je l’ai déjà évoqué quand je parlais de &lt;a href=&quot;https://www.ffoodd.fr/decouvrez-le-calcul-magique/&quot;&gt;calcul magique&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;la-fonction-calc&quot; tabindex=&quot;-1&quot;&gt;La fonction calc&lt;/h2&gt;
&lt;p&gt;Finis les tours de passe-passe : &lt;code&gt;calc()&lt;/code&gt; vous permet d’écrire de manière concise et &lt;strong&gt;précise&lt;/strong&gt; une valeur égale à un tiers.&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;
&lt;span class=&quot;token selector&quot;&gt;.⅓&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;calc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;100% / 3&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et voilà.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/calculez/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h3 id=&quot;compatibilite&quot; tabindex=&quot;-1&quot;&gt;Compatibilité&lt;/h3&gt;
&lt;p&gt;Et le top, c’est la compatibilité : &lt;strong&gt;tout est au vert depuis IE 9&lt;/strong&gt;. Voyez plutôt le tableau sur &lt;a href=&quot;https://caniuse.com/#search=calc&quot;&gt;Can I Use?&lt;/a&gt;. Les seules tâches qui subsistent concernent des navigateurs pour téléphones, pour lesquels on peut raisonnablement supposer qu’un affichage d’un tiers de la largeur ne sera pas utile.&lt;/p&gt;
&lt;p&gt;Alors, demeure-t-il une raison valable d’utiliser des valeurs décimales arbitraires, selon vous ?&lt;/p&gt;
&lt;ol class=&quot;footnotes-list small mt2 pt2 pb2&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Au fait, si dans le bout de code le .⅓ vous choque, sachez que ça fonctionne — Kitty Giraudel a même déterré une expérience de Mathias Bynens à ce propos : https://mothereff.in/css-escapes#0%E2%85%93 — et que ça me paraît un excellent nom de classe pour exprimer un tiers. Pas vous ? &lt;a href=&quot;https://www.ffoodd.fr/calculez/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;</description>
					<pubDate>Mon, 03 Apr 2017 15:35:56 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/calculez/</guid>
					<frDate>3 avril 2017</frDate>
				</item>
				<item>
					<title>Avec ou sans JS ?</title>
					<link>https://www.ffoodd.fr/avec-ou-sans-js/</link>
					<description>&lt;p&gt;Vous avez déjà vécu ça, pas vrai ?&lt;/p&gt;
&lt;h2 id=&quot;l-amelioration-progressive&quot; tabindex=&quot;-1&quot;&gt;L’amélioration progressive&lt;/h2&gt;
&lt;p&gt;Quand on cherche à bien faire ces interactions qui affichent et masquent un élément à l’aide de JavaScript, une des fondations est de &lt;strong&gt;s’assurer que le contenu soit accessible sans JavaScript&lt;/strong&gt;. Ça fait partie intégrante de l’amélioration progressive, que je synthétise comme suit :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;le HTML est propre, lisible, cohérent, et permet d’&lt;strong&gt;accéder au contenu sans obstacle&lt;/strong&gt; ;&lt;/li&gt;
&lt;li&gt;le CSS améliore &lt;strong&gt;l’aspect graphique&lt;/strong&gt;, ordonne les éléments visuellement ;&lt;/li&gt;
&lt;li&gt;le JS enrichit le tout d’une couche de &lt;strong&gt;comportements&lt;/strong&gt; inexistants en HTML et CSS.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Or dans le cas d’un composant qui affiche ou masque un élément, le fonctionnement avant l’exécution du JS est donc d’avoir cet élément affiché par défaut. Ensuite — &lt;strong&gt;et seulement une fois que le JS est fonctionnel&lt;/strong&gt; — on va pouvoir le manipuler pour masquer notre élément.&lt;/p&gt;
&lt;p&gt;C’est là où le bât blesse. &lt;strong&gt;Le temps que notre JS soit exécuté, nous voyons l’élément affiché&lt;/strong&gt; (même si ça ne dure qu’une fraction de seconde).&lt;/p&gt;
&lt;h2 id=&quot;la-limite-du-js&quot; tabindex=&quot;-1&quot;&gt;La limite du JS&lt;/h2&gt;
&lt;p&gt;En l’occurrence, c’est son temps d’exécution — extrêmement dépendant de la machine et du navigateur de l’utilisateur.&lt;br /&gt;
Plusieurs pistes existent pour palier ce problème :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;on peut par exemple &lt;strong&gt;exécuter le plus tôt possible&lt;/strong&gt; le test d’activation du JS, qui consiste à transformer une classe &lt;code&gt;no-js&lt;/code&gt; posée sur la balise &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt;… Mais dans certains cas, ce la ne suffit pas ;&lt;/li&gt;
&lt;li&gt;on peut également &lt;strong&gt;abdiquer&lt;/strong&gt; : après tout, plus aucun référentiel n’exige d’alternative à JS ;&lt;/li&gt;
&lt;li&gt;on peut aussi se la jouer &lt;em&gt;old school&lt;/em&gt; en &lt;strong&gt;dupliquant le contenu masqué&lt;/strong&gt; dans une balise &lt;code&gt;&amp;lt;noscript&amp;gt;&lt;/code&gt; — mais on ne se sent pas vraiment propre, après ça.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Comme le signale Lionel dans les commentaires, conserver la modification des classes dès le &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; reste une étape incontournable pour optimiser ce mécanisme. Un exemple :&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;
document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;documentElement&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;classList&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;remove&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;’no&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;js’&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;documentElement&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;classList&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;’js’&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et en bonus, &lt;strong&gt;on peut réfléchir et utiliser CSS&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;les-styles-a-la-rescousse&quot; tabindex=&quot;-1&quot;&gt;Les styles à la rescousse&lt;/h2&gt;
&lt;p&gt;La base du fonctionnement que je propose est l’astuce utilisée par &lt;a href=&quot;https://www.nicolas-hoffmann.net/source/&quot;&gt;Nicolas Hoffmann&lt;/a&gt; sur &lt;a href=&quot;https://a11y.nicolas-hoffmann.net/&quot;&gt;ses composants jQuery accessibles&lt;/a&gt;. &lt;em&gt;Grosso modo&lt;/em&gt;, il effectue une transition sur &lt;code&gt;max-height&lt;/code&gt; pour la partie animée, et sur &lt;code&gt;visibility&lt;/code&gt; avec un délai pour &lt;strong&gt;masquer réellement&lt;/strong&gt; le contenu.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/avec-ou-sans-js/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;J’aime beaucoup cette technique, dont le seul inconvénient — à mon avis — est d’animer &lt;code&gt;max-height&lt;/code&gt;, ce qui nous oblige à utiliser un &lt;a href=&quot;https://www.ffoodd.fr/decouvrez-le-calcul-magique/&quot;&gt;chiffre magique&lt;/a&gt; pour une hauteur maximum inatteignable.&lt;/p&gt;
&lt;h3 id=&quot;l-etat-de-base&quot; tabindex=&quot;-1&quot;&gt;L’état de base&lt;/h3&gt;
&lt;p&gt;Voici l’état de base de ma navigation :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;[id=&quot;nav&quot;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;transform&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;translate3d&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;-100%&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;transition&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  transform 300ms ease-in 50ms&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  visibility 0s linear 300ms&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;visibility&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; hidden&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 18.75rem&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;will-change&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; transform&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; visibility&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Elle est décalée vers la gauche de la totalité de sa largeur, afin de &lt;strong&gt;sortir de l’écran&lt;/strong&gt; ; et est masquée.&lt;/p&gt;
&lt;p&gt;Notez que nous avons un délai sur nos deux transitions. Pour le moment, seul celui sur &lt;code&gt;visibility&lt;/code&gt; est important, puisqu’il permet de faire coïncider le changement de visibilité avec la durée de la transformation.&lt;/p&gt;
&lt;h3 id=&quot;l-ouverture-grace-a-js&quot; tabindex=&quot;-1&quot;&gt;L’ouverture grâce à JS&lt;/h3&gt;
&lt;p&gt;Là, c’est tout bête. Le JS ajoute une classe &lt;code&gt;.is-opened&lt;/code&gt; à la navigation, je m’en sers pour accrocher mes styles :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;
&lt;span class=&quot;token selector&quot;&gt;.is-opened&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;transform&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; none&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;transition-delay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0ms&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;visibility&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; visible&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et pour ceux qui me connaissent, je désamorce une question : je n’utilise pas &lt;code&gt;:not([aria-hidden])&lt;/code&gt;, car cet attribut est ajouté &lt;em&gt;via&lt;/em&gt; JS. Ainsi la navigation commencerait à apparaître au chargement, puis serait masquée après l’exécution du script — &lt;strong&gt;exactement le comportement qu’on cherche à corriger&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;et-si-js-est-desactive&quot; tabindex=&quot;-1&quot;&gt;Et si JS est désactivé&lt;/h3&gt;
&lt;p&gt;C’est là qu’on rigole ! Lisez plutôt, je vous explique ensuite :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;
&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@keyframes&lt;/span&gt; no-js&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token selector&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;transform&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; none&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;transition-delay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 50ms&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 0ms&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;visibility&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; visible&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;.no-js [id=&quot;nav&quot;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;animation&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 300ms ease-in 300ms forwards no-js&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dans un premier temps, je définis la règle &lt;code&gt;@keyframes&lt;/code&gt; pour mon animation. Son seul contenu est &lt;strong&gt;l’état final&lt;/strong&gt; : pas de translation, l’élément est visible, et les délais de transition sont ajustés. &lt;a href=&quot;https://caniuse.com/#search=keyframes&quot;&gt;En terme de support&lt;/a&gt; on abandonne donc IE9 et ses aïeux, ainsi qu’Opéra Mini.&lt;/p&gt;
&lt;p&gt;Dans un second temps, j’applique cette animation sur la navigation lorsque la balise &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt; porte la classe &lt;code&gt;.no-js&lt;/code&gt;. C’est sa classe par défaut, qui n’est retirée que si JS est activé.&lt;/p&gt;
&lt;p&gt;Pour éviter que l’animation ne se joue pendant le chargement de la page, je lui intime l’ordre de &lt;strong&gt;patienter&lt;/strong&gt; 300 millisecondes et de &lt;strong&gt;durer&lt;/strong&gt; 300 millisecondes — soit un délai généralement suffisant pour que JS ait magouillé les classes sur &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Et ceux qui ont déjà joué avec les animations le savent, elles reviennent par défaut à l’état initial (soit dans notre cas, le menu masqué). Bien sûr, ça ne va pas : j’ai donc précisé grâce au mot-clé &lt;code&gt;forwards&lt;/code&gt; que l’animation devait &lt;strong&gt;conserver son état final&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Et voilà ! &lt;strong&gt;On profite en sus d’une bien jolie animation qui fait entrer notre navigation dans l’écran&lt;/strong&gt; au lieu de la fuir. Et une page animée avec JS désactivé, je trouve ça cool. 🙂&lt;/p&gt;
&lt;h2 id=&quot;demonstration&quot; tabindex=&quot;-1&quot;&gt;Démonstration&lt;/h2&gt;
&lt;p&gt;Si vous êtes curieux de voir ce que ça donne ou de jouer avec, j’ai monté un &lt;a href=&quot;https://codepen.io/ffoodd/pen/apGqpQ&quot;&gt;CodePen de démonstration&lt;/a&gt; dans lequel vous pourrez lire le code.&lt;/p&gt;
&lt;p&gt;Pour jouer avec le JS désactivé, vous devrez &lt;a href=&quot;https://codepen.io/ffoodd/full/apGqpQ/&quot;&gt;consulter la vue complète&lt;/a&gt;.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/avec-ou-sans-js/#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;ol class=&quot;footnotes-list small mt2 pt2 pb2&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Il explique tout ça très bien dans la documentation de ses divers composants. &lt;a href=&quot;https://www.ffoodd.fr/avec-ou-sans-js/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;CodePen affiche un bien joli message si vous désactivé JavaScript. &lt;a href=&quot;https://www.ffoodd.fr/avec-ou-sans-js/#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;</description>
					<pubDate>Fri, 03 Feb 2017 18:02:05 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/avec-ou-sans-js/</guid>
					<frDate>3 février 2017</frDate>
				</item>
				<item>
					<title>Les nouveautés dʼIE4</title>
					<link>https://www.ffoodd.fr/les-nouveautes-d%CA%BCie4/</link>
					<description>&lt;p&gt;Elle apporte son lot de nouveautés à travers les filtres Microsoft, dont le plus connu concerne l’opacité. Pour rappel, la spécification finale de CSS1 ne voit le jour que le 17 décembre 1996.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/les-nouveautes-d%CA%BCie4/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id=&quot;les-nouveautes-graphiques&quot; tabindex=&quot;-1&quot;&gt;Les nouveautés graphiques&lt;/h2&gt;
&lt;p&gt;Parmi les nouveaux filtres Microsoft débarqués en 4.0, il est stupéfiant de voir à quel point ils ressemblent aux toutes dernières fonctionnalités spécifiées dans CSS et HTML :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;transformation ;&lt;/li&gt;
&lt;li&gt;filtres graphiques ;&lt;/li&gt;
&lt;li&gt;transition ;&lt;/li&gt;
&lt;li&gt;dégradés ;&lt;/li&gt;
&lt;li&gt;masques ;&lt;/li&gt;
&lt;li&gt;ombres…&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Oh, et &lt;code&gt;@font-face&lt;/code&gt; est apparu dans IE4. Oui oui, en 1997. Vous vous souvenez de la révolution que c’est devenu en 2009, et le battage médiatique autour de CSS 3 ? Ils devaient bien se marrer chez Microsoft, quand ils nous ont vus nous exciter comme des molécules en chaleur &lt;strong&gt;douze ans plus tard&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Et si d’aventure ça vous gêne que ce fussent des filtres propriétaires Microsoft, je remets une couche de contexte — toujours pour ceux du fond, décidément : &lt;strong&gt;CSS 1 n’existe officiellement que depuis quelques mois&lt;/strong&gt;. La définition des propriétés et de leurs valeurs n’en est qu’à ses balbutiements.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/les-nouveautes-d%CA%BCie4/#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id=&quot;fonctionnalites-hors-ligne&quot; tabindex=&quot;-1&quot;&gt;Fonctionnalités hors-ligne&lt;/h2&gt;
&lt;p&gt;Pas de blague. Internet Explorer 4 est la première version à évoquer la gestion de &lt;strong&gt;fonctionnalités hors-ligne&lt;/strong&gt;. Nous sommes évidemment très loin des applications web progressives actuellement tendance — les fameuses PWA, &lt;em&gt;bingo buzzword&lt;/em&gt; — mais déjà en 1997, Microsoft en parlait :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;mise en cache&lt;/strong&gt; des pages consultées afin d’améliorer l’expérience sans connexion ;&lt;/li&gt;
&lt;li&gt;fonctionnalité d’archivage de site, permettant « tout simplement » d’&lt;strong&gt;enregistrer une copie du site&lt;/strong&gt; sur votre ordinateur — et donc de le consulter sans connexion ;&lt;/li&gt;
&lt;li&gt;un type de site appelé &lt;em&gt;active channel&lt;/em&gt; qui permettait de &lt;strong&gt;synchroniser un site en ligne avec une version enregistrée localement&lt;/strong&gt;, hors ligne.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/les-nouveautes-d%CA%BCie4/#fn3&quot; id=&quot;fnref3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;C’est rigolo comme les thèmes abordés dans les notes de version sont les mêmes en 1997 qu’en 2016, non ?&lt;/p&gt;
&lt;h2 id=&quot;transitions-entre-les-pages&quot; tabindex=&quot;-1&quot;&gt;Transitions entre les pages&lt;/h2&gt;
&lt;p&gt;Ça, c’est vraiment l’apothéose.&lt;/p&gt;
&lt;p&gt;Vous connaissez peut-être déjà &lt;a href=&quot;https://jakearchibald.com/&quot;&gt;Jake Archibald&lt;/a&gt; ? Je l’apprécie notamment pour son travail sur l’optimisation des SVG, mais il a produit beaucoup de choses très utiles.&lt;/p&gt;
&lt;p&gt;En octobre 2016, il a créé &lt;a href=&quot;https://github.com/jakearchibald/navigation-transitions/blob/master/README.md&quot;&gt;un répertoire sur Github intitulé navigation-transition&lt;/a&gt;, dans lequel il explore la complexité d’effectuer des transitions entre les pages en respectant l’historique de navigation.&lt;/p&gt;
&lt;p&gt;C’est chouette, il évoque &lt;strong&gt;des pistes en CSS&lt;/strong&gt; lancées par Google en 2014 puis Mozilla en 2015, et sa propre exploration. Je suis sûr que ça en fait baver plus d’un !&lt;/p&gt;
&lt;p&gt;Je vous présente &lt;a href=&quot;https://msdn.microsoft.com/en-us/library/ms532847(v=vs.85).aspx#Interpage_Transition&quot;&gt;les transitions interpages&lt;/a&gt; introduites par Microsoft dans Internet Explorer 4 en 1997. Concrètement, ce sont des filtres Microsoft utilisés dans des balises &lt;code&gt;meta&lt;/code&gt;, comme suit :&lt;/p&gt;
&lt;pre class=&quot;language-markup&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;META&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;http-equiv&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;Page-Enter&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; 
  &lt;span class=&quot;token attr-name&quot;&gt;CONTENT&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;progid:DXImageTransform.Microsoft.Blinds(
  Duration=4
  )&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;META&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;http-equiv&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;Page-Exit&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; 
  &lt;span class=&quot;token attr-name&quot;&gt;CONTENT&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;progid:DXImageTransform.Microsoft.Slide(
  Duration=2.500,
  slidestyle=’HIDE’
  )&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;C’est pas beau, ça ?&lt;/p&gt;
&lt;h2 id=&quot;de-retour-du-passe&quot; tabindex=&quot;-1&quot;&gt;De retour du passé&lt;/h2&gt;
&lt;p&gt;Vous pensiez que le web de 1997 était révolu, et que tout ce que je viens de déterrer reste obsolète ? Je vous présente mes deux trollons.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/les-nouveautes-d%CA%BCie4/#fn4&quot; id=&quot;fnref4&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la propriété &lt;code&gt;filter&lt;/code&gt; fait désormais partie de la spécification CSS, seules les valeurs Microsoft ne sont donc plus standards. Personnellement, ça me fait beaucoup rigoler ;&lt;/li&gt;
&lt;li&gt;à l’époque, il était possible d’écrire des scripts dans CSS. Oui oui, chez Microsoft on faisait du JS dans du CSS.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/les-nouveautes-d%CA%BCie4/#fn5&quot; id=&quot;fnref5&quot;&gt;[5]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Alors pour paraphraser le Doc, je dirais seulement :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Nom de d’IE, Marty !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;vous-etes-encore-la&quot; tabindex=&quot;-1&quot;&gt;Vous êtes encore là ?&lt;/h2&gt;
&lt;p&gt;Pour les survivants qui sont parvenus jusqu’au donjon, voici vos récompenses :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Internet_Explorer_4&quot;&gt;la page Wikipédia d’Internet Explorer 4 (en anglais)&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;&lt;s&gt;&lt;a href=&quot;https://www.ffoodd.fr/les-nouveautes-d%CA%BCie4/&quot;&gt;un site fabuleux pour découvrir IE4, en anglais&lt;/a&gt; — qui n’est pas sans rappeler ce fameux trombone pot de colle dans les produits Microsoft du début des années 2000 ;&lt;/s&gt;&lt;/li&gt;
&lt;li&gt;&lt;s&gt;&lt;a href=&quot;https://www.ffoodd.fr/les-nouveautes-d%CA%BCie4/&quot;&gt;un historique d’Internet Explorer 1 à 6, en anglais&lt;/a&gt; — comme ça, vous avez le choix dans les dates ;&lt;/s&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.nicolas-hoffmann.net/tacamaca/&quot;&gt;une page implémentant les transitions interpages&lt;/a&gt;.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/les-nouveautes-d%CA%BCie4/#fn6&quot; id=&quot;fnref6&quot;&gt;[6]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Voilà. Comme &lt;strong&gt;je me suis beaucoup amusé&lt;/strong&gt; à rassembler toutes ces informations et à écrire cet article, je tiens à remercier &lt;a href=&quot;https://www.paris-web.fr/2015/conferences/la-veille-techno-pour-les.php&quot; title=&quot;Conférence intitulée « La veille techno pour les vieux croûtons » présentée par Thibault Jouannic à Paris Web le vendredi 02 octobre 2015&quot;&gt;les vieux croûtons du web&lt;/a&gt; qui ont éclairé ma lanterne lors de mes recherches. Ils se reconnaîtront, et si vous les cherchez vous trouverez la liste de leurs &lt;em&gt;nicknames&lt;/em&gt; connectés au salon &lt;code&gt;##openweb&lt;/code&gt; sur IRC.&lt;/p&gt;
&lt;p&gt;Merci les copains.&lt;/p&gt;
&lt;ol class=&quot;footnotes-list small mt2 pt2 pb2&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Le 17 décembre, c’est la Saint Gaël. Coïncidence ? Je ne crois pas. &lt;a href=&quot;https://www.ffoodd.fr/les-nouveautes-d%CA%BCie4/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Pour faire un parallèle avec l’histoire nord-américaine, l’époque succédant à la déclaration d’indépendance est le far-west, la ruée vers l’or, tout ça… &lt;a href=&quot;https://www.ffoodd.fr/les-nouveautes-d%CA%BCie4/#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn3&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;J’admets avoir du mal à comprendre cette technologie, je ne l’ai jamais connue… &lt;a href=&quot;https://www.ffoodd.fr/les-nouveautes-d%CA%BCie4/#fnref3&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn4&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Un trollon est un bébé troll, c’est bien connu. &lt;a href=&quot;https://www.ffoodd.fr/les-nouveautes-d%CA%BCie4/#fnref4&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn5&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Nos fameux filtres, vous croyiez que ça fonctionnait comment ? &lt;a href=&quot;https://www.ffoodd.fr/les-nouveautes-d%CA%BCie4/#fnref5&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn6&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Un indice, il faut regarder le code source. &lt;a href=&quot;https://www.ffoodd.fr/les-nouveautes-d%CA%BCie4/#fnref6&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;</description>
					<pubDate>Thu, 08 Dec 2016 17:28:58 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/les-nouveautes-d%CA%BCie4/</guid>
					<frDate>8 décembre 2016</frDate>
				</item>
				<item>
					<title>Cache-cache CSS</title>
					<link>https://www.ffoodd.fr/cache-cache-css/</link>
					<description>&lt;p&gt;Et j’ai beau trouver ça idiot — masquer du texte pour certains utilisateurs et pas pour d’autres, ça me paraît incohérent avec l’accessibilité — c’est un besoin récurrent.&lt;/p&gt;
&lt;p&gt;Il existe de nombreuses façons de faire, que je ne détaillerai pas ici. Depuis quelques années, lorsque je le peux, j’utilise celle de &lt;a href=&quot;https://twitter.com/thierrykoblentz&quot;&gt;Thierry Koblentz&lt;/a&gt; pour Yahoo! qui est décrite &lt;a href=&quot;https://developer.yahoo.com/blogs/ydn/clip-hidden-content-better-accessibility-53456.html&quot;&gt;sur le blog technique de Yahoo!&lt;/a&gt; &lt;a href=&quot;https://cssmojo.com/hide-content-from-sighted-users/&quot;&gt;sur le blog de Thierry&lt;/a&gt;. C’est de loin la plus complète, et la seule à ma connaissance à supporter la direction de texte de droite à gauche.&lt;/p&gt;
&lt;p&gt;Mais elle n’est pas exempte de problème, désormais.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;mise-a-jour&quot; tabindex=&quot;-1&quot;&gt;Mise à jour&lt;/h2&gt;
&lt;p&gt;Depuis la dernière mise à jour en 2019, d’autres changements ont été apportés. Je les ai récapitulés dans &lt;a href=&quot;https://www.ffoodd.fr/masquage-accessible-de-pointe/&quot;&gt;&lt;cite&gt;Masquage accessible de point&lt;/cite&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;propriete-depreciee&quot; tabindex=&quot;-1&quot;&gt;Propriété dépréciée&lt;/h2&gt;
&lt;p&gt;La « magie » de cette solution repose sur la propriété &lt;code&gt;clip&lt;/code&gt;. Elle est simple à comprendre et très efficace. Seul bémol : &lt;code&gt;clip&lt;/code&gt; est &lt;strong&gt;déprécié par le module &lt;em&gt;&lt;a href=&quot;https://drafts.fxtf.org/css-masking-1/#clip-property&quot;&gt;CSS masking&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt; de niveau 1.&lt;/p&gt;
&lt;p&gt;Pas de souci. La technique basée sur &lt;code&gt;clip&lt;/code&gt; date un peu, il est normal qu’elle tombe en désuétude. La nouvelle spécification recommande l’utilisation de &lt;code&gt;clip-path&lt;/code&gt; pour remplacer &lt;code&gt;clip&lt;/code&gt;. Ce qui nous laisse pantois, puisque &lt;a href=&quot;https://caniuse.com/#feat=css-clip-path&quot;&gt;le support de &lt;code&gt;clip-path&lt;/code&gt; est encore tout à fait relatif&lt;/a&gt;. &lt;strong&gt;Nous devons conserver &lt;code&gt;clip&lt;/code&gt; et ajouter &lt;code&gt;clip-path&lt;/code&gt; en guise d’amélioration progressive&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Cependant la syntaxe est différente également. Après quelques recherches, &lt;a href=&quot;https://twitter.com/ryuran78/status/778943389819604992&quot;&gt;Yvain Liechti a proposé la version la plus courte pour obtenir le résultat attendu&lt;/a&gt; :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token property&quot;&gt;clip-path&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;inset&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;50%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Banco. Un problème résolu !&lt;/p&gt;
&lt;h2 id=&quot;le-texte-ratatine&quot; tabindex=&quot;-1&quot;&gt;Le texte ratatiné&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://medium.com/@jessebeach/beware-smushed-off-screen-accessible-text-5952a4c2cbfe&quot;&gt;J. Renée Beach a signalé&lt;/a&gt; que la propriété &lt;code&gt;width: 1px;&lt;/code&gt; avait des effets négatifs sur le rendu du texte et par conséquent sa vocalisation par un lecteur d’écran.&lt;/p&gt;
&lt;p&gt;La solution proposée est à la fois logique et simple : empêcher le texte de passer à la ligne et ainsi &lt;strong&gt;garantir que les espaces entre les mots sont conservés&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Une seule propriété suffit :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token property&quot;&gt;white-space&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; nowrap&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et voilà, second problème résolu.&lt;/p&gt;
&lt;h2 id=&quot;la-totale&quot; tabindex=&quot;-1&quot;&gt;La totale&lt;/h2&gt;
&lt;p&gt;Voilà la version finale que je propose actuellement :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.sr-only&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;border&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0 &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;clip&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;rect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;1px&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 1px&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 1px&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 1px&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;-webkit-clip-path&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;inset&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;50%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;clip-path&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;inset&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;50%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1px &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;margin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; -1px &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;overflow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; hidden &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;padding&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0 &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; absolute &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1px &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;white-space&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; nowrap &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;avertissement&quot; tabindex=&quot;-1&quot;&gt;Avertissement&lt;/h3&gt;
&lt;p&gt;Normalement, vous ne devriez utiliser ceci &lt;strong&gt;que pour du texte&lt;/strong&gt;. Autrement dit, il ne devrait jamais y avoir d’élément capable de recevoir le &lt;code&gt;:focus&lt;/code&gt; dans un élément masqué de la sorte. Cela pourrait conduire à des comportements étonnants, puisque le navigateur cherchera à positionner le &lt;em&gt;scroll&lt;/em&gt; à l’endroit où est placé le &lt;code&gt;:focus&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Cependant, si l’élément masqué peut lui-même recevoir le &lt;code&gt;:focus&lt;/code&gt;, il nous faut pouvoir l’afficher de nouveau. &lt;strong&gt;C’est généralement le cas pour les liens d’évitement&lt;/strong&gt;. Lisez &lt;a href=&quot;https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1&quot;&gt;la technique G1 des WCAG&lt;/a&gt; pour en savoir plus.&lt;/p&gt;
&lt;p&gt;Pour ce genre de cas, &lt;a href=&quot;https://github.com/twbs/bootstrap/blob/v4-dev/scss/mixins/_screen-reader.scss&quot;&gt;Bootstrap propose une classe supplémentaire&lt;/a&gt; pour remettre à zéro nos valeurs de masquage.&lt;/p&gt;
&lt;p&gt;C’est à mon avis la meilleure façon de faire — et étant donné les changements apportés sur la classe de masquage, cette seconde classe doit être revue elle aussi. Voici ma version :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;
&lt;span class=&quot;token selector&quot;&gt;.sr-only-focusable:focus,
.sr-only-focusable:active&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;clip&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; auto &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;-webkit-clip-path&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; none &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;clip-path&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; none &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; auto &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;margin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; auto &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;overflow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; visible &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; auto &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;white-space&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; normal &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;code-et-traduction&quot; tabindex=&quot;-1&quot;&gt;Code et traduction&lt;/h2&gt;
&lt;p&gt;Vous pouvez retrouver ces classes à plusieurs endroits :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codepen.io/ffoodd/pen/gwKZyq?editors=1100#&quot;&gt;sur CodePen&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gist.github.com/ffoodd/000b59f431e3e64e4ce1a24d5bb36034&quot;&gt;dans un Gist&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Qu’en dites-vous ?&lt;/p&gt;
&lt;h3 id=&quot;version-anglaise&quot; tabindex=&quot;-1&quot;&gt;Version anglaise&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/KittyGiraudel&quot;&gt;Kitty Giraudel&lt;/a&gt; m’a fait l’honneur de &lt;a href=&quot;https://kittygiraudel.com/2016/10/13/css-hide-and-seek/&quot;&gt;traduire cet article en anglais et le publier sur son blog&lt;/a&gt;. Merci !&lt;/p&gt;
&lt;h2 id=&quot;modifications&quot; tabindex=&quot;-1&quot;&gt;Modifications&lt;/h2&gt;
&lt;h3 id=&quot;les-lecteurs-d-ecran-sur-mobile&quot; tabindex=&quot;-1&quot;&gt;Les lecteurs d’écran sur mobile&lt;/h3&gt;
&lt;p&gt;&lt;time datetime=&quot;2016-10-19&quot;&gt;19 octobre 2016&lt;/time&gt;&lt;/p&gt;
&lt;p&gt;Ayant besoin de tests sur cette version pour vérifier qu’elle n’introduit pas de régressions, &lt;a href=&quot;https://twitter.com/johan_ramon/status/788372720224526336&quot;&gt;Johan Ramon m’a remonté un bug étrange sur VoiceOver&lt;/a&gt;. En creusant un peu avec &lt;a href=&quot;https://github.com/PigeardSylvain&quot;&gt;Sylvain Pigeard&lt;/a&gt;, il nous est apparu que &lt;code&gt;position: static&lt;/code&gt; posait problème lors de la prise de focus d’un lien ayant la classe &lt;code&gt;.sr-only-focusable&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Nous étions contents, lorsqu’en cherchant à avertir l’équipe de Bootstrap nous sommes tombés sur &lt;a href=&quot;https://github.com/twbs/bootstrap/issues/20732&quot;&gt;un ticket ouvert récemment qui implique également TalkBack&lt;/a&gt;. &lt;a href=&quot;https://twitter.com/patrick_h_lauke&quot;&gt;Patrick H. Lauke&lt;/a&gt;, en investiguant, a décelé de nombreuses incohérences dans la gestion du focus entre les diverses technologies d’assistance sur mobile. Il a ainsi ouvert des tickets un peu partout :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://microsoftaccessibility.uservoice.com/forums/307429-microsoft-accessibility-feedback/suggestions/16717318-focusable-elements-should-fire-focus-event-recei&quot;&gt;Narrator&lt;/a&gt;, le lecteur d’écran intégré à Windows 8, Windows 10 et Windows Phone ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.chromium.org/p/chromium/issues/detail?id=657157&quot;&gt;TalkBack&lt;/a&gt;, le lecteur d’écran intégré à Android, interfacé avec Chromium ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1000082&quot;&gt;Firefox&lt;/a&gt;, qui tend à s’interfacer le mieux possible avec tous les lecteurs d’écran ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=116046&quot;&gt;Webkit&lt;/a&gt;, le moteur de rendu de Safari ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=163658&quot;&gt;Webkit&lt;/a&gt;, encore.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L’état des lieux est assez sombre : &lt;strong&gt;les liens d’évitement ne marchent globalement pas sur les interfaces tactiles lorsqu’on utilise un lecteur d’écran&lt;/strong&gt;. Ô joie.&lt;/p&gt;
&lt;h3 id=&quot;le-referencement-naturel&quot; tabindex=&quot;-1&quot;&gt;Le référencement naturel&lt;/h3&gt;
&lt;p&gt;&lt;time datetime=&quot;2016-10-19&quot;&gt;19 octobre 2016&lt;/time&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/stevefaulkner&quot;&gt;Steve Faulkner&lt;/a&gt; — du &lt;a href=&quot;https://www.paciellogroup.com/blog/&quot;&gt;Paciello Group&lt;/a&gt; — a posé la question au forum de support pour &lt;em&gt;webmasters&lt;/em&gt; de Google : &lt;a href=&quot;https://productforums.google.com/forum/#!msg/webmasters/YJcZUhtMIE4/XkOEzVakBAAJ&quot;&gt;les contextes supplémentaires pour utilisateurs malvoyants ont-ils un effet négatif sur le positionnement dans les résultats de recherche ?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Réponse courte : &lt;strong&gt;non&lt;/strong&gt; Cependant étant donné que ce texte n’apparaît pas de prime abord il est considéré comme du contenu secondaire et a donc un très faible impact sur le positionnement, et c’est une excellente chose puisque cela dissuade d’en abuser.&lt;/p&gt;
&lt;h3 id=&quot;les-debordements-inopines&quot; tabindex=&quot;-1&quot;&gt;Les débordements inopinés&lt;/h3&gt;
&lt;p&gt;&lt;time datetime=&quot;2019-01-18&quot;&gt;18 janvier 2019&lt;/time&gt;&lt;/p&gt;
&lt;p&gt;De multiples problèmes de débordements ont été observés, notamment sur Chrome, lorsque les éléments masqués sont contenus dans un élément avec &lt;code&gt;overflow: auto;&lt;/code&gt;. &lt;a href=&quot;https://github.com/Orange-OpenSource/Orange-Boosted-Bootstrap/issues/84&quot;&gt;Le problème est résolu dans Boosted&lt;/a&gt; en ajoutant &lt;code&gt;margin: -1px;&lt;/code&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;mise-a-jour-1&quot; tabindex=&quot;-1&quot;&gt;Mise à jour&lt;/h2&gt;
&lt;p&gt;Depuis la dernière mise à jour en 2019, d’autres changements ont été apportés. Je les ai récapitulés dans &lt;a href=&quot;https://www.ffoodd.fr/masquage-accessible-de-pointe/&quot;&gt;&lt;cite&gt;Masquage accessible de point&lt;/cite&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
</description>
					<pubDate>Thu, 13 Oct 2016 15:11:13 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/cache-cache-css/</guid>
					<frDate>13 octobre 2016</frDate>
				</item>
				<item>
					<title>Le sens de la sémantique</title>
					<link>https://www.ffoodd.fr/le-sens-de-la-semantique/</link>
					<description>&lt;p&gt;Mais probablement pas pour les raisons auxquelles vous pourriez penser de prime abord, je pense. Attention, ceci nʼest quʼune réflexion et sera peut-être truffée dʼerreurs, pleine de non sens et de raccourcis.&lt;/p&gt;
&lt;h2 id=&quot;la-separation-du-fond-et-de-la-forme&quot; tabindex=&quot;-1&quot;&gt;La séparation du fond et de la forme&lt;/h2&gt;
&lt;p&gt;Ce principe est assez clair. Parfois on lʼassocie également à un autre principe, celui de la répartition des responsabilités — en anglais, &lt;em&gt;separation of concern&lt;/em&gt; — et on aboutit généralement à celui de la responsabilité unique — &lt;em&gt;single responsibility&lt;/em&gt;, toujours chez nos amis anglophones.&lt;/p&gt;
&lt;p&gt;Dans mes langages dʼaffection que sont le HTML et le CSS, ça se traduit actuellement par les CSS atomiques — dont jʼai déjà parlé, et sur lesquels je vous invite à vous renseigner.&lt;/p&gt;
&lt;p&gt;En développement web et notamment sur le &lt;em&gt;front-end&lt;/em&gt;, la conception MV* en est le digne représentant. Sommairement, chaque couche a une responsabilité précise :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;le modèle est celui des données (pures et dures) ;&lt;/li&gt;
&lt;li&gt;la vue est lʼinterface utilisateur ;&lt;/li&gt;
&lt;li&gt;et le reste sert à manipuler tout ça comme un marionnettiste — la plupart du temps, on parle de contrôleur.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Super, le tour du propriétaire est terminé. Vous voulez mon avis ? &lt;strong&gt;Cʼest nul et non applicable aux couches HTML et CSS.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;limportance-du-html&quot; tabindex=&quot;-1&quot;&gt;Lʼimportance du HTML&lt;/h2&gt;
&lt;p&gt;Un rapide cours dʼhistoire est déjà fait dans lʼintroduction de lʼarticle. Le mauvais emploi de balises HTML à des fins de présentation a traumatisé pas mal de monde, il y a de ça 10 ou 15 ans. Les tableaux, les éléments — coucou &lt;code&gt;font&lt;/code&gt;, &lt;code&gt;big&lt;/code&gt;, &lt;code&gt;blink&lt;/code&gt;, &lt;code&gt;center&lt;/code&gt;, &lt;code&gt;marquee&lt;/code&gt; ou &lt;code&gt;spacer&lt;/code&gt; — et attributs dédiés en sont pour beaucoup.&lt;/p&gt;
&lt;p&gt;Là encore, je souhaite nuancer : ce ne sont que des outils. Les ouvriers qui sʼen sont servis ont fait nʼimporte quoi avec. Cʼest ça, la véritable histoire. On sʼest donc mis en tête de récupérer un vieux principe de programmation et de lʼappliquer tant bien que mal sur HTML et CSS en disant :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;HTML est le fond, CSS est la forme .&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/le-sens-de-la-semantique/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Cʼétait un moyen simple et efficace dʼéjecter du versant HTML ce qui avait trait à la présentation. Et ça, c’était bien. En effet le HTML doit être employé pour sa sémantique, &lt;strong&gt;le sens quʼil apporte au contenu quʼil balise&lt;/strong&gt;. Car cʼest tout ce quʼest censé faire ce langage : décrire le contenu sur le plan sémantique.&lt;br /&gt;
**&lt;br /&gt;
Utiliser des propriétés de style dans le HTML revient à corrompre la sémantique** : le contenu ne sera plus marqué correctement et pourra donc être mal interprété. Et ça, cʼest mal.&lt;/p&gt;
&lt;h3 id=&quot;en-quoi-est-ce-contradictoire-avec-la-separation-fond-forme&quot; tabindex=&quot;-1&quot;&gt;En quoi est-ce contradictoire avec la séparation fond/forme ?&lt;/h3&gt;
&lt;p&gt;Jʼai esquissé pourquoi il fallait éviter de mettre des informations de styles dans le HTML. Cʼétait pas trop compliqué.&lt;/p&gt;
&lt;p&gt;Cependant aujourdʼhui, cet argumentaire ressurgit pour justifier lʼutilisation de classes partout, tout le temps, dans nos CSS. On nous recommande de ne pas utiliser de sélecteurs dʼéléments ou dʼattributs — voire même dʼimbrications comme &lt;code&gt;ul &amp;gt; li&lt;/code&gt; — car elles induisent un lien trop fort avec le HTML et enfreigne donc ce concept de séparation du fond et de la forme.&lt;/p&gt;
&lt;p&gt;Précisons mon avis sur le sujet : &lt;strong&gt;ce principe ne vaut pas pour les CSS&lt;/strong&gt;. Je poursuis sur ma lancée.&lt;/p&gt;
&lt;h2 id=&quot;a-quoi-sert-le-style&quot; tabindex=&quot;-1&quot;&gt;À quoi sert le style ?&lt;/h2&gt;
&lt;p&gt;Selon moi, il sert à hiérarchiser visuellement les éléments les uns des autres. Un « gros titre », les « petites lignes »… Ces expressions décrivent un contenu dʼaprès leur aspect visuel mais aussi et surtout, leur (relative) importance sémantique.&lt;/p&gt;
&lt;p&gt;Pour résumer le fond de ma pensé : si un élément est important sémantiquement côté HTML, il devrait avoir &lt;strong&gt;une représentation visuelle qui reflète cette importance&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Pourquoi ?&lt;/p&gt;
&lt;p&gt;Mais ma bonne dame, parce que sinon vous induirez une distinction entre diverses méthodes de lecture de votre contenu — entre les technologies qui lisent le code (les robots, les lecteurs d’écrans, les moteurs en tous genres) et celles qui regardent le style (les personnes bien voyantes, les captures dʼécran, et certains moteurs tels que les outils de test de régression visuelle). Et ça, cʼest pas terrible. Cʼest même plutôt pourri, à mon avis.&lt;/p&gt;
&lt;p&gt;En fait jʼirais encore plus loin : si vous séparez trop votre forme de votre fond .&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/le-sens-de-la-semantique/#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lʼaspect graphique devrait renforcer la structure de lʼinformation et la hiérarchisation des contenus&lt;/strong&gt;, pas la gommer ni la falsifier.&lt;/p&gt;
&lt;h2 id=&quot;encore-un-peu-dhistoire&quot; tabindex=&quot;-1&quot;&gt;Encore un peu dʼhistoire&lt;/h2&gt;
&lt;p&gt;Au fait, vous souvenez-vous que CSS est ce qu’on appelle un langage descriptif ? Dʼailleurs, les plus vieux dʼentre vous se rappelleront sans doute quʼà lʼorigine &lt;strong&gt;CSS nʼétait pas destiné aux styles visuels&lt;/strong&gt; mais à la description de la présentation du contenu. Et non, ce nʼest pas pareil. Cela comprenait lʼaspect graphique, mais aussi &lt;a href=&quot;https://www.w3.org/TR/CSS2/media.html#media-types&quot;&gt;dʼautres médias oubliés, de nos jours&lt;/a&gt;. Voyez plutôt.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La vocalisation avec le média &lt;code&gt;speech&lt;/code&gt; — on parlait de feuille de styles orales (en CSS1, le média se nommait dʼailleurs &lt;code&gt;aural&lt;/code&gt;), qui comprenaient le contrôle du volume, de la vitesse, mais aussi du type de voix (masculine ou féminine, par exemple). &lt;a href=&quot;https://www.w3.org/TR/CSS2/aural.html&quot;&gt;Jetez un œil à lʼappendice à la spécification CSS2 (en anglais)&lt;/a&gt;. Tout ceci nʼa jamais vraiment été implémenté, sauf par Opéra il y a fort longtemps.&lt;/li&gt;
&lt;li&gt;Le braille, avec les médias &lt;code&gt;braille&lt;/code&gt; et &lt;code&gt;embossed&lt;/code&gt;, qui permettaient de contrôler respectivement le rendu par une plage de lecture braille et par une imprimante braille.&lt;/li&gt;
&lt;li&gt;Les projecteurs grâce au média &lt;code&gt;projection&lt;/code&gt;, ainsi que les écrans de télévision avec le média &lt;code&gt;tv&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Les téléscripteurs (ou prompteurs), terminaux et tous les systèmes avec des capacités dʼaffichage limitées aux fontes monospaces avec le média &lt;code&gt;tty&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dès la deuxième partie des années 90, les personnes travaillant sur la spécification CSS envisageaient cette multitude de façon dʼaccéder au contenu. Et aujourdʼhui on se gausse de faire un site qui sʼaffiche sur la plupart des écrans…&lt;/p&gt;
&lt;h2 id=&quot;morale-de-lhistoire&quot; tabindex=&quot;-1&quot;&gt;Morale de lʼhistoire&lt;/h2&gt;
&lt;p&gt;Simplifions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CSS ne devrait pas être utilisé pour altérer lʼimportance sémantique d’un contenu.&lt;/strong&gt; Et par extension, utiliser les sélecteurs dʼéléments ou dʼattributs semble une bonne idée. Je reformule au cas où : séparer le fond de la forme est une bonne idée, mais pas séparer la forme du fond. &lt;strong&gt;La forme dépend du fond, là où le fond ne dépend pas de la forme&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Pour ceux qui ont tenu jusque là, je vous invite à prendre le temps de lire &lt;a href=&quot;https://fr.wikipedia.org/wiki/Feuilles_de_style_en_cascade&quot;&gt;la page Wikipédia dédiée à CSS&lt;/a&gt;. Cʼest fort intéressant .&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/le-sens-de-la-semantique/#fn3&quot; id=&quot;fnref3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;ol class=&quot;footnotes-list small mt2 pt2 pb2&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Toute ressemblance avec le slogan dʼune enseigne de sport est parfaitement fortuite. &lt;a href=&quot;https://www.ffoodd.fr/le-sens-de-la-semantique/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Notez lʼordre des termes fond/forme, forme/fond. &lt;a href=&quot;https://www.ffoodd.fr/le-sens-de-la-semantique/#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn3&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Par exemple, on y apprend que le mécanisme de la cascade tant décrié de nos jours par lʼécosystème des développeurs JS est conçu pour permettre aux utilisateurs dʼappliquer leurs propres styles. Cʼest oublié, mais ça nʼen reste pas moins génial. &lt;a href=&quot;https://www.ffoodd.fr/le-sens-de-la-semantique/#fnref3&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;</description>
					<pubDate>Fri, 24 Jun 2016 18:06:10 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/le-sens-de-la-semantique/</guid>
					<frDate>24 juin 2016</frDate>
				</item>
				<item>
					<title>Sarah Bourne</title>
					<link>https://www.ffoodd.fr/nothing-is-obvious-to-the-uninformed/</link>
					<description>&lt;p&gt;Nothing is obvious to the uninformed!&lt;/p&gt;
</description>
					<pubDate>Wed, 25 May 2016 16:28:56 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/nothing-is-obvious-to-the-uninformed/</guid>
					<frDate>25 mai 2016</frDate>
				</item>
				<item>
					<title>Les champs images cassés</title>
					<link>https://www.ffoodd.fr/les-champs-images-casses/</link>
					<description>&lt;p&gt;&lt;a href=&quot;https://bitsofco.de/&quot;&gt;Ire Aderinokun&lt;/a&gt; a brisé un mythe il y a quelques jours à propos des pseudos-éléments sur la balise &lt;code&gt;img&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;on-recapitule-pour-ceux-du-fond&quot; tabindex=&quot;-1&quot;&gt;On récapitule, pour ceux du fond&lt;/h2&gt;
&lt;p&gt;Lʼélément &lt;code&gt;img&lt;/code&gt; est ce quʼon appelle &lt;strong&gt;un élément remplacé&lt;/strong&gt;. Je vous conseille à ce propos la lecture de « &lt;a href=&quot;https://la-cascade.ghost.io/quest-ce-quun-element-remplace/&quot;&gt;Qu’est-ce qu’un élément remplacé ?&lt;/a&gt; », traduction en français sur La Cascade de « &lt;a href=&quot;https://demosthenes.info/blog/461/What-The-Heck-Is-A-Replaced-Element#&quot;&gt;What The Heck Is A Replaced Element?&lt;/a&gt; » écrit par &lt;a href=&quot;https://twitter.com/dudleystorey&quot;&gt;Dudley Storey&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Cela signifie que la balise nʼest fonctionnelle que si le contenu qui est censé le remplacer est présent. Pour la plupart des éléments remplacés, ça a peu dʼincidence puisque cʼest le système qui sʼen charge — cʼest notamment le cas des éléments de formulaire tels que &lt;code&gt;input&lt;/code&gt;, &lt;code&gt;textarea&lt;/code&gt; ou &lt;code&gt;select&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;En revanche dʼautres éléments ont besoin quʼon leur dise par quoi ils vont être remplacés, et le système nʼintervient pas. Cʼest donc le cas des &lt;code&gt;img&lt;/code&gt;. Ainsi, si malencontreusement la source est introuvable, lʼélément nʼest pas remplacé et peut alors supporter les pseudos-éléments. Voilà, vous savez tout.&lt;/p&gt;
&lt;h2 id=&quot;le-test-de-la-source-manquante-dans-a11y-css&quot; tabindex=&quot;-1&quot;&gt;Le test de la source manquante dans a11y.css&lt;/h2&gt;
&lt;p&gt;Comble de lʼironie, ça fait bientôt deux ans que jʼapplique &lt;a href=&quot;https://ffoodd.github.io/a11y.css/errors.html#no-src&quot;&gt;un test dans a11y.css pour vérifier que la source est mentionnée&lt;/a&gt;.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/les-champs-images-casses/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Mais alors, se pourrait-il que cette astuce fonctionne également sur ce type de champ ? &lt;strong&gt;Et bien oui.&lt;/strong&gt; Je vous ai préparé &lt;a href=&quot;https://codepen.io/ffoodd/pen/vGJPLe&quot;&gt;un codePen de démonstration avec le champ de type image&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ce nʼest pas une révolution — et globalement personne ne sʼen servira — mais allez savoir.&lt;/p&gt;
&lt;p&gt;Notons tout de même que si la technique est amusante, &lt;strong&gt;vous ne devriez jamais avoir à vous en servir et vous assurer systématiquement que vos images sont bien là&lt;/strong&gt;. Les alternatives sont primordiales, mais si vous nʼavez pas dʼimage à afficher, mettez du texte 🙂&lt;/p&gt;
&lt;ol class=&quot;footnotes-list small mt2 pt2 pb2&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Impossible de vérifier, lorsque la source est présente, quʼelle est bel et bien valide. Dommage. &lt;a href=&quot;https://www.ffoodd.fr/les-champs-images-casses/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;</description>
					<pubDate>Thu, 31 Mar 2016 12:27:00 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/les-champs-images-casses/</guid>
					<frDate>31 mars 2016</frDate>
				</item>
				<item>
					<title>À qui parlent vos CSS ?</title>
					<link>https://www.ffoodd.fr/a-qui-parlent-vos-css/</link>
					<description>&lt;p&gt;Le dernier article rédigé par &lt;a href=&quot;https://mrmrs.cc/&quot;&gt;Adam Morse&lt;/a&gt; est amplement diffusé ces derniers jours, vous lʼaurez certainement déjà lu : « &lt;a href=&quot;https://mrmrs.io/writing/2016/03/24/scalable-css/&quot;&gt;&lt;em&gt;CSS and Scalability&lt;/em&gt;&lt;/a&gt; » — vous pouvez en lire &lt;a href=&quot;https://blog.perrien.fr/css-et-evolutivite/&quot;&gt;une traduction en Français&lt;/a&gt; sur le blog de Marc Perrien. Il y prône une méthode de rédaction des CSS dite « atomiques », issue du formidable travail de &lt;a href=&quot;https://cssmojo.com/&quot;&gt;Thierry Koblentz&lt;/a&gt; de Yahoo sur le projet &lt;a href=&quot;https://acss.io/&quot;&gt;Atomic CSS&lt;/a&gt;.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/a-qui-parlent-vos-css/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id=&quot;les-css-atomiques&quot; tabindex=&quot;-1&quot;&gt;Les CSS atomiques ⚛&lt;/h2&gt;
&lt;p&gt;La métaphore est la même que celle utilisée par &lt;a href=&quot;https://bradfrost.com/&quot;&gt;Brad Frost&lt;/a&gt; dans &lt;a href=&quot;https://atomicdesign.bradfrost.com/&quot;&gt;son livre (en cours de rédaction) sur le design atomique&lt;/a&gt;. Cependant là où Brad Frost file la métaphore jusquʼà la matière, les CSS atomiques se contentent des atomes et vous laissent vous débrouiller avec le reste.&lt;/p&gt;
&lt;p&gt;Pour résumer, &lt;strong&gt;une classe atomique ne dispose que dʼune seule propriété, avec une seule valeur&lt;/strong&gt;. Voici un exemple — tiré directement de &lt;a href=&quot;https://acss.io/frequently-asked-questions.html#how-is-atomic-css-different-than-using-inline-styles-&quot;&gt;la foire aux questions dʼAtomic CSS&lt;/a&gt; — qui devrait être plus clair :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.Fz(large)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;font-size&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 18px&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Vous démultipliez ce principe pour tous vos styles redondants, et vous obtenez des CSS atomiques. Il sʼagit dʼune optimisation massive des CSS en terme de poids, de spécificité, de portabilité. Les chiffres avancés par Thierry Koblentz sont ahurissants, et les explications données par ses présentations et la foire aux questions sont &lt;strong&gt;très convaincantes&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Cʼest lʼapproche également défendue par Adam Morse dans son article. Il pousse la réflexion encore plus loin en précisant que si cette conception est menée correctement, alors écrire du CSS devrait être lʼexception et non la règle.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Writing new css should be the exception, not the rule.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Je trouve ça bien. Et vous ? Cette méthode est indubitablement la meilleure &lt;strong&gt;à lʼheure actuelle&lt;/strong&gt; pour qui cherche à réduire ses CSS, ainsi que leur coût de production.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/a-qui-parlent-vos-css/#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Toutefois je pense que cette technique est à réserver exclusivement aux sites monstrueux, massifs, des balourds. Pour un intégrateur commun, qui travaille sur des sites plus ou moins simples, &lt;strong&gt;je suis persuadé que le jeu nʼen vaut pas la chandelle.&lt;/strong&gt; À mon avis, le site dʼAtomic CSS et lʼarticle dʼAdam Morse devraient le préciser : plus le site est petit, plus cette méthode coûte cher. Et je ne parle pas que sur le plan technique.&lt;/p&gt;
&lt;h2 id=&quot;interrogeons-la-destination-des-css&quot; tabindex=&quot;-1&quot;&gt;Interrogeons la destination des CSS&lt;/h2&gt;
&lt;h3 id=&quot;a-qui-sadressent-les-css-atomiques&quot; tabindex=&quot;-1&quot;&gt;À qui sʼadressent les CSS atomiques ?&lt;/h3&gt;
&lt;p&gt;Conceptuellement, cette approche déplace un certain nombre de chose. Pour commencer, elle induit quʼun intervenant ne touche plus les CSS directement.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/a-qui-parlent-vos-css/#fn3&quot; id=&quot;fnref3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Cependant afin que la magie opère, la plupart des sélecteurs comprenant des caractères spéciaux vont être échappés. &lt;strong&gt;Cʼest (très) difficile à lire pour un humain.&lt;/strong&gt; Pourtant jʼai déjà eu lʼoccasion de lire des CSS écrits de la sorte — notamment dans &lt;a href=&quot;https://github.com/yahoo/debugCSS/blob/master/debugCSS.css#L194&quot;&gt;debugCSS&lt;/a&gt;.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/a-qui-parlent-vos-css/#fn4&quot; id=&quot;fnref4&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Je pense que ce procédé est &lt;strong&gt;une technique dʼobfuscation des CSS&lt;/strong&gt;. Ces CSS ne sont pas fait pour être lus par un œil humain. Ils sont lʼexpression du système technique qui sous-tend une intégration graphique. Ils sont optimisés pour la machine.&lt;/p&gt;
&lt;h3 id=&quot;et-lhumain-dans-tout-ca&quot; tabindex=&quot;-1&quot;&gt;Et lʼhumain, dans tout ça ?&lt;/h3&gt;
&lt;p&gt;Vous lʼaurez compris, cet aspect me dérange un peu. &lt;strong&gt;Jʼaime rédiger mes CSS en imaginant que quelquʼun les lira&lt;/strong&gt;, que ce soit par curiosité — comme le fait Adam Morse.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/a-qui-parlent-vos-css/#fn5&quot; id=&quot;fnref5&quot;&gt;[5]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Il nʼy aura pas de problème particulier à reprendre un projet intégré à lʼaide de CSS atomiques, en revanche je subodore que ça semblera bien terne et froid. Aucun parti-pris, aucune manière personnelle de travailler, probablement &lt;strong&gt;aucun commentaire rigolo dans les sources&lt;/strong&gt;.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/a-qui-parlent-vos-css/#fn6&quot; id=&quot;fnref6&quot;&gt;[6]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Bref, aucune identité.&lt;/p&gt;
&lt;h2 id=&quot;dou-viennent-mes-css&quot; tabindex=&quot;-1&quot;&gt;Dʼoù viennent mes CSS ?&lt;/h2&gt;
&lt;p&gt;Jʼai une opinion, peut-être très mauvaise, sur lʼobjet des CSS : à mon avis, ils équivalent à une charte graphique. On y précise ce qui peut ou ne peut pas être fait, ce qui doit ou ne doit pas être fait.&lt;/p&gt;
&lt;p&gt;Et quand je parle de ce qui peut / doit être fait, &lt;strong&gt;je parle du HTML&lt;/strong&gt;. Je fais un peu mon &lt;em&gt;coming-out&lt;/em&gt;, mais oui, mon CSS sert de garde-fous pour le HTML. À dire vrai, un autre article à été largement diffusé il y a quelque temps déjà, à contre-courant de ce système nucléaire. Vous pourrez lire sur le blog dʼEbay &lt;a href=&quot;https://www.ebaytechblog.com/2015/11/04/how-our-css-framework-helps-enforce-accessibility/&quot;&gt;comment leur framework CSS les aide à renforcer lʼaccessibilité&lt;/a&gt;.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/a-qui-parlent-vos-css/#fn7&quot; id=&quot;fnref7&quot;&gt;[7]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Et cʼest chouette, je suis content de travailler de la sorte.Je ne suis jamais seul à intervenir, ni sur le HTML ni sur le CSS, et suis pourtant le seul intégrateur de métier dans mon équipe actuelle (comme dans la précédente lors de mon arrivée). Et ce genre de sélecteur qui se rapporte à un composant graphique est nettement plus &lt;strong&gt;compréhensible&lt;/strong&gt; par des profils non experts, voire même carrément &lt;strong&gt;attractif&lt;/strong&gt;. Et pour cause, en ne nécessitant pas dʼajouter des dizaines de classes précises pour former un composant mais une seule sur le conteneur, les développeurs sont heureux. Ils écrivent le bon HTML — chopé sur un guide de style, par exemple — et hop, ça marche.&lt;/p&gt;
&lt;p&gt;Nʼest-ce pas merveilleux ?&lt;/p&gt;
&lt;p&gt;Ce qui lʼest encore plus, cʼest que si jamais le HTML ne correspond pas (disons, par exemple, quʼil manque lʼattribut &lt;code&gt;alt&lt;/code&gt; sur une image) et bien les styles ne sʼappliquent pas. Que fait alors la personne qui se trompe, pour peu que vous lʼayez prévenue que ceci pourrait arriver ? Elle va lire vos CSS pour comprendre ce quʼil manque.&lt;/p&gt;
&lt;p&gt;Par ailleurs je trouve beaucoup plus naturel dʼécrire les styles de cette façon : on décrit quelque chose, après tout CSS est un langage descriptif. De plus &lt;strong&gt;nous pouvons parler facilement de ce sur quoi nous travaillons&lt;/strong&gt;, et pouvons même nous référer à un élément commun dans un guide de style ou une documentation quelconque.&lt;/p&gt;
&lt;p&gt;Nos CSS ne sont pas censées gonfler lorsquʼon a défini une architecture en amont. On a une somme peu ou prou figée pour nos besoins précis. En cas de refonte graphique la structure ne bouge pas, puisquʼelle est &lt;strong&gt;solidaire&lt;/strong&gt; du contenu.&lt;/p&gt;
&lt;p&gt;Je n’ai pas une vision mécanique de mes CSS, j’en ai une vision humaine : quelquʼun dʼautre (une personne) va les lire, chercher à les comprendre, les utiliser, les modifier peut-être. &lt;strong&gt;Je communique avec cette personne&lt;/strong&gt;, je documente, je commente, jʼinduis des erreurs pour obliger à lire, comprendre et respecter certaines bonnes pratiques.&lt;/p&gt;
&lt;h2 id=&quot;je-fais-erreur-et-apres&quot; tabindex=&quot;-1&quot;&gt;Je fais erreur, et après ?&lt;/h2&gt;
&lt;p&gt;Je sais, oui. Peu importe lʼapproche sur mes propos, &lt;strong&gt;il existe des façons de travailler qui ne me font pas écrire mes CSS de manière démodée&lt;/strong&gt;. On peut utiliser des outils pour vérifier que le HTML est correct.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/a-qui-parlent-vos-css/#fn8&quot; id=&quot;fnref8&quot;&gt;[8]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Donc encore une fois, &lt;strong&gt;je sais que mes propos ne feront pas le poids&lt;/strong&gt; comparés aux gains multiples en terme de performance, de vitesse, de maintenabilité, dʼautomatisation. Mais soyons honnêtes, le gain de poids pour un site &lt;em&gt;lambda&lt;/em&gt; nʼest pas si énorme&lt;a href=&quot;https://www.ffoodd.fr/a-qui-parlent-vos-css/#note-10&quot; title=&quot;Les chiffres avancés par Thierry Koblentz sont issus de sites très, très gros, pour lesquels les gains sont forcément énormes. Un site vitrine pour la boulangerie du coin aura assez peu à y gagner par rapport à une feuille de styles légère et précise, je pense.&quot;&gt;[10]&lt;/a&gt;. Certes, il reste dommageable pour un utilisateur de télécharger un octet supplémentaire, donc je suis dʼaccord : les CSS atomiques sont une idée absolument géniale, &lt;strong&gt;un gain véritable et très intelligent tant pour lʼutilisateur que pour le matériel&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Je trouve tout de même un intérêt bien supérieur dans mes échanges avec mes collègues ou camarades de métier. Jʼaime répondre aux questions. Jʼespère quʼun nouvel arrivant parcourant mes styles éprouvera du confort et aura envie dʼécrire de cette façon, tout comme un curieux qui lirait mes sources.&lt;/p&gt;
&lt;p&gt;Après tout, « &lt;em&gt;Code is poetry&lt;/em&gt; ».&lt;/p&gt;
&lt;ol class=&quot;footnotes-list small mt2 pt2 pb2&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Filez lire en détail le site en question, il se montre réellement instructif. &lt;a href=&quot;https://www.ffoodd.fr/a-qui-parlent-vos-css/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Entre autres avantages évidemment, le sujet est bien plus complexe quʼil nʼy paraît &lt;a href=&quot;https://www.ffoodd.fr/a-qui-parlent-vos-css/#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn3&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Je me demande bien comment on gère une refonte graphique dans ce cas : on reprend tout à zéro, ou on repasse sur tout le HTML ? &lt;a href=&quot;https://www.ffoodd.fr/a-qui-parlent-vos-css/#fnref3&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn4&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Cʼest une des sources dʼa11y.css, pour ceux qui suivent :p &lt;a href=&quot;https://www.ffoodd.fr/a-qui-parlent-vos-css/#fnref4&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn5&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Pour les feignasses, dans son article militant pour les CSS atomiques Adam Morse sʼappuie sur une habitude quʼil a prise : lire les CSS de certains sites, de bout en bout, pour apprendre des choses. Jʼaime beaucoup cette idée, je lʼai fait parfois. Cependant cela lui a inspiré dʼécrire moins de CSS :/ &lt;a href=&quot;https://www.ffoodd.fr/a-qui-parlent-vos-css/#fnref5&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn6&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Probablement très peu de commentaires tout court dʼailleurs, lʼoutil de Yahoo intitulé Atomizer générant les fichiers CSS en fonction de ce quʼil croise dans le HTML… Le CSS nʼest même jamais ouvert. &lt;a href=&quot;https://www.ffoodd.fr/a-qui-parlent-vos-css/#fnref6&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn7&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Je suis ravi de retrouver parmi les commentaires un article dʼHeydon Pickering sur Smashing Magazine à propos des sélecteurs intelligents. Et également surpris dʼy découvrir que Daniel Eden a poussé sur les CSS de DropBox une fonctionnalité qui ressemble beaucoup à celle dʼa11y.css, via un mixin simple. Je vais lire tout ça en détail ! &lt;a href=&quot;https://www.ffoodd.fr/a-qui-parlent-vos-css/#fnref7&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn8&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Par exemple a11y.css vérifie la présence de lʼalternative sur une image, ce qui permet de se passer dʼun sélecteur contraignant. De nombreux autres outils de bien meilleure qualité le font également. &lt;a href=&quot;https://www.ffoodd.fr/a-qui-parlent-vos-css/#fnref8&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;</description>
					<pubDate>Wed, 30 Mar 2016 12:07:39 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/a-qui-parlent-vos-css/</guid>
					<frDate>30 mars 2016</frDate>
				</item>
				<item>
					<title>La dette technique</title>
					<link>https://www.ffoodd.fr/la-dette-technique/</link>
					<description>&lt;p&gt;Et ça, cʼest vraiment chouette car leurs livres sont simples, efficaces, et très justes pour un prix vraiment très abordable — pour moi, en tout cas. Ils nous avaient déjà proposés lʼexcellent « &lt;a href=&quot;https://boutique.letrainde13h37.fr/products/petit-precis-de-creativite-virginie-caplet&quot;&gt;Petit Précis de Créativité&lt;/a&gt; » de Virginie Caplet, que je vous recommande chaudement !&lt;/p&gt;
&lt;h2 id=&quot;ca-fait-peur&quot; tabindex=&quot;-1&quot;&gt;Ça fait peur&lt;/h2&gt;
&lt;p&gt;Celui-ci ne démérite pas. Il est effectivement très simple à lire, ne fait pas de détours et ne tombe jamais dans les discours abscons dont sont friands les experts en tous genres. Fort dʼune expérience très riche en remboursement de dette technique — quʼil nʼhésite pas à partager à coups dʼanecdotes ou de démonstration — Bastien Jaillot nous fait cheminer à travers les différents aspects de son sujet.&lt;/p&gt;
&lt;p&gt;Généralement méconnu, souvent mal compris, ce sujet est vraiment délicat et peut se montrer intimidant voire effrayant de prime abord. Cʼest pourtant un phénomène naturel et inévitable, et ce livre a le mérite de démystifier la dette technique en expliquant clairement ses origines, ses causes, ses effets — mais aussi les problèmes quʼelle peut engendrer, les réactions qui peuvent apparaître et les diverses manières de gérer sa dette.&lt;/p&gt;
&lt;h2 id=&quot;mais-cest-humain&quot; tabindex=&quot;-1&quot;&gt;Mais cʼest humain&lt;/h2&gt;
&lt;p&gt;Jʼen retiens deux choses principalement, que jʼai découvertes ou verbalisées grâce à cet ouvrage :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;la dette technique est aussi un sujet humain et ne saurait être abordé sur le seul plan technique ;&lt;/li&gt;
&lt;li&gt;malgré le terme péjoratif qui constitue son appellation, cette dette nʼest pas nécessairement négative et il faut également savoir en contracter si elle peut contribuer à ajouter de la valeur à notre travail — le tout étant de conserver lʼobjectif de la rembourser, en définissant en amont les conditions attendues pour fournir lʼeffort nécessaire à ce remboursement.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Je force le trait évidemment, mais je ne souhaite que vous inciter à filer le lire ! Ce livre est important, il devrait vous plaire et surtout vous servir.&lt;/p&gt;
</description>
					<pubDate>Fri, 19 Feb 2016 14:03:53 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/la-dette-technique/</guid>
					<frDate>19 février 2016</frDate>
				</item>
				<item>
					<title>Un fichier vide</title>
					<link>https://www.ffoodd.fr/un-fichier-vide/</link>
					<description>&lt;p&gt;Et c’est bien normal. C’est ainsi que nous découvrons nos outils, les personnalisons et atteignons leurs limites (ainsi que les nôtres).&lt;/p&gt;
&lt;h2 id=&quot;eternels-insatisfaits&quot; tabindex=&quot;-1&quot;&gt;Éternels insatisfaits&lt;/h2&gt;
&lt;p&gt;Cependant aucun outil magique n’existe. Parmi les outils auxquels je pense, &lt;a href=&quot;https://getbootstrap.com/&quot;&gt;Bootstrap&lt;/a&gt; et &lt;a href=&quot;https://foundation.zurb.com/&quot;&gt;Foundation&lt;/a&gt; se tirent la bourre depuis quelques années pour le titre de « Meilleur &lt;em&gt;framework&lt;/em&gt; de l’année ». Cependant tout le monde leur trouve &lt;strong&gt;des défauts&lt;/strong&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;trop de dépendances ;&lt;/li&gt;
&lt;li&gt;trop de composants ;&lt;/li&gt;
&lt;li&gt;des choix techniques trop orientés ;&lt;/li&gt;
&lt;li&gt;des partis-pris graphiques trop saillant ;&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un peu plus récemment sont apparues &lt;strong&gt;des alternatives&lt;/strong&gt; — plus légères, agnostiques et moins élaborées graphiquement. On peut citer &lt;a href=&quot;https://rocssti.net/&quot;&gt;Röcssti&lt;/a&gt; de &lt;a href=&quot;https://www.nicolas-hoffmann.net/&quot;&gt;Nicolas Hoffmann&lt;/a&gt; ou &lt;a href=&quot;https://knacss.com/&quot;&gt;Knacss&lt;/a&gt; de &lt;a href=&quot;https://www.goetter.fr/&quot;&gt;Raphaël Goetter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Elles corrigent certains défauts des usines à gaz précédemment citées, mais ne sont pas pour autant exemptes de travers : elles reflètent les choix de leurs auteurs, et généralement &lt;strong&gt;nous n’aurions pas fait les mêmes&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;what-if&quot; tabindex=&quot;-1&quot;&gt;&lt;em&gt;What if?&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;Que se passerait-il si on détaillait vraiment les avantages de ces solutions ? Nous font-ils gagner autant de temps que nous l’imaginons ? &lt;em&gt;Quid&lt;/em&gt; de la charge de travail qu’impliquent l’appropriation et la personnalisation des ces outils ?&lt;/p&gt;
&lt;p&gt;Vous le savez peut-être déjà et l’aurez deviné sinon, je ne suis pas un grand fan des ces choses &lt;strong&gt;pré-mâchées&lt;/strong&gt;. Ces outils permettent de démarrer rapidement un projet et de montrer des pages presque instantanément — mais ils font également &lt;strong&gt;perdre un temps fou&lt;/strong&gt; dès qu’il s’agit de personnaliser le design, de rajouter des composants, ou d’optimiser les performances.&lt;/p&gt;
&lt;p&gt;Les solutions de Nicolas et Raphaël sont un brin plus intéressantes puisqu’&lt;strong&gt;elles sont personnelles&lt;/strong&gt; : vous y trouverez un condensé de leurs années d’expérience, des cas tordus qu’ils ont pu rencontrer. Cependant leur façon de nommer les choses, d’écrire leur code, et la limite qu’ils fixent entre une base propre et une ébauche de design leur est personnelle également. &lt;strong&gt;Peu de chances que vous vous y retrouviez totalement&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;mes-deux-centimes&quot; tabindex=&quot;-1&quot;&gt;Mes deux centimes&lt;/h2&gt;
&lt;p&gt;Fut un temps ou j’ai fourché.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/un-fichier-vide/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Désormais lorsque je travaille sur des projets personnels, j’ai adopté mon propre &lt;em&gt;framework&lt;/em&gt; prêt à l’emploi, simple d’utilisation, sans opinion ou choix technique contraignant, agnostique, sans parti-pris graphique…&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Un fichier vide&lt;/strong&gt;.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/un-fichier-vide/#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;ol class=&quot;footnotes-list small mt2 pt2 pb2&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;De l’anglicisme « forké » que je n’aime guère. &lt;a href=&quot;https://www.ffoodd.fr/un-fichier-vide/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Saint-Exupéry disait que « le désert est la seule chose qui ne puisse être détruite que par la construction ». J’y vois un lien :) &lt;a href=&quot;https://www.ffoodd.fr/un-fichier-vide/#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;</description>
					<pubDate>Fri, 12 Feb 2016 20:29:10 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/un-fichier-vide/</guid>
					<frDate>12 février 2016</frDate>
				</item>
				<item>
					<title>Marie Guillaumet</title>
					<link>https://www.ffoodd.fr/marie-guillaumet/</link>
					<description>&lt;p&gt;Bien faire et laisser braire&lt;/p&gt;
</description>
					<pubDate>Fri, 12 Feb 2016 20:28:52 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/marie-guillaumet/</guid>
					<frDate>12 février 2016</frDate>
				</item>
				<item>
					<title>NantesCSS</title>
					<link>https://www.ffoodd.fr/nantescss/</link>
					<description>&lt;p&gt;tl;dr : si vous êtes intéressés mais que ma prose vous importune, filez directement sur le &lt;a href=&quot;https://doodle.com/poll/7rv8ixe9tqc6kwdc&quot;&gt;Doodle&lt;/a&gt; proposant quelques dates, aux horaires du déjeuner.&lt;/p&gt;
&lt;h2 id=&quot;une-communaute-de-praticiens&quot; tabindex=&quot;-1&quot;&gt;Une communauté de praticiens&lt;/h2&gt;
&lt;p&gt;En arrivant chez &lt;a href=&quot;https://www.kosmos.fr/&quot;&gt;Kosmos&lt;/a&gt; mi 2014, jʼétais le troisième intégrateur en poste — après une décennie passée avec un seul intégrateur. Parmi les sujets de conversation émergeants, celui dʼune &lt;a href=&quot;https://fr.wikipedia.org/wiki/Communaut%C3%A9_de_pratique&quot;&gt;communauté de pratique&lt;/a&gt; mʼa particulièrement intéressé. Jʼai donc creusé le sujet et, sans parvenir à une application concrète au sein de Kosmos, en ai conservé lʼineffable envie de regrouper des intégrateurs pour causer de HTML et CSS — &lt;strong&gt;et plus si affinités&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;De plus, déjeuner régulièrement avec quelques camarades éclairés comme &lt;a href=&quot;https://emmanuel.clement.free.fr/&quot;&gt;Emmanuel Clément&lt;/a&gt;, &lt;a href=&quot;https://vincent-valentin.name/&quot;&gt;Vincent Valentin&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/shinze&quot;&gt;Gaëtan Ark&lt;/a&gt;, &lt;a href=&quot;https://jcbrebion.com/&quot;&gt;Jean-Christophe Brebion&lt;/a&gt; ou &lt;a href=&quot;https://marieguillaumet.com/&quot;&gt;Marie Guillaumet&lt;/a&gt; mʼa beaucoup motivé et appris. &lt;strong&gt;Jʼai envie de partager ça&lt;/strong&gt; !&lt;/p&gt;
&lt;p&gt;Ça me trotte dans la tête depuis un moment, au point dʼavoir un brouillon ici-même et quelques pages noircies dans mon carnet ; mais cʼétait mon sujet no2 derrière &lt;a href=&quot;https://github.com/ffoodd/a11y.css&quot;&gt;a11y.css&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;mais-cest-important-css&quot; tabindex=&quot;-1&quot;&gt;Mais cʼest important, CSS ?&lt;/h2&gt;
&lt;p&gt;Oui, parfois je trolle. Évidemment, cʼest important ! Le temps passe vite, sur le web. Aujourdʼhui, tout nʼest que JavaScript sur le web : les nouveaux &lt;em&gt;frameworks&lt;/em&gt;, les nouvelles spécifications, les nouvelles rustines pour se servir des nouvelles spécifications dans les nouveaux &lt;em&gt;frameworks&lt;/em&gt;…&lt;/p&gt;
&lt;p&gt;Et même les styles commencent à être gérés &lt;em&gt;via&lt;/em&gt; JavaScript. Elle est bien loin, lʼépoque ou la &lt;strong&gt;séparation des responsabilités&lt;/strong&gt; était primordiale (le fond, la forme, tout ça…).&lt;/p&gt;
&lt;p&gt;Alors pourquoi voguer à contre-courant et parler de CSS ? Tout simplement parce que peu importe la technologie ou le langage que vous utilisez — et peu importe que vous soyez un gourou, un hipster, un ninja ou &lt;a href=&quot;https://www.paris-web.fr/2015/conferences/la-veille-techno-pour-les-vieux-croutons.php&quot;&gt;un vieux croûton du web&lt;/a&gt; — &lt;strong&gt;vous ne servez que des interfaces en HTML et CSS saupoudrés de JavaScript&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Pour enfoncer une porte ouverte, sachez que sans HTML ni CSS votre JavaScript est à peu près &lt;a href=&quot;https://fr.wikipedia.org/wiki/Dodgeball_!_M%C3%AAme_pas_mal_!&quot;&gt;aussi utile quʼun parpaing à un morpion&lt;/a&gt;. Alors autant parler de langages utiles, non ?&lt;/p&gt;
&lt;h2 id=&quot;quand-soudain-les-grands-esprits&quot; tabindex=&quot;-1&quot;&gt;Quand soudain, les grands esprits&lt;/h2&gt;
&lt;p&gt;Comme on dit sur les internets, « un lien vaut mille paragraphes ». Alors voilà :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/WeAreSparkk&quot;&gt;@WeAreSparkk&lt;/a&gt; &lt;a href=&quot;https://twitter.com/shinze&quot;&gt;@shinze&lt;/a&gt; Bon ça serait pas mal de faire des meetup CSS-Nantes un jour non ?&lt;/p&gt;
&lt;p&gt;— Loïc Goyet (@loicgoyet) &lt;a href=&quot;https://twitter.com/loicgoyet/status/689453449897910272&quot;&gt;January 19, 2016&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Je ne connais pas encore &lt;a href=&quot;https://loicgoyet.github.io/&quot;&gt;Loïc Goyet&lt;/a&gt; ni lʼéquipe de &lt;a href=&quot;https://www.sparkk.fr/&quot;&gt;Sparkk&lt;/a&gt;, mais vais me faire une joie de les rencontrer et les découvrir. Pour la petite histoire, Gʼest Gaëtan Ark — avec lequel jʼavais probablement déjà évoqué lʼidée — qui mʼa &lt;em&gt;drafté&lt;/em&gt; dans la discussion, et en quelques minutes tout sʼest enchaîné :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/htmlvv&quot;&gt;@htmlvv&lt;/a&gt; &lt;a href=&quot;https://twitter.com/ffoodd_fr&quot;&gt;@ffoodd_fr&lt;/a&gt; &lt;a href=&quot;https://twitter.com/loicgoyet&quot;&gt;@loicgoyet&lt;/a&gt; &lt;a href=&quot;https://twitter.com/shinze&quot;&gt;@shinze&lt;/a&gt; &lt;a href=&quot;https://twitter.com/WeAreSparkk&quot;&gt;@WeAreSparkk&lt;/a&gt; &lt;a href=&quot;https://twitter.com/emmanuelc&quot;&gt;@emmanuelc&lt;/a&gt; &lt;a href=&quot;https://twitter.com/jcbrbn&quot;&gt;@jcbrbn&lt;/a&gt; Interessé aussi 🙂&lt;/p&gt;
&lt;p&gt;— Eric R (@NumEricR) &lt;a href=&quot;https://twitter.com/NumEricR/status/689508545008701440&quot;&gt;January 19, 2016&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Nous voilà au moins 8 à bord ! Et avec &lt;a href=&quot;https://twitter.com/NantesCSS&quot;&gt;un joli compte Twitter&lt;/a&gt; créé par Loïc.&lt;/p&gt;
&lt;h2 id=&quot;quelques-idees&quot; tabindex=&quot;-1&quot;&gt;Quelques idées&lt;/h2&gt;
&lt;h3 id=&quot;le-type-de-rencontre&quot; tabindex=&quot;-1&quot;&gt;Le type de rencontre&lt;/h3&gt;
&lt;p&gt;Le traditionnel &lt;em&gt;after work&lt;/em&gt; hébergé quelque part avec pizzas et bière peut être évoqué, tout comme les dîners avec un bon Chardonnay. Personnellement, jʼai une préférence pour les déjeuners, qui ont lʼavantage de na pas &lt;strong&gt;déformer votre journée&lt;/strong&gt; quand vous avez des enfants, des chats ou tout autre animal dépendant de vous à la maison. Et cʼest compatible avec les pizzas et la bière, tout comme (bientôt) avec les barbecues et les pique-niques.&lt;/p&gt;
&lt;h3 id=&quot;un-contenu-minimal&quot; tabindex=&quot;-1&quot;&gt;Un contenu minimal&lt;/h3&gt;
&lt;p&gt;Lʼobjectif est surtout de se rencontrer et dʼéchanger, à mon avis formaliser des interventions nʼest pas indispensable. Nous pourrions en programmer :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;une à chaque rencontre ;&lt;/li&gt;
&lt;li&gt;sur un format court de préférence ;&lt;/li&gt;
&lt;li&gt;sur un retour dʼexpérience, que ce soit le cas pratiquer dʼun projet ou la recherche sur un thème spécifique.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Quʼen dites-vous ? Mon rêve serait de réussir à définir un sujet au début de la rencontre, à force de discussion — et que quelquʼun tente &lt;strong&gt;une impro&lt;/strong&gt;. Ça mʼéclaterait vraiment, mais pas sûr que ça plaise à tout le monde !&lt;/p&gt;
&lt;h3 id=&quot;un-objectif-pedagogique&quot; tabindex=&quot;-1&quot;&gt;Un objectif pédagogique ?&lt;/h3&gt;
&lt;p&gt;Et comme jʼaime apprendre — mais aussi expliquer — je souhaiterai y saupoudrer un peu de pédagogie. La plupart des débutants en intégration que jʼai croisé ont des connaissances plutôt limitées sur de nombreuses choses, et une compréhension généralement étriquée du fonctionnement des CSS. Autrement dit, il me semble important de traiter autant &lt;strong&gt;des bases&lt;/strong&gt; que des nouveautés — si ce nʼest plus.&lt;/p&gt;
&lt;p&gt;De plus quelques cours dʼHistoire pourraient sʼavérer bénéfiques. Je pense à la découverte de CSS 1 (ce qui en reste, ce qui a disparu), aux nouveautés débarquées dans IE 4, au début du référencement (on parlait uniquement dʼannuaire, et les résultats étaient par ordre alphabétique), au DHTML, etc. Il me semble important de &lt;strong&gt;connaître le parcours&lt;/strong&gt; jusquʼà maintenant pour &lt;strong&gt;mieux saisir la situation&lt;/strong&gt; actuelle.&lt;/p&gt;
&lt;h3 id=&quot;produire-du-materiel&quot; tabindex=&quot;-1&quot;&gt;Produire du matériel ?&lt;/h3&gt;
&lt;p&gt;Et par matériel jʼentends matériel &lt;strong&gt;pédagogique&lt;/strong&gt;. Des projets comme &lt;a href=&quot;https://traindrop.github.io/&quot;&gt;TrainDrop&lt;/a&gt; existent et je pense que &lt;strong&gt;nous pourrions y participer&lt;/strong&gt;. Lʼobjectif est dʼéchanger, dʼapprendre, de faire des rencontres — alors &lt;strong&gt;pourquoi se limiter au moment présent&lt;/strong&gt; ?&lt;/p&gt;
&lt;h3 id=&quot;des-propositions-de-sujets&quot; tabindex=&quot;-1&quot;&gt;Des propositions de sujets&lt;/h3&gt;
&lt;p&gt;Parmi les sujets que nous pourrions aborder, Vincent nous suggère par exemple :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un cours sur &lt;code&gt;flexbox&lt;/code&gt; ;&lt;/li&gt;
&lt;li&gt;un comparatif des techniques pour faire des colonnes ;&lt;/li&gt;
&lt;li&gt;présenter vos derniers projets (perso ou pro).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;De mon côté, la première idée dont je ne parviens pas à me détacher est de parler de CSS 1. Je sais, je suis lourd !&lt;/p&gt;
&lt;h2 id=&quot;vous-venez&quot; tabindex=&quot;-1&quot;&gt;Vous venez ?&lt;/h2&gt;
&lt;p&gt;Alors voilà, il ne reste quʼà faire le premier pas. Et comme je suis un peu foufou, &lt;a href=&quot;https://doodle.com/poll/7rv8ixe9tqc6kwdc&quot;&gt;je vous propose des dates la semaine prochaine&lt;/a&gt;, aux horaires dʼune pause déjeuner classique. Vous pouvez évidemment mʼindiquer ici-même où sur Twitter si vous avez dʼautres plages horaires de prédilection, ou si la semaine prochaine est un peu tôt pour vous.&lt;/p&gt;
&lt;p&gt;PS : pour le nom, jʼavais pensé à &lt;strong&gt;la Communauté des Spécialistes des Styles&lt;/strong&gt;. Je sais, je ne suis pas réputé pour mon humour 😶&lt;/p&gt;
</description>
					<pubDate>Wed, 20 Jan 2016 14:59:51 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/nantescss/</guid>
					<frDate>20 janvier 2016</frDate>
				</item>
				<item>
					<title>Réserve d’espace pour le contenu</title>
					<link>https://www.ffoodd.fr/reserve-d%CA%BCespace-pour-le-contenu/</link>
					<description>&lt;p&gt;C’est ce quʼutilisent notamment Facebook et Medium, dont le contenu respecte un gabarit constant. En terme dʼinterface, ça me semble &lt;strong&gt;vraiment plus agréable&lt;/strong&gt; que le classique &lt;em&gt;ouroboros&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Et figurez-vous que pour le moment, tous &lt;strong&gt;les retours sont extrêmement positifs&lt;/strong&gt;. En session de test utilisateurs, la plupart des testeurs lʼont remarqué et ont tenu à le signaler comme un élément « très agréable ». Moi qui pensait mʼamuser à suivre un effet de mode à la mords-moi-le-nœud et être passé du côté obscur de la Force, me voilà confondu. Cet effet semble conférer une réelle valeur ajoutée à &lt;strong&gt;lʼexpérience utilisateur&lt;/strong&gt;, alors jʼaie envie de vous montrer ce quʼil y a sous le capot afin de partager et dʼaméliorer encore tout ça.&lt;/p&gt;
&lt;h2 id=&quot;quelques-recherches-pour-demarrer&quot; tabindex=&quot;-1&quot;&gt;Quelques recherches pour démarrer&lt;/h2&gt;
&lt;p&gt;Bon, bizarrement, je nʼai pas trouvé beaucoup de ressources pour faire ce truc. La plus visible est &lt;a href=&quot;https://codepen.io/Mestika/pen/ByNYBa&quot;&gt;une expérimentation sur codePen&lt;/a&gt; qui est franchement sale. Une soupe de &lt;code&gt;div&lt;/code&gt;, chacune positionnée en absolu et calée au pixel près. En revanche lʼarticle de lʼapprenti magicien est &lt;strong&gt;relativement&lt;/strong&gt; intéressant : « &lt;a href=&quot;https://cloudcannon.com/deconstructions/2014/11/15/facebook-content-placeholder-deconstruction.html&quot;&gt;&lt;em&gt;Facebook content placeholder deconstruction&lt;/em&gt;&lt;/a&gt; ». Très relativement, hein. Ça manque cruellement de référence donc si vous avez, elles mʼintéressent !&lt;/p&gt;
&lt;p&gt;En revanche il lie un autre article un peu plus intéressant qui aborde le sujet de lʼexpérience utilisateur : « &lt;a href=&quot;https://usabilitypost.com/2009/01/23/making-wait-times-feel-shorter/&quot;&gt;&lt;em&gt;Making Wait Times Feel Shorter&lt;/em&gt;&lt;/a&gt; » de Dmitry Fadeyev. Jʼen retiens surtout la dernière phrase :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This isn’t just simple courtesy, watching the progress bar move makes time fly faster.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Je traduis sommairement : ce nʼest pas une simple question de courtoisie, regarder lʼindicateur de progression fait passer le temps plus vite. Ma foi, ça a du sens. Dans cet article, lʼauteur préconise également de spécifier le délai dʼattente quand cʼest possible afin que lʼutilisateur &lt;strong&gt;sache à quoi sʼattendre&lt;/strong&gt;. Et bien cet effet de faux contenu en attendant le contenu réel donne une indication plus précise du format de données que lʼon attend et nous permet dʼ&lt;strong&gt;anticiper la lecture du contenu&lt;/strong&gt; et de &lt;strong&gt;nous projeter dans son parcours&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;faire-plus-simple&quot; tabindex=&quot;-1&quot;&gt;Faire plus simple&lt;/h2&gt;
&lt;h3 id=&quot;utiliser-un-element-graphique&quot; tabindex=&quot;-1&quot;&gt;Utiliser un élément graphique&lt;/h3&gt;
&lt;p&gt;Tout ça est bien joli, mais niveau code cʼest quand même assez moyen (à mon goût en tout cas). Par exemple nous parlons ici dʼun effet purement graphique — voire esthétique — alors pourquoi utiliser des éléments HTML pour le fabriquer ? Un élément graphique semble plus adapté, et ô comble de joie il est possible dʼutiliser des images en HTML depuis 1994.&lt;/p&gt;
&lt;h3 id=&quot;prevoir-une-alternative&quot; tabindex=&quot;-1&quot;&gt;Prévoir une alternative&lt;/h3&gt;
&lt;p&gt;Cʼest un &lt;strong&gt;visuel porteur dʼinformations&lt;/strong&gt;, et à ce titre il doit disposer dʼune &lt;strong&gt;alternative textuelle pertinente&lt;/strong&gt;. Je vous laisse (re)lire le critère associé du RGAA qui, comme pour témoigner de son importance, porte le doux nom de &lt;a href=&quot;https://references.modernisation.gouv.fr/referentiel-technique-0#title-critre-11-a-chaque-image-a-t-elle-une-alternative-textuelle-&quot;&gt;critère 1.1&lt;/a&gt;. Ce point nʼest &lt;em&gt;a priori&lt;/em&gt; pas très complexe à mettre en œuvre.&lt;/p&gt;
&lt;h3 id=&quot;faire-passer-le-temps&quot; tabindex=&quot;-1&quot;&gt;Faire passer le temps&lt;/h3&gt;
&lt;p&gt;Il ne faudrait pas omettre que lʼobjectif est avant tout de faire patienter lʼutilisateur de la manière la plus agréable possible. Pour cela nous évitons le (très frustrant) petit disque qui tourne en rond, cʼest déjà bien. Mais &lt;strong&gt;si lʼexpérience peut sʼavérer agréable&lt;/strong&gt;, ce serait encore mieux ! À cette unique fin, je vais suivre les exemples de Facebook et Medium qui ont mis en place un effet de balayage lumineux afin de cadencer le temps dʼattente.&lt;/p&gt;
&lt;h2 id=&quot;super-ca-donne-quoi&quot; tabindex=&quot;-1&quot;&gt;Super ! Ça donne quoi ?&lt;/h2&gt;
&lt;h3 id=&quot;creer-limage-dattente&quot; tabindex=&quot;-1&quot;&gt;Créer lʼimage dʼattente&lt;/h3&gt;
&lt;p&gt;Pour démarrer, on va choisir un contenu quʼon pourrait attendre. Jʼen ai choisi un assez connu et avec un gabarit familier et reconnaissable : la carte de profil sur Twitter.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://www.ffoodd.fr/images/2015/12/profil-twitter.png&quot; alt=&quot;Ma carte de profil sur Twitter&quot; width=&quot;300&quot; height=&quot;202&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;figcaption&gt;La carte de profil indique le nom, le pseudonyme et l’avatar Twitter, mais aussi les nombres de tweets, d’abonnements et d’abonnés.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Cʼest donc la-dessus que va se baser la création du visuel dʼattente. Sur le principe, je me contente de créer un bloc en aplat gris par élément, afin de &lt;strong&gt;représenter sa masse visuelle&lt;/strong&gt;.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/reserve-d%CA%BCespace-pour-le-contenu/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://www.ffoodd.fr/images/2015/12/twitter-placeholder.png&quot; alt=&quot;Gabarit de carte de profil twitter&quot; width=&quot;300&quot; height=&quot;201&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;figcaption&gt;Gabarit de carte de profil twitter représenté en masses colorées&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Bon, jʼadmets également avoir exporté un SVG plutôt quʼune bête image bitmap. Pour tout vous dire ça nʼest pas nécessairement le meilleur choix, étant donné que pour une image aussi simple &lt;strong&gt;le SVG est plus lourd&lt;/strong&gt; quʼun PNG bien optimisé et quʼ&lt;strong&gt;on perd nécessairement en support navigateur&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;implementer-une-alternative-accessible&quot; tabindex=&quot;-1&quot;&gt;Implémenter une alternative accessible&lt;/h3&gt;
&lt;p&gt;Pour celui-ci aucun mérite, puisque lʼaccessibilité des SVG commence à être bien documentée. Je vous laisse farfouiller un peu les artères du web pour trouver votre bonheur — personnellement jʼai abouti à ceci :&lt;/p&gt;
&lt;pre class=&quot;language-markup&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;svg&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;viewBox&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;0 0 320 215&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;320&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;215&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
   &lt;span class=&quot;token attr-name&quot;&gt;aria-labelledby&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;title desc&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;role&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;img&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
   &lt;span class=&quot;token attr-name&quot;&gt;xmlns&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://www.w3.org/2000/svg&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; 
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;title&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;title&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Chargement en cours…&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;desc&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;desc&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;La carte de profil est en chemin !&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;desc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;path&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;role&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;presentation&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;…&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;svg&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Je vous passe les détails sordides des multiples &lt;code&gt;&amp;lt;path&amp;gt;&lt;/code&gt; dans le SVG, vous pourrez jouer avec dans la démo — et accessoirement, cʼest une partie que vous devrez personnaliser, donc… Mais normalement ce magnifique assortiment de &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; et &lt;code&gt;&amp;lt;desc&amp;gt;&lt;/code&gt; liés au SVG &lt;em&gt;via&lt;/em&gt; &lt;code&gt;aria-labelledby&lt;/code&gt; fait lʼaffaire et rend le tout intelligible.&lt;/p&gt;
&lt;h3 id=&quot;implementer-une-animation&quot; tabindex=&quot;-1&quot;&gt;Implémenter une animation&lt;/h3&gt;
&lt;h4 id=&quot;on-est-dans-du-svg&quot; tabindex=&quot;-1&quot;&gt;On est dans du SVG&lt;/h4&gt;
&lt;p&gt;À lʼaube du premier jour, jeune et fougueux que jʼétais, je me suis dit « Yay, dans du SVG, je vais enfin pouvoir jouer avec SMIL ». &lt;em&gt;Que nenni&lt;/em&gt; !&lt;/p&gt;
&lt;p&gt;Deux (plutôt) bonnes raisons de sʼen dispenser :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://caniuse.com/#search=SMIL&quot;&gt;Le support est très moyen&lt;/a&gt;, notamment absent des navigateurs Microsoft ;&lt;/li&gt;
&lt;li&gt;Chrome et Opéra lancent (depuis deux ou trois versions) une alerte dans la console lorsquʼon utilise SMIL, quʼils considèrent déprécié et dont ils vont abandonner le support un beau matin.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ça nʼest guère glorieux, même si &lt;a href=&quot;https://designmodo.com/animate-svg-gradients/&quot;&gt;un charmant tutoriel en anglais&lt;/a&gt; me montrait quʼon pouvait facilement animer un dégradé en remplissage dʼun SVG. Dommage.&lt;/p&gt;
&lt;h4 id=&quot;mais-on-fait-du-css&quot; tabindex=&quot;-1&quot;&gt;Mais on fait du CSS&lt;/h4&gt;
&lt;p&gt;Cʼest donc finalement vers les animations CSS que je dois me tourner. Cʼest moins rigolo puisque je connais déjà, mais au moins &lt;a href=&quot;https://caniuse.com/#search=animation&quot;&gt;le support est excellent&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;En revanche &lt;strong&gt;impossible dʼanimer &lt;em&gt;via&lt;/em&gt; CSS le remplissage dʼun SVG&lt;/strong&gt;. Le SVG sera donc rempli en aplat, et il va falloir se débrouiller autrement pour lʼeffet de balayage. Voilà comment jʼai réssolu la chose :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un dégradé linéaire allant du transparent au transparent — afin de profiter du merveilleux SVG derrière — en passant par une étape de blanc pour apporter la lumière en ce bas-monde ;&lt;/li&gt;
&lt;li&gt;une dimension dʼarrière-plan pour ajuster la mise en scène du dégradé ;&lt;/li&gt;
&lt;li&gt;et finalement, une animation dont la seule préoccupation est de déplacer lʼarrière-plan.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cʼest donc un poil plus complexe que de simplement remplir le SVG avec un dégradé qui sʼanime tout seul, mais bon ! En revanche il ne vous aura probablement pas échappé quʼil nous faut cette animation &lt;strong&gt;devant&lt;/strong&gt; le SVG. Et pour cela un pseudo-élément serait fort agréable. Malheureusement &lt;a href=&quot;https://github.com/ffoodd/a11y.css/blob/main/README-fr.md&quot;&gt;SVG est un élément remplacé&lt;/a&gt;, ce qui empêche de lui appliquer un pseudo-élément. Pour pouvoir implémenter lʼanimation, il nous faut donc un élément conteneur qui portera le pseudo-élément (ce même conteneur qui pourrait fort bien vous servir dans un contexte adaptatif ou simplement pour la mise en page).&lt;/p&gt;
&lt;h2 id=&quot;la-demonstration&quot; tabindex=&quot;-1&quot;&gt;La démonstration&lt;/h2&gt;
&lt;p&gt;En supposant que vous utilisez une division comme conteneur, voici les styles du pseudo-élément :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;
&lt;span class=&quot;token selector&quot;&gt;div::after&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;animation&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; placeholder 2s linear infinite&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;background-image&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 
  &lt;span class=&quot;token function&quot;&gt;linear-gradient&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; 
  110deg&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token function&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; 255&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 255&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 255&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; 10%&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token function&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; 255&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 255&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 255&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; .33&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; 30%&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token function&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; 255&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 255&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 255&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; 60% 
  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;background-size&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 20em 13.4375em&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;bottom&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;left&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; absolute&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;right&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;top&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;z-index&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 2&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Un détail peut vous surprendre : je nʼutilise pas le mot-clé &lt;code&gt;transparent&lt;/code&gt; mais la notation &lt;code&gt;rgba( 255, 255, 255, 0 )&lt;/code&gt;. Peut-être le savez-vous déjà mais le mot-clé qui semble définir la transparence est en réalité une notation raccourcie de &lt;code&gt;rgba( 0, 0, 0, 0 )&lt;/code&gt;, &lt;a href=&quot;https://www.w3.org/TR/css3-color/#transparent&quot;&gt;comme le précise la spécification du module « Couleurs » de CSS3&lt;/a&gt;. Ça nʼa lʼair de rien comme ça, mais ça a son importance si vous appliquez un dégradé — disons du blanc au transparent, par exemple — et que vous regardez le résultat sur Safari : il interpole le dégradé en tendant vers le noir (ce qui est relativement logique) et vous donne donc un intermédiaire immonde entre votre blanc nacré et votre transparence parfaite. Un gros pâté noir, quoi. &lt;strong&gt;Bref, cʼest moche&lt;/strong&gt;. Utiliser le blanc avec une opacité nulle résout facilement ce travers.&lt;/p&gt;
&lt;p&gt;Ensuite pour animer le dégradé, cʼest plutôt simple puisque vous avez déjà vu lʼappel à lʼanimation &lt;code&gt;placeholder&lt;/code&gt;, pour une durée de deux secondes et en boucle. Elle se contente de déplacer le fond dʼune distance équivalente à la largeur du bloc, afin de générer une véritable boucle visuelle.&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;
&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@keyframes&lt;/span&gt; placeholder&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;  
  &lt;span class=&quot;token selector&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; 
  &lt;span class=&quot;token property&quot;&gt;background-position&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; -10em 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; 
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token selector&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; 
  &lt;span class=&quot;token property&quot;&gt;background-position&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 10em 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; 
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Et voilà !&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Si vous souhaitez jouer avec ou le reprendre, &lt;a href=&quot;https://dabblet.com/gist/466b6a47db1b4ac14ecb&quot;&gt;vous trouverez le tout sur Dabblet&lt;/a&gt;. Rien de bien complexe, mais cʼest tellement simple et efficace quʼil serait dommage de sʼen priver 😇&lt;/p&gt;
&lt;ol class=&quot;footnotes-list small mt2 pt2 pb2&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Cʼest le même principe que le gris typographique en composition de page. &lt;a href=&quot;https://www.ffoodd.fr/reserve-d%CA%BCespace-pour-le-contenu/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;</description>
					<pubDate>Thu, 03 Dec 2015 13:30:49 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/reserve-d%CA%BCespace-pour-le-contenu/</guid>
					<frDate>3 décembre 2015</frDate>
				</item>
				<item>
					<title>Un test Modernizr pour les contrastes élevés</title>
					<link>https://www.ffoodd.fr/un-test-modernizr-pour-les-contrastes-eleves/</link>
					<description>&lt;p&gt;Malheureusement, il ne répond pas correctement lorsque lʼutilisateur a personnalisé les couleurs des liens ou utilise un thème navigateur aux contrastes élevés — ce que jʼai testé avec Firefox. En sus, et bien quʼil soit conçu de façon à renvoyer un booléen, il se couple difficilement avec un outil spécialisé tel que &lt;a href=&quot;https://modernizr.com/&quot;&gt;Modernizr&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;les-changements&quot; tabindex=&quot;-1&quot;&gt;Les changements&lt;/h2&gt;
&lt;p&gt;On va faire simple, puisque vous avez lʼexemple de Karl Groves en amont ! Les seules modifications apportées sont :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un peu de nettoyage, principalement des variables inutiles ;&lt;/li&gt;
&lt;li&gt;lʼélément créé est un lien au lieu dʼune division ;&lt;/li&gt;
&lt;li&gt;la condition finale pour renvoyer le booléen a été allégée.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;le-code&quot; tabindex=&quot;-1&quot;&gt;Le code&lt;/h2&gt;
&lt;p&gt;Pas de miracle, lʼajout de test dans Modernizr est &lt;a href=&quot;https://modernizr.com/docs#modernizr-addtest&quot;&gt;bien documenté&lt;/a&gt;. Voici ce que jʼai réalisé — qui est probablement améliorable.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/un-test-modernizr-pour-les-contrastes-eleves/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;
Modernizr&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addTest&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;highcontrast&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; objA &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;createElement&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;a&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  strColor&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  objA&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;style&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;color &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;rgb(31, 41, 59)&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;documentElement&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;appendChild&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;objA&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  strColor &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;defaultView &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;defaultView&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getComputedStyle&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;objA&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;color &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; objA&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;currentStyle&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;color&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  strColor &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; strColor&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;replace&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token regex&quot;&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token regex-source language-regex&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token regex-flags&quot;&gt;g&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;documentElement&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;removeChild&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;objA&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; strColor &lt;span class=&quot;token operator&quot;&gt;!==&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;rgb(31,41,59)&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Rien de bien méchant 😊 Jʼai créé &lt;a href=&quot;https://codepen.io/ffoodd/pen/RWmmOO&quot;&gt;un CodePen dédié uniquement à ce test&lt;/a&gt; avec quelques commentaires et une illustration basique en HTML.&lt;/p&gt;
&lt;h2 id=&quot;la-couverture&quot; tabindex=&quot;-1&quot;&gt;La couverture&lt;/h2&gt;
&lt;p&gt;Pour commencer, cette version est un test Modernizr. Nul besoin de télécharger tout la bibliothèque de tests cependant, sa seule et unique dépendance est la méthode &lt;code&gt;addTest()&lt;/code&gt;, dont lʼoutil de construction personnalisée de Modernizr indique quʼelle pèse 2,53 kB (et 1,08 kB une fois compressé avec gzip).&lt;/p&gt;
&lt;p&gt;Ensuite et pour le cas ou vous ne liriez pas couramment le JavaScript, le test procède ainsi :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;il crée un lien ;&lt;/li&gt;
&lt;li&gt;il attache ce dernier au document &lt;/li&gt;
&lt;li&gt;il lʼaffuble dʼune couleur &lt;em&gt;via&lt;/em&gt; CSS ;&lt;/li&gt;
&lt;li&gt;il récupère la valeur calculée pour la couleur du lien ;&lt;/li&gt;
&lt;li&gt;il supprime le lien créé au début ;&lt;/li&gt;
&lt;li&gt;et il renvoie finalement une affirmation quʼon peut formuler ainsi : « la couleur calculée est-elle égale à la couleur définie par le test ? ».&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Le résultat est donc soit vrai, soit faux (cʼest le principe du &lt;a href=&quot;https://fr.wikipedia.org/wiki/Bool%C3%A9en&quot;&gt;booléen&lt;/a&gt;). Donc pour résumer, ce test vérifie que la couleur calculée par le navigateur correspond à la couleur quʼon lui demande : si ce nʼest pas le cas, lʼutilisateur interfère avec les styles envoyés dʼune manière ou dʼune autre. Les cas les plus courants sont &lt;strong&gt;le mode de contrastes élevés&lt;/strong&gt; du système dʼexploitation, et &lt;strong&gt;les styles utilisateurs&lt;/strong&gt; fournis par le navigateur sur demande de lʼutilisateur.&lt;/p&gt;
&lt;p&gt;Ce test répond correctement dans deux cas précis identifiés :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;le mode de contrastes élevés de Windows, testé avec Edge et Firefox ;&lt;/li&gt;
&lt;li&gt;les paramètres de personnalisation de thème et couleurs dans Firefox, sur tous les systèmes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il serait génial de tester plus avant dʼautres configurations, afin de préciser la couverture et de repérer dʼéventuels faux positifs ou négatifs. Jʼai créé &lt;a href=&quot;https://gist.github.com/ffoodd/78f99204b5806e183574&quot;&gt;un Gist&lt;/a&gt; dʼaprès le CodePen précédemment lié — nʼhésitez pas à le forker, le commenter, le triturer comme bon vous semble !&lt;/p&gt;
&lt;ol class=&quot;footnotes-list small mt2 pt2 pb2&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Ceci est une invitation, toutes les aimables personnes qui apporteront leur aide auront droit à ma gratitude éternelle et plein de trucs dans ce goût-là. &lt;a href=&quot;https://www.ffoodd.fr/un-test-modernizr-pour-les-contrastes-eleves/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;</description>
					<pubDate>Wed, 25 Nov 2015 16:06:44 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/un-test-modernizr-pour-les-contrastes-eleves/</guid>
					<frDate>25 novembre 2015</frDate>
				</item>
				<item>
					<title>Le soulignement factice</title>
					<link>https://www.ffoodd.fr/le-soulignement-factice/</link>
					<description>&lt;p&gt;Je vous enjoins à lire la « &lt;a href=&quot;https://letrainde13h37.fr/43/signaletique-hyperliens/&quot;&gt;Signalétique des hyperliens&lt;/a&gt; » sur le train de 13 h 37, par &lt;a href=&quot;https://twitter.com/tetue&quot;&gt;Romy Duhem-Verdière&lt;/a&gt;. On y apprend notamment que — typographiquement parlant — le souligné nʼest dʼaucune utilité, sauf éventuellement à palier lʼabsence dʼitalique (ce qui est somme toute assez rare). En revanche sur le web, cʼest &lt;strong&gt;le meilleur moyen de signaler un lien&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;graphiquement-grossier&quot; tabindex=&quot;-1&quot;&gt;Graphiquement grossier&lt;/h2&gt;
&lt;p&gt;Le souligné ordinaire est effectivement grossier : cʼest un reliquat des toutes premières typographies affichées sur un écran — que je nʼai pas eu la chance de croiser. Vous pouvez le constater avec cet exemple de souligné ordinaire.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/le-soulignement-factice/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Sur le plan visuel, le souligné croise les jambages inférieures, ce qui crée un attroupement inopportun de pixels quʼon pourrait qualifier de « petits pâtés ».&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/le-soulignement-factice/#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Quelques tentatives existaient déjà il y a fort longtemps, comme en témoigne &lt;a href=&quot;https://alistapart.com/article/customunderlines&quot;&gt;lʼarticle de Susan Robertson sur A List Apart&lt;/a&gt; qui utilisait &lt;code&gt;background-image&lt;/code&gt; pour mettre un une image répétée en guise de soulignement. Ça peut sembler étrange — notamment quand vous aurez vu les exemples animés — mais en 2004, cʼétait parfaitement fabuleux.&lt;/p&gt;
&lt;h2 id=&quot;le-truchement-css&quot; tabindex=&quot;-1&quot;&gt;Le truchement CSS&lt;/h2&gt;
&lt;p&gt;On ne peut malheureusement pas &lt;strong&gt;encore&lt;/strong&gt; intervenir sur la propriété &lt;code&gt;text-decoration: underline;&lt;/code&gt; de façon satisfaisante. Ce sera en revanche le cas un jour avec &lt;code&gt;text-decoration-skip: ink;&lt;/code&gt; qui est &lt;a href=&quot;https://drafts.csswg.org/css-text-decor-3/#text-decoration-skip-property&quot;&gt;à lʼétat de brouillon au W3C (en anglais)&lt;/a&gt;. Il nʼexiste actuellement aucun support de cette propriété, cependant &lt;a href=&quot;https://css-tricks.com/almanac/properties/t/text-decoration-skip/&quot;&gt;celle-ci est émulée sur les engins Apple omme le mentionne Chris Coyier sur CSS-Tricks (en anglais)&lt;/a&gt;. En attendant, vous allez voir que Susan Robertson était déjà sur la bonne piste il y a 10 ans.&lt;/p&gt;
&lt;p&gt;Lʼastuce — &lt;em&gt;a priori&lt;/em&gt; trouvée par Marcin Wichary pour Medium et expliquée dans « &lt;a href=&quot;https://medium.com/designing-medium/crafting-link-underlines-on-medium-7c03a9274f9#.hhqigq2dq&quot;&gt;Crafting link underlines on Medium&lt;/a&gt; » — consiste à supprimer le &lt;code&gt;text-decoration&lt;/code&gt; et le trucher à lʼaide dʼun dégradé pour la ligne, et dʼune ombre portée sur le texte pour « nettoyer les jambages ». Comme Susan Robertson, nous allons nous servir de la propriété &lt;code&gt;background-image&lt;/code&gt;, mais au lieu de charger un gif nous utiliserons la fonction &lt;code&gt;linear-gradient();&lt;/code&gt;. Si vous nʼêtes pas encore familier avec les dégradés, prenez le temps de lire &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/CSS/linear-gradient&quot;&gt;la page dédiée aux dégradés en CSS sur MDN&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;du-code-du-code&quot; tabindex=&quot;-1&quot;&gt;Du code, du code !&lt;/h2&gt;
&lt;p&gt;Jʼai croisé plusieurs implémentations de cette solution, toutes très intéressantes mais aucune ne fonctionnant « telle quelle ». En voici deux notables :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/edwardtufte/tufte-css/blob/master/tufte.css#L237&quot;&gt;la méthode utilisée par tufte-CSS (sur Github)&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eager.io/blog/smarter-link-underlines/&quot;&gt;la réflexion menée par Adam Schwartz pour Eager (en anglais)&lt;/a&gt; avec une illustration interactive particulièrement réussie.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ça donne suffisamment de matière pour avancer, donc jʼai trituré tout ça jusquʼà obtenir un résultat satisfaisant mes besoins. Vous en trouverez &lt;a href=&quot;https://codepen.io/ffoodd/pen/jbRMqJ/&quot;&gt;un aperçu rigolo sur CodePen&lt;/a&gt;. Pour les feignasses, voici le CSS incriminé :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;
&lt;span class=&quot;token selector&quot;&gt;.underline&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;text-decoration&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; underline&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;.no-highcontrast.cssgradients .underline&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;background&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; white 0 88% / 100% 0.1rem no-repeat content-box content-box&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;background-image&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 
  &lt;span class=&quot;token function&quot;&gt;linear-gradient&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;255&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 255&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 255&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; .67&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token function&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;255&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 255&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 255&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; .67&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  &lt;span class=&quot;token function&quot;&gt;linear-gradient&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  currentColor&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  currentColor
  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; inline&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;text-decoration&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; none&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;text-shadow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 
  .05rem 0 0 white&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
 -.05rem 0 0 white&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  .1rem 0 0 white&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
 -.1rem 0 0 white&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  .2rem 0 0 white&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
 -.2rem 0 0 white&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; auto&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;/* Pour la sélection */&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;/* https://developer.mozilla.org/en-US/docs/Web/CSS/::selection */&lt;/span&gt;
&lt;span class=&quot;token selector&quot;&gt;.no-highcontrast.cssgradients .underline::-moz-selection&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;background-color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; black&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; white&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;text-shadow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; none&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;.no-highcontrast.cssgradients .underline::selection&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;background-color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; black&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; white&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;text-shadow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; none&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@media&lt;/span&gt; screen &lt;span class=&quot;token keyword&quot;&gt;and&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;-ms-high-contrast&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; active&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token selector&quot;&gt;.underline&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;background&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; none &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;text-decoration&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; underline &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Vous noterez les occurrences multiples de la couleur blanche — tant sous la forme du mot-clé &lt;code&gt;white&lt;/code&gt; que de sa notation &lt;code&gt;rgba()&lt;/code&gt;. Simplement parce que mon exemple à un arrière-plan blanc. Évidemment si votre texte repose sur un fond coloré, ces valeurs doivent &lt;strong&gt;respecter la couleur dʼarrière-plan&lt;/strong&gt;.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/le-soulignement-factice/#fn3&quot; id=&quot;fnref3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Petite astuce à prendre en considération, le second paramètre du &lt;em&gt;mixin&lt;/em&gt; concerne la position du soulignement &lt;strong&gt;par rapport à la hauteur de lʼélément&lt;/strong&gt;. Je ne suis pas parvenu à rendre ça dispensable, le changement de corps et de caractères entraînant une trop grande variation sur la hauteur de ligne. Dans mes différents cas, la position varie entre 88% et 96%.&lt;/p&gt;
&lt;h2 id=&quot;cest-pas-un-peu-verbeux&quot; tabindex=&quot;-1&quot;&gt;Cʼest pas un peu verbeux ?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Si&lt;/strong&gt;. Pour plusieurs raisons que je tente de vous expliquer :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;les propriétés dʼarrière-plan sont très riches, avec dans la notation raccourcie :
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;background-color&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;&lt;code&gt;background-position&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;&lt;code&gt;background-size&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;&lt;code&gt;background-repeat&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;&lt;code&gt;background-origin&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;&lt;code&gt;background-clip&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;deux dégradés, dont le premier (couleur dʼarrière-plan en semi-transparent) sert à alléger visuellement le second — qui utilise &lt;code&gt;currentColor&lt;/code&gt; pour conserver la couleur du texte sur lequel il est appliqué ;&lt;/li&gt;
&lt;li&gt;lʼombre sur le texte, dont le seul et unique objectif est dʼéviter la collision entre les jambages inférieurs et le soulignement ;&lt;/li&gt;
&lt;li&gt;et deux propriétés auxquelles vous ne vous attendiez peut-être pas : &lt;code&gt;display: inline;&lt;/code&gt; et &lt;code&gt;width: auto;&lt;/code&gt; dont lʼintérêt est de sʼassurer que notre charmant souligné suive bien le texte &lt;strong&gt;et uniquement le texte&lt;/strong&gt;.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/le-soulignement-factice/#fn4&quot; id=&quot;fnref4&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;les classes de tests du support des dégradés CSS et de lʼactivation du mode de contrastes élevés.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ça fait beaucoup de code, mais tout est indispensable.&lt;/p&gt;
&lt;h2 id=&quot;et-laccessibilite&quot; tabindex=&quot;-1&quot;&gt;Et lʼaccessibilité ?&lt;/h2&gt;
&lt;p&gt;Pour commencer, il est nécessaire de mettre en place deux scripts fonctionnant sur le même principe :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;un test de fonctionnalité tel que &lt;em&gt;Modernizr&lt;/em&gt; — &lt;a href=&quot;https://modernizr.com/download?setclasses&amp;amp;q=gradient&quot;&gt;dont vous pouvez générer une version uniquement pour les dégradés CSS&lt;/a&gt; — afin dʼappliquer ce CSS de soulignement uniquement si le navigateur supporte les dégradés ;&lt;/li&gt;
&lt;li&gt;un second test pour &lt;strong&gt;détecter lʼactivation du mode de contrastes élevés&lt;/strong&gt; — qui supprime les arrières-plans et laisserait donc nos éléments soulignés complètement nus et sans soulignement — mais qui détecte également si &lt;strong&gt;lʼutilisateur a personnalisé la couleur des liens&lt;/strong&gt; : vous trouverez la source sur &lt;a href=&quot;https://jsfiddle.net/karlgroves/XR8Su/6/&quot;&gt;un JSFiddle de Karl Groves&lt;/a&gt; du Paciello Group (quʼil a lui-même récupéré de Hans Hillen) que jʼai modifié afin de tester un lien plutôt quʼune division.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Les navigateurs ne supportant pas les dégradés ou étant utilisé conjointement au mode de contrastes élevés resteront avec leur bon vieux &lt;code&gt;text-decoration: underline;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Un autre cas pointu est à signaler : &lt;strong&gt;la sélection du texte en question&lt;/strong&gt;. Il est impossible à ma connaissance de simplement supprimer les styles ajoutés (&lt;code&gt;unset&lt;/code&gt; sert &lt;em&gt;a priori&lt;/em&gt; à ça, mais son fonctionnement et son support ne sont pas convaincants). Il faut donc personnaliser la sélection, ce que je fais en inversant couleur dʼarrière-plan et couleur de texte et en supprimant lʼombre sous le texte &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/::selection&quot;&gt;à lʼaide du pseudo-élément dédié (en anglais)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Merci à &lt;a href=&quot;https://twitter.com/johan_ramon&quot;&gt;Johan Ramon&lt;/a&gt; pour mʼavoir rappelé à lʼordre avec ces détails croustillants !&lt;/p&gt;
&lt;h2 id=&quot;modifications&quot; tabindex=&quot;-1&quot;&gt;Modifications&lt;/h2&gt;
&lt;h3 id=&quot;27-octobre-2016&quot; tabindex=&quot;-1&quot;&gt;27 octobre 2016&lt;/h3&gt;
&lt;p&gt;Une petite amélioration est apportée, de la manière suivante :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;si le navigateur gère &lt;strong&gt;les requêtes de fonctionnalités&lt;/strong&gt; &lt;em&gt;via&lt;/em&gt; &lt;code&gt;@supports&lt;/code&gt; et qu’il supporte &lt;code&gt;text-decoration-skip: ink;&lt;/code&gt;, on applique cette propriété ;&lt;/li&gt;
&lt;li&gt;si le navigateur gère les requêtes de fonctionnalité mais pas la propriété, on applique le &lt;code&gt;background-image&lt;/code&gt; lorsque le mode de contrastes élevés n’est pas activé.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si ces ajouts vous intéressent, voici un peu de lecture supplémentaire :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/CSS/@supports&quot;&gt;&lt;code&gt;@supports&lt;/code&gt; sur MDN&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/CSS/text-decoration-skip&quot;&gt;&lt;code&gt;text-decoration-skip&lt;/code&gt;, également sur MDN&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tout peut se résumer comme suit :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;
&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@supports&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;text-decoration-skip&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; ink&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;text-decoration-skip&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; ink&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Le &lt;a href=&quot;https://codepen.io/ffoodd/pen/jbRMqJ/&quot;&gt;CodePen&lt;/a&gt; est à jour pour que vous jetiez un œil, et je l’ai &lt;a href=&quot;https://gist.github.com/ffoodd/d4bee79e6af99c05f0a32542d66d5969&quot;&gt;exporté dans un Gist&lt;/a&gt; également.&lt;/p&gt;
&lt;p&gt;Cet ajout a quelques effets notables :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;certains navigateurs sont désormais exclus par le manque de support de &lt;code&gt;@supports&lt;/code&gt;, tels que le &lt;em&gt;Stock browser Adnroid&lt;/em&gt;, &lt;em&gt;Blackberry Browser&lt;/em&gt; ou &lt;em&gt;IE Mobile&lt;/em&gt;. Ça me semble une bonne chose puisque ces styles sont relativement coûteux, ces vieux navigateurs mobiles seront épargnés ;&lt;/li&gt;
&lt;li&gt;seul Safari 9 supporte &lt;code&gt;text-decoration-skip: ink;&lt;/code&gt;, et je ne suis pas certain que le rendu soit le même. Ce serait à tester et ajuster au cas par cas.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mais nous voilà avec un pied dans le futur !&lt;/p&gt;
&lt;h3 id=&quot;20-janvier-2017&quot; tabindex=&quot;-1&quot;&gt;20 janvier 2017&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/7studio/status/822116634542374914&quot;&gt;Xavier Zalawa rencontre un bug de Blink gênant&lt;/a&gt; impliquant &lt;code&gt;currentColor&lt;/code&gt; dans un &lt;code&gt;linear-gradient&lt;/code&gt; en cas de changement d’état. C’est le cas dans ce soulignement factice : &lt;code&gt;currentColor&lt;/code&gt; utilisé dans le background n’est pas mis à jour lors du survol ou de la prise de focus, sans être répété— ce qui ruine littéralement l’intérêt de currentColor…&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://bugs.chromium.org/p/chromium/issues/detail?id=595467&quot;&gt;Le bug est ouvert chez Chromium&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/iamvdo/status/822130026384592898&quot;&gt;Vincent De Oliveira a cependant trouvé une astuce pour le faire fonctionner sans devoir répéter la propriété&lt;/a&gt; et ça, c’est cool.&lt;/p&gt;
&lt;p&gt;En repassant donc sur le &lt;a href=&quot;https://codepen.io/ffoodd/pen/jbRMqJ&quot;&gt;CodePen&lt;/a&gt; pour le mettre à jour, je me suis également rendu compte que la &lt;em&gt;media query&lt;/em&gt; &lt;code&gt;-ms-high-contrast: active&lt;/code&gt; était inutile ; je l’ai donc supprimée. Cette requête n’est comprise que par IE 11 et inférieur — cependant comme elle était imbriquée dans une règle @supports ces derniers ne pouvaient pas la lire. Hop, un peu de code en moins !&lt;/p&gt;
&lt;ol class=&quot;footnotes-list small mt2 pt2 pb2&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Percevez-vous comme ce soulignement est affordant ? On a envie de cliquer dessus, pas vrai ? &lt;a href=&quot;https://www.ffoodd.fr/le-soulignement-factice/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Terme technique issu dʼune longue histoire de la calligraphie à la plume (ou de lʼapprentissage de lʼécriture avec un stylo plume pour les plus jeunes dʼentre vous). &lt;a href=&quot;https://www.ffoodd.fr/le-soulignement-factice/#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn3&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Vous avez probablement déjà compris que si votre texte repose sur une image ou un dégradé, il nʼy aura probablement pas de salut pour votre soulignement. &lt;a href=&quot;https://www.ffoodd.fr/le-soulignement-factice/#fnref3&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn4&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Sans cette astuce, certains éléments auraient un soulignement sur toute la largeur, même si le texte ne la remplit pas — et dʼautres éléments auraient un soulignement uniquement sur la dernière ligne, si dʼaventures ils fussent sur plusieurs lignes. &lt;a href=&quot;https://www.ffoodd.fr/le-soulignement-factice/#fnref4&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;</description>
					<pubDate>Fri, 20 Nov 2015 16:16:37 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/le-soulignement-factice/</guid>
					<frDate>20 novembre 2015</frDate>
				</item>
				<item>
					<title>Les éléments remplacés</title>
					<link>https://www.ffoodd.fr/les-elements-remplaces/</link>
					<description>&lt;p&gt;Pourtant — et malgré le fait que &lt;strong&gt;la plupart&lt;/strong&gt; des éléments remplacés soient des balises auto-fermantes — ça nʼest pas la même chose !&lt;/p&gt;
&lt;h2 id=&quot;les-mauvaises-definitions&quot; tabindex=&quot;-1&quot;&gt;Les mauvaises définitions&lt;/h2&gt;
&lt;h3 id=&quot;la-definition-de-dudley-storey&quot; tabindex=&quot;-1&quot;&gt;La définition de Dudley Storey&lt;/h3&gt;
&lt;p&gt;La plus connue est celle proposée par Dudley Storey dans son article « &lt;a href=&quot;https://thenewcode.com/461/What-The-Heck-Is-A-Replaced-Element&quot;&gt;What’s A Replaced Element?&lt;/a&gt; » (traduit en Français sur &lt;a href=&quot;https://la-cascade.io/quest-ce-quun-element-remplace/&quot;&gt;La Cascade&lt;/a&gt;) que voici :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Les éléments remplacés sont essentiellement des éléments qui ont des dimensions pré-déterminées, sans bénéficier de CSS. Une autre façon de comprendre les éléments remplacés est “ ce sont les éléments dont le contenu est remplacé par une source extérieure ”.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Il prend pour exemple lʼélément &lt;code&gt;input&lt;/code&gt; qui, &lt;strong&gt;même vide&lt;/strong&gt;, aura des dimensions intrinsèques — car le navigateur remplace lʼélément par un objet avec des dimensions par défaut pré-déterminées.&lt;/p&gt;
&lt;p&gt;Cʼest très bien, mais ça nʼest pas tout à fait ça. En réalité &lt;strong&gt;cette définition est orientée&lt;/strong&gt; vers la conclusion de lʼarticle, qui précise que les éléments remplacés ne peuvent pas se voir appliquer de contenu généré à lʼaide de pseudo-élément.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figurez-vous que cʼest parfois possible.&lt;/strong&gt; Il sʼagit dʼune simplification abusive.&lt;/p&gt;
&lt;h3 id=&quot;la-reference-de-site-point&quot; tabindex=&quot;-1&quot;&gt;La référence de SitePoint&lt;/h3&gt;
&lt;p&gt;SitePoint propose &lt;a href=&quot;https://reference.sitepoint.com/css/replacedelements&quot;&gt;une définition un peu plus pointue (en anglais)&lt;/a&gt; indiquant quʼun élément remplacé est un élément dont lʼapparence et les dimensions sont définies par une ressource externe. Les détails sont assez intéressants (notamment le dernier paragraphe sur le contexte &lt;em&gt;inline&lt;/em&gt;) mais là encore cʼest &lt;strong&gt;en léger décalage avec la réalité&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;En revanche ce qui est amusant, cʼest que &lt;strong&gt;la définition réelle est cachée dans le troisième paragraphe&lt;/strong&gt; : « Les éléments remplacés peuvent également avoir des pré-requis de mise en forme imposés par lʼélément, &lt;strong&gt;hors du contrôle du CSS&lt;/strong&gt; ; par exemple, les contrôles de lʼinterface utilisateur rendus pour les éléments de formulaires ».&lt;/p&gt;
&lt;p&gt;En fait ils ne se contentent pas de pouvoir.&lt;/p&gt;
&lt;h2 id=&quot;la-specification-cachee&quot; tabindex=&quot;-1&quot;&gt;La spécification cachée&lt;/h2&gt;
&lt;p&gt;Soyons honnête, elle est vraiment galère à trouver. Le W3C précise &lt;a href=&quot;https://www.w3.org/TR/CSS21/conform.html#replaced-element&quot;&gt;dans CSS2.1 (en anglais)&lt;/a&gt; quʼun élément remplacé « est un élément dont le contenu est hors de la portée du modèle de mise en forme CSS ». Si vous en avez le courage, &lt;a href=&quot;https://www.w3.org/TR/html51/rendering.html#replaced-elements&quot;&gt;la spécification HTML5&lt;/a&gt; est plus absconse mais rejoint globalement ce qui est dit précédemment.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Simple, non ?&lt;/strong&gt; Ça inclut effectivement les éléments qui ont des dimensions intrinsèques, même lorsquʼelles peuvent être surchargées &lt;em&gt;via&lt;/em&gt; CSS. &lt;a href=&quot;https://github.com/ffoodd/a11y.css/blob/main/README-fr.md&quot;&gt;La liste dont je dispose est documentée sur a11y.css&lt;/a&gt;. Elle contient lʼensemble des balises auto-fermantes, ainsi que les éléments de formulaires et les objets multimédias.&lt;/p&gt;
&lt;h2 id=&quot;le-cas-des-boutons&quot; tabindex=&quot;-1&quot;&gt;Le cas des boutons&lt;/h2&gt;
&lt;p&gt;Vous remarquerez que cette liste nʼinclut pas lʼélément &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt;. Pour une bonne raison, à mon humble avis : cet élément nʼest pas un cas particulier dans la perspective de travail dʼa11y.css puisquʼ&lt;strong&gt;il accepte les pseudos-éléments.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Voilà qui discrédite poliment la définition de Dudley Storey. Cela fait cependant de &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt; une exception parmi les cas particuliers…&lt;/p&gt;
&lt;p&gt;Cependant &lt;a href=&quot;https://twitter.com/Nico3333fr/status/666185952608567296&quot;&gt;comme Nicolas Hoffmann me lʼa indiqué&lt;/a&gt;, &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt; est bel et bien un élément remplacé. Fidèlement à la spécification, il dispose en effet de styles pré-définis — un savant mélange entre la vision de votre navigateur et celle de votre système dʼexploitation.&lt;/p&gt;
&lt;h2 id=&quot;la-singularite&quot; tabindex=&quot;-1&quot;&gt;La singularité&lt;/h2&gt;
&lt;p&gt;Les éléments remplacés ont donc des dimensions intrinsèques, et ça inclut les boutons. Lorsque vous spécifiez une largeur sur un élément remplacé, &lt;strong&gt;vous écrasez sa largeur intrinsèque&lt;/strong&gt;. Jusque là, tout va bien. Vous pouvez jouer avec une image, effectivement cʼest chouette.&lt;/p&gt;
&lt;p&gt;Maintenant pour rigoler, prenez un &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt; et affublez-le de ce CSS :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;
&lt;span class=&quot;token selector&quot;&gt;button&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; inline&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 20em&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Jʼavais tendance à penser que ce CSS ne produirait rien, puisquʼ&lt;strong&gt;on ne peut pas définir de dimension sur un élément &lt;em&gt;inline&lt;/em&gt;&lt;/strong&gt;. Sauf quʼun bouton a donc des dimensions intrinsèques quʼon peut surcharger — alors même que ces styles sont considérés comme hors de portée de CSS. La magie opère : &lt;strong&gt;un bouton en ligne obéira à une définition de sa largeur&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Vous pouvez jouer avec &lt;a href=&quot;https://dabblet.com/gist/d94397d5d22a7cc9c1eb&quot;&gt;ce dabblet&lt;/a&gt; pour vous en convaincre.&lt;/p&gt;
&lt;h2 id=&quot;un-reel-probleme&quot; tabindex=&quot;-1&quot;&gt;Un réel problème ?&lt;/h2&gt;
&lt;p&gt;Probablement pas. Mais je me suis malgré tout retrouvé dans une situation enquiquinante. Je souhaitais tout bêtement mettre en place un soulignement amélioré en CSS à lʼaide dʼun dégradé et dʼune ombre. Or ce soulignement doit évidemment suivre le texte, y compris si ledit texte passe à la ligne. Cʼest généralement aisé pour nʼimporte quel élément : on le met en &lt;code&gt;display: inline;&lt;/code&gt; et le tour est joué. &lt;strong&gt;Sauf que sur un bouton, ça ne fonctionne pas&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Heureusement, &lt;a href=&quot;https://twitter.com/htmlvv/status/666184830456078336&quot;&gt;Vincent mʼa donné une solution qui fonctionne&lt;/a&gt;. Tant pis pour le bouton, cʼest le &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; qui aura droit à un soulignement amélioré.&lt;br /&gt;
**&lt;br /&gt;
Mais bon sang, quelle aventure pour un bête bouton qui ne veut pas se mettre en ligne !**&lt;/p&gt;
</description>
					<pubDate>Mon, 16 Nov 2015 20:16:54 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/les-elements-remplaces/</guid>
					<frDate>16 novembre 2015</frDate>
				</item>
				<item>
					<title>Le web en kit</title>
					<link>https://www.ffoodd.fr/le-web-en-kit/</link>
					<description>&lt;p&gt;Beaucoup de gens qui fabriquent le web se sont plaints de lʼhégémonie dʼIE6.&lt;/p&gt;
&lt;p&gt;Pour protester, ils se sont rués sur les nouveaux arrivants : Firefox et Chrome. Puis les produits Apple ont débarqué, apportant avec eux Safari. Cʼétait encore une révolution — et de fait, le nouvel endroit ou aller. Or Safari fonctionne sur la même base que Chrome, à savoir le moteur de rendu Webkit. Et petit à petit, nous nous sommes retrouvés &lt;strong&gt;avec un nouveau monopole&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Malheureusement, on ne casse pas un monopole avec un monopole. Car tous ces gens qui se sont rués sur les navigateurs WebKit ont produit des morceaux de web qui ne sont pas inter-opérables : on ne pouvait sʼen servir (voire simplement y accéder) autrement &lt;strong&gt;quʼavec un sésame estampillé WebKit&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;microsoft-et-edge&quot; tabindex=&quot;-1&quot;&gt;Microsoft et Edge&lt;/h2&gt;
&lt;p&gt;De façon parfaitement sensée, Microsoft — qui détenait environ 95% des parts de marché des navigateurs web (ce qui lui est reproché) — a voulu faire table rase du passé pour en finir avec la mauvaise réputation de son navigateur vedette.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/le-web-en-kit/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blogs.windows.com/msedgedev/2015/06/17/building-a-more-interoperable-web-with-microsoft-edge/&quot;&gt;&lt;strong&gt;Alors ils font passer Edge pour WebKit.&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;le-webkit-only&quot; tabindex=&quot;-1&quot;&gt;Le &lt;em&gt;-webkit-only&lt;/em&gt;&lt;/h2&gt;
&lt;h3 id=&quot;les-prefixes-vendeurs&quot; tabindex=&quot;-1&quot;&gt;Les préfixes vendeurs&lt;/h3&gt;
&lt;p&gt;Vous commencez à flairer lʼarnaque, pas vrai ? Edge interprète désormais les CSS préfixées par &lt;code&gt;-webkit-&lt;/code&gt;. Bon allez, si ça nʼest que ça cʼest de bonne guerre !&lt;/p&gt;
&lt;p&gt;Sauf que… &lt;strong&gt;Non&lt;/strong&gt;. Ça ne sʼarrête pas à ça.&lt;/p&gt;
&lt;h3 id=&quot;les-proprietes-hors-specification&quot; tabindex=&quot;-1&quot;&gt;Les propriétés hors spécification&lt;/h3&gt;
&lt;p&gt;Pendant très longtemps, Chrome et Safari ont implémenté des nouveautés avant de les proposer aux concepteurs des spécifications — notamment des propriétés et valeurs CSS. Ça permet de mettre un peu de pression sur le processus de spécification et de tenir en haleine les développeurs.&lt;/p&gt;
&lt;p&gt;Parmi ces nouveautés, la valeur &lt;code&gt;text&lt;/code&gt; pour la propriété &lt;code&gt;background-clip&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Cette propriété fait partie intégrante de &lt;a href=&quot;https://drafts.csswg.org/css-backgrounds-3/#the-background-clip&quot;&gt;la spécification (en anglais&lt;/a&gt;) depuis longtemps. La valeur &lt;code&gt;text&lt;/code&gt; a été &lt;a href=&quot;https://www.webkit.org/blog/164/background-clip-text/&quot;&gt;proposée en 2008 par WebKit (en anglais)&lt;/a&gt;, et nʼétait — jusquʼà preuve du contraire — supportée que par les navigateurs basés sur WebKit.&lt;/p&gt;
&lt;h2 id=&quot;edge-gere&quot; tabindex=&quot;-1&quot;&gt;Edge gère !&lt;/h2&gt;
&lt;p&gt;Edge lʼinterprète, cette valeur exotique — et sans souci. Jʼai découvert ça inopinément, en me disant que &lt;a href=&quot;https://nimbupani.com/using-background-clip-for-text-with-css-fallback.html&quot;&gt;la solution de repli proposée par Divya Manian (en anglais)&lt;/a&gt; était robuste. En terme de logique, elle est imparable : lʼarrière-plan est conçu pour ne sʼappliquer que si le clip est interprété, car lʼensemble est préfixé par &lt;code&gt;-webkit-&lt;/code&gt;. Voyez plutôt :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;
&lt;span class=&quot;token selector&quot;&gt;[class=&quot;rainbow&quot;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; #fff&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; inline-block&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;/* -webkit-only: Chrome, Safari, Opera */&lt;/span&gt;  
  &lt;span class=&quot;token property&quot;&gt;background&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;-webkit-linear-gradient&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;…&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;background&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;-o-linear-gradient&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;…&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;-webkit-text-fill-color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; transparent&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;-webkit-background-clip&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; text&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mais Edge considère désormais les préfixes &lt;code&gt;-webkit-&lt;/code&gt; comme des &lt;em&gt;aliases&lt;/em&gt;, et les mange tout crus. Ça aurait pu être un problème dans ce cas précis, puisque théoriquement la paire &lt;code&gt;background-clip: text;&lt;/code&gt; nʼest reconnue que par les navigateurs basés sur WebKit. Là encore : &lt;strong&gt;surprise&lt;/strong&gt; ! Edge lʼapplique sans rechigner.&lt;/p&gt;
&lt;h3 id=&quot;cas-isole&quot; tabindex=&quot;-1&quot;&gt;Cas isolé ?&lt;/h3&gt;
&lt;p&gt;De nombreuses techniques ont vu le jour et nʼont vécu que pour WebKit. Je mʼinterroge donc : parmi ces techniques que nous pensons réservées à WebKit, &lt;strong&gt;combien dʼautres encore ont atterri dans Edge discrètement ?&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;et-windows-phone-on-en-parle&quot; tabindex=&quot;-1&quot;&gt;Et Windows Phone, on en parle 😄 ?&lt;/h2&gt;
&lt;p&gt;Et bien… En quelque sorte ! Pour clarifier, précisons que jʼutilise Windows Phone 8.1, qui embarque IE11. Dʼaprès mes lectures sur le blog technique de Edge, ce mécanisme dʼinterprétation des préfixes vendeurs &lt;code&gt;-webkit-&lt;/code&gt; nʼest inclus que dans Edge — en tout cas, il nʼy est fait aucune mention du cousin IE11.&lt;/p&gt;
&lt;p&gt;Figurez-vous que &lt;strong&gt;cʼest pourtant le cas&lt;/strong&gt; (je suis sûr que vous nʼavez rien vu venir, avec mes gros sabots 😇). Enfin… &lt;strong&gt;Presque&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;le-cas-qui-pique&quot; tabindex=&quot;-1&quot;&gt;Le cas qui pique&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.ffoodd.fr/ie9-sur-wp7-et-font-face-je-taime-moi-non-plus/&quot;&gt;Une fois nʼest pas coutume&lt;/a&gt;, Windows Phone et son IE représentent une configuration particulière. En lʼoccurrence, IE11 interprète les valeurs &lt;code&gt;-webkit-linear-gradient(…)&lt;/code&gt; mais est incapable dʼappliquer la valeur &lt;code&gt;text&lt;/code&gt; pour la proriété &lt;code&gt;background-clip&lt;/code&gt;. Oups 🙈 !&lt;/p&gt;
&lt;h2 id=&quot;captures-a-lappui&quot; tabindex=&quot;-1&quot;&gt;Captures à lʼappui&lt;/h2&gt;
&lt;p&gt;Dans un monde merveilleux et homogène, nous « devrions » voir ceci :&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://www.ffoodd.fr/images/2015/10/chrome.png&quot; alt=&quot;Capture dʼécran de Chrome&quot; width=&quot;300&quot; height=&quot;31&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;figcaption&gt;Un arc-en-ciel incrusté au texte en CSS, visible sur les navigateurs WebKit et Edge&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Et, le cas échéant si votre navigateur est allergique aux arc-en-ciels, voici le résultat attendu :&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://www.ffoodd.fr/images/2015/10/firefox.png&quot; alt=&quot;Capture dʼécran sur Firefox&quot; width=&quot;300&quot; height=&quot;30&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;figcaption&gt;Le texte est simplement blanc sur Firefox et IE, pas dʼarc-en-ciel à lʼhorizon&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Jusque là, tout va bien. La mécanique est belle, aucun danger grâce à la solution de repli évoquée précédemment. Maintenant, cassons tout ! Voici le rendu sur IE11 &lt;strong&gt;et &lt;em&gt;UC Browser&lt;/em&gt;&lt;/strong&gt; sur Windows Phone 8.1 :&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://www.ffoodd.fr/images/2015/10/windowsphone.jpg&quot; alt=&quot;capture dʼécran sur Windows Phone 8.1&quot; width=&quot;300&quot; height=&quot;169&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;figcaption&gt;Le texte est blanc, mais lʼarrière-plan arc-en-ciel est appliqué&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Difficile de garantir quoi que ce soit dans ces conditions. &lt;em&gt;A priori&lt;/em&gt; ce problème nʼexiste pas dans les versions antérieures de Windows Phone, et il faut noter que la version bureau dʼIE11 nʼapplique pas lʼarrière-plan !&lt;/p&gt;
&lt;p&gt;Si vous voulez tester par vous-mêmes ou compléter mes propos, nʼhésitez pas à dupliquer &lt;a href=&quot;https://dabblet.com/gist/08fddf3666c39ebc62ca&quot;&gt;mon dabblet&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Et pour ceux qui rigolent dans le fond, sachez que &lt;a href=&quot;https://gs.statcounter.com/#mobile_os-FR-monthly-201507-201509-bar&quot;&gt;Windows Phone représente 4% de parts de marché des systèmes dʼexploitation sur mobile en France, entre juillet et septembre 2015 (en anglais)&lt;/a&gt;. Ce nʼest pas négligeable, si tant est quʼon admette négliger une population.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/le-web-en-kit/#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;ol class=&quot;footnotes-list small mt2 pt2 pb2&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Jʼaime rappeler aux gens qui pestent après IE quʼil est ma foi fort probable quʼils fissent partie des 95% dʼinternautes qui naviguaient avec. Ça pique. &lt;a href=&quot;https://www.ffoodd.fr/le-web-en-kit/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Je mettrais dʼailleurs ma main a couper quʼen réalité ce chiffre est déjà sous-estimé, à en croire mes yeux de lynx qui officient dans le tramway, le bus ou le TER à Nantes &lt;a href=&quot;https://www.ffoodd.fr/le-web-en-kit/#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;</description>
					<pubDate>Fri, 30 Oct 2015 11:11:52 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/le-web-en-kit/</guid>
					<frDate>30 octobre 2015</frDate>
				</item>
				<item>
					<title>Paris Web et la vie</title>
					<link>https://www.ffoodd.fr/paris-web-et-la-vie/</link>
					<description>&lt;p&gt;Il sʼen est passé, des choses, cet été ☺.&lt;/p&gt;
&lt;h2 id=&quot;livres&quot; tabindex=&quot;-1&quot;&gt;Livres&lt;/h2&gt;
&lt;h3 id=&quot;guide-pratique-de-choix-typographique&quot; tabindex=&quot;-1&quot;&gt;Guide pratique de choix typographique&lt;/h3&gt;
&lt;p&gt;Je lʼavais peut-être déjà mentionné, mais tant pis — jʼen suis fier : David Rault mʼa fait lʼhonneur de citer mon &lt;a href=&quot;https://www.ffoodd.fr/guide-pratique-de-choix-typographique/&quot;&gt;compte-rendu de lecture de son « Guide pratique de choix typographique »&lt;/a&gt; sur la 4&lt;sup&gt;e&lt;/sup&gt; de couverture de sa réédition. Cʼest un excellent livre, je vous le conseille vraiment ! Vous le trouverez sur &lt;a href=&quot;https://www.adverbum.fr/guide-pratique-de-choix-typographique-rault-david-atelier-perrousseaux_ouvrage-perrousseaux_4yrc07ab75lc.html&quot;&gt;le site des Ateliers Perrousseaux&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;optimiser-son-referencement-word-press&quot; tabindex=&quot;-1&quot;&gt;Optimiser son référencement WordPress&lt;/h3&gt;
&lt;p&gt;Lʼouvrage de &lt;a href=&quot;https://www.seomix.fr/&quot;&gt;Daniel Roch&lt;/a&gt; sʼest — comme attendu — bien vendu. Pour sa seconde édition, Daniel a eu la riche idée dʼinviter des camarades à étendre le contenu afin dʼaborder des sujets connexes tels que :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la sécurité, par &lt;a href=&quot;https://boiteaweb.fr/&quot;&gt;Julio Potier&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;le choix du thème, par &lt;a href=&quot;https://alexbortolotti.com/&quot;&gt;Alex Bortolotti&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;ou encore lʼutilisation dʼAJAX, par &lt;a href=&quot;https://wabeo.fr/&quot;&gt;Willy Bahuaud&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il mʼa ainsi fait lʼhonneur de mʼinviter pour cette réédition à rédiger une introduction à lʼaccessibilité. Un défi passionnant pour moi, et une gratification remarquable ! Je dois bien avouer quʼen relisant ce contenu, jʼai déjà envie de le réécrire et lʼaméliorer encore — mais je ne cache pas mon plaisir et ma fierté dʼavoir pu participer à cet ouvrage.&lt;/p&gt;
&lt;p&gt;Évidemment, je ne saurais assez vous conseiller de vous procurer ce livre sur &lt;a href=&quot;https://www.eyrolles.com/Informatique/Livre/optimiser-son-referencement-wordpress-9782212141825&quot;&gt;le site des éditions Eyrolles&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;eco-conception-des-sites-web&quot; tabindex=&quot;-1&quot;&gt;Éco-conception des sites web&lt;/h3&gt;
&lt;p&gt;Simple aparté pour mettre en avant la participation de mon frère &lt;a href=&quot;https://www.kloh.ch/&quot;&gt;Luc Poupard&lt;/a&gt; à la relecture de la réédition de ce livre — dont la première édition est une mine dʼor — parce que ça aussi, jʼen suis fier ! Pour la petite histoire, il a été invité à cette relecture suite à son intervention lors de Paris Web 2014 intitulée « &lt;a href=&quot;https://www.paris-web.fr/2014/conferences/internet-et-les-tic-pas-tres-ecologique.php&quot;&gt;Internet et les TIC, pas très écologiques ?&lt;/a&gt; ».&lt;/p&gt;
&lt;p&gt;Vous pouvez vous le procurer sur &lt;a href=&quot;https://ecoconceptionweb.com/&quot;&gt;le site dédié au livre&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;evenements&quot; tabindex=&quot;-1&quot;&gt;Événements&lt;/h2&gt;
&lt;h3 id=&quot;wp-tech&quot; tabindex=&quot;-1&quot;&gt;WP Tech&lt;/h3&gt;
&lt;p&gt;Lʼan passé, jʼai découvert le rôle dʼorateur au WP Tech lors de lʼatelier « &lt;a href=&quot;https://www.ffoodd.fr/wp-tech-2014/&quot;&gt;Thème enfant : au-delà de la bonne pratique&lt;/a&gt; ». Cette année, jʼai opté pour un autre rôle, à découvrir également : &lt;strong&gt;bénévole&lt;/strong&gt;. Je suis entré dans lʼéquipe un peu en retard, mais je commence à travailler un peu et jʼai hâte de passer cette journée avec le &lt;em&gt;staff&lt;/em&gt; ! Si vous ne connaissez pas ce formidable événement, &lt;a href=&quot;https://2015.wptech.fr/&quot;&gt;découvrez lʼédition 2015&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;paris-web&quot; tabindex=&quot;-1&quot;&gt;Paris Web&lt;/h3&gt;
&lt;p&gt;Déjà la 3&lt;sup&gt;e&lt;/sup&gt; édition à laquelle j’assiste et je prends toujours autant de plaisir à découvrir les gens et les sujets. Je ne vais pas mʼétendre sur un compte-rendu, le web en fourmille déjà et ce nʼest pas mon propos du jour — mais comme dʼhabitude il y a eu de grands moments. Peut-être vous ferais-je un véritable retour plus tard ☺.&lt;/p&gt;
&lt;h2 id=&quot;travail&quot; tabindex=&quot;-1&quot;&gt;Travail&lt;/h2&gt;
&lt;p&gt;Dans un contexte différent, jʼai changé de travail !&lt;/p&gt;
&lt;p&gt;Après un an et demi de bons et loyaux services chez &lt;a href=&quot;https://www.kosmos.fr/&quot;&gt;Kosmos&lt;/a&gt;, jʼai terminé le 30 septembre au soir afin dʼenchaîner sur Paris Web. Juste après ces trois jours autour de la Lune pour prendre de la vitesse (jʼai regardé Armageddon récemment), jʼai donc démarré au poste dʼintégrateur chez &lt;a href=&quot;https://www.ornikar.com/&quot;&gt;Ornikar&lt;/a&gt; — et pour le moment jʼen suis ravi.&lt;/p&gt;
&lt;p&gt;Le changement de type dʼentreprise, de méthodes et pratiques de travail ainsi que dʼéco-système technique est très enrichissant ☺.&lt;/p&gt;
&lt;h2 id=&quot;projets&quot; tabindex=&quot;-1&quot;&gt;Projets&lt;/h2&gt;
&lt;p&gt;Jʼai toujours une multitude de projets en tête, mais la plupart relèvent de la sphère privée. Pour lʼaspect métier, je poursuis mes travaux sur &lt;a href=&quot;https://github.com/ffoodd/a11y.css&quot;&gt;a11y.css&lt;/a&gt; — même si ça sʼavère de plus en plus lent. Jʼai planifié deux nouvelles bornes, lʼune technique et lʼautre « identitaire » (graphisme, ligne éditoriale, réseaux sociaux…).&lt;/p&gt;
&lt;p&gt;Et jʼai toujours de nombreux articles en attente. Vous repassez bientôt ?&lt;/p&gt;
</description>
					<pubDate>Fri, 16 Oct 2015 11:22:50 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/paris-web-et-la-vie/</guid>
					<frDate>16 octobre 2015</frDate>
				</item>
				<item>
					<title>21e séminaire AccessiWeb</title>
					<link>https://www.ffoodd.fr/21e-seminaire-accessiweb/</link>
					<description>&lt;p&gt;C’est donc une grande première, et moi qui lisait les comptes-rendus des précédents séminaires sur internet ait enfin pu y assister !&lt;/p&gt;
&lt;h2 id=&quot;en-tant-qu-orateur&quot; tabindex=&quot;-1&quot;&gt;En tant qu’orateur&lt;/h2&gt;
&lt;p&gt;Le thème du séminaire était « &lt;a href=&quot;https://inova.snv.jussieu.fr/evenements/colloques/colloques/index.php?c=87&quot;&gt;Choisir et utiliser un CMS pour créer des contenus accessibles&lt;/a&gt; », organisé par &lt;a href=&quot;https://accessiblog.fr/&quot;&gt;Olivier Nourry&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Non seulement j’ai pu y assister, mais j’ai même été invité par Olivier à y faire une intervention autour de la même thématique que celle abordée lors du &lt;a href=&quot;https://2014.wptech.fr/&quot;&gt;WP Tech&lt;/a&gt; au sujet des &lt;strong&gt;thèmes enfants dans WordPress&lt;/strong&gt; (et leur utilisation dans une méthodologie de travail basée sur l’amélioration perpétuelle).&lt;/p&gt;
&lt;p&gt;WordPress étant le CMS le plus utilisé au monde – et de loin – Olivier souhaitait mettre en avant une pratique concrète pour &lt;strong&gt;incorporer l’accessibilité à la production de sites WordPress&lt;/strong&gt;. C’est avec plaisir que j’ai accepté le défi.&lt;/p&gt;
&lt;p&gt;Je suis cependant peu satisfait de ce que j’ai pu montrer à cette occasion, j’étais très impressionné par mon auditoire et la nervosité m’a fait perdre pied à quelques reprises. En revanche je suis très heureux d’avoir pu rencontrer des personnes intéressantes, et assister aux autres présentations.&lt;/p&gt;
&lt;h2 id=&quot;en-tant-que-spectateur&quot; tabindex=&quot;-1&quot;&gt;En tant que spectateur&lt;/h2&gt;
&lt;p&gt;C’est surtout dans l’assistance que j’ai pu apprécier la qualité de la journée. Toutes les présentations étaient incroyablement riches, je retiens notamment :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la présentation d’ATAG2 par &lt;a href=&quot;https://twitter.com/villainjp&quot;&gt;Jean-Pierre Villain&lt;/a&gt; (qui travaille chez &lt;a href=&quot;https://access42.net/&quot;&gt;Access42&lt;/a&gt; dont je vous ai déjà parlé) ;&lt;/li&gt;
&lt;li&gt;l’adaptation d’EZ Publish lors de la refonte du site du &lt;a href=&quot;https://www.pasdecalais.fr/&quot;&gt;Pas de Calais&lt;/a&gt; par &lt;a href=&quot;https://www.telmedia.fr/&quot;&gt;Telmedia&lt;/a&gt;, présentée par Christophe Caron ;&lt;/li&gt;
&lt;li&gt;l’atelier &lt;em&gt;barbecue&lt;/em&gt; consistant à évaluer « comment ces quatre CMS permettent de répondre à des besoins de contribution typiques en respectant les critères d’accessibilité », avec quatre acteurs représentant chacun leur CMS de prédilection :
&lt;ul&gt;
&lt;li&gt;WordPress était décortiqué par &lt;a href=&quot;https://www.accesbilis.fr/&quot;&gt;Claire Bizingre&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://duael.fr/&quot;&gt;Édouard Cunibil&lt;/a&gt; a analysé Drupal ;&lt;/li&gt;
&lt;li&gt;SPIP fut passé au crible par &lt;a href=&quot;https://www.pyrat.net/&quot;&gt;Jacques Pyrat&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;et finalement &lt;a href=&quot;https://cr2a-graphique.fr/&quot;&gt;Mikael Ruzafa&lt;/a&gt; a dépiauté Joomla! ;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;les démarches respectives de WordPress et Drupal pour proposer un CMS accessible dès son cœur, de l’interface d’administration jusqu’aux affichages proposés.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les sujets étaient extrêmement intéressants, et comme l’a évoqué Olivier pour conclure le séminaire : ce type de démarche n’a – à ma connaissance, comme à la sienne – &lt;strong&gt;jamais&lt;/strong&gt; été mené en profondeur.&lt;/p&gt;
&lt;p&gt;La comparaison de la prise en compte de l’accessibilité des différents acteurs de l’écosystème des CMS est tout à fait pertinente et &lt;strong&gt;totalement absent des comparatifs&lt;/strong&gt; qu’on peut trouver ça et là.&lt;/p&gt;
&lt;p&gt;La présentation des ATAG2 en &lt;strong&gt;des termes compréhensibles par un humain&lt;/strong&gt; est également une performance, que peu de personnes pouvaient réaliser. Ayant déjà tenté l’aventure de lire et comprendre les ATAG2, j’ai été épaté par le travail produit par Jean-Pierre Villain et ait noirci de notes quatre ou cinq pages de mon carnet.&lt;/p&gt;
&lt;h2 id=&quot;ce-n-est-pas-fini&quot; tabindex=&quot;-1&quot;&gt;Ce n’est pas fini !&lt;/h2&gt;
&lt;p&gt;Comme Dominique Burger (président de BrailleNet) et Olivier Nourry l’ont annoncé, &lt;strong&gt;un livre blanc est en cours d’élaboration&lt;/strong&gt; afin de diffuser le contenu de ce séminaire.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Une invitation est également lancée aux professionnels du web – qui utiliseraient couramment un CMS oublié de ce séminaire – de se plier à l’exercice d’évaluer l’accessibilité de leur outil préféré afin d’enrichir le comparatif.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pour conclure, je suis réellement ravi d’avoir pu &lt;strong&gt;rencontrer, échanger, apprendre&lt;/strong&gt; autant et je tiens à remercier chaleureusement &lt;strong&gt;l’association BrailleNet&lt;/strong&gt; pour avoir permis que cet événement ait lieu, et Olivier Nourry de m’y avoir invité en tant qu’intervenant : j’en suis très honoré.&lt;/p&gt;
</description>
					<pubDate>Wed, 15 Jul 2015 17:06:31 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/21e-seminaire-accessiweb/</guid>
					<frDate>15 juillet 2015</frDate>
				</item>
				<item>
					<title>WPMX Day</title>
					<link>https://www.ffoodd.fr/wpmx-day/</link>
					<description>&lt;p&gt;Souhaitant toucher un maximum de personnes dans le public — tous profils confondus, j’ai donc proposé aux organisateurs de parler des points d’accessibilité que chacun traite sans le savoir. Mon objectif était bien entendu d’évoquer d’autres pratiques abordables et bénéfiques pour les utilisateurs.&lt;/p&gt;
&lt;h2 id=&quot;accessibilite-et-efficience&quot; tabindex=&quot;-1&quot;&gt;Accessibilité et efficience&lt;/h2&gt;
&lt;p&gt;Voici &lt;a href=&quot;https://www.ffoodd.fr/wpmx/&quot;&gt;mon support de présentation&lt;/a&gt;. Je ne vais pas forcément m’étendre étant donné qu’une vidéo devrait arriver bientôt, mais je suis relativement satisfait de cette présentation. Le temps de préparation a été énorme, incluant :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;une phase de recherche assez longue ;&lt;/li&gt;
&lt;li&gt;la rédaction d’un synopsis et la définition des différents métiers types ;&lt;/li&gt;
&lt;li&gt;une carte heuristique afin de faire émerger les sujets principaux pour chaque métier ;&lt;/li&gt;
&lt;li&gt;la création d’un plan puis son enrichissement ;&lt;/li&gt;
&lt;li&gt;la mise en place du support ;&lt;/li&gt;
&lt;li&gt;les échanges et relectures, notamment par &lt;a href=&quot;https://www.kloh.ch/&quot;&gt;Luc Poupard&lt;/a&gt; et &lt;a href=&quot;https://emmanuel.clement.free.fr/&quot;&gt;Emmanuel Clément&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Globalement les retours ont été positifs et ça, ça fait plaisir :).&lt;/p&gt;
&lt;h2 id=&quot;les-presentations&quot; tabindex=&quot;-1&quot;&gt;Les présentations&lt;/h2&gt;
&lt;p&gt;Les sujets étaient variés, et c’était extrêmement plaisant.&lt;/p&gt;
&lt;p&gt;La présentation de &lt;a href=&quot;https://www.woothemes.com/woocommerce/&quot;&gt;WooCommerce&lt;/a&gt; par &lt;a href=&quot;https://www.remicorson.com/&quot;&gt;Rémi Corson&lt;/a&gt; était très intéressante, j’ai découvert beaucoup de choses et ai été impressionné par la progression fulgurante de ce qui fut une simple extension il y a quelques années. De plus Rémi est un orateur expérimenté, très agréable à écouter !&lt;/p&gt;
&lt;p&gt;J’en cite une dernière pour ne pas m’éterniser, j’espère que les autres orateurs ne m’en voudront pas : « Faites rentrer votre éléphant dans une Smart™ — Bonnes pratiques sur mobiles » dont vous trouverez &lt;a href=&quot;https://speakerdeck.com/inpixelitrust/faites-rentrer-votre-elephant-dans-une-smart-bonnes-pratiques-sur-mobiles&quot;&gt;les slides sur Speakerdeck&lt;/a&gt;. Présentée par &lt;a href=&quot;https://www.inpixelitrust.fr/&quot;&gt;Stéphanie Walter&lt;/a&gt; et &lt;a href=&quot;https://twitter.com/theystolemynick&quot;&gt;Jean-Pierre Vincent&lt;/a&gt;, cette présentation était rythmée, très dense, et extrêmement instructive. Jetez-y un œil !&lt;/p&gt;
&lt;h2 id=&quot;l-organisation&quot; tabindex=&quot;-1&quot;&gt;L’organisation&lt;/h2&gt;
&lt;p&gt;Pour l’histoire, le nom WPMX vient de l’association &lt;a href=&quot;https://wpmx.org/&quot;&gt;WordPress Meet &amp;amp; eXchange&lt;/a&gt;. Ce sont donc les membres de l’association qui ont organisé le WPMX Day, et je tiens à les remercier à nouveau ainsi qu’à les féliciter car ils ont fait un boulot incroyable ! Entre la gestion des orateurs qui arrivent qui part avion, qui par train, l’hébergement, la restauration, le flux des présentations alternées avec les spots publicitaires des sponsors, leur plan s’est déroulé sans accro. Chapeau !&lt;/p&gt;
&lt;h2 id=&quot;a-la-prochaine&quot; tabindex=&quot;-1&quot;&gt;À la prochaine !&lt;/h2&gt;
&lt;p&gt;Et bien oui, car il y en aura une je l’espère. Vraiment la journée à Biarritz, dans un super hôtel, avec tout ces gens accentués (si, si, ils ont un accent) était vraiment chouette. Et je ne vous parle pas du samedi soir : dîner sur la plage avec Stéphanie, Jean-Pierre ainsi que &lt;a href=&quot;https://www.graphikophil.com/&quot;&gt;Philippe Gélas&lt;/a&gt; et les organisateurs. C’était vraiment top, merci !&lt;/p&gt;
</description>
					<pubDate>Thu, 02 Jul 2015 18:42:39 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/wpmx-day/</guid>
					<frDate>2 juillet 2015</frDate>
				</item>
				<item>
					<title>AccesSlide : la prise en main</title>
					<link>https://www.ffoodd.fr/accesslide-la-prise-en-main/</link>
					<description>&lt;p&gt;Access42 est la société créée conjointement par Armony Altinier (rédactrice du livre « Accessibilité web » dont j’ai écrit &lt;a href=&quot;https://www.ffoodd.fr/lecture-accessibilite-web/&quot;&gt;un compte-rendu de lecture&lt;/a&gt;) et Jean-Pierre Villain après qu’ils aient remporté le marché de refonte du RGAA3. Ils ont été rapidement rejoint par Sylvie Duchateau et Audrey Maniez.&lt;/p&gt;
&lt;p&gt;Si vous ne connaissez pas ces noms, sachez qu’ils sont &lt;strong&gt;incontournables dans le domaine de l’accessibilité numérique en France&lt;/strong&gt;. Et c’est peu dire !&lt;/p&gt;
&lt;h2 id=&quot;premier-contact&quot; tabindex=&quot;-1&quot;&gt;Premier contact&lt;/h2&gt;
&lt;p&gt;Pour commencer, je tiens à signaler la manière tout à fait &lt;strong&gt;attractive&lt;/strong&gt; qu’a trouvé d’Access42 pour communiquer sur ce nouvel outil : c’est suite à ma participation à leur &lt;a href=&quot;https://access42.net/MAJ-Jeu-concours-le-secret-de-la-licorne.html&quot;&gt;jeu-concours : le secret de la licorne&lt;/a&gt; que j’ai reçu un mail signalant dans un premier temps &lt;a href=&quot;https://github.com/access42/AccesSlide&quot;&gt;le dépôt Github d’AccesSlide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;C’est bête, mais ça donne envie de regarder ! Étant donné que j’avais déjà cherché une solution lors de la préparation de mon atelier pour le &lt;a href=&quot;https://2014.wptech.fr/&quot;&gt;WP Tech&lt;/a&gt; et que je prépare une conférence pour le &lt;a href=&quot;https://2015.wpmx.org/&quot;&gt;WPMX&lt;/a&gt;, je me suis lancé dans l’utilisation de cet outil.&lt;/p&gt;
&lt;p&gt;De prime abord, &lt;strong&gt;cette solution est très riche&lt;/strong&gt;. Le &lt;strong&gt;sommaire&lt;/strong&gt; ainsi que &lt;strong&gt;les réglages utilisateurs&lt;/strong&gt; sont de très gros atouts pour ce système de diaporama.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Commençons par créer le contenu  !&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;la-contribution&quot; tabindex=&quot;-1&quot;&gt;La contribution&lt;/h2&gt;
&lt;p&gt;Partie cruciale s’il en est, AccesSlide permet de rédiger ces slides de façon extrêmement simple, en imposant &lt;strong&gt;très peu de contraintes sur le balisage&lt;/strong&gt;. Il suffit d’une section avec la bonne classe, et le tour est joué :&lt;/p&gt;
&lt;pre class=&quot;language-markup&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;section&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;slide&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; [votre diapo] &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;section&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Il est difficile de faire plus simple, et c’est équivalent en terme d’efficacité aux solutions populaires telles que &lt;a href=&quot;https://lab.hakim.se/reveal-js/#/&quot;&gt;Reveal.js&lt;/a&gt;. &lt;strong&gt;Ainsi pour la saisie du contenu, c’est top !&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;la-personnalisation&quot; tabindex=&quot;-1&quot;&gt;La personnalisation&lt;/h2&gt;
&lt;p&gt;L’équipe d’Access42 a gardé cet aspect important pour l’appropriation en tête, &lt;strong&gt;et c’est tant mieux&lt;/strong&gt;. Un système de thèmes fonctionne très bien, ce qui m’a permis d’implémenter très rapidement des styles qui correspondent à la fois à ce site mais aussi à ma précédente présentation. Quelques ajustements ont évidemment été nécessaires, mais rien de bien compliqué.&lt;/p&gt;
&lt;p&gt;Je dois même avouer avoir été agréablement surpris par la facilité de personnalisation, car la majorité des styles structurels sont cloisonnés dans un fichier principal et &lt;strong&gt;évite toute forme de collision désagréable&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;mon-theme&quot; tabindex=&quot;-1&quot;&gt;Mon thème&lt;/h2&gt;
&lt;p&gt;Ni une, ni deux : j’ai donc créé mon thème. Voici donc &lt;a href=&quot;https://www.ffoodd.fr/wp-tech/&quot;&gt;le support de mon atelier du WP Tech&lt;/a&gt; refondu en utilisant AccesSlide. Qu’en pensez-vous ?&lt;/p&gt;
&lt;p&gt;Pour rester fidèle à ma première présentation — mais aussi pour essayer de creuser un peu plus — je suis allé faire quelques modifications plus profondes.&lt;/p&gt;
&lt;h3 id=&quot;les-pictogrammes-en-svg&quot; tabindex=&quot;-1&quot;&gt;Les pictogrammes en SVG&lt;/h3&gt;
&lt;p&gt;Mon dada du moment. Les boutons et liens icônes sont intégrés à l’aide d’une police d’icône dans la version « officielle » proposée par Access42. Personnellement, je n’aime pas cette technique, que je trouve moins robuste qu’une bonne vieille balise image avec une source vectorielle. J’ai donc changé la façon de gérer ces boutons. Ça m’amène à une première remarque d’ordre général, mais sans être expert &lt;strong&gt;je pense que le javascript peut encore être amélioré&lt;/strong&gt; car on trouve beaucoup de répétitions.&lt;/p&gt;
&lt;p&gt;Pour information, il s’avère que si une balise image a une source svg, il faut ajouter le rôle image afin que VoiceOver accède à l’alternative textuelle :&lt;/p&gt;
&lt;pre class=&quot;language-markup&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;img&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;*.svg&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;alt&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;Quel essai !&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;role&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;img&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; 
   &lt;span class=&quot;token attr-name&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;8&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;8&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Étant donné que ça ne constitue pas un effort insurmontable ni même complexe, je préfère toujours cette version (qui fonctionne à partir d’IE9).&lt;/p&gt;
&lt;p&gt;Un petit coucou et un grand merci à Nicolas Hoffmann qui, suite à mon interrogation, a permis de confirmer ce diagnostic en haranguant la plèbe sur Twitter. Lisez &lt;a href=&quot;https://twitter.com/Nico3333fr/status/601687531218931712&quot;&gt;le fil de discussion&lt;/a&gt;, c’est très intéressant !&lt;/p&gt;
&lt;h3 id=&quot;la-transition-en-css&quot; tabindex=&quot;-1&quot;&gt;La transition en CSS&lt;/h3&gt;
&lt;p&gt;J’avais particulièrement apprécié la gestion des transitions sur Reveal.js, plutôt simple et efficace à l’aide de CSS. Aucun des effets proposés par AccesSlide ne correspondaient à celui que j’utilisais précédemment, alors je l’ai re-créé et ajouté !&lt;/p&gt;
&lt;p&gt;Là encore, &lt;strong&gt;ce fut extrêmement facile&lt;/strong&gt; en déclarant la nouvelle animation &lt;a href=&quot;https://github.com/access42/AccesSlide/blob/master/AccesSlide.js#L63&quot;&gt;conformément aux isntructions laissées dans le fichier javascript principal&lt;/a&gt;. Côté utilisateur, vous pourrez voir cette animation en la choisissant dans les réglages : je l’ai nommée « Coulisse vers la gauche » puisque c’est ce qu’elle fait !&lt;/p&gt;
&lt;p&gt;Ainsi le conteneur principal se voit affubler d’un attribut &lt;code&gt;data-effect&lt;/code&gt; dont la valeur est le nom de l’effet. Il n’en faut pas plus pour appliquer la transition CSS de mes rêves (même si je dois avouer devoir truander un peu afin de ne pas toucher aux fichiers originels) :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;[data-effect=&quot;ffoodd&quot;] .slide&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; block &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;opacity&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;margin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; .5rem&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; absolute&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;top&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0 &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;visibility&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; hidden&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;transform-style&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; preserve-3d&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;transition&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 
  transform-origin .8s &lt;span class=&quot;token function&quot;&gt;cubic-bezier&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;.26&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; .86&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; .44&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; .985&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  transform .8s &lt;span class=&quot;token function&quot;&gt;cubic-bezier&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;.26&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; .86&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; .44&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; .985&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  visibility .8s &lt;span class=&quot;token function&quot;&gt;cubic-bezier&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;.26&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; .86&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; .44&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; .985&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  opacity .8s &lt;span class=&quot;token function&quot;&gt;cubic-bezier&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;.26&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; .86&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; .44&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; .985&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;[data-effect=&quot;ffoodd&quot;] .slide[style*=&quot;display: none&quot;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;opacity&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;pointer-events&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; none&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; absolute&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;transform&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;translate3d&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; -150%&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 0 &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;visibility&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; hidden&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;/* C’est là que je truande :P */&lt;/span&gt;
&lt;span class=&quot;token selector&quot;&gt;[data-effect=&quot;ffoodd&quot;] .slide[style*=&quot;display: block&quot;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;opacity&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1    &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; relative  &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;visibility&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; visible &lt;span class=&quot;token important&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;[data-effect=&quot;ffoodd&quot;] .slide[style*=&quot;display: block&quot;] ~ .slide[style*=&quot;display: none&quot;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;transform&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;translate3d&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; 150%&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 0 &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et puis pour le fun, j’ai ajouté une animation au chargement de la page :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@keyframes&lt;/span&gt; move-up&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token selector&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;transform&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;translateY&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; 100% &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;translateZ&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; 0 &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;opacity&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;[data-effect=&quot;ffoodd&quot;] #wrapper&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;animation&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; move-up .8s &lt;span class=&quot;token function&quot;&gt;cubic-bezier&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;.165&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; .840&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; .440&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et le tour est joué ☺.&lt;/p&gt;
&lt;h2 id=&quot;participez&quot; tabindex=&quot;-1&quot;&gt;Participez !&lt;/h2&gt;
&lt;p&gt;Pour le moment mon thème est trop éloigné de la solution originelle pour que je puisse le proposer simplement, mais avec un peu de réécriture ce devrait être faisable (tout comme l’animation). &lt;strong&gt;Je tenterai de les proposer à Access42 dès que mon temps libre me le permettra&lt;/strong&gt; !&lt;/p&gt;
&lt;p&gt;Même si je ne m’en suis pas servi, je tiens également à souligner l’utilisation de fichiers partiels et du post-processeur &lt;a href=&quot;https://www.myth.io/&quot;&gt;Myth&lt;/a&gt; pour générer les sources. Le découpage en fichiers partiels rend l’orientation dans les fichiers encore plus clair. Côté compilation, une configuration basique pour Grunt est aussi mise à disposition.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tout est fait pour que quiconque puisse s’approprier la solution rapidement.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ah oui au fait, il y a d’autres fonctionnalités que je n’ai même pas évoquées :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;les styles pour l’impression ;&lt;/li&gt;
&lt;li&gt;le responsive ;&lt;/li&gt;
&lt;li&gt;un mode plan ;&lt;/li&gt;
&lt;li&gt;un système d’internationalisation géré &lt;em&gt;via&lt;/em&gt; javascript.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Plutôt pas mal, non ☺ ?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Alors à votre tour de contribuer&lt;/strong&gt; : &lt;a href=&quot;https://github.com/access42/AccesSlide&quot;&gt;AccesSlide est sur Github&lt;/a&gt; !&lt;/p&gt;
&lt;h2 id=&quot;epilogue&quot; tabindex=&quot;-1&quot;&gt;Épilogue&lt;/h2&gt;
&lt;p&gt;Il me reste un point important remonté par &lt;a href=&quot;https://anysurfer.be/fr&quot;&gt;Sophie Schuermans&lt;/a&gt; concernant l’aspect responsive que j’ai un peu endommagé. Et je tiens également à remercier &lt;a href=&quot;https://www.nicolas-hoffmann.net/source/&quot;&gt;Nicolas Hoffmann&lt;/a&gt; pour sa relecture attentive et ses conseils, ainsi qu’&lt;a href=&quot;https://accessiblog.fr/&quot;&gt;Olivier Nourry&lt;/a&gt; pour son intérêt !&lt;/p&gt;
</description>
					<pubDate>Sun, 24 May 2015 13:06:51 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/accesslide-la-prise-en-main/</guid>
					<frDate>24 mai 2015</frDate>
				</item>
				<item>
					<title>Choisir ses couleurs pour le Web</title>
					<link>https://www.ffoodd.fr/choisir-ses-couleurs-pour-le-web/</link>
					<description>&lt;p&gt;Ce livre nous donne quelques clés pour en apprendre les tenants et les aboutissants.&lt;/p&gt;
&lt;h2 id=&quot;les-fondations&quot; tabindex=&quot;-1&quot;&gt;Les fondations&lt;/h2&gt;
&lt;p&gt;Le livre est plutôt bien conçu, démarrant à la base de la théorie pour terminer par des exemples de mise en pratique. Le sommaire est d’ailleurs révélateur de la logique du livre :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Terminologie&lt;/li&gt;
&lt;li&gt;Groupes de couleurs&lt;/li&gt;
&lt;li&gt;Signification des couleurs&lt;/li&gt;
&lt;li&gt;Accords de couleurs&lt;/li&gt;
&lt;li&gt;Créer une palette de couleurs&lt;/li&gt;
&lt;li&gt;Règles d’utilisation de la couleur pour le web&lt;/li&gt;
&lt;li&gt;Appliquer la couleur à vos sites web&lt;/li&gt;
&lt;li&gt;Références&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Globalement, bien que simple, cet ouvrage couvre un large éventail de connaissances au sujet des couleurs. La terminologie est &lt;strong&gt;détaillée&lt;/strong&gt; et &lt;strong&gt;illustrée&lt;/strong&gt;, la signification des couleurs mentionne l’aspect culturel avec exemples à l’appui, les accords et les palettes sont présentés de façon très communicative également.&lt;/p&gt;
&lt;h2 id=&quot;qualites&quot; tabindex=&quot;-1&quot;&gt;Qualités&lt;/h2&gt;
&lt;p&gt;La couleur dans la création graphique se heurte souvent au même écueil : la &lt;strong&gt;subjectivité&lt;/strong&gt;. Comme on dit souvent :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Les goûts et les couleurs&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Palier cette difficulté se fait relativement facilement, en &lt;strong&gt;qualifiant les couleurs et leurs accords&lt;/strong&gt;. et bien ce livre le fait à merveille, et en tout transparence. Ça s’avère très agréable à parcourir. De plus la qualité des visuels et des exemples est bonne, sans être extraordinaire.&lt;/p&gt;
&lt;p&gt;Il ne s’agit pas d’un livre destiné aux spécialistes mais il permet aux profanes de découvrir en profondeur la thématique des couleurs.&lt;/p&gt;
&lt;h2 id=&quot;cas-pratique&quot; tabindex=&quot;-1&quot;&gt;Cas pratique&lt;/h2&gt;
&lt;p&gt;Les couleurs ont été un sujet très particulier lorsque j’ai réalisé la refonte de ce site, au même titre que la typographie et la mise en page par exemple. C’est pourquoi j’ai analysé rétrospectivement la gamme de couleurs choisies, avec l’aide du livre.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://www.ffoodd.fr/images/2015/03/ffoodd-300x55.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;Pour faire simple, voilà les connotations transportées par les couleurs principales :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;bleu sombre&lt;/strong&gt; : loyauté, honnêteté, force, confiance, sagesse, assurance, masculin, dignité, force, autorité, sérénité ;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;rouge vif&lt;/strong&gt; : passion, optimisme, énergie, dynamisme.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L’accord de ces deux couleurs génère de la &lt;strong&gt;tension&lt;/strong&gt;, et le blanc cassé permet d’adoucir l’aspect général et d’établir une zone confortable contrastant avec le fond. Ça correspond assez bien à ce que je souhaitais obtenir lors de la refonte.&lt;/p&gt;
&lt;p&gt;C’est une lecture très basique, mais c’est le niveau dont je dispose actuellement :).&lt;/p&gt;
&lt;h2 id=&quot;un-avis&quot; tabindex=&quot;-1&quot;&gt;Un avis&lt;/h2&gt;
&lt;p&gt;Pour terminer, c’est une lecture intéressante pour quiconque est pris de curiosité pour ce domaine. &lt;strong&gt;Si les couleurs vous parlent, n’hésitez pas à vous procurer ce livre.&lt;/strong&gt;&lt;/p&gt;
</description>
					<pubDate>Tue, 07 Apr 2015 11:00:38 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/choisir-ses-couleurs-pour-le-web/</guid>
					<frDate>7 avril 2015</frDate>
				</item>
				<item>
					<title>Découvrez le calcul magique</title>
					<link>https://www.ffoodd.fr/decouvrez-le-calcul-magique/</link>
					<description>&lt;p&gt;Et ça, c’était pas terrible. Non, vraiment pas. On cherchait frénétiquement à obtenir le même rendu sur tous les navigateurs et tous les écrans. Aujourd’hui, c’est drôle — à l’époque, c’était le nerf de la guerre.&lt;/p&gt;
&lt;h2 id=&quot;les-valeurs-uniques&quot; tabindex=&quot;-1&quot;&gt;Les valeurs uniques&lt;/h2&gt;
&lt;p&gt;Cette recherche de perfection était régulièrement entravée par plusieurs limitations techniques :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;les &lt;strong&gt;styles par défaut des navigateurs&lt;/strong&gt; différaient, parfois beaucoup — ce problème a été résolu à coup de &lt;em&gt;reset&lt;/em&gt; ou de &lt;em&gt;normalize&lt;/em&gt; ;&lt;/li&gt;
&lt;li&gt;les unités relatives étaient parfois compliquées à manœuvrer, à cause d’&lt;strong&gt;inconsistances dans les valeurs calculées&lt;/strong&gt; par les navigateurs (notamment la question des arrondis) mais ces derniers ont plutôt bien corrigé le tir, depuis ;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;les unités différentes&lt;/strong&gt;, difficiles à manipuler ensemble (&lt;code&gt;px&lt;/code&gt;, &lt;code&gt;%&lt;/code&gt;, &lt;code&gt;em&lt;/code&gt;, etc.) ;&lt;/li&gt;
&lt;li&gt;l’&lt;strong&gt;incompréhension des modèles de boîte&lt;/strong&gt;,  au moment ou tout le monde blâmait le mode &lt;em&gt;quirks&lt;/em&gt; d’IE avant de l’adopter massivement sous sa forme CSS (&lt;code&gt;box-sizing: border-box;&lt;/code&gt;, pour ceux qui se posent la question).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour l’intégrateur, ces différents tracas pouvaient être résolus de la même façon : des valeurs absolues en pixels, de préférence. Ainsi ajustions-nous nos largeurs, marges internes et marges externes &lt;strong&gt;au pixel près&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Désormais il est relativement rare d’en arriver à ces extrémités, grâce aux nombreux outils qui sont apparus ces dernières années. Il en est un en particulier qui aide bien, lorsque &lt;code&gt;box-sizing&lt;/code&gt; ne suffit pas : la fonction &lt;code&gt;calc()&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;la-fonction-calc-a-la-rescousse&quot; tabindex=&quot;-1&quot;&gt;La fonction calc() à la rescousse&lt;/h2&gt;
&lt;p&gt;Pour faire simple — vous la connaissez sûrement déjà — elle permet de réaliser des calculs simples directement dans les styles, &lt;strong&gt;en mixant les unités&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Dans un écosystème rempli de nombres magiques et d’intégration &lt;em&gt;pixel perfect&lt;/em&gt;, une reprise partielle du code peut s’avérer extrêmement fastidieuse.&lt;/p&gt;
&lt;p&gt;En l’occurrence, c’était mon cas lors d’un POC l’an dernier. Je devais travailler un gabarit souple en surcouche d’une structure figée, &lt;strong&gt;sans accès au DOM&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Ce fut relativement simple à l’exception d’un point : il fallait un bloc image avec titre superposé, qui prenne les deux tiers de la largeur du site — largeur devenue relative, je le rappelle — en partant de la colonne centrale. Jusque là, ça va ! Le point vraiment compliqué est que le bloc de la colonne de droite devait suffisamment se décaler en hauteur pour laisser la place à ce nouveau contenu, tout en respectant le ratio de l’image constituant ce nouvel élément — puisqu’elle sera souple également. Ah, et pour s’amuser un peu visuellement, il faudrait conserver un rappel visuel du colonage au-dessus du nouveau bloc !&lt;/p&gt;
&lt;p&gt;Bien, utilisons une bordure en haut pour gérer le décalage !&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ça commence à faire un certain nombre de calculs, vous ne trouvez pas ?&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;la-situation-complexe&quot; tabindex=&quot;-1&quot;&gt;La situation complexe&lt;/h2&gt;
&lt;p&gt;Textuellement, ça n’est pas forcément évident. Voici une petite illustration, dans laquelle la zone blanche est le nouvel élément, et le bloc rouge est la bordure dont je devais ajuster la dimension :&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://www.ffoodd.fr/images/2015/03/calc.png&quot; alt=&quot;Représentation graphique des proportions entre les blocs&quot; width=&quot;300&quot; height=&quot;209&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;figcaption&gt;Représentation graphique des proportions entre les blocs&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Finalement, je suis parvenu à simplifier le calcul en tournant autour du ratio de l’image utilisée (en blanc sur le schéma), soit &lt;strong&gt;431:950&lt;/strong&gt;. Il s’agissait donc d’exprimer la hauteur de la bordure selon 3 valeurs :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;la proportion en largeur que représente ce nouveau bloc par rapport au &lt;em&gt;viewport&lt;/em&gt;, soit &lt;code&gt;72%&lt;/code&gt; ;&lt;/li&gt;
&lt;li&gt;le ratio de l’image utilisée, en l’occurrence &lt;code&gt;431/950&lt;/code&gt; ;&lt;/li&gt;
&lt;li&gt;le décalage supplémentaire à ajouter au-dessus et en-dessous pour l’esthétisme, ici &lt;code&gt;4.8em&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;la-magie-opere&quot; tabindex=&quot;-1&quot;&gt;La magie opère&lt;/h2&gt;
&lt;p&gt;Et voilà comment on aboutit à :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;aside&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;border-top-width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;calc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; 72vw * 431 / 950 + 4.8em&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Grâce à ce calcul, le décalage reste correct et proportionnel au reste de l’écran, et l’aspect graphique est homogène dans tous les contextes d’affichage.&lt;/p&gt;
&lt;h2 id=&quot;les-supplements&quot; tabindex=&quot;-1&quot;&gt;Les suppléments&lt;/h2&gt;
&lt;p&gt;Depuis ce POC, j’ai découvert le travail de &lt;a href=&quot;https://gasteroprod.com/&quot;&gt;Nicolas Hoizey&lt;/a&gt; sur &lt;a href=&quot;https://github.com/nhoizey/esviji&quot;&gt;esviji V2&lt;/a&gt;, qui utilise &lt;a href=&quot;https://github.com/nhoizey/esviji/blob/master/src/sass/_screen.scss&quot;&gt;les ratios, les calculs et les unités de viewport&lt;/a&gt; pour atteindre un degré d’adaptation aux écrans extraordinaire. Je vous conseille de garder un œil sur son projet, et surtout de parcourir &lt;a href=&quot;https://gist.github.com/nhoizey/f31cf92114a376a23155&quot;&gt;la feuille de styles générée&lt;/a&gt; qui est remarquablement écrite !&lt;/p&gt;
</description>
					<pubDate>Mon, 30 Mar 2015 16:30:04 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/decouvrez-le-calcul-magique/</guid>
					<frDate>30 mars 2015</frDate>
				</item>
				<item>
					<title>Sass pour les webdesigners</title>
					<link>https://www.ffoodd.fr/sass-pour-les-webdesigners/</link>
					<description>&lt;p&gt;En revanche, cette collection est dédiée à la découverte des sujets. Leur accroche le sous-entend :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Brief books for people who make websites&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;C’est pourquoi les livres abordant un langage particulier ne m’ont jamais réellement appris : concernant le HTML5 ou le CSS3, je connais les bases et ma veille régulière me permet de les entretenir. Cet ouvrage sur Sass ne déroge pas, je n’ai pas appris grand chose — malgré ça je vous recommande ce livre !&lt;/p&gt;
&lt;h2 id=&quot;a-l-abordage&quot; tabindex=&quot;-1&quot;&gt;À l’abordage&lt;/h2&gt;
&lt;p&gt;Pour débuter, précisions que le livre a un objectif. Il ne se contente pas d’énumérer les fonctionnalités de Sass, mais vise plutôt à persuader les personnes réticentes ou intimidées par Sass qu’il n’y a aucun risque ni aucun investissement particulier à commencer à l’utiliser.&lt;/p&gt;
&lt;p&gt;En effet, il est toujours possible d’écrire son CSS normalement, &lt;strong&gt;sans rien changer à ses habitudes de travail établies&lt;/strong&gt;. On peut cependant débuter gentiment par définir une variable et l’utiliser, ou jouer avec un mixin simple. Ça ne coûte rien, c’est facile à faire, bref : que du bonheur !&lt;/p&gt;
&lt;h2 id=&quot;a-l-americaine&quot; tabindex=&quot;-1&quot;&gt;À l’américaine&lt;/h2&gt;
&lt;p&gt;On peut en dire ce qu’on veut, mais les auteurs de la collection sont des orateurs hors pair et des rédacteurs nés. La plupart ont apporté tellement d’idées à nos métiers, nos façons de les voir et nos méthodologies de travail qu’ils sont l’équivalent de prophètes, que tout le monde écoute attentivement.&lt;/p&gt;
&lt;p&gt;Dans cet ouvrage, Dan Cederholm (qui a déjà publié « &lt;em&gt;CSS3 pour les webdesigners&lt;/em&gt; », dans la même collection) démontre une fois de plus sa capacité à expliquer clairement les points techniques, à établir une connivence avec le lecteur et à s’exprimer avec efficience. &lt;strong&gt;Tout ça rend ce livre extrêmement agréable à lire&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;a-l-envie&quot; tabindex=&quot;-1&quot;&gt;À l’envie&lt;/h2&gt;
&lt;p&gt;Même si je n’ai pas appris grand chose, ce livre est un bon ouvrage, agréable à lire et que je conseille tout particulièrement aux personnes qu’on peut affubler de l’étiquette &lt;em&gt;webdesigner&lt;/em&gt; et qui n’ont pas encore mis les mains dans le cambouis de Sass.&lt;/p&gt;
&lt;p&gt;Toutefois je place un léger bémol sur le fait que ce livre en VO a déjà deux ans, et que certaines recommandations de l’époque sont devenues désuètes. Je pense notamment à l’imbrication des sélecteurs pour refléter le DOM, qui est désormais considéré comme une mauvaise pratique à bien des égards.&lt;/p&gt;
&lt;p&gt;Étant donné le rapport qualité prix de cet ouvrage, &lt;strong&gt;je le recommande à tous les débutants en Sass, qu’ils soient étudiants ou professionnels aguerris&lt;/strong&gt; !&lt;/p&gt;
</description>
					<pubDate>Mon, 23 Mar 2015 10:00:27 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/sass-pour-les-webdesigners/</guid>
					<frDate>23 mars 2015</frDate>
				</item>
				<item>
					<title>JavaScript and Jquery</title>
					<link>https://www.ffoodd.fr/javascript-and-jquery/</link>
					<description>&lt;p&gt;Ce livre vise à faire le premier pas vers une utilisation correcte du JS. Il explique en détail les concepts clés du langage.&lt;/p&gt;
&lt;h2 id=&quot;la-metaphore-des-objets&quot; tabindex=&quot;-1&quot;&gt;La métaphore des objets&lt;/h2&gt;
&lt;p&gt;Très appréciable pour le débutant que je suis, la première partie sur les bases de la programmation et la présentation des fonctions, méthodes et objets est abordée efficacement : imaginez une voiture. La suite est simple, il s’agit de votre objet et elle dispose de propriétés, de méthodes et de fonctions pour gérer le tout.&lt;/p&gt;
&lt;p&gt;Je ne vais pas vous présenter le contenu (vous irez le lire !) mais simplement évoquer l’approche choisie, qui m’a semblée extrêmement pertinente. C’est le reproche que je fais très souvent aux livres qui souhaite vous faire démarrer avec le JS : ils sont rédigés par des techniciens, avec un vocabulaire de techniciens.&lt;/p&gt;
&lt;p&gt;Ici, le seul pré-requis est de connaître un minimum HTML et CSS.&lt;/p&gt;
&lt;h2 id=&quot;illustrations-et-schemas&quot; tabindex=&quot;-1&quot;&gt;Illustrations et schémas&lt;/h2&gt;
&lt;p&gt;La véritable force de cet ouvrage réside dans sa mise en page et ses multiples illustrations. La représentation graphique — sous forme de schémas — des enchaînements logiques est un atout considérable. C’est la solution par laquelle je transitais systématiquement lorsque je découvrais le langage, bien que mon approche était plus textuelle que graphique.&lt;/p&gt;
&lt;p&gt;La &lt;strong&gt;normalisation d’un système graphique pour représenter la logique&lt;/strong&gt; inhérente aux scripts est un élément que je vais probablement tenter d’intégrer à mon travail.&lt;/p&gt;
&lt;h2 id=&quot;les-limites-annoncees&quot; tabindex=&quot;-1&quot;&gt;Les limites annoncées&lt;/h2&gt;
&lt;p&gt;Ce livre s’adresse avant tout aux débutants. Évidemment, les sujets n’iront pas en profondeur.&lt;/p&gt;
&lt;p&gt;Cependant je reste malgré tout sur ma faim, car très peu de problématiques pratiques sont abordées. Les exemples sont certes bien choisis et travaillés, mais ils sont légèrement utopiques. Personnellement, en me lançant dans l’apprentissage du JS, j’ai rencontré des situations complexes et des problèmes qui ne sont qu’effleurés. Ça ne me surprend pas mais c’est ce qui explique que cette lecture ne m’ait pas énormément appris, alors que &lt;strong&gt;je pars de loin&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Ensuite, le parti est pris de travailler avec jQuery. C’est annoncé, pas de surprise. Mais par un heureux hasard, jQuery n’est employé que dans les situations qui pourraient devenir complexes. C’est son intérêt, mais j’aurais beaucoup apprécié que le livre évoque la création des mêmes fonctionnalités avec &lt;strong&gt;et sans&lt;/strong&gt; jQuery. Premièrement, pour mettre en avant les avantages de jQuery et la pertinence de son utilisation. Deuxièmement, pour &lt;strong&gt;mentionner les écueils potentiels&lt;/strong&gt; .&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/javascript-and-jquery/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id=&quot;une-reference-du-genre&quot; tabindex=&quot;-1&quot;&gt;Une référence du genre&lt;/h2&gt;
&lt;p&gt;Malgré ces aspects négatifs, ce livre est de loin le meilleur ouvrage d’apprentissage du JS que j’ai lu jusqu’à présent. Mon profil étant intermédiaire je reste légèrement frustré, mais j’ai tout de même appris quelques trucs et surtout, les explications claires et illustrées ont éclaircies beaucoup de choses que je pensais savoir.&lt;/p&gt;
&lt;p&gt;En bref, si comme moi vous n’êtes pas un spécialiste, je vous recommande chaudement cette lecture 🙂&lt;/p&gt;
&lt;ol class=&quot;footnotes-list small mt2 pt2 pb2&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Et les contournements possibles, autant que faire se peut. &lt;a href=&quot;https://www.ffoodd.fr/javascript-and-jquery/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;</description>
					<pubDate>Mon, 09 Mar 2015 09:00:48 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/javascript-and-jquery/</guid>
					<frDate>9 mars 2015</frDate>
				</item>
				<item>
					<title>a11y.css, version deux</title>
					<link>https://www.ffoodd.fr/a11y-css-version-deux/</link>
					<description>&lt;p&gt;Ainsi depuis la toute première mouture (en CSS) de cette feuille de style de diagnostic, beaucoup de choses ont changé. Voyons ça en détail 🙂&lt;/p&gt;
&lt;h2 id=&quot;corrections-multiples&quot; tabindex=&quot;-1&quot;&gt;Corrections multiples&lt;/h2&gt;
&lt;p&gt;Comme vous pourrez le voir &lt;a href=&quot;https://github.com/ffoodd/a11y.css/issues?q=is%3Aissue+is%3Aclosed&quot;&gt;sur Github&lt;/a&gt;, pas moins de 97 issues ont été résolues. Cela a été possible grâce aux retours de quelques personnes, que je tiens à citer et remercier à nouveau :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/KittyGiraudel&quot;&gt;Kitty Giraudel&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/7studio&quot;&gt;Xavier Zalawa&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/heydonworks&quot;&gt;Heydon Pickering&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/klohFR&quot;&gt;Luc Poupard&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/GaetanBt&quot;&gt;Gaëtan Bonnot&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/a5e&quot;&gt;Antoine&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/goetsu&quot;&gt;Aurélien Levy&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/olamedia&quot;&gt;Olamedia&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bveneman.nl/&quot;&gt;Bart Veneman&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Entre les bugs et les découvertes diverses, la &lt;strong&gt;qualité&lt;/strong&gt; et la &lt;strong&gt;pertinence&lt;/strong&gt; d’a11y.css ont considérablement progressé.&lt;/p&gt;
&lt;h3 id=&quot;compteurs-css&quot; tabindex=&quot;-1&quot;&gt;Compteurs CSS&lt;/h3&gt;
&lt;p&gt;Les compteurs sont au nombre des améliorations simples mais utiles — ces choses parfois qualifiées de &lt;em&gt;quick win&lt;/em&gt;. Même si l’idée cheminait dans mon esprit depuis longtemps, c’est l’implémentation dans &lt;a href=&quot;https://yahoo.github.io/debugCSS/&quot;&gt;le DebugCSS de Yahoo&lt;/a&gt; qui a produit le déclic.&lt;/p&gt;
&lt;p&gt;Les fonctions CSS de compteurs font partie des outils qui trouvent rarement un contexte d’utilisation pertinent. Pour une fois, c’est le cas !&lt;/p&gt;
&lt;h2 id=&quot;personnalisation&quot; tabindex=&quot;-1&quot;&gt;Personnalisation&lt;/h2&gt;
&lt;p&gt;Après la fastidieuse relecture &lt;a href=&quot;https://github.com/ffoodd/a11y.css/blob/main/README-fr.md&quot;&gt;de mes différentes sources&lt;/a&gt;, ce qui n’était qu’un simple fichier CSS de diagnostic est devenu un &lt;strong&gt;système complexe basé sur Sass&lt;/strong&gt; — dont le fichier de sortie final compressé pèse 80kb !&lt;/p&gt;
&lt;p&gt;Il devenait indispensable de permettre aux utilisateurs le désirant de charger seulement les portions qui leur sont utiles. Avec l’aide de &lt;a href=&quot;https://kittygiraudel.com/&quot;&gt;Kitty Giraudel&lt;/a&gt;, deux mécanismes ont été mis en place.&lt;/p&gt;
&lt;h3 id=&quot;generateur-de-bookmarklet&quot; tabindex=&quot;-1&quot;&gt;Générateur de &lt;em&gt;bookmarklet&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;Il était déjà possible aux utilisateurs de Sass de ne compiler que les niveaux de critères qui les intéressaient. Désormais, ces fichiers nivelés sont mis &lt;a href=&quot;https://github.com/ffoodd/a11y.css/tree/master/css&quot;&gt;à disposition dans le projet&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Le &lt;em&gt;bookmarklet&lt;/em&gt; existait depuis quelques temps déjà, mais désormais un petit formulaire &lt;a href=&quot;https://ffoodd.github.io/a11y.css/&quot;&gt;sur le site de présentation&lt;/a&gt; permet de le paramétrer &lt;strong&gt;en définissant le niveau minimum&lt;/strong&gt; nécessaire.&lt;/p&gt;
&lt;h3 id=&quot;desactivation-de-tests&quot; tabindex=&quot;-1&quot;&gt;Désactivation de tests&lt;/h3&gt;
&lt;p&gt;Pour que les utilisateurs de Sass aient toujours un intérêt à disposer du projet sur leur poste, mais aussi afin que les utilisateurs les plus avertis puissent personnaliser cet outil, Kitty a également &lt;a href=&quot;https://github.com/ffoodd/a11y.css/blob/main/README-fr.md&quot;&gt;conçu une fonction&lt;/a&gt; pour désactiver les tests au cas par cas. Par exemple, si vous voulez désactiver les erreurs à propos des mauvais &lt;code&gt;tabindex&lt;/code&gt; et du &lt;code&gt;href&lt;/code&gt; manquant, voici comment faire :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;
&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@include&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;disable-errors&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;tab-order, no-href&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et ça, c’est plutôt pratique 😀 !&lt;/p&gt;
&lt;h2 id=&quot;traduction&quot; tabindex=&quot;-1&quot;&gt;Traduction&lt;/h2&gt;
&lt;p&gt;Pour celle-ci, je vais applaudir discrètement et vous renvoyer vers &lt;a href=&quot;https://kittygiraudel.com/2014/10/22/translation-system-in-sass/&quot;&gt;l’article écrit par Kitty (en anglais)&lt;/a&gt; qui détaille le fonctionnement de son &lt;strong&gt;système de traduction en Sass&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Oui, vous avez bien lu :désormais a11y.css est multilingue en demeurant écrit uniquement en Sass. Outre la portée accrue de façon incroyable suite au passage en anglais, l’exploit technique de Kitty est incroyable. J’en profite pour signaler la parution de son premier livre « CSS3 : pratique du design web » &lt;a href=&quot;https://www.eyrolles.com/Informatique/Livre/css3-9782212140231&quot;&gt;en vente aux éditions Eyrolles&lt;/a&gt;, que je vous recommande chaudement.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/a11y-css-version-deux/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id=&quot;documentation-and-test&quot; tabindex=&quot;-1&quot;&gt;Documentation &amp;amp; test&lt;/h2&gt;
&lt;p&gt;Vous vous en doutez, le projet est devenu relativement complexe. Les solutions apportées par les différents contributeurs on tellement enrichi ce projet que même moi, je ne m’y retrouvais plus.&lt;/p&gt;
&lt;p&gt;J’avais déjà mentionné lors de &lt;a href=&quot;https://www.ffoodd.fr/wp-tech-2014/&quot; title=&quot;WP Tech 2014&quot;&gt;mon atelier au WP Tech&lt;/a&gt; mon &lt;strong&gt;intérêt pour la documentation&lt;/strong&gt; ; c’est donc tout naturellement que j’ai cherché à documenter plus précisément a11y.css. Et de mon point de vue, il y a deux aspects très différents à documenter :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;le &lt;strong&gt;contenu des tests&lt;/strong&gt; : pourquoi ces critères, comment ont-ils été défini, quel est leur intérêt.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/a11y-css-version-deux/#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;la &lt;strong&gt;structure du projet Sass&lt;/strong&gt;, ou pour parler le technicien : l’API.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Premier chantier : trouver les outils adaptés !&lt;/p&gt;
&lt;h3 id=&quot;hologram&quot; tabindex=&quot;-1&quot;&gt;Hologram&lt;/h3&gt;
&lt;p&gt;Ayant démarré ce projet seul et n’ayant pas imaginé le partager, les recherches qui m’avaient permis d’aboutir à certains tests n’étaient pas suffisamment documentées. J’ai donc étoffé les références de chaque test en indiquant, autant que faire se peut :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les bonnes pratiques Opquast ;&lt;/li&gt;
&lt;li&gt;Les critères et tests Accessiweb HTML5 et ARIA ;&lt;/li&gt;
&lt;li&gt;Les succès WCAG 2.0 ;&lt;/li&gt;
&lt;li&gt;Les sources dans des projets équivalents.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ces ressources étant réunies, je souhaitais mettre à l’épreuve cet outil en mettant en place une &lt;strong&gt;page de démonstration&lt;/strong&gt; qui servirait aussi à suivre les éventuelles régressions. Et parce qu’il ne s’agit pas seulement de pouvoir tester, mais également d’&lt;strong&gt;expliquer et de partager ces bonnes pratiques&lt;/strong&gt;, un court descriptif du test était nécessaire.&lt;/p&gt;
&lt;p&gt;Pour résumer, je cherchais donc un outil capable :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;D’afficher la description et les liens associés au test ;&lt;/li&gt;
&lt;li&gt;Un exemple de code HTML lisible ciblé par le test, et une version interprétée par le navigateur &lt;/li&gt;
&lt;li&gt;La capacité d’organiser les nombreux tests présents.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;C’est là qu’intervient &lt;a href=&quot;https://trulia.github.io/hologram/&quot;&gt;Hologram&lt;/a&gt;, une gem Ruby créée par Trulia. Elle m’a semblé parfaite puisqu’elle repose sur des commentaires CSS formatés pour générer la documentation. Son objectif premier est la création et la maintenance de guides de style, ce qui n’est pas si loin du sens premier d’a11y.css : &lt;strong&gt;gérer et maintenir un ensemble de pratiques&lt;/strong&gt; à vérifier.&lt;/p&gt;
&lt;p&gt;Hologram est incroyablement simple à manipuler, puisqu’une fois la gem installée il suffit de commenter son CSS de la façon suivante :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;
&lt;span class=&quot;token comment&quot;&gt;/*doc
---
title: &quot;[tabindex] &gt; 0&quot;
name: tab-order
category: Errors
---
The `[tabindex]` attribute should never be greater than 0.
* &amp;lt;https://github.com/Heydon/REVENGE.CSS/blob/master/revenge.css#L337&gt;
```html_example
&amp;lt;button tabindex=&quot;1&quot;&gt;Positive tabindex is bad&amp;lt;/button&gt;
```
*/&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La syntaxe est intelligible, et reste utile sans Hologram pour générer la documentation. Un point que j’apprécie ! Pour générer la documentation, c’est très simple :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;
hologram&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Et voilà !&lt;/strong&gt; Hologram génère un mini-site statique grâce à un jeu de ressources très simple. Il est ainsi possible de personnaliser l’entête, le pied-de-page et les ressources statiques pour aménager sa documentation à volonté. &lt;strong&gt;Magique&lt;/strong&gt; 🙂&lt;/p&gt;
&lt;p&gt;Et puisque j’avais déjà créé une branche pour servir de présentation en ligne sur Github, j’ai ajouté ces nouveaux fichiers HTML afin d’en faire &lt;strong&gt;un véritable site de démonstration&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Jetez un œil au &lt;a href=&quot;https://ffoodd.github.io/a11y.css/&quot;&gt;site de démonstration d’a11y.css&lt;/a&gt; !&lt;/p&gt;
&lt;h3 id=&quot;sass-doc&quot; tabindex=&quot;-1&quot;&gt;SassDoc&lt;/h3&gt;
&lt;p&gt;Pour finir, l’architecture du projet s’étant alourdie d’options et de fonctionnalités, il fallait permettre aux utilisateurs de Sass de s’approprier plus facilement l’outil.&lt;/p&gt;
&lt;p&gt;Par chance, la majorité de ces enrichissements étaient l’œuvre de Kitty Giraudel, qui s’avère aussi être le créateur de &lt;a href=&quot;https://sassdoc.com/&quot;&gt;SassDoc&lt;/a&gt;. La personne a tendance à faire des trucs un peu fou en Sass, et cet outil de documentation correspond à la perfection aux besoins d’une API Sass.&lt;/p&gt;
&lt;p&gt;Ni une ni deux, Kitty a mis en place SassDoc !&lt;/p&gt;
&lt;p&gt;Et voilà un projet &lt;strong&gt;complètement documenté&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;ce-n-est-pas-fini&quot; tabindex=&quot;-1&quot;&gt;Ce n’est pas fini !&lt;/h2&gt;
&lt;p&gt;Il reste quelques sujets à avancer :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mettre à niveau SassDoc pour utiliser la V2 ;&lt;/li&gt;
&lt;li&gt;Créer un thème SassDoc pour l’intégrer au site ;&lt;/li&gt;
&lt;li&gt;Essayer d’ajouter une version française de cette documentation — ce qui semble complexe ;&lt;/li&gt;
&lt;li&gt;Trouver une façon de cibler les éléments auto-fermants dans les tests génériques ;&lt;/li&gt;
&lt;li&gt;Chercher de nouveaux tests à ajouter :D.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et, bien sûr, maintenir tout ça dans le temps !&lt;/p&gt;
&lt;p&gt;Je ne sais pas si ça se sent mais ce projet me passionne et je suis enchanté d’avoir pu &lt;strong&gt;partager mes réflexions, mes pratiques et mes idées&lt;/strong&gt; avec toutes les personnes qui sont intervenues. J’ai énormément progressé grâce à ces échanges, et ma plus grande &lt;strong&gt;fierté&lt;/strong&gt; est de voir a11y.css cité dans &lt;a href=&quot;https://daisy.tetue.net/#debug&quot;&gt;la section &lt;em&gt;debug&lt;/em&gt; de la méthode Daisy&lt;/a&gt;, créé par une personne que j’admire : &lt;a href=&quot;https://romy.tetue.net/&quot;&gt;Romy Duhem-Verdière&lt;/a&gt;.&lt;/p&gt;
&lt;ol class=&quot;footnotes-list small mt2 pt2 pb2&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Sans rire, le mec est un génie alors achetez son livre et lisez son blog. &lt;a href=&quot;https://www.ffoodd.fr/a11y-css-version-deux/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Je ne l’ai pas encore dit mais un des objectifs du projet est clairement devenu l’apprentissage et l’accès aux savoirs. Asséner un message sans l’expliquer me parait inutile, tout comme appliquer religieusement le contenu du message n’est pas pertinent. &lt;a href=&quot;https://www.ffoodd.fr/a11y-css-version-deux/#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;</description>
					<pubDate>Mon, 02 Mar 2015 20:45:32 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/a11y-css-version-deux/</guid>
					<frDate>2 mars 2015</frDate>
				</item>
				<item>
					<title>WP Tech 2014</title>
					<link>https://www.ffoodd.fr/wp-tech-2014/</link>
					<description>&lt;p&gt;Car non, je ne vais pas vous en faire un compte-rendu : j’étais orateur, et ça me fait beaucoup de choses à raconter !&lt;/p&gt;
&lt;h2 id=&quot;la-selection-des-sujets&quot; tabindex=&quot;-1&quot;&gt;La sélection des sujets&lt;/h2&gt;
&lt;h3 id=&quot;l-organisation-en-amont&quot; tabindex=&quot;-1&quot;&gt;L’organisation en amont&lt;/h3&gt;
&lt;p&gt;À l’instar de nombreux événements de ce type, les organisateurs ont lancé un appel à orateurs. La seule demande était une orientation technique du sujet, et Willy et Daniel avaient même offert des suggestions de sujets. Leur grande idée a été de sonder l’intérêt de leur public avant de se lancer dans l’organisation, et ils en ont profité pour demander si des sujets particuliers les intéressaient.&lt;/p&gt;
&lt;p&gt;Et j’aimerais à nouveau remercier &lt;a href=&quot;https://twitter.com/willybahuaud&quot;&gt;Willy&lt;/a&gt; et &lt;a href=&quot;https://twitter.com/rochdaniel&quot;&gt;Daniel&lt;/a&gt;, qui ont initié le mouvement, mais aussi &lt;a href=&quot;https://twitter.com/ToOmOo44&quot;&gt;Simon&lt;/a&gt; et Stéphanie qui ont prêté main forte ainsi qu’&lt;a href=&quot;https://twitter.com/manooweb&quot;&gt;Emmanuel&lt;/a&gt;. J’en oublie certainement, mais je suis vraiment heureux de vous avoir rencontrés à cette occasion, et ce fut incroyablement plaisant de sentir ce staff à l’écoute de son futur public.&lt;/p&gt;
&lt;h3 id=&quot;l-invitation-au-voyage&quot; tabindex=&quot;-1&quot;&gt;L’invitation au voyage&lt;/h3&gt;
&lt;p&gt;J’ai évidemment été parmi les premiers à répondre à leur sondage. Parmi les sujets qui sortaient du lot, les thèmes enfants ont fait leur apparition. Pour une raison inconnue, Willy m’a proposé de participer en tant qu’orateur — sur un sujet de mon choix parmi les suggestions — et autant vous dire que, passée la joie procurée, le challenge m’a vite motivé. Les &lt;strong&gt;thèmes enfants&lt;/strong&gt; m’ayant été indispensables dans mes projets WordPress depuis au moins trois ans, j’ai rédigé une proposition de sujet sur leur utilisation avancée.&lt;/p&gt;
&lt;p&gt;Et devinez quoi ?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://2014.wptech.fr/session/framework-themes-enfants/&quot;&gt;Il a été retenu&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;la-preparation&quot; tabindex=&quot;-1&quot;&gt;La préparation&lt;/h2&gt;
&lt;p&gt;Il a donc fallu me plier à l’exercice. Comme bon nombre de professionnels, j’ai déjà eu l’occasion de faire des présentations devant un public plus ou moins vaste, mais pour la première fois j’allais m’adresser à un panel de techniciens &lt;strong&gt;probablement bien meilleurs que moi&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;la-differenciation&quot; tabindex=&quot;-1&quot;&gt;La différenciation&lt;/h3&gt;
&lt;p&gt;Le sujet des thèmes enfants est relativement connu, avec le biais dénoncé dans mon &lt;em&gt;synopsis&lt;/em&gt; : les bonnes pratiques prônées par WordPress, qui sont loin d’être motivantes pour s’investir dans ce mécanisme génial. Je savais déjà que ma façon de faire tire ses origines à l’extérieur de l’écosystème WordPress : j’aime mon travail, et &lt;strong&gt;j’aime le faire bien&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;J’ai donc mis en valeur la &lt;strong&gt;qualité web&lt;/strong&gt;, et comment les thèmes enfants couplés à de bonnes habitudes de travail permettent de gérer sans frais la qualité globale de nos productions.&lt;/p&gt;
&lt;h3 id=&quot;en-parlant-d-habitudes&quot; tabindex=&quot;-1&quot;&gt;En parlant d’habitudes&lt;/h3&gt;
&lt;p&gt;Mon cursus de communication visuelle m’aura enseigné de nombreuses façons de cultiver mes idées. Je suis donc parti, de façon assez ordinaire, sur une &lt;strong&gt;carte heuristique&lt;/strong&gt; :&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://www.ffoodd.fr/images/2014/12/carte-heuristique.jpg&quot; alt=&quot;Carte heuristique&quot; width=&quot;1024&quot; height=&quot;574&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;figcaption&gt;Carte heuristique des concepts liés à l’utilisation de thèmes enfants dans WordPress&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Comme toute bonne carte heuristique, c’est touffu. Une fois les termes clés regroupés autour de thèmes principaux, j’ai formalisé et éclairci le tout en créant un simple tableau :&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://www.ffoodd.fr/images/2014/12/tri.jpg&quot; alt=&quot;tableau des concepts&quot; width=&quot;150&quot; height=&quot;150&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;figcaption&gt;Tableau des concepts clés&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Me voilà fin prêt à rédiger ma présentation, le plus compliqué étant d’en trouver &lt;strong&gt;des illustrations techniques en cohérence avec mes propos&lt;/strong&gt;. Mais je pense avoir réussi :). Si le cœur vous en dit, vous pouvez consulter la présentation de l’atelier « &lt;a href=&quot;https://www.ffoodd.fr/wp-tech&quot;&gt;Les thèmes enfants : au-delà de la bonne pratique&lt;/a&gt; ».&lt;/p&gt;
&lt;h2 id=&quot;le-diner-des-orateurs&quot; tabindex=&quot;-1&quot;&gt;Le dîner des orateurs&lt;/h2&gt;
&lt;p&gt;Malgré le &lt;em&gt;stress&lt;/em&gt; qui montait, je me suis rendu au dîner des orateurs et des bénévoles, la veille de l’événement. Et j’ai été très chaleureusement accueilli par Daniel, puis eut le loisir d’échanger avec Emmanuel, Simon, Stéphanie et Amaury durant le repas.&lt;/p&gt;
&lt;p&gt;Comme pour l’ensemble du WP Tech, je suis seulement déçu par &lt;strong&gt;le manque de temps&lt;/strong&gt; : j’ai raté pas mal d’occasion pour rencontrer certaines personnes que je côtoie sur le web depuis longtemps, telles que &lt;a href=&quot;https://boiteaweb.fr/&quot;&gt;Julio Potier&lt;/a&gt;, &lt;a href=&quot;https://tweetpressfr.github.io/blog/&quot;&gt;Julien Maury&lt;/a&gt;, &lt;a href=&quot;https://wpchannel.com/&quot;&gt;Aurélien Denis&lt;/a&gt;, et même Willy et Daniel que je n’ai finalement fait que croiser (comme tout le monde, je pense :D).&lt;/p&gt;
&lt;h2 id=&quot;le-jour-meme&quot; tabindex=&quot;-1&quot;&gt;Le jour-même&lt;/h2&gt;
&lt;p&gt;Levé à 6h, la tête dans la pâté, mais très, très motivé ! L’accueil à l’Epitech par l’équipe était vraiment agréable, et parmi les &lt;em&gt;goodies&lt;/em&gt; nous avons pu trouver un T-shirt et des &lt;em&gt;stickers&lt;/em&gt; à ajouter sur nos badges. Le choix était amusant : entre déclaration d’amour et &lt;em&gt;troll&lt;/em&gt; en bonne et due forme, tout le monde y a trouvé son bonheur. Sans surprise, j’ai choisi « Mes thèmes enfants ne parlent avec des inconnus ».&lt;/p&gt;
&lt;p&gt;Je vous enjoins à nouveau à lire &lt;strong&gt;l’excellent compte-rendu&lt;/strong&gt; sur &lt;a href=&quot;https://wpmarmite.com/wp-tech-2014/&quot;&gt;WP Marmite&lt;/a&gt;, car je vais directement passer à ma prestation.&lt;/p&gt;
&lt;p&gt;J’en suis relativement content, bien que je doive avouer qu’elle ne s’est pas déroulée du tout comme je l’avais prévue ! Je souhaitais &lt;strong&gt;générer des échanges&lt;/strong&gt; tout au long de l’atelier, mais très vite je me suis aperçu que je n’y parviendrais pas : j’avais trop de choses à dire.&lt;/p&gt;
&lt;p&gt;J’ai donc insisté auprès de mes spectateurs du jour pour qu’ils interviennent également, quitte à m’arrêter quelques instants et &lt;strong&gt;attendre que quelqu’un prenne la parole&lt;/strong&gt;. Et ça a fonctionné.&lt;/p&gt;
&lt;p&gt;Ma peur d’&lt;strong&gt;être dépassé techniquement&lt;/strong&gt; par certaines suggestions s’est estompée rapidement, car je crois être parvenu à comprendre les propositions et y adapter mes réflexions au fil de l’eau.&lt;/p&gt;
&lt;h2 id=&quot;bien-terminer-la-journee&quot; tabindex=&quot;-1&quot;&gt;Bien terminer la journée&lt;/h2&gt;
&lt;p&gt;Puis j’ai eu la surprise de recevoir quelques retours agréables sur cet atelier, dès la fin de la journée puisque quelques personnes m’ont interrogé sur certaines pratiques concernant les thèmes enfants et la gestion de la qualité.&lt;/p&gt;
&lt;p&gt;C’était une chouette expérience, et j’en retiendrais vraiment la simplicité des échanges et les (pas suffisamment nombreuses) rencontres de la journée. &lt;strong&gt;Les prestations étaient toutes d’une très grande qualité, alors empressez-vous de regarder les vidéos dès leur mise en ligne !&lt;/strong&gt;&lt;/p&gt;
</description>
					<pubDate>Thu, 04 Dec 2014 22:08:44 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/wp-tech-2014/</guid>
					<frDate>4 décembre 2014</frDate>
				</item>
				<item>
					<title>Robert J. Hanlon</title>
					<link>https://www.ffoodd.fr/napoleon-bonaparte/</link>
					<description>&lt;p&gt;N’attribuez jamais à la malveillance ce qui s’explique très bien par l’incompétence.&lt;/p&gt;
</description>
					<pubDate>Fri, 14 Nov 2014 22:55:32 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/napoleon-bonaparte/</guid>
					<frDate>14 novembre 2014</frDate>
				</item>
				<item>
					<title>Retour de Paris Web</title>
					<link>https://www.ffoodd.fr/retour-de-paris-web/</link>
					<description>&lt;p&gt;Comme en 2013, c’est en compagnie de &lt;a href=&quot;https://www.kloh.ch/&quot;&gt;mon frère Luc&lt;/a&gt; que j’ai pu arpenter le métro parisien. Mais cette année était particulière pour Luc, puisqu’il était orateur !&lt;/p&gt;
&lt;h2 id=&quot;internet-et-les-tic&quot; tabindex=&quot;-1&quot;&gt;Internet et les TIC&lt;/h2&gt;
&lt;h3 id=&quot;pas-tres-ecologiques&quot; tabindex=&quot;-1&quot;&gt;Pas très écologiques ?&lt;/h3&gt;
&lt;p&gt;C’est l’intitulé de sa conférence, que je vous invite à consulter en vidéo &lt;a href=&quot;https://www.paris-web.fr/2014/conferences/internet-et-les-tic-pas-tres-ecologique.php&quot;&gt;sur le site de Paris Web&lt;/a&gt;. Sur un sujet quelque peu parallèle, Luc a pris le parti de sensibiliser son auditoire à l’impact environnemental des nouvelles technologies à l’aide de données choc. Bien qu’ayant lu une partie de ses sources avant sa conférence, j’ai été agréablement surpris par le déroulement de sa prestation qui s’est avérée fluide, rythmée et réellement intéressante. Et je crois qu’elle a produit son effet !&lt;/p&gt;
&lt;p&gt;Trêve de flagorneries, d’autres conférences se sont montrées tout à fait passionnantes.&lt;/p&gt;
&lt;h2 id=&quot;des-orateurs-captivants&quot; tabindex=&quot;-1&quot;&gt;Des orateurs captivants&lt;/h2&gt;
&lt;p&gt;Les sujets cette année m’ont semblé globalement moins techniques, et pourtant bien plus profond. Un certain nombre de conférences abordaient le web sous un angle différent, à l’instar de Luc mais j’aimerais également citer :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Goulven Champenois : « &lt;a href=&quot;https://www.paris-web.fr/2014/conferences/intitules-de-poste-bas-les-masques.php&quot;&gt;Intitulés de poste, bas les masques !&lt;/a&gt; » ;&lt;/li&gt;
&lt;li&gt;Jean-Philippe Simonnet : « &lt;a href=&quot;https://www.paris-web.fr/2014/conferences/petits-secrets-entre-amis-les-acteurs-du-web-doivent-ils-preter-serment.php&quot;&gt;Petits secrets entre amis : les acteurs du web doivent ils prêter serment ?&lt;/a&gt; » ;&lt;/li&gt;
&lt;li&gt;Jérémie Patonnier : « &lt;a href=&quot;https://www.paris-web.fr/2014/conferences/sponsor-clever-age.php&quot;&gt;La « logiciellisation » du web&lt;/a&gt; ».&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Parmi les quelques sujets techniques, deux se sont brillamment illustré — autant dire que je les ai adorés — grâce à des orateurs phénoménaux :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rémi Parmentier : « &lt;a href=&quot;https://www.paris-web.fr/2014/conferences/sortons-de-lenfer-de-lintegration-de-mails.php&quot;&gt;Sortons l’intégration d’e-mails de la préhistoire&lt;/a&gt; » ;&lt;/li&gt;
&lt;li&gt;Christophe Porteneuve : « &lt;a href=&quot;https://www.paris-web.fr/2014/conferences/js-plus-toi-egal-coeur.php&quot;&gt;JS + toi = ♥&lt;/a&gt; ».&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Chacun dans un style bien particulier, ils nous ont tous deux fait passer un moment terrible. Rémi Parmentier, suppléé par des séquences de &lt;em&gt;Jurassic Park&lt;/em&gt; et de &lt;em&gt;Toy Story&lt;/em&gt;, a dressé un état des lieux au vitriol des difficultés rencontrées lors de l’intégration d’e-mails. Les extraits vidéos, les exemples de bugs incongrus et le ton décapant ont rendu un cauchemar extrêmement amusant ! Christophe Porteneuve quant à lui a survolé les bases du Javascript en Flash (le super-héros, pas la technologie pompée sur… Javascript). Je pense qu’il n’est pas humainement possible d’expliquer et vulgariser plus de choses en si peu de temps. L’humour, la concision et la précision, ainsi qu’une gestuelle impressionnante ont fait de cette conférence un exemple en la matière. À voir et à revoir !&lt;/p&gt;
&lt;p&gt;Mention spéciale également à Julien Wajsberg et Anthony Ricaud dans « &lt;a href=&quot;https://www.paris-web.fr/2014/conferences/code-de-qualite-ce-quil-faut-savoir.php&quot;&gt;Code de qualité : ce qu’il faut savoir&lt;/a&gt; » qui ont parcouru le sujet avec une grande maturité, beaucoup d’humour et des anecdotes pertinentes tirées de leur travail sur Firefox OS.&lt;/p&gt;
&lt;h2 id=&quot;les-histoires&quot; tabindex=&quot;-1&quot;&gt;Les histoires&lt;/h2&gt;
&lt;p&gt;Deux conférences sortaient du lot, non pas grâce à un regard différent sur le web ou à un niveau technique incroyable, mais parce qu’ils témoignaient d’une expérience de vie bien particulière. Et ces morceaux de vie étaient contés avec talent :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stéphane Deschamps : « &lt;a href=&quot;https://www.paris-web.fr/2014/conferences/le-burnout-et-comment-on-levite.php&quot;&gt;Le &lt;em&gt;burnout&lt;/em&gt; et comment on lévite l’évite&lt;/a&gt; » ;&lt;/li&gt;
&lt;li&gt;Billy Gregory : « &lt;a href=&quot;https://www.paris-web.fr/2014/conferences/things-i-wish-i-knew-when-i-started-in-digital-accessibility.php&quot;&gt;&lt;em&gt;Things I wish I knew when I started in Digital Accessibility&lt;/em&gt;&lt;/a&gt; ».&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un juste retour à la terre ferme, pour nous rappeler que les travailleurs du web sont des êtres humains avant tout.&lt;/p&gt;
&lt;h2 id=&quot;les-informelles&quot; tabindex=&quot;-1&quot;&gt;Les informelles&lt;/h2&gt;
&lt;p&gt;Une tradition à Paris Web, les informelles sont des discussions qui se déroulent sur les mêmes créneaux que les conférences, mais dont les sujets sont proposés le jour-même par les spectateurs.&lt;/p&gt;
&lt;p&gt;Cette année, j’ai ainsi pu participer à une informelle suggérée par Olivier Nourry : « Accessibilité, c’est quoi le problème ? ». Je ne m’étendrai pas sur son contenu puisqu’Olivier en a fait &lt;a href=&quot;https://accessiblog.fr/2014/10/accessibilite-cest-quoi-le-probleme-retour-sur-mon-informelle-a-paris-web-2014/&quot;&gt;un compte-rendu sur son blog&lt;/a&gt;, en revanche quelle joie de rencontrer et discuter avec des pointures comme Monique Brunel, Johan Ramon, Sophie Schuermans, Aurélien Levy, Jean-Philippe Simonnet, et j’en oublie encore un certain nombre. C’était un échange précieux pour moi, car n’étant pas formé à l’accessibilité je subis régulièrement &lt;a href=&quot;https://fr.wikipedia.org/wiki/Syndrome_de_l%27imposteur&quot;&gt;le syndrome de l’imposteur&lt;/a&gt; en la matière — et ce genre de discussion me permet de réaliser que même si je ne dispose pas de l’expertise, mon approche et mes idées sont loin d’être absurdes. Alors un grand merci à toutes les personnes qui ont participé à cette informelle, ça fait un bien fou !&lt;/p&gt;
&lt;h2 id=&quot;les-ateliers&quot; tabindex=&quot;-1&quot;&gt;Les ateliers&lt;/h2&gt;
&lt;p&gt;Les ateliers étaient eux aussi très intéressants, et un peu plus intimes que les conférences. Deux d’entre eux m’ont particulièrement plu :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Thomas Parisot nous a présenté une façon extrêmement ludique d’améliorer son algorithmie en Javacript (pour tout vous dire, je travaille encore dessus) : « &lt;a href=&quot;https://www.paris-web.fr/2014/ateliers/un-peu-de-musique-programmation-dascenseur.php&quot;&gt;Un peu de musique programmation d’ascenseur&lt;/a&gt; » ;&lt;/li&gt;
&lt;li&gt;Delphine Malassingne et Rémi Parmentier nous ont mobilisés pour « &lt;a href=&quot;https://www.paris-web.fr/2014/ateliers/construire-ensemble-un-enseignement-du-front-end-pertinent-pedagogique-et-perenne.php&quot;&gt;Construire ensemble un enseignement du &lt;em&gt;front-end&lt;/em&gt; pertinent, pédagogique et pérenne&lt;/a&gt; », afin de créer des fiches pratiques permettant à l’étudiant de se confronter à des obstacles et au formateur de s’outiller et d’évaluer plus simplement ses étudiants.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;J’aimerais aussi partager un moment magique : &lt;strong&gt;la séparation&lt;/strong&gt;. Quand il ne reste que le staff, obligé de mettre les quelques personnes (Monique Brunel, Delphine Malassingne, Jean-Philippe Simonnet, et bien d’autres encore) qui restent à la porte. Aurélien Levy qui part avec le reste de salade sous le coude, la mini-haie d’honneur lancée par Romy Duhem-Verdière et Goulven Champenois pour la sortie du staff, et la séparation au compte-goutte dans le métro…&lt;/p&gt;
&lt;p&gt;Ces personnes sont des inspirations pour moi, des mentors qui s’ignorent peut-être. &lt;strong&gt;Partager ces quelques moments avec eux, je pense que c’est ça qui me donne autant de joie et de motivation après Paris Web&lt;/strong&gt;. &lt;a href=&quot;https://twitter.com/search?q=%23sharethelove%20%23parisweb&amp;amp;src=typd&quot;&gt;#sharethelove&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;le-reste&quot; tabindex=&quot;-1&quot;&gt;Le reste&lt;/h2&gt;
&lt;p&gt;Vous vous en doutez, je n’évoque ici que les moments qui m’ont réellement plu parmi ceux auxquels j’ai pu assister. Pour autant, les autres conférences et ateliers que j’ai suivis valent aussi le détour, et tout ceux que j’ai ratés également ! J’ai encore beaucoup de vidéos à regarder avant de rattraper ça, mais grâce à l’excellent staff de Paris Web, toutes les vidéos sont disponibles en ligne.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;J’en profite pour féliciter le staff qui a encore fait des merveilles, et qui se défonce tellement pour apporter à nous autres passionnés du web un événement humain et de grande qualité.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Parmi les autres choses que je partagerai, les notes que j’ai prises lors des différentes conférences seront bientôt scannées et retranscrites sur le blog ! Un joli chantier en perspective mais ça me tient à cœur de montrer ce que j’ai pu saisir au vol 🙂&lt;/p&gt;
</description>
					<pubDate>Thu, 30 Oct 2014 24:41:28 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/retour-de-paris-web/</guid>
					<frDate>29 octobre 2014</frDate>
				</item>
				<item>
					<title>Fabrice Flipo, Michelle Dobrée et Marion Michot</title>
					<link>https://www.ffoodd.fr/fabrice-flipo-michelle-dobree-et-marion-michot-la-face-cachee-du-numerique/</link>
					<description>&lt;p&gt;On ne peut attendre d’un outil qu’il modifie les comportements.&lt;/p&gt;
</description>
					<pubDate>Fri, 23 May 2014 21:34:21 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/fabrice-flipo-michelle-dobree-et-marion-michot-la-face-cachee-du-numerique/</guid>
					<frDate>23 mai 2014</frDate>
				</item>
				<item>
					<title>Mutisme relatif</title>
					<link>https://www.ffoodd.fr/mutisme-relatif/</link>
					<description>&lt;p&gt;Voici un résumé de mes activités des derniers mois, ainsi que de mes projets pour cette année. Je souhaite seulement signaler que cette baisse de régime dans mes publications n’est que temporaire.&lt;/p&gt;
&lt;h2 id=&quot;les-actualites&quot; tabindex=&quot;-1&quot;&gt;Les actualités&lt;/h2&gt;
&lt;h3 id=&quot;le-plan-professionnel&quot; tabindex=&quot;-1&quot;&gt;Le plan professionnel&lt;/h3&gt;
&lt;p&gt;Le principal événement qui s’est produit est mon changement d’employeur : je travaille désormais chez Kosmos, toujours à Nantes. C’est un travail d’un tout autre genre que celui que j’effectuais pour l’&lt;a href=&quot;https://www.1-ter-net.com/&quot; title=&quot;(nouvelle fenêtre)&quot;&gt;agence 1-ter-net&lt;/a&gt; puisque Kosmos est un éditeur de progiciel. Pour être plus précis je vais travailler sur le &lt;em&gt;front-end&lt;/em&gt; de la solution K-d’école, afin d’en améliorer la qualité globale, l’accessibilité — et d’en faciliter la prise en main, la personnalisation et les évolutions futures.&lt;/p&gt;
&lt;p&gt;J’apporte avec moi certaines compétences sur les aspects graphiques et ergonomiques qui participeront aussi à conserver un &lt;em&gt;front-end&lt;/em&gt; et un &lt;em&gt;look &amp;amp; feel&lt;/em&gt; homogènes pour renforcer l’identité de la solution.&lt;/p&gt;
&lt;h3 id=&quot;le-plan-personnel&quot; tabindex=&quot;-1&quot;&gt;Le plan personnel&lt;/h3&gt;
&lt;p&gt;Après mon travail sur &lt;a href=&quot;https://www.lanizanerie.com/&quot;&gt;La Nizanerie&lt;/a&gt; l’an passé — qui reste un projet vivant — j’ai aidé à mettre en ligne le site du &lt;a href=&quot;https://aupetitmarchenature.fr/&quot;&gt;Petit Marché Nature&lt;/a&gt; pour des amis. Ce fut plus un accompagnement qu’une création de site puisque nous nous sommes basés sur un thème Prestashop à peine revu.&lt;/p&gt;
&lt;p&gt;J’ai également soutenu mon frère &lt;a href=&quot;https://www.kloh.ch/&quot;&gt;Luc Poupard&lt;/a&gt; (a.k.a &lt;a href=&quot;https://twitter.com/klohFR&quot;&gt;KlohFR&lt;/a&gt;) à personnaliser mon thème &lt;a href=&quot;https://github.com/ffoodd/ffeeeedd&quot;&gt;ffeeeedd&lt;/a&gt; et à approfondir ses connaissances de WordPress, dans le cadre de son projet &lt;a href=&quot;https://continuums.ma3yt.com/&quot;&gt;Continuum(s)&lt;/a&gt; mené avec son ami plasticien &lt;a href=&quot;https://www.olivier-vary.com/&quot;&gt;Olivier Vary&lt;/a&gt; (a.k.a &lt;a href=&quot;https://twitter.com/Bendder08&quot;&gt;Bendder&lt;/a&gt;). C’est également un projet enrichissant puisque Luc a permis de faire évoluer mon thème, son fonctionnement et certaines extensions et ainsi gagner en qualité et en souplesse.&lt;/p&gt;
&lt;p&gt;Ce qui m’amène aux projets personnels qui m’occupent, depuis longtemps et &lt;em&gt;a priori&lt;/em&gt; encore pour un bon moment.&lt;/p&gt;
&lt;h2 id=&quot;les-projets&quot; tabindex=&quot;-1&quot;&gt;Les projets&lt;/h2&gt;
&lt;h3 id=&quot;les-origines-en-2013&quot; tabindex=&quot;-1&quot;&gt;Les origines en 2013&lt;/h3&gt;
&lt;p&gt;Nous parlions du thème WordPress que j’ai développé depuis plus d’un an et demi maintenant : je continue, et je creuse toujours plus. Beaucoup de choses ont évoluées depuis &lt;a href=&quot;https://www.ffoodd.fr/a-venir-ffeeeedd/&quot; title=&quot;À venir : ffeeeedd&quot;&gt;ma première annonce&lt;/a&gt;, notamment sur un plan technique.&lt;/p&gt;
&lt;p&gt;Je suis dans un premier temps passé aux thèmes enfants, dont le mécanisme est un réel bénéfice pour quiconque veut modifier un thème. Je m’étais conçu un processus de travail tout à fait personnel, en deux temps :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ffoodd/ffeeeedd--developpement&quot;&gt;ffeeeedd–développement&lt;/a&gt; devait me permettre d’étendre facilement le thème parent, en ajoutant gabarits, scripts et styles directement ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ffoodd/ffeeeedd--production&quot;&gt;ffeeeedd–production&lt;/a&gt; était la version optimisée pour la production : scripts et styles concaténés et minifiés à la main, sprites et images optimisés, etc.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ce mécanisme a très bien fonctionné pendant plusieurs mois, durant lesquels il a été utilisé sur plusieurs projets. Au fil du temps j’ai tout de même atteint certaines limites, et mes recherches m’ont amené deux réflexions parallèles :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;certaines évolutions que j’ajoutais au thème enfant dépendait plutôt du « territoire des extensions » dans WordPress ;&lt;/li&gt;
&lt;li&gt;mes procédures d’optimisation et de personnalisation des styles étaient lourdes et redondantes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;ffeeeedd-extensions&quot; tabindex=&quot;-1&quot;&gt;ffeeeedd–extensions&lt;/h3&gt;
&lt;p&gt;Ce qui m’a naturellement conduit à développer une &lt;a href=&quot;https://github.com/ffoodd/ffeeeedd--extensions&quot;&gt;flotille d’extensions&lt;/a&gt; afin de déporter certaines fonctionnalités vers des extensions, et d’en créer de nouvelles qui n’alourdiront pas inutilement le thème.&lt;/p&gt;
&lt;h3 id=&quot;ffeeeedd-sass&quot; tabindex=&quot;-1&quot;&gt;ffeeeedd–sass&lt;/h3&gt;
&lt;p&gt;Dans le même temps, j’ai complètement revu ma façon de travailler et me suis lentement mis à utiliser Sass, puis quelques portions de Compass. Je dis bien lentement puisque, &lt;a href=&quot;https://www.ffoodd.fr/sass-commencez-par-les-deux-s/&quot; title=&quot;Sass : commencez par les deux « S »&quot;&gt;comme je l’ai fait remarquer dans un article&lt;/a&gt; il y a quelques temps, j’ai tout fait pour éviter les pièges inhérents à ce type d’outils. Me faire gagner du temps, oui —  mais sans perdre la qualité de mon travail.&lt;/p&gt;
&lt;p&gt;J’abouti à &lt;a href=&quot;https://github.com/ffoodd/ffeeeedd--sass&quot;&gt;ffeeeedd–sass&lt;/a&gt;, un thème enfant dont les styles s’appuient sur Sass, et ai utilisé PrePros pour homogénéiser facilement le traitement des scripts et des styles lors de leurs optimisations.&lt;/p&gt;
&lt;h3 id=&quot;ffeeeedd-racine&quot; tabindex=&quot;-1&quot;&gt;ffeeeedd–racine&lt;/h3&gt;
&lt;p&gt;Et pour parachever ce travail, un répertoire &lt;a href=&quot;https://github.com/ffoodd/ffeeeedd--racine&quot;&gt;ffeeeedd–racine&lt;/a&gt; me permet de définir une configuration optimale de mon installation avec quelques légères modifications seulement.&lt;/p&gt;
&lt;h3 id=&quot;a11y-css&quot; tabindex=&quot;-1&quot;&gt;a11y.css&lt;/h3&gt;
&lt;p&gt;Évidemment le thème enfant basé sur Sass embarque une version à jour de mon &lt;a href=&quot;https://github.com/ffoodd/a11y.css&quot;&gt;a11y.css&lt;/a&gt; — qui est à mon sens ma plus belle réussite pour 2013. Ce projet a fédéré quelques personnes, m’a permis d’apprendre énormément de choses sur l’accessibilité en m’astreignant à lire plusieurs référentiels en entier, et j’ai fait de belles rencontres en en discutant.&lt;/p&gt;
&lt;p&gt;Voilà ce qui m’a occupé la majeure partie de l’année 2013. Et le meilleur cas pratique que vous pourrez rencontrer pour l’ensemble de ce travail est le site que vous lisez actuellement.&lt;/p&gt;
&lt;p&gt;Et il se pourrait que vous entendiez à nouveau parler de tout ça avant la fin 2014 🙂&lt;/p&gt;
&lt;h2 id=&quot;l-avenir&quot; tabindex=&quot;-1&quot;&gt;L’avenir&lt;/h2&gt;
&lt;p&gt;Honnêtement, je vais travailler. Beaucoup. Mon nouvel emploi va me demander beaucoup de temps, de lectures et de recherches pour mener ce travail de front !&lt;/p&gt;
&lt;p&gt;Mais parmi les choses dont je suis sûr, c’est que je vais aller à Paris Web cette année encore mais aussi assister au tout frais &lt;a href=&quot;https://twitter.com/WPTechNantes&quot;&gt;WPTech&lt;/a&gt; qui va naître à Nantes fin 2014 — grâce à l’initiative de &lt;a href=&quot;https://www.wabeo.fr/&quot;&gt;Willy Bahuaud&lt;/a&gt; et &lt;a href=&quot;https://www.seomix.fr/&quot;&gt;Daniel Roch&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Alors, on se voit quand pour discuter de tout ça ?&lt;/p&gt;
</description>
					<pubDate>Sat, 17 May 2014 13:59:35 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/mutisme-relatif/</guid>
					<frDate>17 mai 2014</frDate>
				</item>
				<item>
					<title>Clip-path, pourquoi pas ?</title>
					<link>https://www.ffoodd.fr/clip-path-pourquoi-pas/</link>
					<description>&lt;p&gt;Mais lorsque &lt;a href=&quot;https://twitter.com/KittyGiraudel&quot; title=&quot;Sur Twitter&quot;&gt;Kitty Giraudel&lt;/a&gt; a lancé son &lt;a href=&quot;https://kittygiraudel.com/2014/02/19/the-magic-circle-a-css-brain-teaser/&quot;&gt;CSS brain teaser&lt;/a&gt;.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/clip-path-pourquoi-pas/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id=&quot;les-specifications-actuelles&quot; tabindex=&quot;-1&quot;&gt;Les spécifications actuelles&lt;/h2&gt;
&lt;p&gt;Ne connaissant que de très loin cette propriété, il a fallu me mettre à jour. &lt;code&gt;clip-path&lt;/code&gt;, à l’instar de &lt;code&gt;clip&lt;/code&gt;, sert à délimiter la zone d’affichage d’un contenu. Je m’oriente vers les spécifications pour compléter cet embryon de culture — et là, c’est le drame :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.w3.org/TR/css-masking-1/#the-clip-path&quot; title=&quot;en Anglais&quot;&gt;La spécification de la propriété&lt;/a&gt; &lt;code&gt;clip-path&lt;/code&gt; au sein du module &lt;em&gt;CSS masking&lt;/em&gt;, encore à l’état de brouillon;&lt;/li&gt;
&lt;li&gt;Qui nous renvoie &lt;a href=&quot;https://www.w3.org/TR/2013/WD-css-shapes-1-20130620/#basic-shapes-from-svg-syntax&quot; title=&quot;en Anglais&quot;&gt;aux formes basiques&lt;/a&gt; en SVG;&lt;/li&gt;
&lt;li&gt;Tout cela en se référant sans arrêt à &lt;a href=&quot;https://www.w3.org/TR/css-masking-1/#ClipPathElement&quot; title=&quot;en Anglais&quot;&gt;l’élément SVG &lt;code&gt;ClipPath&lt;/code&gt;&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;De fil en aiguille, citons également le module &lt;em&gt;Masking&lt;/em&gt; de la spécification SVG — et notamment &lt;a href=&quot;https://www.w3.org/TR/SVG/masking.html#ClippingPaths&quot; title=&quot;en Anglais&quot;&gt;la section sur les &lt;em&gt;Clipping paths&lt;/em&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On peut d’ores et déjà noter une différence remarquable entre les états de ces deux spécifications : l’une est en brouillon, l’autre en recommandation. La spécification SVG est extrêmement aboutie et claire, les ressources ne manquent pas.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/clip-path-pourquoi-pas/#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;En revanche le module CSS est obscur. Il existe un lien étroit entre les deux spécifications, car le brouillon du module &lt;em&gt;CSS Masking&lt;/em&gt; s’appuie énormément sur la spécification SVG — et qu’en SVG il existe l’attribut &lt;code&gt;clip-path&lt;/code&gt;. Ça génère des incompréhensions qui ne vont pas faciliter la prise en main de cette propriété.&lt;/p&gt;
&lt;p&gt;Pour éclaircir un peu tout ça — et vous épargner la lecture des spécifications — vous devriez pouvoir écrire ceci pour utiliser une forme basique :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;
&lt;span class=&quot;token selector&quot;&gt;.clip&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; 
  &lt;span class=&quot;token property&quot;&gt;clip-path&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;circle&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; 50%&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 50%&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 5em &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mais ceci devrait fonctionner également — en appelant un élément SVG :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;
&lt;span class=&quot;token selector&quot;&gt;.clip&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; 
  &lt;span class=&quot;token property&quot;&gt;clip-path&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token url&quot;&gt;&lt;span class=&quot;token function&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;#circle&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;les-origines&quot; tabindex=&quot;-1&quot;&gt;Les origines&lt;/h2&gt;
&lt;p&gt;Il faut sonder un peu les origines de ce module CSS pour en comprendre l’obscurité. Bien que déjà en cours d’élaboration dans le cadre technique du SVG, la possibilité de masquer des éléments en CSS existait depuis CSS 2.1 grâce à la propriété &lt;code&gt;clip&lt;/code&gt;, désormais &lt;a href=&quot;https://www.w3.org/TR/css-masking-1/#clip-property&quot; title=&quot;en Anglais&quot;&gt;dépréciée&lt;/a&gt;.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/clip-path-pourquoi-pas/#fn3&quot; id=&quot;fnref3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Cette propriété n’a jamais réellement trouvé son public, car elle a deux inconvénients majeurs :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;L’élément masqué doit être en position absolue;&lt;/li&gt;
&lt;li&gt;Le masque ne peut être que rectangulaire, et son placement est contre-intuitif.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Embêtant. Constatant les progrès possibles de cette fonctionnalité en CSS, c’est &lt;a href=&quot;https://www.webkit.org/blog/181/css-masks/&quot; title=&quot;en Anglais&quot;&gt;le navigateur Safari qui a ouvert les hostilités en 2008&lt;/a&gt; avec les propriétés &lt;code&gt;-webkit-mask-…&lt;/code&gt; supportées &lt;a href=&quot;https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariCSSRef/Articles/StandardCSSProperties.html#//apple_ref/doc/uid/TP30001266-SW17&quot; title=&quot;en Anglais&quot;&gt;dès Safari 4&lt;/a&gt;. Cette technique a rencontré un franc succès car elle permet d’utiliser une image comme masque. Malheureusement cette propriété n’était supportée que par le moteur de rendu Webkit.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/clip-path-pourquoi-pas/#fn4&quot; id=&quot;fnref4&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Là, j’ai vu poindre le problème : la spécification CSS en cours d’élaboration mélange joyeusement les clips issus de SVG et la proposition de Safari.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/clip-path-pourquoi-pas/#fn5&quot; id=&quot;fnref5&quot;&gt;[5]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id=&quot;des-ressources-dissonantes&quot; tabindex=&quot;-1&quot;&gt;Des ressources dissonantes&lt;/h2&gt;
&lt;p&gt;Il est fort peu probable que personne avant moi ne s’y soit intéressé. Et en effet, quatre ressources principales sont indispensables pour appréhender &lt;code&gt;clip-path&lt;/code&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.html5rocks.com/en/tutorials/masking/adobe/&quot; title=&quot;en Anglais&quot;&gt;CSS Masking&lt;/a&gt; sur HTML5Rocks;&lt;/li&gt;
&lt;li&gt;L’article dédié sur &lt;a href=&quot;https://docs.webplatform.org/wiki/css/properties/clip-path&quot; title=&quot;en Anglais&quot;&gt;Web Platform Docs&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;Un tutoriel avancé sur &lt;a href=&quot;https://thenittygritty.co/css-masking&quot; title=&quot;en Anglais&quot;&gt;The Nitty Gritty&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;L’article de l’Avent par Vincent De Oliveira sur &lt;a href=&quot;https://www.24joursdeweb.fr/2013/les-masques-css/&quot;&gt;24 jours de web&lt;/a&gt;;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Comme vous vous en apercevrez en les lisant, le contenu est disparate. La compatibilité navigateur est abordée différemment.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/clip-path-pourquoi-pas/#fn6&quot; id=&quot;fnref6&quot;&gt;[6]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;À l’instar de la spécification qui intègre les clips &lt;strong&gt;et&lt;/strong&gt; les masques, ces ressources présentent les deux techniques. Dommage car deux articles distincts auraient été bien plus clairs !&lt;/p&gt;
&lt;h2 id=&quot;un-bilan-mitige&quot; tabindex=&quot;-1&quot;&gt;Un bilan mitigé&lt;/h2&gt;
&lt;p&gt;Après avoir compulsé maladivement les spécifications, articles, tutoriaux et autres exemples pendant quelques jours, j’ai abouti à un exemple ressemblant à ceci :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;
&lt;span class=&quot;token comment&quot;&gt;/**
 * 1. Définition d’une forme rectangulaire de repli pour les navigateurs ne supportant pas clip-path;
 * 2. Création d’une forme SVG basique, circulaire;
 * 3. Appel d’un fichier SVG contenant un élément clipPath. 
 */&lt;/span&gt;
&lt;span class=&quot;token selector&quot;&gt;.clip&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; 
  &lt;span class=&quot;token property&quot;&gt;clip&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;rect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; 7em&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 30em&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 17em&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 20em &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* 1 */&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;-webkit-clip-path&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;circle&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; 50%&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 50%&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 5em &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* 2 */&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;clip-path&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token url&quot;&gt;&lt;span class=&quot;token function&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;#circle&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;/* 3 */&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Évidemment, cela implique un balisage précis côté HTML :&lt;/p&gt;
&lt;pre class=&quot;language-markup&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;clip&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  ♬ Tout, tout, tout : vous saurez tout sur le clip-path ♬
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;svg&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;200&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;200&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;defs&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;clipPath&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;circle&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;circle&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;cx&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;50%&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;cy&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;50%&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;80&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;clipPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;  
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;defs&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;svg&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ainsi je tente de vous livrer un état des lieux aussi complet que possible.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/clip-path-pourquoi-pas/#fn7&quot; id=&quot;fnref7&quot;&gt;[7]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Chrome 23, Safari 6.1 et Opéra 15&lt;/strong&gt; supportent &lt;code&gt;clip-path&lt;/code&gt; sous toutes ses formes — incluant la définition de formes SVG basiques dans le CSS;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Firefox 4&lt;/strong&gt; supporte &lt;code&gt;clip-path&lt;/code&gt; si on référence un élément SVG &lt;code&gt;clipPath&lt;/code&gt; — ce qui implique d’ajouter un fichier SVG — en revanche vous serez obligés de définir des positions en unités absolues comme le &lt;code&gt;px&lt;/code&gt; pour positionner votre clip si vous souhaitez éviter les bugs, et c’est bien dommage;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Opéra 7, Chrome 14, IE8 à 11 et Safari 1&lt;/strong&gt; se replient sur &lt;code&gt;clip&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Une note sur IE9 à 11 :&lt;/strong&gt; ces navigateurs supportent &lt;code&gt;clip-path&lt;/code&gt; si on référence un élément SVG &lt;code&gt;clipPath&lt;/code&gt;, à condition d’appliquer le clip sur un élément SVG. Il est envisageable d’intégrer la zone à clipper dans un élément &lt;code&gt;ForeignObject&lt;/code&gt; au sein d’un SVG, mais ça devient trop tordu à mon goût;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Un mot sur IE4 à 7 :&lt;/strong&gt; surpris vous êtes ? Ne le soyez pas, clip est reconnu sur IE4 à 7 (et même Netscape 4). Le hic, ce sont les pseudo-éléments que j’emploie dans mon exemple; ainsi en ajoutant un élément dédié dans le DOM, vous devriez pouvoir supporter IE4 facilement 😀 .&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;une-solution-correcte&quot; tabindex=&quot;-1&quot;&gt;Une solution correcte&lt;/h2&gt;
&lt;p&gt;Malgré le support disparate et le funambulisme nécessaire pour aboutir à un résultat viable, j’ai trouvé &lt;code&gt;clip-path&lt;/code&gt; extrêmement intéressant — et notamment grâce à la dégradation possible à l’aide de &lt;code&gt;clip&lt;/code&gt; sur de très vieux navigateurs et de façon simplissime.&lt;/p&gt;
&lt;p&gt;Ce repli implique de perdre les formes personnalisées au profit d’un rectangle « simple », ce qui fut considéré comme acceptable lors de l’avènement de &lt;code&gt;border-radius&lt;/code&gt; par exemple. Et je suppose que dans la plupart des cas, cette solution reste acceptable.&lt;/p&gt;
&lt;p&gt;Vous trouverez donc ma solution au casse-tête proposé par Kitty &lt;a href=&quot;https://codepen.io/ffoodd/pen/Eolkb&quot; title=&quot;en Anglais&quot;&gt;sur CodePen&lt;/a&gt;, détaillée, commentée, agrémentée de diverses précisions — en Anglais.&lt;/p&gt;
&lt;p&gt;Tout retour sera le bienvenu 🙂 .&lt;/p&gt;
&lt;h3 id=&quot;mise-a-jour&quot; tabindex=&quot;-1&quot;&gt;Mise à jour&lt;/h3&gt;
&lt;p&gt;Moins d’une semaine avant la publication de mon article, le brouillon du W3C concernant la notation des formes basiques a évolué. Je cite &lt;a href=&quot;https://twitter.com/iamvdo&quot;&gt;Vincent De Oliveira&lt;/a&gt;, qui a partagé l’information avec moi :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Par contre, la notation des basic-shapes ont (encore) changées récemment! 😛 &lt;a href=&quot;https://dev.w3.org/csswg/css-shapes/#basic-shape-functions&quot; title=&quot;en Anglais&quot;&gt;dev.w3.org&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ô joie. Merci à Vincent en tout cas !&lt;/p&gt;
&lt;ol class=&quot;footnotes-list small mt2 pt2 pb2&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Papa, Maman : j’aime les casses-têtes. &lt;a href=&quot;https://www.ffoodd.fr/clip-path-pourquoi-pas/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Un petit « cocorico » s’impose pour féliciter Jérémie Patonnier, qui a grandement contribué à la documentation sur le Mozilla Developper Network notamment. &lt;a href=&quot;https://www.ffoodd.fr/clip-path-pourquoi-pas/#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn3&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;La propriété est dépréciée mais très bien supportée, et le W3C indique que les agents utilisateurs (navigateurs web) doivent la supporter malgré sa déprécation. &lt;a href=&quot;https://www.ffoodd.fr/clip-path-pourquoi-pas/#fnref3&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn4&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Je ne compte pas traiter du marronnier de « la guerre des navigateurs » ni du syndrome « Webkit only ». &lt;a href=&quot;https://www.ffoodd.fr/clip-path-pourquoi-pas/#fnref4&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn5&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Fabriqué par Apple® en Californie. &lt;a href=&quot;https://www.ffoodd.fr/clip-path-pourquoi-pas/#fnref5&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn6&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;La palme revient à HTML5Rocks qui détaille Chrome et Firefox, et oublie les autres. &lt;a href=&quot;https://www.ffoodd.fr/clip-path-pourquoi-pas/#fnref6&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn7&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Je tiens à préciser que je n’ai aucune expertise en la matière : ce ne sont la que les conclusions trouvées par un intégrateur lambda. &lt;a href=&quot;https://www.ffoodd.fr/clip-path-pourquoi-pas/#fnref7&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;</description>
					<pubDate>Tue, 11 Mar 2014 16:44:26 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/clip-path-pourquoi-pas/</guid>
					<frDate>11 mars 2014</frDate>
				</item>
				<item>
					<title>Réflexion sur Sass</title>
					<link>https://www.ffoodd.fr/reflexion-sur-sass/</link>
					<description>&lt;p&gt;Un outil est fait pour faciliter le travail — pas pour en améliorer la qualité.&lt;/p&gt;
</description>
					<pubDate>Mon, 10 Mar 2014 13:00:58 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/reflexion-sur-sass/</guid>
					<frDate>10 mars 2014</frDate>
				</item>
				<item>
					<title>La qualité web en solitaire</title>
					<link>https://www.ffoodd.fr/traversee-en-solitaire-de-la-qualite-web/</link>
					<description>&lt;p&gt;Très souvent sur le web — et au travail, je croise ce type de propos tenus par des professionnels du web :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://forum.kob-one.com/post361394.html#p361394&quot;&gt;Valider le code n’est pas important&lt;/a&gt;, du moment que « ça » fonctionne;&lt;/li&gt;
&lt;li&gt;L’accessibilité, c’est du travail supplémentaire;&lt;/li&gt;
&lt;li&gt;Si ça n’est pas vendu, ça nous coûte de l’argent;&lt;/li&gt;
&lt;li&gt;L’accessibilité ? Pour deux péquins par an ?&lt;/li&gt;
&lt;li&gt;Le client n’en veut pas.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/traversee-en-solitaire-de-la-qualite-web/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mais même cerné par cet état d’esprit, je me sens concerné et &lt;strong&gt;je tends toujours plus vers la qualité et l’accessibilité&lt;/strong&gt; — seul. J’ai conscience de mon immaturité dans le domaine, mais sans faire les premiers pas et me faire remonter les bretelles de temps en temps, &lt;strong&gt;comment apprendrai-je&lt;/strong&gt; ?&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Pré-requis : Cet article étant légèrement impulsif, je tiens à préciser qu’à mon sens l’accessibilité fait partie intégrante de la qualité web — pour limiter les confusions dans mon propos.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;un-etat-des-lieux-eloquent&quot; tabindex=&quot;-1&quot;&gt;Un état des lieux éloquent&lt;/h2&gt;
&lt;p&gt;Je ne pense pas forcer le trait, tant les remarques précédemment listées sont légions sur les forums comme &lt;a href=&quot;https://www.alsacreations.com/&quot;&gt;Alsacréations&lt;/a&gt;. Nicolas Hoffmann a lui aussi rédigé &lt;a href=&quot;https://www.nicolas-hoffmann.net/source/1612-Heureusement-qu-ils-existent.html&quot;&gt;sa petite liste d’âneries&lt;/a&gt;. De nombreux professionnels reconnus ont réagi à ce sujet il y a un peu moins d’un an, alors que &lt;a href=&quot;https://forum.alsacreations.com/topic-9-66981-1.html#p451783&quot;&gt;QuentinC relativisait la joie de fêter les 10 ans du forum Alsacréations&lt;/a&gt;.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/traversee-en-solitaire-de-la-qualite-web/#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://accessiblog.fr/2013/05/laccessibilite-peut-on-sen-foutre-parce-que-ca-coute/&quot;&gt;L’accessibilité, peut-on s’en foutre parce que ça coûte ?&lt;/a&gt; — Olivier Nourry&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.vismaviedesourde.fr/laccessibilite-on-sen-fout-de-plus-en-plus/&quot;&gt;L’accessibilité, on s’en fout de plus en plus ?&lt;/a&gt; — Sophie Drouvroy&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nota-bene.org/Defaitisme-et-accessibilite&quot;&gt;Défaitisme et accessibilité&lt;/a&gt; — Stéphane Deschamps&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.nicolas-hoffmann.net/source/1545-L-accessibilite-on-s-en-fout-de-plus-en-plus-Moi-non.html&quot;&gt;L’accessibilité, on s’en fout de plus en plus ? Moi, non.&lt;/a&gt; — Nicolas Hoffmann&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;J’en oublie évidemment de nombreux. J’ai cependant la vilaine impression que &lt;strong&gt;plus l’auteur est reconnu en tant qu’expert, plus l’impact du discours est réduit en conséquence&lt;/strong&gt;. J’ai déjà entendu cette remarque :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;C’est facile d’aborder l’accessibilité de cette manière quand on est expert et qu’on a les moyens de la mettre en œuvre — mais ça ne peut pas me concerner, moi et mon petit site.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;une-approche-personnelle&quot; tabindex=&quot;-1&quot;&gt;Une approche personnelle&lt;/h2&gt;
&lt;p&gt;Malgré ce contexte compliqué, je reste intimement persuadé qu’il est possible pour tout professionnel du web de produire un travail accessible et de qualité.&lt;/p&gt;
&lt;p&gt;Il suffit de se dire que &lt;strong&gt;la qualité web n’est pas une valeur ajoutée mais une valeur intrinsèque&lt;/strong&gt;. Elle n’est pas optionnelle, mais « de série ». Elle ne constitue pas une ligne supplémentaire sur le devis, dont le client comprendra qu’il peut la faire retirer pour alléger le tarif.&lt;/p&gt;
&lt;p&gt;Des pratiques extrêmement simples peuvent considérablement améliorer la qualité et l’accessibilité de vos productions :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Utilisez des solutions éprouvées, &lt;strong&gt;déjà accessibles&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documentez&lt;/strong&gt; votre code de façon complète : citez vos sources, précisez à quoi ça sert, quels éléments contextuels peuvent influer…&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Instaurez&lt;/strong&gt; des &lt;em&gt;checklists&lt;/em&gt; qualités — comme celles &lt;a href=&quot;https://checklists.opquast.com/fr/&quot;&gt;proposées par OpQuast&lt;/a&gt; ou &lt;a href=&quot;https://github.com/inseo/bpi-checklist&quot;&gt;suggerées par Corinne Schillinger&lt;/a&gt; — et &lt;a href=&quot;https://w3qualite.net/demarche/la-qualite-web-un-tramway-nomme-desir&quot; title=&quot;«La qualité web : un tramway nommé désir » sur W3Qualité&quot;&gt;faites les premiers pas dans cette démarche qualité&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;Créez vos propres outils et &lt;strong&gt;capitalisez&lt;/strong&gt; dessus : intégrez-y les solutions choisies et les documentations;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contre-pillez&lt;/strong&gt; tous vos projets spécifiques afin de pouvoir &lt;strong&gt;recycler&lt;/strong&gt; chacun de vos travaux spécifiques;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Partagez&lt;/strong&gt; vos ressources, mettez-les en commun.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/traversee-en-solitaire-de-la-qualite-web/#fn3&quot; id=&quot;fnref3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start=&quot;7&quot;&gt;
&lt;li&gt;&lt;strong&gt;Demandez conseil&lt;/strong&gt; à des gens compétents : vous allez être surpris par la bienveillance et la disponibilité de la plupart d’entre eux.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/traversee-en-solitaire-de-la-qualite-web/#fn4&quot; id=&quot;fnref4&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start=&quot;8&quot;&gt;
&lt;li&gt;Apprenez à échanger et instruire de façon constructive et positive : « &lt;a href=&quot;https://w3qualite.net/transversalite/les-petits-ruisseaux-font-les-grandes-rivieres&quot; title=&quot;Article sur W3Qualité&quot;&gt;Les petits ruisseaux font les grandes rivières&lt;/a&gt; » — &lt;a href=&quot;https://kloh.ch/&quot;&gt;Luc Poupard&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Peut-être pourrais-je trouver d’autres façons d’encore améliorer mon travail — et je suis tout ouï si vous voulez bien m’en suggérer. Mais celles que j’applique actuellement ne sont qu’une question de discipline, et sont donc à la portée de tout un chacun.&lt;/p&gt;
&lt;h2 id=&quot;mon-client-ne-veut-pas-payer-pour-de-la-qualite&quot; tabindex=&quot;-1&quot;&gt;« Mon client ne veut pas payer pour de la qualité »&lt;/h2&gt;
&lt;p&gt;C’est l’argument le plus répandu. Personnellement, je comprends votre client : &lt;strong&gt;ça ne devrait pas être payant&lt;/strong&gt; ! Vous imaginez, vous, débarquer dans un garage et vous entendre dire :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ha non, si vous voulez une voiture qui roule il faut payer plus…&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bien sûr que non : ça va de soi.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quand un client paie son site web, il va de soi qu’il doit être de qualité&lt;/strong&gt;. Il paie des professionnels, tout de même.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/traversee-en-solitaire-de-la-qualite-web/#fn5&quot; id=&quot;fnref5&quot;&gt;[5]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;— Vous voulez que votre site soit accessible ?&lt;br /&gt;
— C’est quoi, accessible ?&lt;br /&gt;
— C’est compliqué techniquement (et donc très cher) et ça aide environ deux personnes par an.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Surpris je suis que refusé votre client ai.&lt;/p&gt;
&lt;p&gt;Donc chers professionnels du web, confrères, collègues, jeunes et anciens : arrêtez ce délire paranoïaque. Faites votre travail, &lt;strong&gt;et faites-le bien&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Même si cela ne vous est pas demandé.&lt;/p&gt;
&lt;p&gt;Même si lorsque vous le suggérez, on vous rit au nez.&lt;/p&gt;
&lt;p&gt;Même si vous êtes le seul de votre équipe à vous en soucier.&lt;/p&gt;
&lt;p&gt;Même si vous ne pensez pas en être capable.&lt;/p&gt;
&lt;p&gt;Même si vous savez que personne ne prendra le relais.&lt;/p&gt;
&lt;p&gt;Même si vous n’en tirez aucune reconnaissance.&lt;/p&gt;
&lt;h2 id=&quot;faites-le&quot; tabindex=&quot;-1&quot;&gt;Faites-le&lt;/h2&gt;
&lt;p&gt;J’en profite pour remercier Muriel de Dona dont &lt;a href=&quot;https://twitter.com/ffoodd_fr/status/431436100226531328&quot;&gt;l’échange gratifiant sur Twitter&lt;/a&gt; a généré cette envie d’écrire — et je fais un peu de publicité supplémentaire pour son travail chez &lt;a href=&quot;https://opquast.com/fr/&quot;&gt;OpQuast&lt;/a&gt; (notamment la rédaction du livre « Qualité web » et des fameuses bonnes pratiques). Cette initiative est absolument indispensable et je tiens à signaler les progrès considérables que j’ai fait grâce à eux 🙂&lt;/p&gt;
&lt;ol class=&quot;footnotes-list small mt2 pt2 pb2&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Celle-ci, c’est ma préférée ! &lt;a href=&quot;https://www.ffoodd.fr/traversee-en-solitaire-de-la-qualite-web/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Ce qui m’évoque la capacité des gens à se réjouir de l’augmentation des dons aux Restos du Cœur chaque année — oubliant trop facilement que c’est un symbole négatif du besoin croissant et urgent. On se réjouira le jour ou on pourra se passer des Restos du Cœur. Et puisque j’en suis là : allez faire un don sur le site dédiés :  dons.restosducoeur.org . Merci à vous ! &lt;a href=&quot;https://www.ffoodd.fr/traversee-en-solitaire-de-la-qualite-web/#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn3&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;GitHub est magique : mon a11y.css a beaucoup évolué grâce aux participations de Guillaume Demesy, Xavier Zalawa et Luc Poupard. &lt;a href=&quot;https://www.ffoodd.fr/traversee-en-solitaire-de-la-qualite-web/#fnref3&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn4&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Petite pensée et gros remerciements pour Johan Ramon, Monique Brunel, Victor Brito, Willy Bahuaud, Julio Potier, Kitty Giraudel — et j’en passe de nombreux. &lt;a href=&quot;https://www.ffoodd.fr/traversee-en-solitaire-de-la-qualite-web/#fnref4&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn5&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Au lieu de faire travailler le cousin de son neveu après les cours. &lt;a href=&quot;https://www.ffoodd.fr/traversee-en-solitaire-de-la-qualite-web/#fnref5&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;</description>
					<pubDate>Thu, 27 Feb 2014 16:56:32 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/traversee-en-solitaire-de-la-qualite-web/</guid>
					<frDate>27 février 2014</frDate>
				</item>
				<item>
					<title>a11y.css : un crédo</title>
					<link>https://www.ffoodd.fr/a11y-cssun-credo/</link>
					<description>&lt;p&gt;&lt;code&gt;a11y.css&lt;/code&gt; .&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/a11y-cssun-credo/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id=&quot;les-references&quot; tabindex=&quot;-1&quot;&gt;Les références&lt;/h2&gt;
&lt;h3 id=&quot;les-projets-reposant-sur-css&quot; tabindex=&quot;-1&quot;&gt;Les projets reposant sur CSS&lt;/h3&gt;
&lt;p&gt;Le premier projet de ce type que j’ai rencontré est &lt;a href=&quot;https://red-root.com/sandbox/holmes/&quot; title=&quot;Présentation de Holmes.css, en anglais (nouvelle fenêtre)&quot;&gt;Holmes.css&lt;/a&gt;. L’idée m’a rapidement séduit. Des projets similaires ont fleuri, dont : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/karlgroves/diagnostic.css&quot; title=&quot;Diagnostic.css sur GitHub (nouvelle fenêtre)&quot;&gt;Diagnostic.css&lt;/a&gt; par Karl Groves ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nternetinspired/debug-css&quot; title=&quot;Debug-CSS sur GitHub (nouvelle fenêtre)&quot;&gt;Debug-css&lt;/a&gt; par Seth Warburton.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La découverte d’&lt;a href=&quot;https://opquast.com/fr/&quot; title=&quot;Le site OpQuast (nouvelle fenêtre)&quot;&gt;OpQuast&lt;/a&gt; et des &lt;a href=&quot;https://checklists.opquast.com/fr/&quot; title=&quot;Les bonnes pratiques d’OpQuast (nouvelle fenêtre)&quot;&gt;bonnes pratiques&lt;/a&gt; ayant accentué mon exigence, les outils précédemment cités m’ont semblé un peu légers.&lt;/p&gt;
&lt;h3 id=&quot;les-checklists&quot; tabindex=&quot;-1&quot;&gt;Les checklists&lt;/h3&gt;
&lt;p&gt;Définir des &lt;strong&gt;« checklists qualités »&lt;/strong&gt; est également une bonne idée, et les exemples lus dans &lt;em&gt;« Intégration web, les bonnes pratiques »&lt;/em&gt; de &lt;a href=&quot;https://twitter.com/schillinger&quot; title=&quot;Corine Schillinger sur Twitter (nouvelle fenêtre)&quot;&gt;Corinne Schillinger&lt;/a&gt; ou dans le projet &lt;a href=&quot;https://github.com/htmlzengarden/outline/blob/master/index.md&quot; title=&quot;La checklist d’Outline sur GitHub (nouvelle fenêtre)&quot;&gt;Outline&lt;/a&gt; de &lt;a href=&quot;https://twitter.com/htmlvv&quot; title=&quot;Vincent Valentin sur Twitter (nouvelle fenêtre)&quot;&gt;Vincent Valentin&lt;/a&gt; m’ont persuadé de tenter cette solution. Cependant, c’est plus contraignant que les solutions de repérage en CSS, et légèrement différent puisqu’une solution CSS ne permettra pas d’évaluer la pertinence des textes ou solutions techniques. Les checklists sont également rapidement contextuelles à un projet, puisque les objectifs et contraintes peuvent varier — je cherchais plutôt un outil générique.&lt;/p&gt;
&lt;h3 id=&quot;les-solutions-en-ligne&quot; tabindex=&quot;-1&quot;&gt;Les solutions en ligne&lt;/h3&gt;
&lt;p&gt;Les solutions automatisées en ligne sont également très utiles, mais ne permettent pas de faire un suivi au fil de l’eau. Je m’en sers lorsque je touche au but, à savoir en préambule à une recette complète. Voici une liste de ceux que j’affectionne particulièrement : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://reporting.opquast.com/fr/&quot; title=&quot;Le site d’OpQuast Reporting (nouvelle fenêtre)&quot;&gt;OpQuast Reporting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tanaguru.com/&quot; title=&quot;Le site de Tanaguru (nouvelle fenêtre)&quot;&gt;Tanaguru&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://validator.w3.org/&quot; title=&quot;Le service de validation du W3C (nouvelle fenêtre)&quot;&gt;Le Validator&lt;/a&gt; du W3C&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mais à moins que vous ne soyez fan des allers-retours, ces services ne sont pas adaptés à une utilisation intensive.&lt;/p&gt;
&lt;h2 id=&quot;une-organisation-lisible&quot; tabindex=&quot;-1&quot;&gt;Une organisation lisible&lt;/h2&gt;
&lt;p&gt;J’ai donc travaillé sur ce fichier CSS pendant un moment, égrainant les règles à tester, les façons d’afficher le message, etc. &lt;a href=&quot;https://www.ffoodd.fr/sass-commencez-par-les-deux-s/&quot; title=&quot;Sass : commencez par les deux « S »&quot;&gt;Mon récent apprentissage de Sass&lt;/a&gt; m’a permis d’organiser beaucoup plus précisément ce fichier, en définissant quatre degrés de gravité : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Les erreurs&lt;/strong&gt;, dénoncées en rouge : principalement des attributs absents, vides ou très fortement déconseillés ;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Les alertes&lt;/strong&gt;, signalées en jaune : notamment les éléments vides, les imbrications douteuses et les attributs sensibles ;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Les éléments &amp;amp; attributs obsolètes&lt;/strong&gt;, marqués en gris et relevés d’après &lt;a href=&quot;https://www.w3.org/TR/html5/obsolete.html#obsolete&quot; title=&quot;Liste des éléments et attributs obsolètes en HTML sur le site du W3C (nouvelle fenêtre)&quot;&gt;la liste maintenue par le W3C&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Les conseils&lt;/strong&gt;, mentionnés en vert. Il s’agit de simples suggestions d’utilisation de certains attributs, ou de bonnes pratiques méconnues.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L’organisation du projet est simple : la feuille de style « reine » contient un mixin, quelques explications et des placeholders pour chaque degré de gravité. Des fichiers partiels sont importés en deux groupes : un pour les sélecteurs — pour la maintenabilité, c’est bien plus lisible ainsi — et un pour les messages eux-mêmes.&lt;/p&gt;
&lt;h2 id=&quot;une-cible-precise&quot; tabindex=&quot;-1&quot;&gt;Une cible précise&lt;/h2&gt;
&lt;p&gt;Comme vous vous en doutez, cet outil n’est destiné qu’aux intégrateurs soucieux de la qualité de leur production. C’est pourquoi la compatibilité des sélecteurs et de l’affichage des messages ne prend pas en compte IE8 :D.&lt;/p&gt;
&lt;p&gt;De plus, les messages sont affichés via un pseudo-élément &lt;code&gt;::after&lt;/code&gt; — et vous le savez sûrement, mais &lt;a href=&quot;https://www.karlgroves.com/2013/08/26/css-generated-content-is-not-content/&quot; title=&quot;Article de Karl Groves sur le contenu généré en CSS (en anglais - nouvelle fenêtre)&quot;&gt;les contenus générés via des pseudos-éléments ne sont pas du contenu.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Et pour que ça ne me gratte pas trop la rétine, j’ai également ajouté un effet de transition pour l’apparition du message.&lt;/p&gt;
&lt;h2 id=&quot;la-documentation&quot; tabindex=&quot;-1&quot;&gt;La documentation&lt;/h2&gt;
&lt;p&gt;Reste une question à se poser : comment ai-je choisi les tests à effectuer, les formulations des messages et leur degré de gravité respectif ?&lt;/p&gt;
&lt;p&gt;Pour faire simple, j’ai lu. Beaucoup. Les premières ressources ont été les projets similaires déjà cités, bien sûr. Puis je me suis inspiré des indications récurrentes obtenues sur Tanaguru ou OpQuast Reporting. La page du W3C listant les éléments obsolètes s’est imposée d’elle-même en tant que ressource complète pour un degré bien précis de vérification.&lt;/p&gt;
&lt;p&gt;Et finalement, le forum de discussion du référentiel AccessiWeb pour sa version 2.2 ( sous-titré &lt;em&gt;« Mesure de la conformité WCAG 2.0 via le référentiel AccessiWeb 2.2 avec HTML5/ARIA »&lt;/em&gt; ) que m’avait précédemment indiqué &lt;a href=&quot;https://twitter.com/johan_ramon&quot; title=&quot;Johan Ramon sur Twitter (nouvelle fenêtre)&quot;&gt;Johan Ramon&lt;/a&gt; m’a appris énormément.&lt;/p&gt;
&lt;p&gt;Car oui : j’ai tout lu, tout détaillé. Pour chaque critère j’ai essayé d’en saisir le sens, les implications techniques et fonctionnelles, mais aussi ma capacité à les vérifier en CSS. C’est pourquoi les fichiers &lt;code&gt;.scss&lt;/code&gt; sont plutôt bien documentés : chaque test indique, via un commentaire, le critère Accessiweb et/ou la bonne pratique OpQuast concerné(es).&lt;/p&gt;
&lt;p&gt;Les tests susceptibles d’évoluer ou dont la vérification en CSS m’a semblé discutable ont été soit retirés, soit inclus aux conseils avec la mention utile concernant le contexte de rédaction du test en question.&lt;/p&gt;
&lt;h2 id=&quot;une-capitalisation-indispensable&quot; tabindex=&quot;-1&quot;&gt;Une capitalisation indispensable&lt;/h2&gt;
&lt;p&gt;Voilà, vous savez tout. J’estime ce projet suffisamment mûr pour être soumis aux regards de tous, en espérant que ceux-là me permettront d’enrichir encore cet outil qui m’aide déjà beaucoup.&lt;/p&gt;
&lt;p&gt;J’ai peu détaillé l’origine concrète de ce projet et &lt;strong&gt;comment il est né d’un réel besoin&lt;/strong&gt;. Il faut savoir que dans mon travail, je ne maîtrise pas toujours l’environnement de la phase d’intégration. Lorsqu’un nouveau projet est lancé, il peut parfois m’être imposé un thème ( sur WordPress ) ou une solution ( Prestashop, si tu nous regardes ) ; et lorsqu’il s’agit d’une maintenance ou d’une refonte partielle, je ne vous raconte pas ce que je déterre parfois…&lt;/p&gt;
&lt;p&gt;C’est dans ce cadre qu’&lt;code&gt;a11y.css&lt;/code&gt; prend tout son sens. Car si vous maîtrisez parfaitement la chaîne de production, il ne pourra vous servir que de pense-bête ( car vous aurez déjà appliqué toutes les bonnes pratiques, n’est-ce pas ? ), surtout si vous automatisez ce type de tâches grâce à &lt;a href=&quot;https://gruntjs.com/&quot; title=&quot;Le site de Grunt, en anglais (nouvelle fenêtre)&quot;&gt;Grunt&lt;/a&gt; ou d’autres outils du même acabit.&lt;/p&gt;
&lt;p&gt;Alors, qu’en dites-vous ?&lt;/p&gt;
&lt;ol class=&quot;footnotes-list small mt2 pt2 pb2&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;a11y est la contraction de « Accessibility » : un « a » suivi de 11 caractères, et conclu par un « y ». &lt;a href=&quot;https://www.ffoodd.fr/a11y-cssun-credo/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;</description>
					<pubDate>Wed, 04 Dec 2013 17:43:09 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/a11y-cssun-credo/</guid>
					<frDate>4 décembre 2013</frDate>
				</item>
				<item>
					<title>Sass : commencez par les deux « S »</title>
					<link>https://www.ffoodd.fr/sass-commencez-par-les-deux-s/</link>
					<description>&lt;p&gt;Malheureusement, vous aurez peut-être déjà fait ce constat : ce réflexe n’est que trop rarement encouragé. J’ai beau parcourir des dizaines d’articles, de tutoriaux, de &lt;em&gt;frameworks&lt;/em&gt; CSS ou de Gist, trop peu font ce rappel : testez, relisez, améliorez, testez à nouveau et finalement améliorez encore. &lt;strong&gt;Ça devrait se passer comme ça.&lt;/strong&gt; On peut argumenter qu’un bon intégrateur le ferait — mais c’est trop facile, non ?&lt;/p&gt;
&lt;h2 id=&quot;premier-contact-avec-sass&quot; tabindex=&quot;-1&quot;&gt;Premier contact avec Sass&lt;/h2&gt;
&lt;p&gt;Après avoir lu énormément de ressources sur &lt;a href=&quot;https://lesscss.org/&quot; title=&quot;Site du pré-processeur Less (nouvelle fenêtre)&quot;&gt;Less&lt;/a&gt; puis Sass pendant longtemps, je ne m’étais toujours pas décidé à franchir le pas pour plusieurs raisons :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;le changement bien sûr : rien de plus naturel que la résistance au changement;&lt;/li&gt;
&lt;li&gt;la perspective d’une « naturalisation » des avancées intéressantes dans les évolutions prévues de CSS .&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/sass-commencez-par-les-deux-s/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;l’intérêt limité — ou imitable —  de certaines fonctionnalités .&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/sass-commencez-par-les-deux-s/#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dans l’ensemble, je pensais — et je pense toujours — que l’utilisation de Sass n’avait pas d’intérêt à mon échelle : petits projets, récupération de code, très peu de collaboration… J’y percevais plus de risques et d’inconvénients que d’avantages, et certaines de mes lectures le confirmaient.&lt;/p&gt;
&lt;p&gt;L’évolution de mon projet personnel ffeeeedd conjointe à la lecture de l’excellent &lt;a href=&quot;https://www.css-maintenables.fr/&quot; title=&quot;Le site du livre CSS maintenables (nouvelle fenêtre)&quot;&gt;CSS maintenables&lt;/a&gt; puis de &lt;a href=&quot;https://www.ffoodd.fr/sass-compass-avance/&quot; title=&quot;Sass &amp;amp; Compass avancé&quot;&gt;Sass &amp;amp; Compass avancé&lt;/a&gt; m’ont finalement motivé : bien qu’à l’aise avec mon &lt;em&gt;workflow&lt;/em&gt;, je voulais l’améliorer et Sass m’a semblé être l’outil idéal.&lt;/p&gt;
&lt;h2 id=&quot;decouvertes-particulieres&quot; tabindex=&quot;-1&quot;&gt;Découvertes particulières&lt;/h2&gt;
&lt;p&gt;J’y suis allé pas à pas, dans l’ordre de la documentation. Des règles imbriquées aux fonctions, j’ai pris un temps considérable et me suis consciencieusement appliqué à découvrir le résultat de chacune des fonctionnalités .&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/sass-commencez-par-les-deux-s/#fn3&quot; id=&quot;fnref3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;La définition de variables — et par extension, la structuration d’un projet — est un gain de clarté évident. La compilation automatique est un gain de temps remarquable, et la qualité est au rendez-vous. Les fonctions, mixins et autres boucles sont extrêmement intéressantes, mais on touche aussi aux limites de l’outil : &lt;strong&gt;il faut de très, très bonnes bases en CSS pour s’en servir de façon optimale&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Étendre une classe est un piège parfait, probablement le plus efficient en tant que piège ; les nombreuses subtilités des fonctions et mixins peuvent également générer des erreurs très discrètement — et elles peuvent donc rester, pour peu que l’utilisateur ne soit pas consciencieux.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Je ne gâcherais pourtant pas mon plaisir : créer des mixins, fonctions et placeholders pour factoriser mes feuilles de styles « sources » est terriblement agréable 😀 .&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;une-simplification-vraiment&quot; tabindex=&quot;-1&quot;&gt;Une simplification, vraiment ?&lt;/h2&gt;
&lt;p&gt;Je suis encore en phase de découverte et pourtant me voilà sur ma faim : beaucoup de choses sont considérablement simplifiées, mais je garde l’impression que la complexité « d’avant » est simplement déportée vers les fonctionnalités dynamiques .&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/sass-commencez-par-les-deux-s/#fn4&quot; id=&quot;fnref4&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;La distance « cognitive » entre les fonctions/mixins et leur contexte d’utilisation, ainsi que la séparation des feuilles de styles en fragments .&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/sass-commencez-par-les-deux-s/#fn5&quot; id=&quot;fnref5&quot;&gt;[5]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id=&quot;sass-n-est-qu-un-outil&quot; tabindex=&quot;-1&quot;&gt;Sass n’est qu’un outil&lt;/h2&gt;
&lt;p&gt;Vous connaissez le dicton :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Il n’y a pas de mauvais outil, il n’y a que de mauvais ouvriers.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Et bien elle se vérifie avec Sass. Ce qui ne me convainquait pas l’an dernier ne me convainc toujours pas : les articles vantant les mérites des pré-processeurs sont relativement évasifs, et l’élan massif vers l’adoption de Sass me fait penser au &lt;a href=&quot;https://www.youtube.com/watch?v=I8Qu7_unkg4&quot; title=&quot;Voir la vidéo sur Youtube (nouvelle fenêtre)&quot;&gt;crime passionnel au pays des Toupoutous&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Oui, Sass est un outil formidable qui peut grandement faciliter et accélerer votre travail d’intégration ; oui, les possibilités semblent infinies ; oui, son utilisation est plutôt simple…&lt;/p&gt;
&lt;p&gt;Mais n’oublions que Sass reste un outil, et en tant que tel sa vocation est seulement de faciliter votre travail et pas d’en améliorer la qualité. &lt;strong&gt;Ce n’est pas le marteau qui fait en sorte que le clou rentre droit, c’est votre geste.&lt;/strong&gt;&lt;/p&gt;
&lt;ol class=&quot;footnotes-list small mt2 pt2 pb2&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Les calculs simples sont déjà là grâce à calc(), les variables sont à l’état de brouillon au W3C, etc. &lt;a href=&quot;https://www.ffoodd.fr/sass-commencez-par-les-deux-s/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Les placeholders, par exemple, sont limités puisqu’on peut créer ses propres classes transportables et modulables. &lt;a href=&quot;https://www.ffoodd.fr/sass-commencez-par-les-deux-s/#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn3&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Soit dit en passant, je préfère ne pas passer à Compass tout de suite, je pense devoir manier Sass correctement avant d’ajouter un autre crayon à ma palette. &lt;a href=&quot;https://www.ffoodd.fr/sass-commencez-par-les-deux-s/#fnref3&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn4&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Compass me semble d’ailleurs être un écueil remarquable pour le débutant, qui ne comprendra pas en profondeur le fonctionnement et la portée des mixins et fonctions proposées. &lt;a href=&quot;https://www.ffoodd.fr/sass-commencez-par-les-deux-s/#fnref4&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn5&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Des « partials » dans le vocabulaire Sass &lt;a href=&quot;https://www.ffoodd.fr/sass-commencez-par-les-deux-s/#fnref5&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;</description>
					<pubDate>Thu, 28 Nov 2013 15:26:04 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/sass-commencez-par-les-deux-s/</guid>
					<frDate>28 novembre 2013</frDate>
				</item>
				<item>
					<title>Sass &amp; Compass avancé</title>
					<link>https://www.ffoodd.fr/sass-compass-avance/</link>
					<description>&lt;p&gt;En tant qu’intégrateur avec un peu d’expérience — mais débutant avec Sass et Compass — les explications et retours d’expérience de Mehdi Kabab ( a.k.a &lt;a href=&quot;https://twitter.com/piouPiouM&quot; title=&quot;Profil Twitter de Mehdi Kabab (nouvelle fenêtre)&quot;&gt;@piouPiouM&lt;/a&gt; ) sont forcément intéressants. Au-delà de la présentation de l’outil, de nombreuses informations et bonnes pratiques viennent enrichir un livre déjà complet.&lt;/p&gt;
&lt;h2 id=&quot;le-tour-du-proprietaire&quot; tabindex=&quot;-1&quot;&gt;Le tour du propriétaire&lt;/h2&gt;
&lt;p&gt;Évidemment, l’étape inéluctable est l’introduction à Sass : ces principes généraux, son installation, son fonctionnement, et le détail de sa syntaxe. Une présentation complète, sans détour et extrêmement claire qui m’a permis de compléter ce que j’avais observé et appris lors de mon premier contact avec Sass. Cette partie est vraiment intéressante puisque &lt;strong&gt;l’auteur ne se limite pas à expliciter la documentation officielle mais en profite pour évoquer les pièges à éviter, les dérives les plus courantes et — pour résumer — tout ce qui fait de Sass une arme à double-tranchants&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Le chapitre suivant aborde l’angle du développement dans Sass .&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/sass-compass-avance/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id=&quot;les-mains-dans-le-cambouis&quot; tabindex=&quot;-1&quot;&gt;Les mains dans le cambouis&lt;/h2&gt;
&lt;p&gt;Découvrir un outil c’est bien joli, apprendre à l’utiliser c’est mieux ! L’auteur pose les bases d’un projet, et j’ai beaucoup apprécié dans cette partie **les exemples concrets évoqués qui simplifiaient certains points relativement compliqués .&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/sass-compass-avance/#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;La présentation de Compass est plutôt complète aussi, mais un peu moins aguicheuse : cela vient probablement du fait que je ne sois pas encore réellement convaincu par l’intérêt de ce &lt;em&gt;framework&lt;/em&gt;. Le support navigateur très lourd, la multitude de mixins existants, la gestion des sprites en PNG seulement : tout ça rend Compass légèrement décevant à mes yeux. Ce n’est que partie remise, il est probable qu’une utilisation régulière lui rende justice :).&lt;/p&gt;
&lt;h2 id=&quot;une-methodologie-mature&quot; tabindex=&quot;-1&quot;&gt;Une méthodologie mature&lt;/h2&gt;
&lt;p&gt;La partie la plus intéressante à mon avis est celle qui traite de la méthodologie : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la gestion des versions de Sass et Compass&lt;/li&gt;
&lt;li&gt;le débogage&lt;/li&gt;
&lt;li&gt;la collaboration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;C’est là que l’expérience de l’auteur se fait réellement sentir.&lt;/strong&gt; Il est néanmoins difficile de se projeter dans cette méthodologie — en tout cas, pour moi — car elle est extrêmement précise .&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/sass-compass-avance/#fn3&quot; id=&quot;fnref3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id=&quot;des-annexes-pas-si-annexes-que-ca&quot; tabindex=&quot;-1&quot;&gt;Des annexes pas si annexes que ça&lt;/h2&gt;
&lt;p&gt;Ces annexes sont presque indispensables : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;maintenir un casseur de cache personnalisé,&lt;/li&gt;
&lt;li&gt;partager des fichiers entre plusieurs projets,&lt;/li&gt;
&lt;li&gt;survivre en ligne de commande…&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Une portion cependant fait ressortir un tic de l’auteur : il fait de la bonne publicité pour Apple® :D.&lt;/p&gt;
&lt;h2 id=&quot;un-livre-a-relire-plus-tard&quot; tabindex=&quot;-1&quot;&gt;Un livre à relire, plus tard&lt;/h2&gt;
&lt;p&gt;Beaucoup de choses n’ont pas pris de sens dans ma cervelle dérangée : une certaine confusion persiste, ce qui explique que ma note ne soit pas maximale .&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/sass-compass-avance/#fn4&quot; id=&quot;fnref4&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;J’ai l’impression que ce livre vise un public très spécifique : les pré-requis sont réels .&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/sass-compass-avance/#fn5&quot; id=&quot;fnref5&quot;&gt;[5]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Je suis légèrement mitigé sur ma première lecture, mais je crois que lors de ma relecture cet ouvrage me deviendra indispensable. &lt;strong&gt;Il revêt d’ores et déjà le rôle d’ouvrage de référence dans ma bibliothèque et je compte bien l’ouvrir souvent !&lt;/strong&gt;&lt;/p&gt;
&lt;ol class=&quot;footnotes-list small mt2 pt2 pb2&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Oui, quand nous manipulons des données, tripotons des variables et jouons avec des fonctions, nous faisons du développement ! &lt;a href=&quot;https://www.ffoodd.fr/sass-compass-avance/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Même si l’utilisation de Sass et Compass ne nécessite pas d’être ingénieur, il faut avouer que ça n’est pas spécialement intuitif non plus ! &lt;a href=&quot;https://www.ffoodd.fr/sass-compass-avance/#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn3&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;La collaboration n’est pas le fort de l’agence, puisque je travaille seul la plupart du temps. &lt;a href=&quot;https://www.ffoodd.fr/sass-compass-avance/#fnref3&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn4&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;je pense qu’une utilisation plus régulière de Sass et Compass est nécessaire pour réellement saisir tout ce qui est dit dans cet ouvrage. &lt;a href=&quot;https://www.ffoodd.fr/sass-compass-avance/#fnref4&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn5&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Il faut être intégrateur de métier, et avec un peu de bouteille si possible. &lt;a href=&quot;https://www.ffoodd.fr/sass-compass-avance/#fnref5&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;</description>
					<pubDate>Wed, 20 Nov 2013 18:17:48 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/sass-compass-avance/</guid>
					<frDate>20 novembre 2013</frDate>
				</item>
				<item>
					<title>[caption] avec html5 et aria</title>
					<link>https://www.ffoodd.fr/ameliorer-les-images-dans-wordpress-avec-html5-et-aria/</link>
					<description>&lt;p&gt;Pour commencer, il faut comprendre une problématique de base en terme d’accessibilité : la distinction entre &lt;strong&gt;les images décoratives&lt;/strong&gt; et &lt;strong&gt;les images porteuses de sens&lt;/strong&gt;. Pour comprendre cette distinction et son importance, je vous recommande vivement la lecture d’&lt;a href=&quot;https://www.ffoodd.fr/lecture-accessibilite-web/&quot; title=&quot;Accessibilité web&quot;&gt;&lt;em&gt;«Accessibilité web»&lt;/em&gt;&lt;/a&gt; par &lt;a href=&quot;https://www.armonyaltinier.fr/&quot; title=&quot;Le site d’Armony Altinier (nouvelle fenêtre)&quot;&gt;Armony Altinier&lt;/a&gt;. Comme souvent lorsque nous parlons d’&lt;strong&gt;accessibilité web&lt;/strong&gt;, il s’agit de bon sens : une image porteuse de sens doit être restituée à tous les utilisateurs, tandis qu’une image décorative ne doit être montrée qu’aux utilisateurs disposant d’un affichage graphique complet.&lt;/p&gt;
&lt;h2 id=&quot;les-limites-de-word-press&quot; tabindex=&quot;-1&quot;&gt;Les limites de WordPress&lt;/h2&gt;
&lt;p&gt;Tout le monde n’est pas sensible à ces questions, même s’il le faudrait : WordPress ne fait pas exception. Il donne cependant la possibilité à ses utilisateurs de servir des images de façon tout à fait correcte, en proposant de base pour tous les fichiers la capacité d’adjoindre un texte alternatif — ce qui remplit le critère principal des &lt;a href=&quot;https://checklists.opquast.com/fr/&quot; title=&quot;Les checklists Opquast (nouvelle fenêtre)&quot;&gt;bonnes pratiques d’OpQuast&lt;/a&gt; et permet de satisfaire la plupart des critères de niveau Bronze d’Accessiweb.&lt;/p&gt;
&lt;p&gt;Pour autant WordPress ne va pas plus loin :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dans le cas d’une image décorative, il l’ajoute dans une balise &lt;code&gt;&amp;lt;img /&amp;gt;&lt;/code&gt; et conserve l’attribut &lt;code&gt;alt&lt;/code&gt; vide s’il n’est pas renseigné. &lt;strong&gt;C’est une bonne façon de procéder&lt;/strong&gt;, car l’image n’est pas vocalisée par un lecteur d’écran et n’a aucun poids sémantique.&lt;/li&gt;
&lt;li&gt;Dans le cas d’une image qui véhicule une information ( ce que je suppose être le cas si la légende est renseignée ), il encadre cette image d’une &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; et y intègre la description dans un &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; ( &lt;em&gt;cf :&lt;/em&gt;  &lt;a href=&quot;https://core.trac.wordpress.org/browser/tags/3.7.1/src/wp-includes/media.php#L614&quot; title=&quot;Le code source du shortcode (nouvelle fenêtre)&quot;&gt;le code source du shortcode&lt;/a&gt; ). &lt;strong&gt;C’est problématique car il n’existe aucun lien sémantique entre l’image et sa description, et le balisage est neutre.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Certes, c’est du fignolage. Mais c’est à priori dans les détails que l’on améliore sensiblement la qualité d’un site web.&lt;/p&gt;
&lt;h2 id=&quot;les-images-porteuses-de-sens&quot; tabindex=&quot;-1&quot;&gt;Les images porteuses de sens&lt;/h2&gt;
&lt;p&gt;Le cas des images véhiculant des informations demande donc quelques efforts : il faut intercepter le shortcode afin de le ré-interpréter &lt;strong&gt;avant&lt;/strong&gt; qu’il ne soit renvoyé côté client. Voici ce à quoi j’ai pu aboutir : &lt;/p&gt;
&lt;pre class=&quot;language-php&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;  &lt;span class=&quot;token comment&quot;&gt;/* == @section Remplace le code généré par [caption] ==================== */&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;/**
 * @note : Le contenu est filtré pour remplacer le html généré pour les caption par du html5 sémantique. Astuce trouvée sur Reverie.
 * @author : Zhen Huang
 * @see : https://themefortress.com/reverie/
 * @see : https://github.com/milohuang/reverie/blob/master/lib/clean.php#LC151
 * @note : On y ajoute les microdonnées qui vont bien.
 * @author : Joost Kiens ( @joostkiens )
 * @see : https://gist.github.com/JoostKiens/4477366
 * @note : Et j’y ajoute les roles et attributs Aria nécessaires
 * @see : https://www.kloh.ch/craw2013-html5-aria-et-accessibilite-web-479
 */&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;add_filter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; ’img_caption_shortcode’&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ’ffeeeedd__caption’&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-definition function&quot;&gt;ffeeeedd__caption&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$output&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$attr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$content&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;is_feed&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$output&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token variable&quot;&gt;$defaults&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  ’id’ &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; ’’&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  ’align’ &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; ’alignnone’&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  ’width’ &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; ’’&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  ’caption’ &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; ’’
  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token variable&quot;&gt;$attr&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;shortcode_atts&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$defaults&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$attr&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword type-casting&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$attr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;’width’&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;empty&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$attr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;’caption’&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$content&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token variable&quot;&gt;$content&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;str_replace&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; ’&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;img’&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ’&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;img id&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;’ . &lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$attr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;’id’&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/span&gt; . ’&quot;&lt;/span&gt; itemprop&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;contentURL&quot;&lt;/span&gt; aria&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;describedby&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;wp-caption--’ . &lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$attr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;’id’&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/span&gt; . ’&quot;&lt;/span&gt;’&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$content&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token variable&quot;&gt;$attributes&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; ’ &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;wp-caption inbl ’ . esc_attr( &lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$attr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;’align’&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/span&gt; ) . ’&quot;&lt;/span&gt;’&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token variable&quot;&gt;$output&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; ’&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;figure’ &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$attributes&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt;’ role&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;group&quot;&lt;/span&gt; itemscope itemtype&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;https://schema.org/ImageObject&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;’&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token variable&quot;&gt;$output&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;do_shortcode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$content&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token variable&quot;&gt;$output&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.=&lt;/span&gt; ’&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;figcaption &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;wp-caption-text pt1 small&quot;&lt;/span&gt; id&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;wp-caption--’ . &lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$attr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;’id’&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/span&gt; . ’&quot;&lt;/span&gt; itemprop&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;description&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;’ &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$attr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;’caption’&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; ’&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;figcaption&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;’&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token variable&quot;&gt;$output&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.=&lt;/span&gt; ’&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;figure&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;’&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$output&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;l-intervention-detaillee&quot; tabindex=&quot;-1&quot;&gt;L’intervention détaillée&lt;/h2&gt;
&lt;p&gt;La structure d’origine est conservée ; je détaille ce qui a été fait :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Une couche sémantique HTML5 est appliquée en lieu et place du balisage «neutre» précédent : &lt;code&gt;figure&lt;/code&gt; et &lt;code&gt;figcaption&lt;/code&gt; ;&lt;/li&gt;
&lt;li&gt;Une couche ARIA améliore la compréhension de ce balisage parfois défaillant dans les technologies d’assistance, comme me l’a appris &lt;a href=&quot;https://www.kloh.ch/craw2013-html5-aria-et-accessibilite-web-479&quot; title=&quot;Compte-rendu de l’atelier de J.P. Villain par Luc (nouvelle fenêtre)&quot;&gt;le compte-rendu d’un atelier&lt;/a&gt; de &lt;a href=&quot;https://twitter.com/villainjp&quot; title=&quot;Profil Twitter de Jean-Pierre Villain (nouvelle fenêtre)&quot;&gt;Jean-Pierre Vilain&lt;/a&gt; à la &lt;a href=&quot;https://www.telono.com/fr/agence/conference-romande-accessibilite-web-2013/&quot; title=&quot;Conférence Romande sur l’Accessibilité Web 2013 (nouvelle fenêtre)&quot;&gt;CRAW2013&lt;/a&gt; rédigé par &lt;a href=&quot;https://twitter.com/klohFR&quot; title=&quot;Profil Twitter de Luc Poupard (nouvelle fenêtre)&quot;&gt;Luc&lt;/a&gt;. Dans notre cas, le &lt;code&gt;role=&amp;quot;group&amp;quot;&lt;/code&gt;.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/ameliorer-les-images-dans-wordpress-avec-html5-et-aria/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Et finalement une dernière couche est ajoutée : les micro-données.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/ameliorer-les-images-dans-wordpress-avec-html5-et-aria/#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ce code n’est probablement pas parfait, car je ne l’ai pas testé avec un lecteur d’écran : il va falloir que je le fasse. Mais je pense que c’est un premier pas en avant vers une meilleure qualité des sites WordPress que je produis.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Les commentaires, conseils et indications supplémentaires seront grandement appréciés&lt;/strong&gt; :) .&lt;/p&gt;
&lt;h2 id=&quot;mises-a-jour&quot; tabindex=&quot;-1&quot;&gt;Mises à jour&lt;/h2&gt;
&lt;p&gt;Suite à un bref échange avec &lt;a href=&quot;https://twitter.com/johan_ramon&quot; title=&quot;Johan Ramon sur Twitter (nouvelle fenêtre)&quot;&gt;Johan Ramon&lt;/a&gt;, je dois préciser un point important : l’alternative textuelle de l’image doit également mentionner la légende attenante, pour les technologies d’assistance qui ne prendraient pas en compte l’attribut &lt;code&gt;aria-describedby&lt;/code&gt;. Voici les ressources utiles &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Discussion sur le critère 1.10 d’AccessiWeb 2.2&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.atalan.fr/support-des-attributs-aria-par-les-lecteurs-decran/&quot; title=&quot;Article sur le blog de la société Atalan (nouvelle fenêtre)&quot;&gt;Support des attributs ARIA par les lecteurs d’écran&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Comme souvent, cette dernière contrainte repose entièrement sur le contributeur qui doit être &lt;strong&gt;informé&lt;/strong&gt; et &lt;strong&gt;éduqué&lt;/strong&gt; à cette responsabilité.&lt;/p&gt;
&lt;ol class=&quot;footnotes-list small mt2 pt2 pb2&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;En savoir plus sur le rôle «group» : https://developer.mozilla.org/en-US/docs/Accessibility/ARIA/ARIA_Techniques/Using_the_group_role &lt;a href=&quot;https://www.ffoodd.fr/ameliorer-les-images-dans-wordpress-avec-html5-et-aria/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Découvrir les micro-données pour enrichir les objets images : https://schema.org/ImageObject &lt;a href=&quot;https://www.ffoodd.fr/ameliorer-les-images-dans-wordpress-avec-html5-et-aria/#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;</description>
					<pubDate>Tue, 12 Nov 2013 17:32:51 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/ameliorer-les-images-dans-wordpress-avec-html5-et-aria/</guid>
					<frDate>12 novembre 2013</frDate>
				</item>
				<item>
					<title>Karl Groves</title>
					<link>https://www.ffoodd.fr/karl-groves/</link>
					<description>&lt;p&gt;If it &lt;strong&gt;looks&lt;/strong&gt; the same, it should &lt;strong&gt;act&lt;/strong&gt; the same.&lt;/p&gt;
</description>
					<pubDate>Sun, 10 Nov 2013 20:22:24 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/karl-groves/</guid>
					<frDate>10 novembre 2013</frDate>
				</item>
				<item>
					<title>Guide pratique de choix typographique</title>
					<link>https://www.ffoodd.fr/guide-pratique-de-choix-typographique/</link>
					<description>&lt;p&gt;L’origine du livre est un constat simple de &lt;a href=&quot;https://www.davidrault.com/&quot; title=&quot;Site de David Rault (nouvelle fenêtre)&quot;&gt;David Rault&lt;/a&gt; : ce livre manquait. Et après l’avoir lu, je dois avouer qu’aucun ouvrage que j’ai parcouru n’y ressemble.&lt;/p&gt;
&lt;h2 id=&quot;une-histoire-de-familles&quot; tabindex=&quot;-1&quot;&gt;Une histoire de familles&lt;/h2&gt;
&lt;p&gt;Ne s’adressant pas uniquement à des techniciens ou à des professionnels — mais plutôt à des étudiants en arts graphiques — ce livre commence par les fondations : la classification des caractères, et plus précisément la classification &lt;strong&gt;Vox-Atypi&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Une introduction riche nous dépeint les origines de cette classification, les différentes familles et leurs connotations génériques ainsi qu’un lexique plutôt complet. Bien qu’ayant lu un certain nombre de livres traitant du sujet (notamment &lt;em&gt;«&lt;a href=&quot;https://pyramyd-editions.com/le-livre-en-lettres&quot; title=&quot;Le livre en Lettres sur Pyramid (nouvelle fenêtre)&quot;&gt;Le Livre en Lettres&lt;/a&gt;»&lt;/em&gt; de &lt;strong&gt;Stéphane Darricau&lt;/strong&gt; ou encore &lt;em&gt;«&lt;a href=&quot;https://pyramyd-editions.com/comprendre-la-typographie&quot; title=&quot;Comprendre la Typographie sur Pyramid (nouvelle fenêtre)&quot;&gt;Comprendre la typographie&lt;/a&gt;»&lt;/em&gt; d’&lt;strong&gt;Ellen Lupton&lt;/strong&gt;), la concision et la clarté de celui-ci m’ont beaucoup plu.&lt;/p&gt;
&lt;h2 id=&quot;27-caracteres-scrutes&quot; tabindex=&quot;-1&quot;&gt;27 caractères scrutés&lt;/h2&gt;
&lt;p&gt;Un choix forcément partial mais néanmoins représentatif a été fait : vingt-sept caractères majeurs dans l’histoire de la typographie ont été sélectionnés et décortiqués &lt;strong&gt;pour en saisir les moindres nuances&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Un angle d’attaque judicieux puisqu’en quelques pages seulement, l’analyse d’un seul caractère permet à l’auteur de nous raconter un pan entier de cette histoire : comment son concepteur est devenu typographe, dans quel contexte historique mais également pourquoi ce caractère précis est devenu un classique.&lt;/p&gt;
&lt;p&gt;Les anecdotes entrecoupées des Baskerville, Garamond et autre Trajan son réellement passionnantes 😀 .&lt;/p&gt;
&lt;h2 id=&quot;une-qualification-efficace&quot; tabindex=&quot;-1&quot;&gt;Une qualification efficace&lt;/h2&gt;
&lt;p&gt;Hormis la qualité culturelle de cet ouvrage, l’objectif de l’auteur était clair : permettre à ses lecteurs de comprendre l’impact d’une typographie, et de la choisir à bon escient. Il y parvient d’une manière remarquablement simple, puisque chaque caractère étudié fait l’objet d’&lt;strong&gt;une qualification complète&lt;/strong&gt;. Douceur, robustesse, raideur, chaleur, féminité, convivialité… Chaque caractère est profilé de la même façon qu’un article de blog est catégorisé.&lt;/p&gt;
&lt;p&gt;La simplicité de ce livre se résume assez bien à la fin : deux diagrammes placent les vingt-sept caractères étudiés en fonction de leur connotation, et le résultat est évident.&lt;/p&gt;
&lt;h2 id=&quot;pour-tous-les-curieux-caracteres&quot; tabindex=&quot;-1&quot;&gt;Pour tous les curieux caractères&lt;/h2&gt;
&lt;p&gt;Vous l’aurez compris, la lecture de ce livre m’a beaucoup plue : moins pointu que les best-sellers du genre, il est &lt;strong&gt;agréable et convivial&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Je le recommande chaudement !&lt;/p&gt;
</description>
					<pubDate>Sat, 09 Nov 2013 17:50:57 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/guide-pratique-de-choix-typographique/</guid>
					<frDate>9 novembre 2013</frDate>
				</item>
				<item>
					<title>Étymologie du web</title>
					<link>https://www.ffoodd.fr/ethymologie-du-web/</link>
					<description>&lt;p&gt;Je m’étais déjà fait cette réflexion en lisant &lt;a href=&quot;https://www.ffoodd.fr/lecture-webgrids/&quot; title=&quot;Compte-rendu de lecture : Webgrids (nouvelle fenêtre)&quot;&gt;Webgrids&lt;/a&gt;, dans lequel &lt;a href=&quot;https://twitter.com/Mitternacht&quot; title=&quot;Anne-Sophie Fradier sur Twitter (nouvelle fenêtre)&quot;&gt;Anne-Sophie Fradier&lt;/a&gt; m’apprenait l’origine du mot &lt;em&gt;scroll&lt;/em&gt;, qui signifiait simplement l’action de dérouler un parchemin. Mais mes vacances à Jersey m’ont appris bien plus encore.&lt;/p&gt;
&lt;h2 id=&quot;le-vocabulaire-web&quot; tabindex=&quot;-1&quot;&gt;Le vocabulaire web&lt;/h2&gt;
&lt;p&gt;À l’instar de &lt;em&gt;scroll&lt;/em&gt;, de nombreux termes proviennent du langage courant en anglais :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;framework&lt;/em&gt; signifie «coffrage», dans la construction — ce que j’ai appris en visitant un mémorial sur la seconde guerre mondiale, dans lequel était expliqué le labeur des ouvriers qui bâtissaient des murs en bétons à l’aide de «&lt;em&gt;wooden frameworks&lt;/em&gt;»;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;web&lt;/em&gt; signifie une «toile» (sous-entendu : d’araignée) qui est probablement l’anecdote la plus célèbre du monde;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;tag&lt;/em&gt; est un vieux mot pour «étiquette» (l’objet étiquette, mais aussi l’étiquette dans le sens comportemental : la bienséance);&lt;/li&gt;
&lt;li&gt;etc…&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cette liste pourrait continuer très longtemps : j’ai réalisé que — probablement dans un souci de compréhensibilité — les éléments HTML sont tous des représentations d’éléments existants dans le monde réel. C’est ce que nous appelons la sémantique, mais il faut noter qu’aucun terme n’a été créé spécifiquement pour le web : ils ne sont que des métaphores.&lt;/p&gt;
&lt;h2 id=&quot;les-elements-html&quot; tabindex=&quot;-1&quot;&gt;Les éléments HTML&lt;/h2&gt;
&lt;p&gt;On retrouve cette inspiration dans les balises classiques. La plupart tirent leur origine de l’imprimerie traditionnelle et de la mise en page, mais certaines sont plus amusantes : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les boutons &lt;code&gt;radio&lt;/code&gt; &lt;a href=&quot;https://fr.wikipedia.org/wiki/Bouton_radio&quot; title=&quot;Les origines des boutons radio sur Wikipédia (nouvelle fenêtre)&quot;&gt;inspirés des radios et autoradios&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;L’élément &lt;code&gt;canvas&lt;/code&gt; dont l’origine vient &lt;a href=&quot;https://fr.wikipedia.org/wiki/Canevas&quot; title=&quot;Définition de canevas sur Wikipédia (nouvelle fenêtre)&quot;&gt;de la tapisserie et de la broderie&lt;/a&gt;, ce qui est plutôt rigolo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bien qu’amusant, ce sont des choses relativement connues (et évidentes dans l’univers anglophone) mais que j’ai réalisées petit à petit, au fil de ma progression et de mes pérégrinations professionnelles.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mais il reste un domaine concret moins évident à appréhender et tout aussi inspiré du monde physique.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;les-interactions&quot; tabindex=&quot;-1&quot;&gt;Les interactions&lt;/h2&gt;
&lt;figure&gt;&lt;img src=&quot;https://www.ffoodd.fr/images/2013/11/slide-to-unlock.jpg&quot; alt=&quot;Troublante ressemblance avec le verrou de l’iPhone&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;figcaption&gt;Troublante ressemblance avec le verrou de l’iPhone&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Vous allez rire, mais c’est en allant aux toilettes dans le camping qui m’hébergeait que la révélation a eu lieu : pour fermer la porte, une simple glissière légendée «&lt;em&gt;Slide&lt;/em&gt;». Est-ce que ça vous rappelle quelque chose :D ? J’en ai fait un croquis rapide, en guise d’illustration.&lt;/p&gt;
&lt;p&gt;J’ai alors réalisé que cette interaction qui nous a semblé innovante — à nous autres Français — est en fait une interaction tout à fait basique dans le monde anglo-saxon – &lt;strong&gt;et c’est de là qu’elle tire son affordance&lt;/strong&gt; .&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/ethymologie-du-web/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;D’où ma réflexion : le web est issu du monde anglo-saxon, et la majorité de son écosystème a du sens — pour un anglophone ou quelqu’un baignant dans la culture anglo-saxonne.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;une-transposition-culturelle&quot; tabindex=&quot;-1&quot;&gt;Une transposition culturelle ?&lt;/h2&gt;
&lt;p&gt;Je n’ai pas de conclusion à apporter mais plutôt une suggestion d’ouverture. L’interaction pour déverrouiller un smartphone Apple n’a pas beaucoup de sens pour nous : &lt;strong&gt;peut-être qu’une interaction simulant le geste d’utiliser une clef pour fermer une porte à double-tour serait plus évocateur ?&lt;/strong&gt; Poser deux doigts et dessiner un cercle avec, deux ou trois fois d’affilée : c’est le geste que nous faisons lorsque nous ouvrons une porte. &lt;strong&gt;Ainsi au-delà de l’étymologie physique, la sémantique de l’affordance serait un outil vraiment puissant&lt;/strong&gt; .&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/ethymologie-du-web/#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;**Ça n’est pas nécessairement une bonne idée mais l’importance du contexte dans l’efficacité d’une interface (et à fortiori d’une expérience utilisateur) n’est plus à démontrer : adapter aussi les interactions au contexte culturel est probablement une question à se poser dans certains cas .&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/ethymologie-du-web/#fn3&quot; id=&quot;fnref3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;ol class=&quot;footnotes-list small mt2 pt2 pb2&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Sa capacité à suggérer son utilisation. &lt;a href=&quot;https://www.ffoodd.fr/ethymologie-du-web/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Cet article rejoint une réflexion antérieure que j’avais intitulée la sémantique de l’interaction : c’est donc un sujet qui m’interroge et me fait avancer. URL de l’article : https://www.ffoodd.fr/semantique-de-l-interaction/ &lt;a href=&quot;https://www.ffoodd.fr/ethymologie-du-web/#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn3&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Il est possible que ce sujet ait été théorisé par le passé, auquel cas donnez-moi de lecture via les commentaires :). &lt;a href=&quot;https://www.ffoodd.fr/ethymologie-du-web/#fnref3&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;</description>
					<pubDate>Mon, 04 Nov 2013 18:32:27 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/ethymologie-du-web/</guid>
					<frDate>4 novembre 2013</frDate>
				</item>
				<item>
					<title>La stratégie de contenu en pratique</title>
					<link>https://www.ffoodd.fr/la-strategie-de-contenu-en-pratique/</link>
					<description>&lt;h2 id=&quot;un-ouvrage-exhaustif&quot; tabindex=&quot;-1&quot;&gt;Un ouvrage exhaustif&lt;/h2&gt;
&lt;p&gt;Ce livre ne s’adresse pas seulement aux professionnels de la publication en ligne mais plutôt à &lt;strong&gt;tous les profils&lt;/strong&gt; susceptibles d’intervenir sur le contenu — d’une manière ou d’une autre. Ça comprend les commerciaux, chefs de projets, concepteurs, ergonomes, graphistes, intégrateurs, et même les développeurs. Nous sommes tous garants d’un niveau de qualité ; et bien que nous ne puissions pas tous travailler la stratégie à proprement parler, gérer la façon de contribuer et l’affichage a un impact fort sur la gestion de contenu — et fait partie intégrante de la stratégie de contenu.&lt;/p&gt;
&lt;p&gt;L’ouvrage traite alors exhaustivement tous les outils intéressants pour la stratégie de contenu, sans préciser le profil type d’utilisateur. Chacun se reconnaîtra : le &lt;strong&gt;référencement&lt;/strong&gt; ou l’&lt;strong&gt;audit d’accessibilité&lt;/strong&gt; par exemple sont rarement dévolus au commercial 🙂 .&lt;/p&gt;
&lt;h2 id=&quot;des-outils-analyses&quot; tabindex=&quot;-1&quot;&gt;Des outils analysés&lt;/h2&gt;
&lt;p&gt;Un point extrêmement appréciable est la présentation en fiches : chaque outil est exposé, expliqué puis mesuré. &lt;strong&gt;Une synthèse efficace conclue chaque fiche&lt;/strong&gt;, constituée des avantages et inconvénients de l’outil ainsi que de l’avis des auteurs.&lt;/p&gt;
&lt;p&gt;Aucune discrimination n’agit sur l’ordre ou le degré d’importance des outils : tous sont exposés de façon équitable. Ça peut être gênant pour quelqu’un qui cherche des indications précises, mais dans l’ensemble j’ai trouvé ça agréable : que vous ayez à gérer une stratégie de petite ampleur ou d’échelle industrielle, vous trouverez tout ce dont vous avez besoin. &lt;strong&gt;Et dans tous les cas, vous acquérez une culture générale dans le domaine.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;un-veritable-guide&quot; tabindex=&quot;-1&quot;&gt;Un véritable guide&lt;/h2&gt;
&lt;p&gt;Vous l’aurez compris, cet ouvrage est complet et concis. Son système de fiche permet de naviguer dans le livre selon ses centres d’intérêts, et l’érige également en guide pratique : une nouvelle demande concernant les contenus vous rend perplexe ? &lt;strong&gt;Jetez un œil à ce livre.&lt;/strong&gt;&lt;/p&gt;
</description>
					<pubDate>Tue, 22 Oct 2013 14:30:49 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/la-strategie-de-contenu-en-pratique/</guid>
					<frDate>22 octobre 2013</frDate>
				</item>
				<item>
					<title>Liens d’évitement persistants</title>
					<link>https://www.ffoodd.fr/liens-devitement-persistants/</link>
					<description>&lt;p&gt;Parmi ces techniques, certaines m’étaient inconnues : une ignorance qui ne nuisait pas directement à l’accessibilité mais bel et bien au confort d’utilisation du site pour les personnes concernées. Voici donc deux techniques que j’ai mises en place suite à cette lecture passionnante.&lt;/p&gt;
&lt;h2 id=&quot;les-liens-similaires&quot; tabindex=&quot;-1&quot;&gt;Les liens similaires&lt;/h2&gt;
&lt;p&gt;Il devient rapidement ennuyeux de parcourir une liste de liens (avec un lecteur d’écrans &lt;strong&gt;et/ou&lt;/strong&gt; en tabulant) lorsque plusieurs liens consécutifs ont la même destination. Malheureusement, c’est le cas très souvent sur WordPress dans les boucles d’articles.&lt;/p&gt;
&lt;p&gt;Et bien voici une bonne nouvelle : il est très simple de corriger ça, de façon totalement transparente pour tout le monde :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;tabindex à -1 :&lt;/strong&gt; pour la navigation au clavier, cet attribut permet de retirer un lien tabulable de l’index de tabulation. En l’appliquant judicieusement dans votre liste d’articles, vous ne laissez ainsi qu’un seul lien – et arrêtez de polluer la navigation au clavier.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;aria-hidden à true :&lt;/strong&gt; cet attribut permet de taire un élément dans les lecteurs d’écrans. La logique est la même que précédemment, à ceci près qu’on prendra soin de laisser le lien dont la vocalisation sera la plus pertinente : dans le cas d’une boucle WordPress, le lien présent dans les titres est idéal.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En appliquant cette technique correctement, on divise par deux ou trois le nombre de liens à parcourir dans une liste d’articles. Vos utilisateurs vous remercieront 🙂 .&lt;/p&gt;
&lt;h2 id=&quot;les-liens-d-evitement&quot; tabindex=&quot;-1&quot;&gt;Les liens d’évitement&lt;/h2&gt;
&lt;p&gt;Je ne reviendrais pas sur les bases de cette technique, qui est plus que documentée sur le web.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/liens-devitement-persistants/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La persistance des liens d’évitement après leur première prise de focus&lt;/li&gt;
&lt;li&gt;La mise en avant visuelle de la zone ciblée par le lien d’évitement&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Concernant le second point, je ne l’ai pas encore implémenté sur ffoodd.fr pour la seule raison que je dois trouver un signifiant visuel cohérent avec mon design, mais ça ne saurait tarder 🙂 .&lt;/p&gt;
&lt;p&gt;Cependant la persistance des liens m’a particulièrement intéressé, car c’est un point que je trouve réellement bénéfique pour le confort d’utilisation. Même si je ne me sers de la tabulation que pour tester mes intégrations, il m’a toujours semblé désagréable de « perdre » ces liens.&lt;/p&gt;
&lt;h2 id=&quot;la-persistance-des-liens-d-evitement&quot; tabindex=&quot;-1&quot;&gt;La persistance des liens d’évitement&lt;/h2&gt;
&lt;p&gt;En recherchant plus d’informations sur cette technique, je suis tombé sur le blog de la société Atalan pour laquelle travaille Johan – et sur &lt;a href=&quot;https://blog.atalan.fr/des-liens-devitement-astucieux/&quot; title=&quot;Article sur les liens d’évitement astucieux (nouvelle fenêtre)&quot;&gt;un article dédié au sujet&lt;/a&gt;. Des ressources très intéressantes sont données, cependant toutes sont basées sur jQuery pour ajouter une classe aux liens après leur première prise de focus. &lt;strong&gt;Dommage, je n’utilise pas jQuery sur ffoodd.fr.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Voici donc le bout de code correspondant, en vanilla javascript :&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;
&lt;span class=&quot;token comment&quot;&gt;/* Lien d’évitement &gt; Persistance de l’affichage
 * @see : https://blog.atalan.fr/des-liens-devitement-astucieux/
*/&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;call&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;querySelectorAll&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;.skip&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;el&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  el&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addEventListener&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;focus&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  el&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;classList&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;show&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et voilà ! Pour faire simple, je cible les liens disposant de la classe « skip » pour leur ajouter la classe « show » au focus. Et le CSS fait le reste.&lt;/p&gt;
&lt;p&gt;À noter que « dans certains cas rares » Chrome et IE ne transportent pas le focus sur la cible du lien d’évitement lorsqu’il a été activé. Un petit script vient facilement s’assurer que le focus est bien transporté :&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;
&lt;span class=&quot;token comment&quot;&gt;/* Correction du bug des ancres sous Chrome
 * @see : https://www.nczonline.net/blog/2013/01/15/fixing-skip-to-content-links/
 * @see : https://blog.atalan.fr/des-liens-devitement-astucieux/
*/&lt;/span&gt;
window&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addEventListener&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;hashchange&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; element &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;location&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;hash&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;substring&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;element&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token regex&quot;&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token regex-source language-regex&quot;&gt;^(?:a|select|input|button)$&lt;/span&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token regex-flags&quot;&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;element&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;tagName&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    element&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;tabIndex &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    element&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;focus&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;la-qualite-de-l-experience&quot; tabindex=&quot;-1&quot;&gt;La qualité de l’expérience&lt;/h2&gt;
&lt;p&gt;Ce sont certes des détails, mais ces détails améliorent le confort de navigation et rendent un site agréable : l’internaute appréciera cette expérience, et reviendra (pour peu que vos contenus soient à la hauteur).&lt;/p&gt;
&lt;ol class=&quot;footnotes-list small mt2 pt2 pb2&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Un article de Jean-Pierre Villain sur Alsacréations - il date de 2006 et est toujours (presque) d’actualités : https://www.alsacreations.com/tuto/lire/572-Les-liens-d-evitement.htm &lt;a href=&quot;https://www.ffoodd.fr/liens-devitement-persistants/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;</description>
					<pubDate>Wed, 16 Oct 2013 17:56:40 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/liens-devitement-persistants/</guid>
					<frDate>16 octobre 2013</frDate>
				</item>
				<item>
					<title>Navigation, Aria et WordPress</title>
					<link>https://www.ffoodd.fr/navigation-aria-et-wordpress/</link>
					<description>&lt;p&gt;Dans sa version basique, la navigation de WordPress n’a rien de particulier (si ce n’est la multitude de classes générées sur chaque élément 🙁 ). Or ARIA permet d’ajouter une couche sémantique non négligeable et relativement simple à mettre en place, améliorant ainsi l’accessibilité de la navigation.&lt;/p&gt;
&lt;h2 id=&quot;notre-objectif&quot; tabindex=&quot;-1&quot;&gt;Notre objectif&lt;/h2&gt;
&lt;p&gt;L’implémentation d’ARIA sur une navigation est simple ‐ bien qu’il soit assez compliqué d’en trouver une documentation ou un exemple concret. Voici le résultat attendu sur ffoodd (je vous épargne les classes et identifiants, pour cette fois 😉 ) :&lt;/p&gt;
&lt;pre class=&quot;language-markup&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;nav&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;nav&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;role&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;navigation&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;ul&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;role&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;menubar&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;role&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;menuitem&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;aria-labelledby&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;ffoodd&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://www.ffoodd.fr&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;ffoodd&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;ffoodd&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;role&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;menuitem&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;aria-labelledby&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;travaux&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://www.ffoodd.fr/travaux/&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;travaux&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Travaux&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;ul&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; 
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;nav&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Vous connaissiez sans doute déjà le rôle « navigation », qui identifie la zone majeure du contenu destinée à la navigation. Les autres rôle et attributs sont explicites, et on en saisit facilement l’intérêt sur cet extrait de code. Voyons maintenant comment obtenir ce résultat avec WordPress.&lt;/p&gt;
&lt;h2 id=&quot;word-press-et-le-walker-dedie-a-la-navigation&quot; tabindex=&quot;-1&quot;&gt;WordPress et le Walker dédié à la navigation&lt;/h2&gt;
&lt;p&gt;Ce sympathique walker se nomme &lt;strong&gt;Walker_Nav_Menu&lt;/strong&gt;. Je l’avais rencontré la première fois en farfouillant dans le code de [Reverie](https://themefortress.com/reverie/ « Reverie .fr/blog/construire-walker-wordpress/ « Construire un walker WordPress (nouvelle fenêtre) » = un starter theme pour WordPress (nouvelle fenêtre) »), sans en saisir l’intérêt à l’époque. Puis mes compétences et réflexions évoluant avec le temps, lorsque je le recroisais sur le blog de &lt;a href=&quot;https://twitter.com/willybahuaud&quot; title=&quot;Willy Bahuaud sur Twitter (nouvelle fenêtre)&quot;&gt;Willy Bahuaud&lt;/a&gt; dans &lt;a href=&quot;https://wabeo/&quot;&gt;son article présentant les walkers&lt;/a&gt;, j’en saisis rapidement l’intérêt et me mit en tête de m’en servir sur mon thème ffeeeedd.&lt;/p&gt;
&lt;p&gt;Je vous recommande chaudement de lire l’article de Willy sur le sujet, qui est une entrée en matière extrêmement intéressante.&lt;/p&gt;
&lt;h2 id=&quot;les-mains-dans-le-code&quot; tabindex=&quot;-1&quot;&gt;Les mains dans le code&lt;/h2&gt;
&lt;p&gt;Voilà sans plus attendre le code obtenu après quelques recherche :&lt;/p&gt;
&lt;pre class=&quot;language-php&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;  &lt;span class=&quot;token comment&quot;&gt;/* == @section Amélioration de la navigation ==================== */&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;/**
 * @note : Un walker nous permet de amnipuler le html généré pour la navigation afin d’y ajouter les roles aria qui vont bien.
 * @author : Gaël Poupard
 * @see : https://twitter.com/ffoodd_fr
 * @see : https://wabeo.fr/blog/construire-walker-wordpress/
 * @author : Willy Bahuaud
 * @see : https://core.trac.wordpress.org/browser/tags/3.6.1//wp-includes/nav-menu-template.php#L0
 */&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name-definition class-name&quot;&gt;ffeeeedd__walker&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Walker_Nav_Menu&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-definition function&quot;&gt;start_el&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$output&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$depth&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$args&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$id&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token variable&quot;&gt;$indent&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$depth&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;str_repeat&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;&#92;t&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$depth&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; ’’&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token variable&quot;&gt;$class_names&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$value&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; ’’&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token variable&quot;&gt;$classes&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;empty&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;classes&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword type-casting&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;classes&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token variable&quot;&gt;$classes&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; ’menu&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;item&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;’ &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token variable&quot;&gt;$class_names&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; ’ ’&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apply_filters&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; ’nav_menu_css_class’&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;array_filter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$classes&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$args&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token variable&quot;&gt;$class_names&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$class_names&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; ’ &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;’ . esc_attr( &lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$class_names&lt;/span&gt;&lt;/span&gt; ) . ’&quot;&lt;/span&gt;’ &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; ’’&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token variable&quot;&gt;$id&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apply_filters&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; ’nav_menu_item_id’&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ’menu&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;item&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;’&lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$args&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token variable&quot;&gt;$id&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$id&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; ’ id&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;’ . esc_attr( &lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$id&lt;/span&gt;&lt;/span&gt; ) . ’&quot;&lt;/span&gt;’ &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; ’’&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token variable&quot;&gt;$output&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$indent&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; ’&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;li’ &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$id&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$value&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$class_names&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt;’ role&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;menuitem&quot;&lt;/span&gt; aria&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;labelledby&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;item-’ . sanitize_html_class( apply_filters( ’the_title’, &lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;title&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;ID&lt;/span&gt;&lt;/span&gt; ) ) . ’&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;’&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token variable&quot;&gt;$atts&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token variable&quot;&gt;$atts&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;’title’&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;empty&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;attr_title&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;attr_title&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; ’’&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token variable&quot;&gt;$atts&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;’target’&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;empty&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;target&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;target&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; ’’&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token variable&quot;&gt;$atts&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;’rel’&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;empty&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;xfn&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;xfn&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; ’’&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token variable&quot;&gt;$atts&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;’href’&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;empty&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;url&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;url&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; ’’&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token variable&quot;&gt;$atts&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apply_filters&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; ’nav_menu_link_attributes’&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$atts&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$args&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token variable&quot;&gt;$attributes&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; ’’&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;foreach&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$atts&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$attr&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$value&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;empty&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$value&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$value&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; ’href’ &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$attr&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;esc_url&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$value&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token class-name return-type&quot;&gt;esc_attr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$value&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token variable&quot;&gt;$attributes&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.=&lt;/span&gt; ’ ’ &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$attr&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; ’&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;’ . &lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$value&lt;/span&gt;&lt;/span&gt; . ’&quot;&lt;/span&gt;’&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token variable&quot;&gt;$item_output&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$args&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;before&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token variable&quot;&gt;$item_output&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.=&lt;/span&gt; ’&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;a’&lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$attributes&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt;’ id&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;item-’ . sanitize_html_class( apply_filters( ’the_title’, &lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;title&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;ID&lt;/span&gt;&lt;/span&gt; ) ) . ’&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;’&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token variable&quot;&gt;$item_output&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$args&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;link_before&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apply_filters&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; ’the_title’&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;ID&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$args&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;link_after&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token variable&quot;&gt;$item_output&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.=&lt;/span&gt; ’&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;a&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;’&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token variable&quot;&gt;$item_output&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$args&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;after&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token variable&quot;&gt;$output&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;.=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apply_filters&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; ’walker_nav_menu_start_el’&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$item_output&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$depth&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$args&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Le walker manipule chaque niveau de rendu de la navigation, ce qui nous permet d’ajouter les rôles très facilement. La seule intervention astucieuse consiste à récupérer l’intitulé de l’item afin de l’utiliser comme label pour la navigation.&lt;/p&gt;
&lt;p&gt;Et voilà ! Simple, non ?&lt;/p&gt;
&lt;h2 id=&quot;les-evolutions-a-venir&quot; tabindex=&quot;-1&quot;&gt;Les évolutions à venir&lt;/h2&gt;
&lt;p&gt;Bien qu’intéressante, cette astuce n’est pas parfaite. En effet la spécification ARIA prévoit des états pour les éléments, afin d’expliciter les interactions.&lt;/p&gt;
&lt;p&gt;Dans notre cas, il va falloir appliquer l’attribut booléen &lt;strong&gt;aria-selected&lt;/strong&gt; sur les items de navigation, en passant sa valeur de true à false selon l’item actif.&lt;/p&gt;
&lt;p&gt;Bien qu’ayant déjà appliqué ce comportement sur des boîtes à onglets notamment, j’aimerais parvenir à le faire sur ma navigation sans passer par du javascript. J’ai cherché des pistes pour utiliser le walker (qui à priori devrait être capable de repérer l’item actif) mais sans résultat pour le moment, donc &lt;strong&gt;n’hésitez pas à commenter l’article ou à me contacter par mail si vous avez la moindre piste à me suggérer&lt;/strong&gt; (voire même la solution, hein :D).&lt;/p&gt;
&lt;p&gt;De plus, un comportement (en javascript à priori) est également à prévoir pour les sous-menu, qui pourront s’avérer plus complexes à gérer ‐ bien qu’ARIA soit très complète sur ce sujet.&lt;/p&gt;
</description>
					<pubDate>Wed, 09 Oct 2013 15:31:19 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/navigation-aria-et-wordpress/</guid>
					<frDate>9 octobre 2013</frDate>
				</item>
				<item>
					<title>Expérience de Typecast</title>
					<link>https://www.ffoodd.fr/experience-de-typecast/</link>
					<description>&lt;h2 id=&quot;presentation&quot; tabindex=&quot;-1&quot;&gt;Présentation&lt;/h2&gt;
&lt;p&gt;Typecast est ‐ comme son nom l’indique ‐ un outil (une application web, plus précisément) conçu pour caster les typographies. Je traduis sa présentation officielle :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Utilisez Typecast pour créer des designs visuels et sémantiques.&lt;br /&gt;
Vérifiez la lisibilité, le rendu et la beauté puis partagez un prototype fonctionnel de votre design.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;De charmantes intentions !&lt;/p&gt;
&lt;h2 id=&quot;qui-dit-casting-dit-choix&quot; tabindex=&quot;-1&quot;&gt;Qui dit casting dit choix&lt;/h2&gt;
&lt;p&gt;L’outil propose un large choix de typographie, bien pratique pour le casting à venir. Vous pouvez parcourir plusieurs grandes fonderies disposant de plans de distribution adaptés au web :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://typekit.com/fonts&quot; title=&quot;Typekit (nouvelle fenêtre)&quot;&gt;Typekit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.fonts.com/&quot; title=&quot;Fonts.com (nouvelle fenêtre)&quot;&gt;Fonts.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fontdeck.com/&quot; title=&quot;FontDeck (nouvelle fenêtre)&quot;&gt;FontDeck&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.google.com/fonts&quot; title=&quot;Google Webfont (nouvelle fenêtre)&quot;&gt;Google&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.webtype.com/&quot; title=&quot;WebType (nouvelle fenêtre)&quot;&gt;Webtype&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Autant ne pas vous le cacher : &lt;strong&gt;quel plaisir de parcourir le catalogue de ces fonderies&lt;/strong&gt; ! Le bas blesse légèrement malgré tout car aucune distinction n’est faite entre les typographies gratuites ou payantes, ce qui peut réserver des surprises 🙂&lt;/p&gt;
&lt;h2 id=&quot;prise-en-main-intuitive&quot; tabindex=&quot;-1&quot;&gt;Prise en main intuitive&lt;/h2&gt;
&lt;p&gt;L’interface est extrêmement simple : le contenu et un bloc déplaçable pour ajuster les options, à la manière des principaux logiciels d’édition graphique. Vous pouvez filtrer les typographies par fonderie, sélectionner la graisse et le style, et modifier à peu près tous les styles existants pour la typographie en CSS.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/experience-de-typecast/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Un format d’article standard est également fourni pour vous lancer dans le choix des typographies, mais vous pouvez bien entendu modifier ce format.&lt;/p&gt;
&lt;h2 id=&quot;un-resultat-utile-et-pratique&quot; tabindex=&quot;-1&quot;&gt;Un résultat utile et pratique&lt;/h2&gt;
&lt;p&gt;L’intérêt principal de cette application repose sur les diverses façons de partager ou publier le résultat obtenu :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;générez une page HTML auto-hébergée afin de tester son rendu sur différents appareils et navigateurs, ou partagez simplement le lien pour montrer votre travail;&lt;/li&gt;
&lt;li&gt;exportez le HTML/CSS afin de le travailler en local ou plus simplement le copier/coller dans votre prototype.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/experience-de-typecast/#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;exportez la charte graphique de votre résultat en PNG : liste des typographies et graisses, couleurs, styles principaux…&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour vous donner un aperçu du résultat, voici une portion de la charte obtenue lors de mon casting pour ffoodd :&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://www.ffoodd.fr/images/2013/10/typecast.jpg&quot; alt=&quot;Exemple de charte générée par Typecast&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;figcaption&gt;Exemple de charte générée par Typecast&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h2 id=&quot;l-outil-ideal&quot; tabindex=&quot;-1&quot;&gt;L’outil idéal ?&lt;/h2&gt;
&lt;p&gt;Vous l’aurez compris, j’ai été réellement convaincu — et satisfait — par cet outil. Cependant je ne me suis servi que de la version d’essai de 14 jours, gratuite. La version payante vous permet de gérer plusieurs projets, et il existe des partenariats avec certaines fonderies pour ajouter directement les typographies choisies à vos plans.&lt;/p&gt;
&lt;p&gt;Bien que l’outil soit génial, je n’ai pas pris d’abonnement car c’était un one-shot pour la refonte de ffoodd. À titre personnel ce n’est pas intéressant car je ne m’en servirais pas; à titre professionnel, très peu de clients acceptent d’acheter une typographie et je dois très souvent jouer avec des typographies websafe — ce qui fait perdre tout son intérêt à Typecast.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/experience-de-typecast/#fn3&quot; id=&quot;fnref3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cela étant dit, je recommande chaudement cet outil, qui, du point de vue du designer, est réellement riche et permet de se focaliser sur l’essentiel avant de se lancer dans la production d’une maquette complète.&lt;/strong&gt;&lt;/p&gt;
&lt;ol class=&quot;footnotes-list small mt2 pt2 pb2&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Certaines fonderies proposent des typographies OpenType : Typecast vous permet d’utiliser les options telles que les ligatures, visibles par exemples sur la Bello-Pro à l’oeuvre sur ce site. &lt;a href=&quot;https://www.ffoodd.fr/experience-de-typecast/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Attention cependant : je trouve que le code généré n’est pas du meilleur effet. Question de goût ? &lt;a href=&quot;https://www.ffoodd.fr/experience-de-typecast/#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn3&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Exception : les Google Webfonts, gratuites et accessibles dans Typecast. Si vous avez l’habitude de vous en servir, la licence Typecast peut vous intéresser. &lt;a href=&quot;https://www.ffoodd.fr/experience-de-typecast/#fnref3&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;</description>
					<pubDate>Mon, 07 Oct 2013 18:18:18 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/experience-de-typecast/</guid>
					<frDate>7 octobre 2013</frDate>
				</item>
				<item>
					<title>Armony Altinier</title>
					<link>https://www.ffoodd.fr/armony-altinier/</link>
					<description>&lt;p&gt;Est-ce que ça peut pénaliser quelqu’un ?&lt;/p&gt;
</description>
					<pubDate>Fri, 04 Oct 2013 15:12:34 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/armony-altinier/</guid>
					<frDate>4 octobre 2013</frDate>
				</item>
				<item>
					<title>Accessibilité web</title>
					<link>https://www.ffoodd.fr/lecture-accessibilite-web/</link>
					<description>&lt;p&gt;Une fois passée l’appréhension due au format du livre et au thème ‐ qui a la réputation d’être lourd, cognitivement parlant ‐ on est pris dans l’engrenage : de la première à la dernière page, impossible de décrocher.&lt;/p&gt;
&lt;h2 id=&quot;instauration-du-contexte&quot; tabindex=&quot;-1&quot;&gt;Instauration du contexte&lt;/h2&gt;
&lt;p&gt;Parmi les professionnels du web en France, le sujet semble avoir mauvaise haleine : hormis les entreprises spécialisées, les experts qualifiés et quelques pointures de la qualité web, le sujet semble tabou. L’image d’un domaine compliqué, difficile à mettre en place comme à apprendre et coûteux pour le client comme pour le prestataire lui colle aux basques.&lt;/p&gt;
&lt;p&gt;Ce livre d’&lt;a href=&quot;https://www.armonyaltinier.fr/&quot; title=&quot;Le site d’Armony Altinier (nouvelle fenêtre)&quot;&gt;Armony Altinier&lt;/a&gt; et Dominique Burger commence donc sereinement par replacer l’accessibilité web dans un contexte historique, technologique et juridique : j’ai énormément appris ! Cette seule première partie vaut le détour, car ces informations rendent la question de l’accessibilité web naturelle, voire évidente. Mais attention : le livre n’est pas indigeste pour autant. Les auteurs tentent judicieusement d’impliquer la compréhension des lecteurs, en mettant en scène des événements qui peuvent arriver à tout le monde : un bras cassé ou une panne de souris, par exemple.&lt;/p&gt;
&lt;p&gt;La partie historique est également enrichissante, notamment en ce qui concerne les deux référentiels Français : Accessiweb et &lt;a href=&quot;https://references.modernisation.gouv.fr/rgaa-accessibilite&quot; title=&quot;Présentation du Référentiel Général d’Accessibilité pour les Administrations (nouvelle fenêtre)&quot;&gt;RGAA&lt;/a&gt;. L’accessibilité est un sujet mouvant et bien que disposant de référentiels aux critères précis, ils ne sont pas pour autant tous pertinents. &lt;strong&gt;Tout est toujours une affaire de contexte.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;detail-des-thematiques-accessiweb&quot; tabindex=&quot;-1&quot;&gt;Détail des thématiques Accessiweb&lt;/h2&gt;
&lt;p&gt;Armony Altinier et Dominique Burger choisissent de se baser sur Accessiweb, pour la simple et bonne raison que c’est un référentiel nettement moins figé que RGAA.&lt;/p&gt;
&lt;p&gt;Après une introduction au référentiel, les thématiques sont développées comme suit :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Images, cadres et couleurs (thématiques AccessiWeb 1 à 3)&lt;/li&gt;
&lt;li&gt;Multimédia (thématique AccessiWeb 4)&lt;/li&gt;
&lt;li&gt;Tableaux (thématique AccessiWeb 5)&lt;/li&gt;
&lt;li&gt;Liens et scripts (thématique AccessiWeb 6 et 7)&lt;/li&gt;
&lt;li&gt;Eléments obligatoires, structuration de l’information et présentation de l’information (thématique AccessiWeb 8 à 10)&lt;/li&gt;
&lt;li&gt;Formulaire, navigation et consultation (thématique AccessiWeb 11 à 13)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Une couche vient s’ajouter ensuite : HTML5 et ARIA.&lt;/p&gt;
&lt;p&gt;Ces thématiques sont expliquées, clarifiées et détaillées : des cas concrets avec des vrais morceaux de code viennent illustrer les points les plus intéressants (le cas des tableaux complexes est un excellent exemple).&lt;/p&gt;
&lt;h2 id=&quot;un-apprentissage-permanent&quot; tabindex=&quot;-1&quot;&gt;Un apprentissage permanent&lt;/h2&gt;
&lt;p&gt;Ce que je retiens de ce livre, c’est le crédo mentionné par les auteurs : la question à se poser lorsqu’on parle d’accessibilité est &lt;strong&gt;« est-ce que ça peut pénaliser quelqu’un ? »&lt;/strong&gt;.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/lecture-accessibilite-web/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Partant de là, la leçon principale que j’en ai retenu vient tordre le coup à cette image de domaine figé réservé à des experts chevronnés. Non, l’accessibilité web n’est pas plus figée que les autres domaines du web, et non, ce n’est pas si complexe à mettre en oeuvre. Dans la plupart des sites que je réalise, les contenus sont purement textuels : pas de tableaux, pas d’iframe, pas de vidéos ou de sons, et très rarement des images porteuses de sens. Voilà qui élimine déjà beaucoup de problèmes.&lt;/p&gt;
&lt;p&gt;Mais pour chaque création de site, et à chaque étape du processus, il faut se poser la question : cela risque-t’il de gêner quelqu’un ? Il est compliqué d’imaginer tous les cas de figure, mais se poser la question est comme poser la première pierre : on bâtit un édifice qui sera forcément plus robuste si l’on s’interroge en amont.&lt;/p&gt;
&lt;ol class=&quot;footnotes-list small mt2 pt2 pb2&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;La démarche est bien de s’interroger : vous pouvez choisir de ne pas tenir compte de certaines remarques. Par exemple sur ce site, je justifie le texte courant, mais cela est considéré comme une mauvaise pratique et un risque pour l’accessibilité des contenus. &lt;a href=&quot;https://www.ffoodd.fr/lecture-accessibilite-web/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;</description>
					<pubDate>Fri, 04 Oct 2013 14:42:39 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/lecture-accessibilite-web/</guid>
					<frDate>4 octobre 2013</frDate>
				</item>
				<item>
					<title>P. Mendelson</title>
					<link>https://www.ffoodd.fr/p-mendelson/</link>
					<description>&lt;p&gt;Il vaut mieux savoir tout chercher que chercher à tout savoir.&lt;/p&gt;
</description>
					<pubDate>Thu, 03 Oct 2013 12:50:26 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/p-mendelson/</guid>
					<frDate>3 octobre 2013</frDate>
				</item>
				<item>
					<title>Atterrissage réussi</title>
					<link>https://www.ffoodd.fr/atterrissage-reussi/</link>
					<description>&lt;h2 id=&quot;la-refonte-un-travail-de-longue-haleine&quot; tabindex=&quot;-1&quot;&gt;La refonte : un travail de longue haleine&lt;/h2&gt;
&lt;p&gt;Je ne saurais vous dire depuis combien de mois je travaille sur cette refonte. Je crois d’ailleurs que ça a commencé par mon &lt;a href=&quot;https://github.com/ffoodd/ffeeeedd&quot;&gt;thème ffeeeedd&lt;/a&gt; et l’amélioration de mon processus de travail : beaucoup de découvertes, énormément de recherches, et au final une progression certaine.&lt;/p&gt;
&lt;p&gt;Un seul constat : mon site était devenu obsolète : en deux ans, j’ai progressé tant en graphisme qu’en intégration – mais surtout en développement WordPress ainsi qu’en javascript. J’ai également appris beaucoup de choses concernant l’accessibilité, le html5, ARIA, les performances web, le responsive web design, la compatibilité navigateur.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://www.ffoodd.fr/atterrissage-reussi/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id=&quot;la-roue-existe-deja&quot; tabindex=&quot;-1&quot;&gt;La roue existe déjà&lt;/h2&gt;
&lt;p&gt;C’est un adage bien connu des professionnels du web. Je ne m’étendrais pas sur le processus de refonte graphique et technique – je trouve la série d’articles de &lt;a href=&quot;https://marieguillaumet.com/&quot;&gt;Marie Guillaumet&lt;/a&gt; sur ce sujet absolument remarquables, et je vous invite à les lire.&lt;/p&gt;
&lt;p&gt;Cet article ne précisera donc pas tout ce qui a été fait, mais je peux d’ores et déjà annoncer une série d’articles à venir sur les problématiques rencontrées et leurs résolutions respectives. De nombreuses références et ressources viendront appuyer et enrichir ces articles, comme à mon habitude.&lt;/p&gt;
&lt;p&gt;Une ambition simple :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;mettre à disposition les solutions trouvées, adaptées ou crées&lt;/li&gt;
&lt;li&gt;les expliquer en détail et les documenter&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Certaines auront peut-être du succès !&lt;/p&gt;
&lt;h2 id=&quot;objectif-atteint&quot; tabindex=&quot;-1&quot;&gt;Objectif atteint&lt;/h2&gt;
&lt;p&gt;Je m’étais fixé comme objectif de mettre le site en ligne avant &lt;a href=&quot;https://www.paris-web.fr/&quot;&gt;Paris Web 2013&lt;/a&gt;, car pour la première fois je vais pouvoir y assister (merci à &lt;a href=&quot;https://www.kloh.ch/&quot; title=&quot;Le site de Luc Poupard&quot;&gt;kloh&lt;/a&gt;, le grand frère qui m’a aidé à acheter mes tickets).&lt;/p&gt;
&lt;p&gt;J’y suis parvenu avec une semaine d’avance, et cela m’enchante ! Le travail n’est pas pour autant terminé, car j’ai encore sur le feu une présentation de mes travaux plus agréable à l’œil et plus flatteuse pour eux. Revenez voir de temps en temps 😉&lt;/p&gt;
&lt;ol class=&quot;footnotes-list small mt2 pt2 pb2&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;À ce sujet : j’ai enfin abandonné le support d’IE7, et ce afin d’utiliser le plein potentiel des mises en page tabulaires en CSS 2.1. &lt;a href=&quot;https://www.ffoodd.fr/atterrissage-reussi/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;</description>
					<pubDate>Wed, 02 Oct 2013 14:33:43 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/atterrissage-reussi/</guid>
					<frDate>2 octobre 2013</frDate>
				</item>
				<item>
					<title>Stratégie de contenu mobile</title>
					<link>https://www.ffoodd.fr/lecture-strategie-contenu-mobile/</link>
					<description>&lt;h2 id=&quot;les-details-negatifs&quot; tabindex=&quot;-1&quot;&gt;Les détails négatifs&lt;/h2&gt;
&lt;p&gt;Car il ne faut pas plus de quelques détails pour donner une impression négative :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Les explications se répètent de nombreuses fois&lt;/strong&gt;, et parfois s’enchaînent simplement – donnant l’impression d’être légèrement attardé et d’avoir besoin de cette frustrante répétition;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Beaucoup d’allusions péjoratives&lt;/strong&gt; sont faites aux CMS « populaires » – comparant WordPress à Tumblr, ignorant la capacité de WordPress à créer des types de contenus grâce aux custom post types, etc… – ce qui, pour un livre traitant de la gestion de contenu, s’avère douteux;&lt;/li&gt;
&lt;li&gt;Le ton si délicieux des précédents ouvrages de la collection est absent : &lt;strong&gt;aucune touche d’humour&lt;/strong&gt;, et des traces de mépris ou d’ignorance de l’écosystème du web;&lt;/li&gt;
&lt;li&gt;Une traduction « amusante » mais déplaisante, qui ralentit la lecture : fourche pour fork, SGC pour CMS, etc…&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tout cela peut sembler anecdotique mais a réellement ralenti ma lecture de ce livre, me faisant tiquer sur des détails à priori anodin mais révélant un cruel manque de réalité. &lt;strong&gt;Comment accorder de la crédibilité à cette œuvre dans ces conditions ?&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;quelques-notions-indispensables&quot; tabindex=&quot;-1&quot;&gt;Quelques notions indispensables&lt;/h2&gt;
&lt;p&gt;Les explications sont cependant cohérentes et instructives, mais dépassent rarement le simple bon sens là ou l’on attend un partage d’expérience.&lt;/p&gt;
&lt;p&gt;Voici ce que j’ai appris et retenu de cet ouvrage :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Scinder le contenu&lt;/strong&gt;, encore et encore : plus le contenu sera segmenté, plus il sera facile de le répartir et de s’en servir à bon escient;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Le structurer&lt;/strong&gt; et le caractériser &lt;strong&gt;sémantiquement&lt;/strong&gt; – comme le font les &lt;a href=&quot;https://schema.org/&quot; title=&quot;Index des micro-données (nouvelle fenêtre)&quot;&gt;micro-données&lt;/a&gt; par exemple;&lt;/li&gt;
&lt;li&gt;L’idéal est &lt;strong&gt;un champ par information&lt;/strong&gt; : auteur, date, titre, etc…;&lt;/li&gt;
&lt;li&gt;L’extrait d’un article (dans une liste d’article) est un teasing : &lt;strong&gt;il doit inciter à lire l’article&lt;/strong&gt; entier – et par conséquent être différent des premiers caractères de l’article lui-même ! Arrêtons donc de tronquer le contenu en guise d’introduction, car l’extrait à un rôle à part entière;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Disposer de plusieurs titres selon le contexte d’utilisation&lt;/strong&gt; :
&lt;ul&gt;
&lt;li&gt;dans le contenu lui-même, en en-tête de l’article;&lt;/li&gt;
&lt;li&gt;sous forme de lien;&lt;/li&gt;
&lt;li&gt;sur les réseaux sociaux;&lt;/li&gt;
&lt;li&gt;en résultat de recherche interne;&lt;/li&gt;
&lt;li&gt;orienté SEO.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Certains points semblent évidents, mais on les omet souvent. Cependant, la ou l’auteur prône l’utilisation de CMS maison ou très avancé, j’aimerais signaler que la plupart des conseils fournis dans ce livre sont réalisables très facilement dans WordPress, et que la plupart des CMS actuels permettent également ce type de fonctionnalité.&lt;/p&gt;
&lt;h2 id=&quot;une-lecture-interessante-mais-dispensable&quot; tabindex=&quot;-1&quot;&gt;Une lecture intéressante mais dispensable&lt;/h2&gt;
&lt;p&gt;Certes, la lecture reste intéressante : la façon d’aborder les choses en elle-même est différente.&lt;/p&gt;
&lt;p&gt;Cependant, force m’est de constater que si j’avais été confronté à ces problématiques, je serais probablement arrivé à ces mêmes résultats. Les autres livres que je lis ne me font pas cet effet et me donnent véritablement l’impression d’apprendre.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dommage.&lt;/strong&gt;&lt;/p&gt;
</description>
					<pubDate>Fri, 23 Aug 2013 15:01:21 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/lecture-strategie-contenu-mobile/</guid>
					<frDate>23 août 2013</frDate>
				</item>
				<item>
					<title>IE9 sur WP7 et @font-face : je t’aime, moi non plus.</title>
					<link>https://www.ffoodd.fr/ie9-sur-wp7-et-font-face-je-taime-moi-non-plus/</link>
					<description>&lt;p&gt;&lt;strong&gt;Cependant, je dois également avouer que certaines choses me surprendront toujours : c’est le cas du support de &lt;code&gt;@font-face&lt;/code&gt; sur Windows Phone 7.&lt;/strong&gt; &lt;/p&gt;
&lt;h2 id=&quot;un-jour-j-ai-fait-un-test&quot; tabindex=&quot;-1&quot;&gt;Un jour, j’ai fait un test&lt;/h2&gt;
&lt;p&gt;Raphaël Goetter a annoncé aujourd’hui la refonte de son site principal, &lt;a href=&quot;https://goetter.fr/&quot; title=&quot;Le site de Raphaël Goetter (nouvelle fenêtre)&quot;&gt;goetter.fr&lt;/a&gt;, sur &lt;a href=&quot;https://blog.goetter.fr/post/56263951583/faites-un-site-web-perso&quot; title=&quot;Article sur la refonte de goetter.fr (nouvelle fenêtre)&quot;&gt;son blog&lt;/a&gt;. Étant donné que nous avions discuté quelques jours auparavant de ligatures &lt;a href=&quot;https://twitter.com/ffoodd_fr/status/357798486227435520&quot; title=&quot;Discussion au sujet des ligatures sur Twitter (nouvelle fenêtre)&quot;&gt;sur Twitter&lt;/a&gt;, j’ai lâché un commentaire au sujet de cette nouveauté sur le site de M. Goetter. Cependant sa réponse m’a légèrement surpris, puisque je ne m’attendais pas à ce qu’il doive se séparer de cet ornement sur mobile – pour d’excellentes raisons au demeurant.&lt;/p&gt;
&lt;p&gt;Pris de curiosité, j’ai alors décidé d’y jeter un œil sur mon smartphone : un Lumia 800 tournant sur Windows Phone 7.10, et Internet Explorer 9. Outre l’absence de la typographie &lt;em&gt;«Calendas Plus»&lt;/em&gt;, j’ai constaté que la typographie générée sur &lt;a href=&quot;https://icomoon.io/&quot; title=&quot;Icomoon (nouvelle fenêtre)&quot;&gt;Icomoon&lt;/a&gt; pour gérer les icônes était également absente.&lt;/p&gt;
&lt;p&gt;Je remonte ce problème ni une ni deux à l’auteur, qui est dans l’impossibilité de tester lui-même. Je décide donc de le faire, en commençant par regarder mon propre site – je ne disposais pas encore de ce téléphone lorsque cette version est apparue : sans appel, &lt;a href=&quot;https://www.ffoodd.fr/la-schizophrenie-semantique-dun-logo/&quot;&gt;mon logo basé sur &lt;code&gt;@font-face&lt;/code&gt;&lt;/a&gt; n’apparaît pas non plus.&lt;/p&gt;
&lt;h2 id=&quot;un-doute-m-habite&quot; tabindex=&quot;-1&quot;&gt;Un doute m’habite&lt;/h2&gt;
&lt;p&gt;Dès lors je sens poindre l’éventualité de l’absence de support de @font-face… Je fais donc le tour de plusieurs sites réalisés au sein de l’&lt;a href=&quot;https://www.1-ter-net.com/&quot; title=&quot;Création de site internet à Nantes (nouvelle fenêtre)&quot;&gt;agence 1-ter-net&lt;/a&gt; et utilisant &lt;code&gt;@font-face&lt;/code&gt;. La encore, aucun doute possible : &lt;code&gt;@font-face&lt;/code&gt; ne fonctionne sur aucun d’entre eux.&lt;/p&gt;
&lt;p&gt;Au cas ou, j’emprunte le smartphone d’une collègue, lui aussi sur Windows Phone 7. C’est le drame.&lt;/p&gt;
&lt;h2 id=&quot;google-m-a-repondu&quot; tabindex=&quot;-1&quot;&gt;Google m’a répondu !&lt;/h2&gt;
&lt;p&gt;Je vous laisse le soin de parcourir les résultats les plus intéressants :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blogs.msdn.com/b/thebeebs/archive/2011/12/14/font-face-isn-t-working-on-ie9-inside-of-windows-phone-7.aspx&quot; title=&quot;Font-Face isn’t working on IE9 inside of Windows Phone 7 (nouvelle fenêtre)&quot;&gt;Font-Face isn’t working on IE9 inside of Windows Phone 7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blogs.msdn.com/b/iemobile/archive/2010/11/10/supported-fonts-on-ie-for-windows-phone-7.aspx&quot; title=&quot;Supported fonts on IE for Windows Phone 7 (nouvelle fenêtre)&quot;&gt;Supported fonts on IE for Windows Phone 7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.ubelly.com/2011/11/the-differences-between-ie9-on-the-desktop-and-ie9-on-wp7/&quot; title=&quot;The differences between IE9 for desktop and IE9 on WP7 (nouvelle fenêtre)&quot;&gt;The differences between IE9 for desktop and IE9 on WP7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sans équivoque : &lt;strong&gt;IE9 sur WP7 supporte &lt;code&gt;@font-face&lt;/code&gt; mais ne chargera pas de fichiers typographiques externes.&lt;/strong&gt; Ça explique également le &lt;a href=&quot;https://github.com/Modernizr/Modernizr/issues/538&quot; title=&quot;Faut-positif de Modernizr (nouvelle fenêtre)&quot;&gt;faux-positif de Modernizr&lt;/a&gt; concernant la détection de cette fonctionnalité.&lt;/p&gt;
&lt;p&gt;Vous voilà prévenus : &lt;strong&gt;définir un fallback est un minimum&lt;/strong&gt; pour se prémunir contre ce problème; cependant le cas des icon-fonts est plus ennuyeux puisqu’on s’appuie souvent sur des caractères unicodes indisponibles dans la plupart des typographies, et un remplacement d’images conditionnel semble compliqué…&lt;/p&gt;
&lt;p&gt;Si quelqu’un connait un moyen de cibler uniquement IE9 sur Windows Phone 7, je suis preneur ! De plus, je n’ai aucun moyen de tester IE sur Windows Phone 8 pour le moment, je ne saurais donc préciser si ce problème existe toujours dans les versions les plus récentes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Edit :&lt;/strong&gt; La nuit portant conseil, l’astuce dans le cas d’une icon-font semble finalement «simple». Il s’agira de les baser sur des caractères unicodes ayant un intérêt ( par exemple, ☎ ). Cependant, cette astuce n’est possible que lorsqu’on a le choix des glyphes utilisés comme support – ce qui, je crois, est le cas dans IcoMoon – et de disposer d’un caractère unicode signifiant.&lt;/p&gt;
</description>
					<pubDate>Wed, 24 Jul 2013 19:16:35 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/ie9-sur-wp7-et-font-face-je-taime-moi-non-plus/</guid>
					<frDate>24 juillet 2013</frDate>
				</item>
				<item>
					<title>Pourquoi l’intégration web est le cœur d’un projet</title>
					<link>https://www.ffoodd.fr/pourquoi-lintegration-web-est-le-coeur-dun-projet/</link>
					<description>&lt;p&gt;Je ne secouerais pas le marronnier des nouveautés en question, je suppose que tout le monde a déjà parcouru le champ de &lt;a href=&quot;https://www.linternaute.com/dictionnaire/fr/definition/bogue/&quot; title=&quot;Définition de bogue (nouvelle fenêtre)&quot;&gt;bogues&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Un certain nombre d’articles ont déjà été publiés sur le sujet, par d’excellents intégrateurs :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.hteumeuleu.fr/l-importance-d-un-integrateur/&quot; title=&quot;L’importance d’un intégrateur (nouvelle fenêtre)&quot;&gt;L’importance d’un intégrateur&lt;/a&gt; par @HTeumeuleu&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://openweb.eu.org/articles/integrateur-au-developpeur-front-end-un-maillon-essentiel-qualite-web&quot; title=&quot;De l’intégrateur au développeur front-end : un maillon essentiel de la qualité Web (nouvelle fenêtre)&quot;&gt;De l’intégrateur au développeur front-end : un maillon essentiel de la qualité Web&lt;/a&gt; par Nicolas Hoffmann sur Openweb&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://darklg.me/2013/06/pourquoi-un-bon-integrateur-est-indispensable-a-tout-projet-web/&quot; title=&quot;Pourquoi un (bon) intégrateur est indispensable à tout projet web (nouvelle fenêtre)&quot;&gt;Pourquoi un (bon) intégrateur est indispensable à tout projet web&lt;/a&gt; par @Darklg&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Je tenais simplement à partager une vision simple sur ce nouvel état de fait : au-delà des compétences techniques requises, de l’évolution du web et de ce métier, il existe une raison extrêmement simple qui justifie l’importance de l’intégrateur web.&lt;/p&gt;
&lt;h2 id=&quot;il-est-au-milieu-de-la-chaine-de-production&quot; tabindex=&quot;-1&quot;&gt;Il est au milieu de la chaîne de production.&lt;/h2&gt;
&lt;p&gt;Sans rire. Littéralement.&lt;/p&gt;
&lt;p&gt;Conception &amp;gt; Graphisme &amp;gt; &lt;strong&gt;Intégration&lt;/strong&gt; &amp;gt; Développement &amp;gt; Production&lt;/p&gt;
&lt;p&gt;Comment donc un concepteur ou un développeur, aussi doués soient-ils, auraient une meilleure vision du projet ? L’intégrateur parle le langage de tous les autres postes, ce qui n’est forcément réciproque. De plus, la chaîne de production est de moins en moins linéaire – on évoque notamment le design dans le navigateur – et le seul poste à pouvoir naviguer et intervenir dans ce flux de travail mouvant, vous l’avez dans le mille : c’est l’intégrateur.&lt;/p&gt;
&lt;p&gt;Le même constat m’amène à penser qu’&lt;strong&gt;à l’avenir, les chefs de projets&lt;/strong&gt; dans les structures comme l’&lt;a href=&quot;https://www.1-ter-net.com/&quot; title=&quot;Création de site internet à Nantes (nouvelle fenêtre)&quot;&gt;agence 1-ter-net&lt;/a&gt; – dans laquelle je travaille – &lt;strong&gt;seront issus de l’intégration&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;À condition de retenir [cette leçon d’humilité](https://www.lesintegristes.net/2013/03/19/integration-web-humilite/ « « L’intégration web, cette leçon d’humilité » par Marie Guillaumet sur Les Intégristes (nouvelle fenêtre) »), et de faire du bon travail.&lt;/p&gt;
</description>
					<pubDate>Thu, 04 Jul 2013 12:33:38 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/pourquoi-lintegration-web-est-le-coeur-dun-projet/</guid>
					<frDate>4 juillet 2013</frDate>
				</item>
				<item>
					<title>WordPress 3.5 est médiaphobe</title>
					<link>https://www.ffoodd.fr/wordpress-3-5-est-mediaphobe/</link>
					<description>&lt;h2 id=&quot;sauf-que&quot; tabindex=&quot;-1&quot;&gt;Sauf que&lt;/h2&gt;
&lt;p&gt;Dès ma première utilisation de cette nouvelle mouture je suis tombé sur un problème assez gênant : dans la fenêtre modale servant à insérer des médias depuis l’éditeur, l’ajout d’un fichier me retourne une erreur en indiquant&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;« Une erreur est survenue lors du téléchargement.&lt;br /&gt;
Veuillez réessayer plus tard. »&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Malgré ça, ledit fichier a été ajouté à la bibliothèque des médias. De plus, impossible de parcourir la bibliothèque et d’insérer un fichier depuis cette même fenêtre modale ! Après une recherche rapide, il s’avère que &lt;a href=&quot;https://wordpress.org/search/bug+3.5+media+insert&quot; title=&quot;Wordpress 3.5 media insert bug&quot;&gt;je ne suis pas le premier à rencontrer ce problème&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Or ce bug – connu depuis la bêta – peut avoir diverses origines :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Le serveur utilise &lt;em&gt;mod_pagespeed&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Un plugin interfère avec les scripts de l’administration&lt;/li&gt;
&lt;li&gt;Le thème retire la version de jQuery inclue, et en utilise une autre&lt;/li&gt;
&lt;li&gt;Une erreur a pu se glisser dans certains fichiers, à vérifier via la console js du navigateur&lt;/li&gt;
&lt;li&gt;Un mode DEBUG de WordPress « abusif »&lt;/li&gt;
&lt;li&gt;La concaténation des fichiers de l’administration trop agressive ou mal effectuée&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Miam ! Vous l’aurez compris, beaucoup de ces causes potentielles tournent autour des fichiers javascript ( et la technologie Ajax utilisée dans ce cas ). Une multitude de parades ont été proposées sur le web, fonctionnant dans certains cas :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Repasser au thème TwentyTwelve&lt;/li&gt;
&lt;li&gt;Désactiver les plugins un par un&lt;/li&gt;
&lt;li&gt;Désactiver &lt;em&gt;mod_pagespeed&lt;/em&gt; ou un système de concaténation quelconque du js de l’administration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ces solutions ont – dans beaucoup de cas – suffit à résoudre le bug, ou au moins à en identifier l’origine afin de le corriger. &lt;strong&gt;Pas dans mon cas.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;htaccess&quot; tabindex=&quot;-1&quot;&gt;.htaccess&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Après diverses pérégrinations dans les tréfonds de WordPress, j’ai finalement trouvé la solution à mon cas : le .htaccess.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pour une raison ou pour une autre, appliquer le .htaccess que j’ai l’habitude d’appliquer en production a suffit. C’est donc un patch insignifiant, sauf que WordPress ne dispose pas – et ne crée pas – de .htaccess par lui-même. C’est une habitude que j’ai acquise pour des questions d’environnement serveur, de &lt;strong&gt;performances&lt;/strong&gt;, de &lt;strong&gt;qualité web&lt;/strong&gt; et de types de fichiers à servir, mais qui n’est pas connue de tout le monde.&lt;/p&gt;
&lt;p&gt;À titre personnel, le .htaccess de base dont je me sers est un amalgame :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;du .htaccess disponible dans le &lt;a href=&quot;https://html5boilerplate.com/&quot; title=&quot;HTML5 Boilerplate&quot;&gt;html5 Boilerplate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;du .htaccess dédié à WordPress proposé par &lt;a href=&quot;https://www.seomix.fr/guide-htaccess-performances-et-temps-de-chargement/&quot; title=&quot;le .htaccess expliqué sur seo-mix&quot;&gt;seo-mix&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Je suppose qu’il s’agit d’un entête http ou d’un type MIME incorrect qui nuit à la bonne compréhension du fichier par le serveur, sans toutefois en être sûr. Étant donné que j’avais jusqu’à présent l’habitude d’ajouter le .htaccess à la fin du développement, je me contenterais désormais de l’ajouter &lt;strong&gt;dès le début du projet&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;De plus, il s’agit d’une bonne pratique nécessaire à la &lt;a href=&quot;https://www.ffoodd.fr/tag/qualite-web/&quot; title=&quot;Qualité web&quot;&gt;qualité d’un site web&lt;/a&gt; : il est donc indispensable de disposer d’un fichier .htaccess efficace.&lt;/strong&gt;&lt;/p&gt;
</description>
					<pubDate>Wed, 16 Jan 2013 12:23:48 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/wordpress-3-5-est-mediaphobe/</guid>
					<frDate>16 janvier 2013</frDate>
				</item>
				<item>
					<title>À venir : ffeeeedd</title>
					<link>https://www.ffoodd.fr/a-venir-ffeeeedd/</link>
					<description>&lt;p&gt;On a ainsi vu germer ces dernières années une multitude d’outils, proposés par des professionnels aguerris et basés sur leur expérience et leur envie de partager leurs connaissances. Certains sont l’œuvre d’un seul, d’autres le fruit d’une communauté de passionnés. On peut en citer quelques-uns :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://html5boilerplate.com/&quot;&gt;HTML5 Boilerplate&lt;/a&gt; par Nicolas Gallagher, Hans Christian Reinl, Cãtãlin Mariş, Mathias Bynens, Paul Irish, &amp;amp; Divya Manian ( et une communauté gigantesque ).&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://knacss.com/&quot; title=&quot;Knacss&quot;&gt;Knacss&lt;/a&gt; par Raphaël Goetter&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://viewportindustries.com/products/starkers/&quot; title=&quot;Viewport Industries’ Starkers&quot;&gt;Starkers&lt;/a&gt; Par Viewport Industries&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://themefortress.com/reverie/&quot; title=&quot;Reverie&quot;&gt;Reverie&lt;/a&gt; Par ThemeFortress et basé sur &lt;a href=&quot;https://foundation.zurb.com/&quot;&gt;Foundation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;J’ai parcouru, décortiqué et utilisé beaucoup d’outils de ce type. Mais un constat demeure : aucun n’a jamais été parfaitement accordé à mes besoins, et c’est tout à fait normal.&lt;/p&gt;
&lt;h2 id=&quot;ma-nourriture&quot; tabindex=&quot;-1&quot;&gt;Ma nourriture&lt;/h2&gt;
&lt;p&gt;Tous ces outils m’ont beaucoup appris, tout comme les livres que j’ai lus et les communautés dont je fais partie. Certains d’entre eux font partie de mon quotidien mais il m’est naturellement venue l’envie de créer mon propre outil de travail, que je comprendrais jusqu’à la moelle et que je pourrais adapter à tous mes projets en un claquement de doigts.&lt;/p&gt;
&lt;p&gt;Le socle général de mon travail d’inté-graphiste est WordPress – et pour les autres solutions techniques, Knacss m’a permis de gagner pas mal de temps depuis sa sortie. Je me suis donc mis en tête de créer un thème WordPress &lt;strong&gt;ajustable et extensible&lt;/strong&gt; très facilement, dans l’optique de créer une base solide pour chaque site à construire dans le futur.&lt;/p&gt;
&lt;h2 id=&quot;ffeeeedd&quot; tabindex=&quot;-1&quot;&gt;ffeeeedd&lt;/h2&gt;
&lt;p&gt;Mon projet est donc lancé. ffoodd – dont la signification est &lt;a href=&quot;https://www.ffoodd.fr/&quot; title=&quot;Qu’est-ce que ffoodd ?&quot;&gt;expliquée&lt;/a&gt; – fut la notion de base.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ce projet s’appelle donc &lt;strong&gt;ffeeeedd&lt;/strong&gt; et a pour objectif de nourrir chacun de mes projets à venir.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Outre le thème blanc et les fonctionnalités additionnelles, une structure très personnelle des css va être mise en place. Une version personnalisée de Knacss servira de fondation, et l’enjeu que je me fixe est de créer un « kit » pour toute les personnalisations visuelles. Chaque portion du thème, chaque module, chaque format de page et d’article sera &lt;strong&gt;conçu de manière à hériter tous les styles visuels du Kit&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;L’emploi de Knacss et d’une &lt;strong&gt;démarche orientée objet&lt;/strong&gt; devrait me permettre de concevoir une structure solide et complexe tout en conservant une souplesse dans la mise en forme et des performances tout à fait raisonnable.&lt;/p&gt;
&lt;h2 id=&quot;tout-vient-a-point-qui-sait-attendre&quot; tabindex=&quot;-1&quot;&gt;Tout vient à point qui sait attendre&lt;/h2&gt;
&lt;p&gt;La première version me prend un temps considérable et n’est pas prête – même pour une utilisation expérimentale. Je ne perds pas de vue que ce projet me servira avant tout à titre personnel ( afin de de me faciliter la vie dans mes tâches quotidiennes ) mais également pour apprendre, chercher et accumuler de bons réflexes – qu’il s’agisse d’accessibilité, de performances, etc…&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Un jour viendra ou j’ouvrirais ce travail aux critiques, afin d’améliorer autant que possible le produit final.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Mais pour le moment, c’est uniquement mon excuse pour n’avoir pas écrit plus en 2012 et &lt;strong&gt;une bonne résolution pour 2013&lt;/strong&gt; !&lt;/p&gt;
</description>
					<pubDate>Tue, 08 Jan 2013 15:15:11 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/a-venir-ffeeeedd/</guid>
					<frDate>8 janvier 2013</frDate>
				</item>
				<item>
					<title>Le bien &amp; le mal pour l’intégrateur web</title>
					<link>https://www.ffoodd.fr/le-bien-le-mal-pour-lintegrateur-web/</link>
					<description>&lt;h2 id=&quot;il-y-a-de-bonnes-and-de-mauvaises-solutions&quot; tabindex=&quot;-1&quot;&gt;Il y a de bonnes &amp;amp; de mauvaises solutions&lt;/h2&gt;
&lt;p&gt;Une bonne idée le &lt;em&gt;jour J&lt;/em&gt; peut être une mauvaise idée le &lt;em&gt;D day&lt;/em&gt;. Au commencement de ffoodd, je voulais un fond simple mais avec un peu d’impact : j’ai donc choisi le motif très simple mais contrasté que vous avez sous les yeux. À l’époque, je rêvais de tester les dégradés radiaux en css – et j’étais persuadé de pouvoir réaliser mon motif à l’aide de cette technique. Ni une, ni deux : je le fais. Je tartine les préfixes navigateurs et la syntaxe non préfixée, et nous voilà partis. &lt;strong&gt;À bien y réfléchir, c’était ma première erreur.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Comme je suis méticuleux, je vérifie tout ça sur nos navigateurs adorés – et ô joie ! – Firefox freeze en voyant ça. Je me contente alors de retirer la ligne préfixée concernée, et tant pis pour lui : il aura un aplat. &lt;strong&gt;À bien y réfléchir, c’était le premier avertissement.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;pardonnez-moi-mon-pere-car-j-ai-peche&quot; tabindex=&quot;-1&quot;&gt;Pardonnez-moi mon père car j’ai péché&lt;/h2&gt;
&lt;p&gt;Firefox 16 est apparu, apportant des nouveautés dont : le support des dégradés sans préfixe. Firefox a donc compris ma déclaration background-image, et ô miracle ! &lt;strong&gt;Il freeze toujours, une vraie salade.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Je reprends alors mon code, et me demande : &lt;strong&gt;pourquoi diantre avoir utilisé un dégradé pour faire ça ?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mauvais support navigateur&lt;/li&gt;
&lt;li&gt;Problème de performance évident&lt;/li&gt;
&lt;li&gt;Syntaxe compliquée et instable ( à l’époque )&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En tant qu’intégrateur voulant atteindre un objectif, je n’ai pas fait le meilleur choix. J’ai donc repris le travail. J’ai supprimé ce dégradé, créé le motif en &lt;strong&gt;png-8&lt;/strong&gt; à &lt;strong&gt;2 couleurs&lt;/strong&gt; ( 64 octets ! ) et vu le poids, je l’ai même encodé en &lt;strong&gt;base64&lt;/strong&gt;. Et voilà !&lt;/p&gt;
&lt;h2 id=&quot;la-morale&quot; tabindex=&quot;-1&quot;&gt;La morale&lt;/h2&gt;
&lt;p&gt;Désormais ce fond est :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Compatible tous navigateurs jusqu’à IE8&lt;/li&gt;
&lt;li&gt;Trois fois plus légers&lt;/li&gt;
&lt;li&gt;Beaucoup plus performant&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ça n’est certes pas grand chose, mais cette erreur de parcours témoigne de mon évolution dans ce métier. C’était une mauvaise idée d’appliquer ce motif en css pur, mais 18 mois plus tard, quand j’ai vu ce bout de code, j’ai su trouver &lt;strong&gt;la meilleure solution&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Je continue &lt;a href=&quot;https://www.ffoodd.fr/css-experienceinherit/&quot; title=&quot;css {    expérience:inherit; }&quot;&gt;mon amélioration perpétuelle&lt;/a&gt;.&lt;/p&gt;
</description>
					<pubDate>Tue, 13 Nov 2012 15:40:08 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/le-bien-le-mal-pour-lintegrateur-web/</guid>
					<frDate>13 novembre 2012</frDate>
				</item>
				<item>
					<title>Webgrids</title>
					<link>https://www.ffoodd.fr/lecture-webgrids/</link>
					<description>&lt;h2 id=&quot;l-adret&quot; tabindex=&quot;-1&quot;&gt;L’adret&lt;/h2&gt;
&lt;p&gt;Ma formation en communication visuelle m’a enseigné les règles typographiques, de mise en page, l’histoire de l’imprimerie et les différents mouvements qui ont heurté l’histoire du graphisme et de l’impression.&lt;/p&gt;
&lt;h2 id=&quot;l-ubac&quot; tabindex=&quot;-1&quot;&gt;L’ubac&lt;/h2&gt;
&lt;p&gt;Mon expérience professionnelle dans le web m’a éduqué aux contraintes spécifiques du support : affichage sur écran divers et variés, dans des navigateurs qui sont également pléthore.&lt;/p&gt;
&lt;h2 id=&quot;un-livre-tres-instructif&quot; tabindex=&quot;-1&quot;&gt;Un livre très instructif&lt;/h2&gt;
&lt;p&gt;Dès la première page, la connaissance nous submerge :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Avant que le livre ne prenne la forme que nous lui connaissons aujourd’hui,on utilisait le rouleau ou &lt;em&gt;volumen&lt;/em&gt; […]. Les scribes de l’époque alignaient des colonnes sur cette longue bande de papyrus que l’on déroulait d’un côté et enroulait de l’autre au fur et à mesure de la lecture. À bien y regarder, la pratique de la lecture propre à ce support que les anglophones appellent – accrochez-vous – &lt;em&gt;scroll&lt;/em&gt;, en fait un cousin bien plus proche de la page web que ne le sera jamais votre livre de poche, descendant végétarien du codex en parchemin.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Et ce n’est qu’un extrait de la première page. Ce livre fourmille d’explications aussi simples que pointues pour comprendre et appréhender la mise en page sur le web. Un véritable retour aux fondamentaux – parfaitement documentés – qui devenait nécessaire. Je pense que cette lecture m’a fait progresser et c’est la meilleure raison qui soit pour faire l’éloge de ce livre plus qu’abordable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ce livre permet d’atteindre le sommet, ce point si compliqué à atteindre mais bel et bien le seul ou se rejoignent l’ubac et l’adret. Réconciliez le web et la mise en page avancée, lisez ce livre !&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;À noter : un autre excellent ouvrage est disponible dans la même collection aux Ateliers Perrousseaux : &lt;a href=&quot;https://www.google.fr/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CCgQFjAA&amp;amp;url=http%3A%2F%2Fwww.adverbum.fr%2Ftypo--web-foutoyet-aurelien-atelier-perrousseaux_ouvrage-perrousseaux_4kd262gul963.html&amp;amp;ei=a2qaUPyeA8zJ0AWTuIBo&amp;amp;usg=AFQjCNHTBxoRhkz_blvdiieipO2aKwgNmQ&amp;amp;sig2=2EEx_g_E2KITmKdRn-4bmA&quot;&gt;&lt;strong&gt;Typo &amp;amp; web&lt;/strong&gt;&lt;/a&gt;. Je vous le recommande chaudement – et il fera peut-être l’objet d’un article similaire dans le futur.&lt;/p&gt;
</description>
					<pubDate>Wed, 07 Nov 2012 19:00:55 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/lecture-webgrids/</guid>
					<frDate>7 novembre 2012</frDate>
				</item>
				<item>
					<title>expérience: inherit;</title>
					<link>https://www.ffoodd.fr/css-experienceinherit/</link>
					<description>&lt;p&gt;Ceci n’est pas un article faisant l’éloge d’IE — ni un énième pamphlet dénonçant la huitième plaie d’Égypte — mais il illustre ce proverbe : &lt;strong&gt;« Il n’y a pas de mauvais outils ; que des mauvais ouvriers. »&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;la-petite-histoire&quot; tabindex=&quot;-1&quot;&gt;La petite histoire&lt;/h2&gt;
&lt;p&gt;Mon cher stagiaire — comme tout le monde — pensait être un expert en recherche sur Google. Sa page ne s’affiche pas correctement sur IE uniquement, donc il cherche sur Google « Problème affichage Internet Explorer ». Logique ! C’est ainsi qu’un monde nouveau s’ouvre à lui : les hacks css. Adepte du Nutella, il m’en tartine donc une couche conséquente pour obtenir un affichage décent. Et Dieu sait que ça prend du temps…&lt;/p&gt;
&lt;p&gt;L’affichage sur Chrome et Firefox était correct, aussi à aucun moment il n’a douté de ces deux-là. Or un bref coup d’œil sur son code source valait toutes les lectures foireuses sur comment hacker Internet Explorer : une balise &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; ouverte &lt;strong&gt;avant&lt;/strong&gt; le &lt;code&gt;doctype&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;C’est alors que, comme Père Castor, j’ai raconté une histoire :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Il y a fort, fort longtemps, de nombreux grouillots du web se plaignaient du vieux roi Internet Explorer. Si souvent qu’ils décidèrent d’ignorer le vieux roi, qui faisait rien que les embêter. C’est alors qu’une bande de chevaliers errants ont arrêté d’errer : Chrome, Firefox, Opéra, Safari pour ne citer qu’eux. Ils ont dit : “ Ce roi déchu qui vous déçoit n’est pas assez bien pour vous. Viendez et nous vous guideront vers un royaume sans bug d’affichage. ” Alors les grouillots les ont suivis et ont commencé, lentement mais sûrement, à oublier le vieux roi.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Attention, péripétie :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Puis un jour, un péquin plus curieux que la moyenne a demandé aux preux chevaliers quel était leur secret pour un univers dénué d’erreur d’interprétation. Leur réponse fut éloquente : “ Nous savons votre ignorance, et avons décidé de ne pas vous éduquer afin que jamais vous ne sachiez vous plaindre. ”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Une pléthore d’écrits plaintifs et acerbes sur ce bon vieil IE ont été publiés. La plupart étaient justifiés. &lt;strong&gt;Étaient.&lt;/strong&gt; Chaque problème a sa solution, et ces plaintes ont servis d’excuses à certains pour se résigner et arrêter de chercher la solution. Combien de fois ai-je pu dire et entendre « C’est la faute d’IE ». Et pourtant, ce n’est pas un mauvais bougre : &lt;strong&gt;il est aujourd’hui le seul navigateur à vous signaler que votre code source est absurde&lt;/strong&gt;. Si ce stagiaire n’avait pas eu la présence d’esprit — et l’ordre intimé — de vérifier sur IE, il n’aurait jamais su l’abomination qu’il avait engendrée.&lt;/p&gt;
&lt;h2 id=&quot;un-heritage-a-transmettre&quot; tabindex=&quot;-1&quot;&gt;Un héritage à transmettre&lt;/h2&gt;
&lt;p&gt;J’estime avoir été bien éduqué grâce à des communautés comme &lt;a href=&quot;https://www.alsacreations.com/&quot;&gt;Alsacréations&lt;/a&gt;, &lt;a href=&quot;https://openweb.eu.org/&quot;&gt;Openweb&lt;/a&gt; ou &lt;a href=&quot;https://www.alistapart.com/&quot;&gt;A List Apart&lt;/a&gt;, qui ne jurent que par les standards et la qualité web. Ce que je viens de vivre avec ce stagiaire m’a furieusement rappelé la tempête qui a balayé le monde du web ces derniers mois, lorsque Firefox et Opéra annoncèrent avec une mine dépitée le support du préfixe vendeur &lt;code&gt;-webkit-&lt;/code&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.hteumeuleu.fr/tous-les-navigateurs-veulent-implementer-le-prefixe-webkit/&quot;&gt;Tous les navigateurs veulent implémenter le préfixe &lt;code&gt;-webkit-&lt;/code&gt;&lt;/a&gt; chez &lt;a href=&quot;https://twitter.com/HTeuMeuLeu&quot;&gt;@HTeuMeuLeu&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.glazman.org/weblog/dotclear/index.php?post/2012/02/09/CALL-FOR-ACTION:-THE-OPEN-WEB-NEEDS-YOU-NOW&quot;&gt;Call for action: the open web needs you &lt;strong&gt;now&lt;/strong&gt;&lt;/a&gt; par &lt;a href=&quot;https://twitter.com/glazou&quot;&gt;Daniel Glazman&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.alsacreations.com/actu/lire/1394-web-ouvert-css-webkit.html&quot;&gt;Bonnes pratiques CSS : le Web ouvert a besoin de vous&lt;/a&gt; par &lt;a href=&quot;https://twitter.com/fvsch&quot;&gt;fvsch&lt;/a&gt; sur Alsacréations ;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://lea.verou.me/2012/02/vendor-prefixes-the-css-wg-and-me/&quot;&gt;Vendor prefixes, the CSS WG and me&lt;/a&gt; par &lt;a href=&quot;https://twitter.com/LeaVerou&quot;&gt;Lea Verou&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La même erreur semble se répéter, simplement parce que les nouveaux arrivants — dont je fais partie — n’ont pas appris leur leçon d’histoire. Nous devons continuer à apprendre et enseigner : les bonnes pratiques ne vont pas de soi, elles s’apprennent et se découvrent au détour d’un blog. Rédiger un code source valide et réaliser une intégration de qualité en font partie et ne sont que les premières étapes.&lt;/p&gt;
&lt;p&gt;Je pratique l’&lt;strong&gt;amélioration perpétuelle&lt;/strong&gt; —pas progressive, perpétuelle.&lt;/p&gt;
</description>
					<pubDate>Wed, 18 Jul 2012 17:32:46 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/css-experienceinherit/</guid>
					<frDate>18 juillet 2012</frDate>
				</item>
				<item>
					<title>Les sprites en réserve</title>
					<link>https://www.ffoodd.fr/les-sprites-negatifs/</link>
					<description>&lt;p&gt;L’utilisation des sprites est connue de – presque – tous. Et dans le cas ou vous feriez partie du presque, voici un &lt;a href=&quot;https://www.alsacreations.com/tuto/lire/1068-sprites-css-background-position.html&quot;&gt;très bon article&lt;/a&gt; en français sur le sujet. Ma réflexion aujourd’hui ne portera donc pas sur l’intérêt des sprites, mais sur une façon de pousser plus loin &lt;strong&gt;la quête du moindre octet&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;la-genese&quot; tabindex=&quot;-1&quot;&gt;La Genèse&lt;/h2&gt;
&lt;p&gt;Ce jour-là, je me suis heurté au problème suivant : une vaste iconographie en aplat coloré, dont chaque élément disposait de trois variations colorées. Pour des questions de &lt;strong&gt;performances&lt;/strong&gt;, il était nécessaire d’utiliser un sprite ; et la ou ça se complique, c’est qu’il était également question d’&lt;strong&gt;accessibilité&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Mon premier écueil : la &lt;strong&gt;performance&lt;/strong&gt;. Afin d’intégrer les variations colorées, mon premier sprite contenait trois fois chaque icône. Pas très efficace…&lt;/p&gt;
&lt;h2 id=&quot;et-la-lumiere-fut&quot; tabindex=&quot;-1&quot;&gt;Et la lumière fut&lt;/h2&gt;
&lt;p&gt;C’est alors que j’ai réalisé : ces icônes étaient systématiquement sur un fond blanc. &lt;strong&gt;Eurêka.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En précisant un peu mes recherches, je suis tombé sur “&lt;a href=&quot;https://coding.smashingmagazine.com/2010/10/31/transparent-css-sprites/&quot;&gt;Transparent CSS Sprites&lt;/a&gt;” par Trevor Morris. L’idée est simple : puisque la seule variation est la couleur de l’icône elle-même, il suffit de créer ce sprite en réservant la forme des icônes, ou plus simplement : en négatif. Voila un exemple plus concret :&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://www.ffoodd.fr/images/2012/06/sprite.png&quot; alt=&quot;Le-super-sprite-de-la-mort-qui-tue&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;figcaption&gt;Alors, heureux ?&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Tout est alors plus simple. &lt;strong&gt;Survolez cette image&lt;/strong&gt; afin de vous en rendre compte, et observez-la dans votre outil de dev ou dans un nouvel onglet. Il suffit d’appliquer un &lt;strong&gt;background-color&lt;/strong&gt; à cette image et de le changer au &lt;strong&gt;:hover&lt;/strong&gt; afin d’obtenir le même résultat qu’un déplacement du sprite. Le code – allégé en matière grasse :&lt;/p&gt;
&lt;p&gt;img {
background: #269;
transition: all .3s linear;
}
img:hover {
background: #045175;
}&lt;/p&gt;
&lt;p&gt;Cette solution présente de multiples avantages :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;une image en deux couleurs est &lt;strong&gt;plus légère&lt;/strong&gt;. On peut l’optimiser en png-8 et 2 couleurs, voire en .gif. ( Attention cependant aux transparences relatives ).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;la simplicité&lt;/strong&gt; des interactions : background suffit. Une seule et même position pour chaque pictogramme !&lt;/li&gt;
&lt;li&gt;chaque icône n’est présente qu’&lt;strong&gt;une seule fois&lt;/strong&gt; !&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Performance :&lt;/p&gt;
&lt;p&gt;Mon second écueil : l’&lt;strong&gt;accessibilité&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;qui-dit-sprite-dit-sprite&quot; tabindex=&quot;-1&quot;&gt;Qui dit sprite dit sprite&lt;/h2&gt;
&lt;p&gt;Effectivement, il reste nécessaire de &lt;strong&gt;“recadrer”&lt;/strong&gt; ce sprite. Usuellement, on le fait via css en appelant le sprite dans une background-image. Le hic : sans texte d’accompagnement, ce n’est vraiment, vraiment pas accessible. La seule solution : &lt;strong&gt;une balise &amp;lt; img / &amp;gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;On peut le faire de façon très simple : un parent conteneur aux dimensions fixes et un overflow hidden. Il ne reste plus qu’à déplacer l’image au sein de ce parent grâce à d’une position relative :&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://www.ffoodd.fr/images/2012/06/sprite.png&quot; alt=&quot;Et voila !&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;figcaption&gt;Le-super-sprite-de-la-mort-qui-tue&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;Rien de plus simple !&lt;/strong&gt;&lt;br /&gt;
Accessibilité :&lt;/p&gt;
&lt;p&gt;Pour conclure, la solution qui émerge est :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;utiliser un parent conteneur auquel on confère des dimensions et un overflow:hidden&lt;/li&gt;
&lt;li&gt;appeler le sprite dans une balise &amp;lt; img / &amp;gt;, au sein de ce conteneur&lt;/li&gt;
&lt;li&gt;lui attribuer une classe pour définir l’icône précise – à laquelle correspondra une position.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cette technique repose sur certains pré-requis :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;des pictogrammes en aplats ou en dégradés – gérables avec background-color et background-image ;&lt;/li&gt;
&lt;li&gt;un contexte visuel uniforme – ce superbe bleu uni dans mon exemple ;&lt;/li&gt;
&lt;li&gt;la possibilité d’ajouter un conteneur pour gérer l’overflow et le positionnement relatif.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;À titre personnel, je n’ai utilisé cette technique que sur un projet, particulièrement contraignant en terme de performances et d’accessibilité – mais je compte l’étendre à d’autres projets. Correctement utilisée, elle peut permettre une &lt;strong&gt;optimisation massive d’une iconographie riche&lt;/strong&gt; – mais simple.&lt;/p&gt;
</description>
					<pubDate>Thu, 21 Jun 2012 12:48:38 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/les-sprites-negatifs/</guid>
					<frDate>21 juin 2012</frDate>
				</item>
				<item>
					<title>Vitesse &amp; Précipitation</title>
					<link>https://www.ffoodd.fr/vitesse-precipitation/</link>
					<description>&lt;p&gt;Les transitions représentent une formidable avancée en matière de CSS, dans le but de s’affranchir du javascript pour les interactions simples. Je ne vais pas vous faire l’offense de vous présenter les transitions CSS, mais avant d’évoquer le sujet principal, j’aimerais faire une piqûre de rappel sur les origines des transitions.&lt;/p&gt;
&lt;h2 id=&quot;au-commencement&quot; tabindex=&quot;-1&quot;&gt;Au commencement&lt;/h2&gt;
&lt;p&gt;Dans une époque ( pas si ) reculée, javascript était indispensable dès lors qu’on envisageait une interaction. Dan Cederholm s’en souvient dans son livre « &lt;a href=&quot;https://www.abookapart.com/products/css3-for-web-designers&quot;&gt;CSS3 FOR WEBDESIGNERS&lt;/a&gt; » disponible en Français &lt;a href=&quot;https://www.eyrolles.com/Informatique/Livre/css3-pour-les-web-designers-9782212129878&quot;&gt;aux éditions Eyrolles&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It was 1997 and I was sitting in a terribly run-down apartment in beautiful Allston, Massachusetts. A typical late night of viewing source and teaching myself HTML followed a day of packing CDs at a local record label for peanuts (hence the run-down apartment). I’m sure you can relate.&lt;/p&gt;
&lt;p&gt;One triumphant night, I pumped my fist in sweet victory. I’d just successfully coded my first JavaScript image rollover. Remember those?&lt;/p&gt;
&lt;p&gt;I still remember the amazement of seeing a crudely designed button graphic I’d cobbled together “swap” to a different one when hovered over by the mouse. I barely had a clue as to what I was doing at the time, but making something on the page successfully change, dynamically, was, well…magical.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Le :hover a été une première bénédiction – malgré ses différends avec IE7 – et on a enfin pu se passer de javascript pour les roll-over. Les transitions constituent une nouvelle étape dans l’évolution des interactions, mais comme toute avancée il faut d’abord essuyer les plâtres.&lt;/p&gt;
&lt;h2 id=&quot;sans-transition-le-probleme&quot; tabindex=&quot;-1&quot;&gt;Sans transition, le problème :&lt;/h2&gt;
&lt;p&gt;Si l’utilisation des transitions est claire et limpide, leur présence au sein du CSS implique une nouvelle dimension : &lt;strong&gt;le temps&lt;/strong&gt;. Hors vous n’êtes pas sans savoir qu’une page web, ça met du temps à se charger. Pas beaucoup certes, mais suffisamment pour que &lt;strong&gt;le chargement soit perceptible à l’œil nu&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Hors comme le décrit Chris Coyier dans &lt;a href=&quot;https://css-tricks.com/transitions-only-after-page-load/&quot;&gt;son article&lt;/a&gt;, lorsqu’une page se charge elle se dessine progressivement. Certains éléments sont déplacés via CSS – à l’aide de position, float ou margin pour ne citer qu’eux. Concrètement, votre navigateur place d’abord ces éléments dans le flux, puis les déplace à l’endroit spécifié en CSS ; c’est la que le bas blesse, puisque si ces éléments sont dotés de transition, &lt;strong&gt;on les voit se positionner&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Ces pauvres navigateurs n’y peuvent rien. Il leur faudrait prioriser l’application des CSS par couches : grille de positionnement, aspect visuel, puis dimension temporelle… Pas besoin d’être expert pour comprendre la difficulté. Mais en l’état, il y a &lt;strong&gt;confusion entre vitesse et précipitation&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;temporisation&quot; tabindex=&quot;-1&quot;&gt;Temporisation&lt;/h2&gt;
&lt;p&gt;L’article « &lt;a href=&quot;https://css-tricks.com/transitions-only-after-page-load/&quot;&gt;Transitions only after page load&lt;/a&gt; » sur Css-Tricks inclut la solution proposée par &lt;strong&gt;Chris Coyier&lt;/strong&gt;, très simple : une classe preload annule les transitions, et lorsque la page est chargée on la retire via Jquery. C’est extrêmement futé ! Mais elle implique de charger Jquery et ça, c’est dommage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;J’ai donc entrepris d’effectuer la même action, mais en javascript pur&lt;/strong&gt;. Quelques interférences font varier le fonctionnement, comme par exemple l’impossibilité ( à ma connaissance ) de cibler une valeur dans un attribut. Or mon attribut « class » m’est utile : j’ai donc préféré utiliser un id. La syntaxe javascript, insérée juste avant la fermeture du body, est la suivante :&lt;/p&gt;
&lt;p&gt;// &amp;lt;![CDATA[
function init() {
« use strict »;
document.getElementById(« preload »).removeAttribute(« id »);
}
window.onload = init;
// ]]&amp;gt;&lt;/p&gt;
&lt;p&gt;Et c’est tout ! Pas besoin de librairie ou framework : juste 5 lignes à la fin du corps du document, et &lt;strong&gt;le tour est joué&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;contrepartie&quot; tabindex=&quot;-1&quot;&gt;Contrepartie&lt;/h2&gt;
&lt;p&gt;J’ai remarqué un &lt;strong&gt;problème de compatibilité avec IE8 et Safari&lt;/strong&gt;, tandis que les autres navigateurs appliquent parfaitement ce code. Ce n’est qu’un demi-problème puisque de toute façon, IE8 ne comprend pas les transitions. C’est un peu plus gênant pour Safari, mais je n’ai pas encore trouvé l’astuce : si quelqu’un en connaît une ou en trouve une, je suis preneur !!&lt;/p&gt;
</description>
					<pubDate>Fri, 18 May 2012 17:02:06 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/vitesse-precipitation/</guid>
					<frDate>18 mai 2012</frDate>
				</item>
				<item>
					<title>La schizophrénie sémantique</title>
					<link>https://www.ffoodd.fr/la-schizophrenie-semantique-dun-logo/</link>
					<description>&lt;p&gt;Comme beaucoup d’intégrateurs, je me suis heurté à la &lt;strong&gt;schizophrénie sémantique&lt;/strong&gt; du logo. Vous rêvez de l’inclure dans un h1 plein de bon texte pour le SEO, mais m**d* ! Votre logo est une image.&lt;/p&gt;
&lt;h2 id=&quot;que-dois-je-faire-docteur&quot; tabindex=&quot;-1&quot;&gt;Que dois-je faire, Docteur ?&lt;/h2&gt;
&lt;p&gt;De nombreux remèdes ont vu le jour pour combattre ce symptôme, à tel point que l’excellent Chris Coyier en a érigé un &lt;a href=&quot;https://css-tricks.com/examples/ImageReplacement/&quot;&gt;mémorial&lt;/a&gt;.&lt;br /&gt;
De mon côté, j’ai beaucoup apprécié l’élégance et la légèreté de la &lt;a href=&quot;https://nicolasgallagher.com/another-css-image-replacement-technique/&quot;&gt;proposition&lt;/a&gt; de Nicolas Gallagher, notamment utilisée dans le fameux &lt;a href=&quot;https://html5boilerplate.com/&quot;&gt;HTML5 Boilerplate&lt;/a&gt;. Et c’est cette option que j’utilise et recommande.&lt;/p&gt;
&lt;h2 id=&quot;mais-ca-demange-encore&quot; tabindex=&quot;-1&quot;&gt;Mais ça démange encore !&lt;/h2&gt;
&lt;p&gt;Il reste un symptôme gênant : l’image elle-même. On se retrouve avec un fichier à charger – et donc une &lt;strong&gt;requête HTTP supplémentaire&lt;/strong&gt; – et qui nécessitera de &lt;strong&gt;refaire&lt;/strong&gt; l’image en cas de modification. Ennuyeux. Mais deux techniques supplémentaires viennent à notre rescousse : &lt;strong&gt;@font-face&lt;/strong&gt; et &lt;strong&gt;base64&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;font-face&quot; tabindex=&quot;-1&quot;&gt;@font-face&lt;/h2&gt;
&lt;p&gt;Une astuce relativement simple a vu le jour récemment, qui permet d’incorporer des images dans un seul fichier et pouvoir les styler via CSS : les icon-fonts. Cette technique est plébiscitée en ce moment, et j’ai donc eu tout le loisir de me documenter :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/examples/IconFont/&quot;&gt;Icon Fonts are Awesome&lt;/a&gt; de Chris Coyier&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://trentwalton.com/2012/05/04/icon-fonts/&quot;&gt;Icon Fonts&lt;/a&gt; de Trent Walton&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://24ways.org/2011/displaying-icons-with-fonts-and-data-attributes&quot;&gt;Displaying Icons with Fonts and Data- Attributes&lt;/a&gt; de John Hicks&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.goetter.fr/post/18017100624/icones-font-face-et-accessibilite&quot;&gt;ICÔNES “@FONT-FACE” ET ACCESSIBILITÉ&lt;/a&gt; par Raphaël Goetter&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Certains points sont abordés, notamment pourquoi le SVG ne suffit pas actuellement ( indice : IE8 ) mais aussi la question de l’accessibilité. J’ai d’abord été attiré par l’implémentation de Trent Walton de son logo. Mais dans une correction de son billet, Raphaël Goetter a ajouté une proposition de Keyamoon pour son outil &lt;a href=&quot;https://keyamoon.com/icomoon/#toHome&quot;&gt;IcoMoon&lt;/a&gt;. Cette solution est particulièrement propre car il s’agit simplement d’ajouter &lt;strong&gt;un attribut&lt;/strong&gt; à la balise visée. J’adopte !&lt;/p&gt;
&lt;p&gt;À noter cependant : pour inclure une image dans une typographie, il est nécessaire de disposer d’un outil efficace – et ça n’est pas si simple. Il existe un &lt;a href=&quot;https://www.webdesignerdepot.com/2012/01/how-to-make-your-own-icon-webfont/&quot;&gt;tutoriel intéressant&lt;/a&gt; pour y parvenir, ou encore le site &lt;a href=&quot;https://fontstruct.com/&quot;&gt;Fontstruct&lt;/a&gt; qui vous permet de dessiner directement vos caractères.&lt;/p&gt;
&lt;p&gt;Je tiens à remercier &lt;a href=&quot;https://damien-collot.com/&quot;&gt;Damien Collot&lt;/a&gt; pour l’aide qu’il m’a apporté sur le sujet.&lt;/p&gt;
&lt;h2 id=&quot;base64&quot; tabindex=&quot;-1&quot;&gt;Base64&lt;/h2&gt;
&lt;p&gt;Au fil de mes pérégrinations, j’ai un jour remarqué cette option sur le générateur de kits @font-face de &lt;a href=&quot;https://www.fontsquirrel.com/&quot;&gt;font-squirrel&lt;/a&gt; : encoder en Base64. Quelques rapides recherches – et cet &lt;a href=&quot;https://www.alsacreations.com/article/lire/1439-data-uri-schema.html&quot;&gt;excellent article sur Alsacréations&lt;/a&gt; – m’ont appris qu’encoder un petit fichier en Base64 permettait d’économiser une requête HTTP : Eurêka !&lt;/p&gt;
&lt;h2 id=&quot;resultat&quot; tabindex=&quot;-1&quot;&gt;Résultat&lt;/h2&gt;
&lt;p&gt;Ne cherchez plus, c’est la technique que j’ai utilisée sur le logo de ce site. En HTML cela donne simplement :&lt;/p&gt;
&lt;pre class=&quot;language-markup&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;data-icon&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;a&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Gaël Poupard&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;et en css :&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;
&lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@font-face&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;font-family&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; ’logo’&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token url&quot;&gt;&lt;span class=&quot;token function&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;’font/logo.eot’&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;local&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;’?’&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;font/woff&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;charset=utf-8&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;base64&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;...&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;font-weight&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; normal&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;font-style&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; normal&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token selector&quot;&gt;h1 a&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;font&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0/0 a&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;text-decoration&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; none&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token selector&quot;&gt;h1 a:before&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;attr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;data-icon&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;font&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 200px/250px ’logo’&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;text-decoration&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; none&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et c’est tout ! Le résultat est particulièrement propre et simple. Il nécessite un travail préparatoire assez long, mais c’est une mécanique intéressante à connaître.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot; tabindex=&quot;-1&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Trois techniques relativement avancées permettent d’obtenir cet excellent résultat. Le logo est :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;encodé en &lt;strong&gt;Base64&lt;/strong&gt; : pas de requête HTTP&lt;/li&gt;
&lt;li&gt;appelé via &lt;strong&gt;@font-face&lt;/strong&gt; : maniable en CSS&lt;/li&gt;
&lt;li&gt;inclus dans un &lt;strong&gt;h1&lt;/strong&gt; : sémantiquement intéressant&lt;/li&gt;
&lt;li&gt;dispose d’un texte de remplacement &lt;strong&gt;pertinent&lt;/strong&gt; : optimisé pour le référencement&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Le principal inconvénient est le &lt;strong&gt;support d’IE8&lt;/strong&gt; : il ne reconnaît que les fichiers .eot dans @font-face, ce qui nous force à ajouter un fichier .eot difficile à convertir en Base64. Mais si vous pouvez m’y aider, je suis tout ouï !&lt;/p&gt;
</description>
					<pubDate>Fri, 11 May 2012 19:19:25 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/la-schizophrenie-semantique-dun-logo/</guid>
					<frDate>11 mai 2012</frDate>
				</item>
				<item>
					<title>Que se passerait-il ?</title>
					<link>https://www.ffoodd.fr/que-se-passerait-il/</link>
					<description>&lt;p&gt;&lt;strong&gt;Qu’adviendrait-il du web si chaque personne impliquée dans la création de sites internet demandait à tous ses contacts de mettre à jour son navigateur ?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/#!/LeaVerou&quot; title=&quot;Léa Verou sur Twitter&quot;&gt;Léa Verou&lt;/a&gt; a publié un message intéréssant &lt;a href=&quot;https://tweeplus.com/?#Yesterday%2C+I+saw+that+a+non-techie+friend+had+IE8%2E+I+explained+to+her+how+we+developers+struggle+with+IE%2C+especially+%3C+9%2E+I+showed+her+examples+of+CSS3+websites+and+how+they+display+on+Chrome%2C+Firefox+and+IE8%2E+She+was+very+surprised+and+said+she+thought+they+were+all+the+same+and+will+always+update+ASAP+from+now+on%2E+The+moral+is%3A+Developers%2C+don%E2%80%99t+think+that+people+don%E2%80%99t+care%2E+People+naturally+don%27t+want+to+cause+trouble+to+others%2E+Explain+to+them+what+we+go+through%2E+One+person+at+a+time%2E+We+can+do+it&quot;&gt;ici&lt;/a&gt;, il y a déjà quelques mois. Il reflète bien le dédain frappant les « techies » à l’approche d’un client qui navigue sur IE8 : j’ai moi-même souvent pesté contre ces idiots incapables de mettre leur navigateur à jour gens. Le message de Léa Verou m’a appris qu’ils ne pêchent que par innocence : la plupart des gens sont certainement prêts à faire leur MAJ si on leur apprend qu’ils le peuvent.&lt;/p&gt;
&lt;p&gt;Imaginez la conquête inouïe lorsque chaque personne – graphiste, intégrateur, développeur, référenceur, chef de projet, stagiaire, administrateur réseaux, consultant, patron… –  aura demandé à travers l’ensemble de ses réseaux sociaux – mails, facebook, twitter, viadéo… – à toutes ses connaissances de mettre son navigateur favori à jour ?&lt;/p&gt;
&lt;p&gt;Personnellement, j’ai fait le calcul : je peux faire cette demande à &lt;strong&gt;493&lt;/strong&gt; personnes distinctes. Si chacune des neuf personnes de mon agence atteint ce même chiffre; nous serons déjà à 4437 personnes.&lt;/p&gt;
&lt;p&gt;Ne pensez-vous pas que ça puisse suffire à changer les statistiques ?&lt;/p&gt;
</description>
					<pubDate>Thu, 01 Sep 2011 18:21:45 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/que-se-passerait-il/</guid>
					<frDate>1 septembre 2011</frDate>
				</item>
				<item>
					<title>Sémantique de l’interaction</title>
					<link>https://www.ffoodd.fr/semantique-de-l-interaction/</link>
					<description>&lt;p&gt;Saviez-vous que le langage entre êtres humains dépend à 80% des expressions physiques – même infimes ? &lt;strong&gt;Il en va de même pour les sites internet.&lt;/strong&gt; Un internaute ressent – et comprend – un site grâce à son comportement : mouvements, animations, changements de couleurs, etc…&lt;/p&gt;
&lt;h2 id=&quot;les-sites-ont-des-sentiments-eux-aussi&quot; tabindex=&quot;-1&quot;&gt;Les sites ont des sentiments, eux aussi&lt;/h2&gt;
&lt;p&gt;Et ils s’expriment afin de vous les transmettre : un décalage léger au survol, un changement subtil de couleur et une sensation de souffle vous parvient. Le site respire, s’agite, réagit. Il peut être d’une douceur surprenante comme d’une agressivité détonante, et rien ne l’empêche d’être incohérent – voire complétement fou. Ces caractéristiques, qu’elles soient maîtrisées ou non, ont un impact sur l’utilisation du site : les sensations varient, et par conséquent le confort de navigation, l’impression donnée, l’affection éprouvée par l’internaute varient eux aussi.&lt;/p&gt;
&lt;p&gt;Mais soyez prudents : cela peut rendre votre site extrêmement attractif ou définitivement désagréable. Là encore, le même mécanisme opère – que l’on parle d’êtres humains ou de site : &lt;strong&gt;la première impression est déterminante&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;au-dela-de-la-technique&quot; tabindex=&quot;-1&quot;&gt;Au-delà de la technique&lt;/h2&gt;
&lt;p&gt;Il vous incombe de penser à cet aspect du site. D’après une ligne directrice ( le plus souvent décidée dans un brief créatif ), vous devez pouvoir déterminer ce qu’exprimera le site. &lt;strong&gt;Doit-il être sympathique, serein, énergique…?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Vous disposez alors de tout un panel de techniques css afin d’aboutir au résultat escompté, en veillant à ne pas produire de contresens. Vous pouvez vous pencher sur les transitions, les transformations, les animations ou encore les changements de couleurs pour arriver à vos fins. Les plus utiles seront malgré tout les pseudo-classes :hover et :focus.&lt;/p&gt;
&lt;h2 id=&quot;le-hover-pour-la-suggestion&quot; tabindex=&quot;-1&quot;&gt;Le :hover pour la suggestion&lt;/h2&gt;
&lt;p&gt;Prenons l’exemple d’un accordéon.&lt;/p&gt;
&lt;p&gt;Il est de bon ton d’indiquer visuellement l’existence de l’accordéon par une flèche vers le bas, ou encore un « + ». On ajoute en général au :hover un &lt;em&gt;curseur pointeur&lt;/em&gt;, qui suggère l’interaction potentielle avec cet élément.&lt;/p&gt;
&lt;p&gt;Ceci est le comportement classique : il induit pour l’internaute que s’il clique à cet endroit, quelque chose se passera. &lt;strong&gt;Pourquoi ne pas pousser un peu plus loin cette suggestion ?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Suspense !! Que va-t’il se passer si je clique ?&lt;/p&gt;
&lt;p&gt;Dans cet exemple, on suggère effectivement l’interaction mais on dévoile également l’étape suivante. Dévoiler pour attirer l’action : il s’agit du &lt;strong&gt;mécanisme de la séduction&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;le-focus-pour-la-signalisation&quot; tabindex=&quot;-1&quot;&gt;Le :focus pour la signalisation&lt;/h2&gt;
&lt;p&gt;L’intérêt majeur du :focus concerne les éléments de formulaires : il permet d’indiquer quel est le champ sélectionné ( à savoir : celui qui se remplira si on pianote sur son clavier, même debout ). C’est peut-être un détail pour vous, mais c’est un facteur déterminant lors de la saisie d’un formulaire. Et sémantiquement parlant, cela signifie que &lt;strong&gt;le site est attentif à vous&lt;/strong&gt; et à ce que vous souhaitez.&lt;/p&gt;
&lt;p&gt;Le comportement basique des navigateurs basés sur Webkit est d’appliquer une ombre portée lors du :focus. Il s’agit d’un minimum syndical – dont le seul but est la signalisation de l’état – et n’a aucune prétention de communication. Malheureusement une partie sémantique est comprise dans les css, dont le choix des intitulés des pseudo-classes. Focus signifie, dans la langue de Shakespeare, concentration, mise au point. Hors appliquer une ombre portée est l’exacte inverse : cela rend la forme diffuse.&lt;/p&gt;
&lt;p&gt;Voila ce que donnerait le comportement inverse :&lt;/p&gt;
&lt;p&gt;une ombre portée qui s’intensifie au :hover, et disparait au :focus. Saupoudrez-y un peu de transition, et ce champ qui réagit à votre passage semble réellement faire une mise au point lorsque vous le sélectionnez. L’ombre est aspirée de manière fluide, et ce champ grossier devient organique, vivant. &lt;strong&gt;Il vous écoute&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;toujours-plus-loin&quot; tabindex=&quot;-1&quot;&gt;Toujours plus loin&lt;/h2&gt;
&lt;p&gt;Au-delà de la métaphore du vivant, ces interactions basiques définissent la personnalité d’un site : il convient alors de maîtriser ces aspects afin d’améliorer l’expérience utilisateur en véhiculant des sentiments. C’est que je tente humblement de faire sur ce site, en amenant un peu de fraîcheur et de surprise sur chaque page.&lt;/p&gt;
&lt;p&gt;Cette problématique me donne matière à réflexion tous les jours, mais par bonheur certains grands designers m’inspirent régulièrement. Voici deux articles et un livre qui m’ont particulièrement intéressé sur le sujet :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://desandro.github.com/motion-emotion/&quot;&gt;&lt;strong&gt;Motion/Emotion&lt;/strong&gt; par David Desandro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daverupert.com/2011/07/interaction/&quot;&gt;&lt;strong&gt;INTERACTION&lt;/strong&gt; par Dave Rupert&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.abookapart.com/products/designing-for-emotion&quot;&gt;&lt;strong&gt;Designing for emotion&lt;/strong&gt; par Aaron Walter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
					<pubDate>Sat, 05 Mar 2011 12:52:36 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/semantique-de-l-interaction/</guid>
					<frDate>5 mars 2011</frDate>
				</item>
				<item>
					<title>Dessine-moi un bouton</title>
					<link>https://www.ffoodd.fr/swirl-in-style/</link>
					<description>&lt;p&gt;Les boutons sont des éléments capitaux du graphisme web : ils appellent, suggèrent et provoquent &lt;strong&gt;l’action&lt;/strong&gt;. Autrefois, les liens hypertextes étaient l’emblème des interactions : aujourd’hui, ce sont les boutons.&lt;/p&gt;
&lt;h2 id=&quot;une-espece-animale&quot; tabindex=&quot;-1&quot;&gt;Une espèce animale&lt;/h2&gt;
&lt;p&gt;Il en existe de toute sorte : des grands, des petits, des noirs, des jaunes, des visuels et des textuels… Chaque bouton que vous pouvez imaginer existe certainement déjà quelque part.&lt;/p&gt;
&lt;p&gt;Pour caractériser un bouton, on dispose de multiples critères : sa palette de couleur, sa forme, son volume, sa réaction au survol, son contenu, sa cible… Et comme nous, il a des mensurations : sa taille et son poids. On pourrait s’amuser à rédiger un &lt;strong&gt;bestiaire des boutons&lt;/strong&gt;, les classer par espèces et déterminer si certaines sont en voie d’extinction ou d’expansion – mais ce sera pour un autre jour.&lt;/p&gt;
&lt;h2 id=&quot;l-importance-de-l-environnement&quot; tabindex=&quot;-1&quot;&gt;L’importance de l’environnement&lt;/h2&gt;
&lt;p&gt;L’impact – et donc l’intérêt – d’un bouton dépend autant de lui que de son environnement. Ce dernier détermine l’espace disponible, la liberté de mouvements – mais c’est également de lui dont dépend le caractère du bouton : s’il est discret ou exubérant, calme ou agité, agressif ou doux comme un agneau…&lt;/p&gt;
&lt;h2 id=&quot;le-sens-de-la-vie&quot; tabindex=&quot;-1&quot;&gt;Le sens de la vie&lt;/h2&gt;
&lt;p&gt;Pour certains, ce sera 42 ; pour tous les autres, il faudra se définir un rôle afin de donner un sens à sa vie. Les boutons ont également une raison d’être là – et c’est vous, son créateur, qui devez la lui fournir. Quelle est sa raison d’être ?&lt;/p&gt;
&lt;p&gt;Ne vous y trompez pas : pour ce bouton qui vient de naître, vous êtes Dieu le père. Vous venez de le créer, et vous allez décider de qui il sera : un séducteur, un commercial, un évangéliste, un élu, un fonctionnaire…&lt;/p&gt;
&lt;h2 id=&quot;la-guerre-des-boutons&quot; tabindex=&quot;-1&quot;&gt;La guerre des boutons&lt;/h2&gt;
&lt;p&gt;Un bouton doit être une solution, pas un problème : s’il n’est pas utilisé avec modération il perd sa valeur d’appel à action. Car s’il y a de l’action partout, vous faites un feu d’artifice, pas un site web.&lt;/p&gt;
&lt;p&gt;Un site internet est un véritable microcosme, et la plupart des lois de la nature y sont applicables. &lt;strong&gt;Y compris l’évolution.&lt;/strong&gt;&lt;/p&gt;
</description>
					<pubDate>Sun, 31 Oct 2010 19:54:49 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/swirl-in-style/</guid>
					<frDate>31 octobre 2010</frDate>
				</item>
				<item>
					<title>Dessine-moi un bouton</title>
					<link>https://www.ffoodd.fr/dessine-moi-un-bouton/</link>
					<description>&lt;p&gt;Les boutons sont des éléments capitaux du graphisme web : ils appellent, suggèrent et provoquent &lt;strong&gt;l’action&lt;/strong&gt;. Autrefois, les liens hypertextes étaient l’emblème des interactions : aujourd’hui, ce sont les boutons.&lt;/p&gt;
&lt;h2 id=&quot;une-espece-animale&quot; tabindex=&quot;-1&quot;&gt;Une espèce animale&lt;/h2&gt;
&lt;p&gt;Il en existe de toute sorte : des grands, des petits, des noirs, des jaunes, des visuels et des textuels… Chaque bouton que vous pouvez imaginer existe certainement déjà quelque part.&lt;/p&gt;
&lt;p&gt;Pour caractériser un bouton, on dispose de multiples critères : sa palette de couleur, sa forme, son volume, sa réaction au survol, son contenu, sa cible… Et comme nous, il a des mensurations : sa taille et son poids. On pourrait s’amuser à rédiger un &lt;strong&gt;bestiaire des boutons&lt;/strong&gt;, les classer par espèces et déterminer si certaines sont en voie d’extinction ou d’expansion – mais ce sera pour un autre jour.&lt;/p&gt;
&lt;h2 id=&quot;l-importance-de-l-environnement&quot; tabindex=&quot;-1&quot;&gt;L’importance de l’environnement&lt;/h2&gt;
&lt;p&gt;L’impact – et donc l’intérêt – d’un bouton dépend autant de lui que de son environnement. Ce dernier détermine l’espace disponible, la liberté de mouvements – mais c’est également de lui dont dépend le caractère du bouton : s’il est discret ou exubérant, calme ou agité, agressif ou doux comme un agneau…&lt;/p&gt;
&lt;h2 id=&quot;le-sens-de-la-vie&quot; tabindex=&quot;-1&quot;&gt;Le sens de la vie&lt;/h2&gt;
&lt;p&gt;Pour certains, ce sera 42 ; pour tous les autres, il faudra se définir un rôle afin de donner un sens à sa vie. Les boutons ont également une raison d’être là – et c’est vous, son créateur, qui devez la lui fournir. Quelle est sa raison d’être ?&lt;/p&gt;
&lt;p&gt;Ne vous y trompez pas : pour ce bouton qui vient de naître, vous êtes Dieu le père. Vous venez de le créer, et vous allez décider de qui il sera : un séducteur, un commercial, un évangéliste, un élu, un fonctionnaire…&lt;/p&gt;
&lt;h2 id=&quot;la-guerre-des-boutons&quot; tabindex=&quot;-1&quot;&gt;La guerre des boutons&lt;/h2&gt;
&lt;p&gt;Un bouton doit être une solution, pas un problème : s’il n’est pas utilisé avec modération il perd sa valeur d’appel à action. Car s’il y a de l’action partout, vous faites un feu d’artifice, pas un site web.&lt;/p&gt;
&lt;p&gt;Un site internet est un véritable microcosme, et la plupart des lois de la nature y sont applicables. &lt;strong&gt;Y compris l’évolution.&lt;/strong&gt;&lt;/p&gt;
</description>
					<pubDate>Sun, 31 Oct 2010 19:54:49 GMT</pubDate>
					<dc:creator>Gaël Poupard</dc:creator>
					<guid>https://www.ffoodd.fr/dessine-moi-un-bouton/</guid>
					<frDate>31 octobre 2010</frDate>
				</item>
	</channel>
</rss>
