Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.html 30KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501
  1. <!DOCTYPE html><!-- This is a valid HTML5 document. -->
  2. <!-- Screen readers, SEO, extensions and so on. -->
  3. <html lang="fr">
  4. <!-- Has to be within the first 1024 bytes, hence before the `title` element
  5. See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
  6. <meta charset="utf-8">
  7. <!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
  8. <!-- The viewport meta is quite crowded and we are responsible for that.
  9. See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
  10. <meta name="viewport" content="width=device-width,initial-scale=1">
  11. <!-- Required to make a valid HTML5 document. -->
  12. <title>
  13. Étiquette #accessibilité
  14. — David Larlet</title>
  15. <script>
  16. function toggleTheme(themeName) {
  17. document.documentElement.classList.toggle(
  18. 'forced-dark',
  19. themeName === 'dark'
  20. )
  21. document.documentElement.classList.toggle(
  22. 'forced-light',
  23. themeName === 'light'
  24. )
  25. }
  26. const selectedTheme = localStorage.getItem('theme')
  27. if (selectedTheme !== 'undefined') {
  28. toggleTheme(selectedTheme)
  29. }
  30. </script>
  31. <!-- Documented, feel free to shoot an email. -->
  32. <link rel="stylesheet" href="/static/david/css/style_2024-03-07.css">
  33. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  34. <link rel="preload"
  35. href="/static/david/css/fonts/century_supra_ot_a_regular.woff2"
  36. as="font"
  37. type="font/woff2"
  38. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  39. crossorigin>
  40. <link rel="preload"
  41. href="/static/david/css/fonts/century_supra_ot_a_bold.woff2"
  42. as="font"
  43. type="font/woff2"
  44. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  45. crossorigin>
  46. <link rel="preload"
  47. href="/static/david/css/fonts/century_supra_ot_a_italic.woff2"
  48. as="font"
  49. type="font/woff2"
  50. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  51. crossorigin>
  52. <link rel="preload"
  53. href="/static/david/css/fonts/century_supra_ot_b_regular.woff2"
  54. as="font"
  55. type="font/woff2"
  56. media="(prefers-color-scheme: dark)"
  57. crossorigin>
  58. <link rel="preload"
  59. href="/static/david/css/fonts/century_supra_ot_b_bold.woff2"
  60. as="font"
  61. type="font/woff2"
  62. media="(prefers-color-scheme: dark)"
  63. crossorigin>
  64. <link rel="preload"
  65. href="/static/david/css/fonts/century_supra_ot_b_italic.woff2"
  66. as="font"
  67. type="font/woff2"
  68. media="(prefers-color-scheme: dark)"
  69. crossorigin>
  70. <meta name="description" content="Publications relatives au tag #accessibilité">
  71. <!-- That good ol' feed, subscribe :). -->
  72. <link rel="alternate"
  73. type="application/atom+xml"
  74. title="Feed"
  75. href="/david/log/">
  76. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  77. <link rel="apple-touch-icon"
  78. sizes="180x180"
  79. href="/static/david/icons2/apple-touch-icon.png">
  80. <link rel="icon"
  81. type="image/png"
  82. sizes="32x32"
  83. href="/static/david/icons2/favicon-32x32.png">
  84. <link rel="icon"
  85. type="image/png"
  86. sizes="16x16"
  87. href="/static/david/icons2/favicon-16x16.png">
  88. <link rel="manifest" href="/static/david/icons2/site.webmanifest">
  89. <link rel="mask-icon"
  90. href="/static/david/icons2/safari-pinned-tab.svg"
  91. color="#07486c">
  92. <link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
  93. <meta name="msapplication-TileColor" content="#f7f7f7">
  94. <meta name="msapplication-config"
  95. content="/static/david/icons2/browserconfig.xml">
  96. <meta name="theme-color"
  97. content="#f7f7f7"
  98. media="(prefers-color-scheme: light)">
  99. <meta name="theme-color"
  100. content="#272727"
  101. media="(prefers-color-scheme: dark)">
  102. <!-- Is that even respected? Retrospectively? What a shAItshow…
  103. https://neil-clarke.com/block-the-bots-that-feed-ai-models-by-scraping-your-website/ -->
  104. <meta name="robots" content="noai, noimageai">
  105. <style type="text/css">
  106. details[open] summary {
  107. display: none;
  108. }
  109. </style>
  110. <body data-instant-intensity="viewport-all">
  111. <article>
  112. <header>
  113. <hgroup>
  114. <h1>#accessibilité</h1>
  115. <p>Publications relatives à cette étiquette</p>
  116. </hgroup>
  117. </header>
  118. <nav>
  119. <p>
  120. <a href="/david/" title="Aller à l’accueil">
  121. Accueil</a>
  122. <a rel="tags"
  123. href="/david/2024/#tags"
  124. title="Liste de toutes les étiquettes">
  125. Étiquettes</a>
  126. <a href="/david/recherche/" title="Aller à la page de recherche" rel="search" data-no-instant>Recherche</a>
  127. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  128. </p>
  129. </nav>
  130. <h2>
  131. <a href="/david/2024/02/10/" title="Lien permanent vers cet article">Validisme</a> <time datetime="2024-02-10">10 février 2024</time>
  132. </h2>
  133. <blockquote>
  134. <p>En informatique, y’a ce concept de «&nbsp;ça marche sur ma machine&nbsp;». C’est quand une personne qui utilise un logiciel, remonte un problème qu’elle rencontre et la personne qui fabrique le logiciel répond&nbsp;ça</p>
  135. <p>Évidemment, c’est frustrant de recevoir cette réponse, parce que ça ne fournit aucune solution, mais ça ressemble aussi très fort à «&nbsp;je ne vois pas le problème, donc ce problème n’existe&nbsp;pas&nbsp;»</p>
  136. <p>Un peu comme une personne blanche qui dirait que le racisme n’existe pas vu qu’elle ne le vit pas<br />
  137. Ou un homme avec le&nbsp;sexisme</p>
  138. <p>Et j’ai vécu plusieurs fois avec des grosses structures (administrations et entreprises privées) un truc qui ressemble à «&nbsp;ça marche sur leur machine&nbsp;»<br />
  139. Là, c’est une variante de dénégation qui dit «&nbsp;ça marche pour suffisamment d’autres personnes, donc on ne va pas s’intéresser à votre situation&nbsp;particulière&nbsp;»</p>
  140. <p>Et c’est frustrant quand, mauvaise pioche&#8239;! on est systématiquement dans la minorité&nbsp;statistique</p>
  141. <p><mark>Le validisme, ça parle aussi de comment des personnes sont systématiquement le&nbsp;1%</mark> de personnes qui voient mal l’écran pendant une présentation<br />
  142. ou le&nbsp;1% avec un fauteuil roulant dans la pièce
  143. etc.</p>
  144. <p>Certaines personnes passent 90% de leur vie à être dans le&nbsp;mauvaise-pioche-1%</p>
  145. <p><cite><em><a data-link-domain="eldritch.cafe" href="https://eldritch.cafe/@davidbruant/111872926260149351">Sapphire Rubyant sur&nbsp;masto</a></em></cite></p>
  146. </blockquote>
  147. <p>Se retrouver en invalidité temporaire permet de se rendre compte de choses par l’expérience. Et c’est parfois bien plus que de la double peine&nbsp;: je mets plus de temps pour faire ma correspondance métro faute d’infrastructures adaptées, ce qui me fait arriver en retard donc j’ai la place la moins appropriée, je dois travailler plus vite / efficacement pour rattraper le groupe ce qui me fait prendre davantage de risques, etc. Et je ne parle même pas de l’impact psychologique sur la situation&nbsp;: frustration, colère, dévaluation de soi, à quoi bon, honte, isolement, etc.</p>
  148. <p>C’est déplacé de parler de <em>mon</em> cas alors que de très nombreuses personnes vivent cela au quotidien. Toute leur vie. En supportant le regard des autres, avec une potentielle intersectionalité qui vient mettre les difficultés au&nbsp;carré…</p>
  149. <p>Ce que je voulais souligner avec cet exemple parmi d’autres, c’est qu’il n’y a qu’en expérimentant la situation que j’ai pu prendre conscience de cet effet domino. J’étais pourtant relativement sensibilisé aux problèmes d’accessibilité de manière isolée mais c’est vraiment leur enchainement qui m’a sauté aux yeux pendant cette&nbsp;période.</p>
  150. <p>Je m’imagine maintenant des suites de frustrations numériques du même ordre&nbsp;: il y a un souci bloquant sur le site que je voudrais solidairement faire remonter, je cherche à faire un report de <em>bug</em> sur l’outil dédié mais il y a de l’authentification qui m’affiche une erreur à laquelle je n’ai pas accès, je décide de passer par le formulaire de contact mais il y a un captcha illisible pour moi, je fais une demande sur les réseaux sociaux et on me redirige vers un <em>screencast</em> non sous-titré ou une aide en anglais, etc.</p>
  151. <p>L’accessibilité doit être pensée holistiquement (pour employer un gros mot), chaque situation impensée devenant une goutte de plus dans un verre déjà bien trop&nbsp;plein.</p>
  152. <p>J’ai encore du&nbsp;travail.</p>
  153. <nav>
  154. <p>
  155. <a href="/david/2024/accessibilite/"
  156. title="Liste de tous les articles 2024 associés à cette étiquette"
  157. rel="tag">#accessibilité</a>
  158. <a href="/david/2024/experience/"
  159. title="Liste de tous les articles 2024 associés à cette étiquette"
  160. rel="tag">#expérience</a>
  161. <a href="/david/2024/psychologie/"
  162. title="Liste de tous les articles 2024 associés à cette étiquette"
  163. rel="tag">#psychologie</a>
  164. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  165. </p>
  166. </nav>
  167. <h2>
  168. <a href="/david/2024/02/01/" title="Lien permanent vers cet article">Vision</a> <time datetime="2024-02-01">1 février 2024</time>
  169. </h2>
  170. <blockquote lang="en">
  171. <p>But if you were to try just one thing using Vision Pro — just one thing — it has to be <mark>watching a movie</mark> in the TV app, in theater mode. Try that, and no matter how skeptical you were beforehand about the Vision Pro’s price tag, your hand will start inching toward your&nbsp;wallet.</p>
  172. <p><cite><em><a data-link-domain="daringfireball.net" href="https://daringfireball.net/2024/01/the_vision_pro" hreflang="en"
  173. title="Consultation de l’article (anglais)">Daring Fireball: The Vision Pro</a>
  174. <a href="/david/cache/2024/cd9184008ba5d9e4c9be4d0a0eea4f60/" hreflang="en"
  175. data-tippy data-description="A headset, a spatial productivity platform, and a personal entertainment device."
  176. data-source="https://daringfireball.net/2024/01/the_vision_pro"
  177. data-date="2024-01-31"
  178. data-favicon="https://daringfireball.net/graphics/favicon.ico?v=005"
  179. data-domain="daringfireball.net"
  180. ><svg xmlns="http://www.w3.org/2000/svg"
  181. width="24" height="24" viewBox="0 0 24 24" fill="none"
  182. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  183. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  184. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  185. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  186. </svg>
  187. <span class="sr-only">[archive]</span></a></em></cite></p>
  188. </blockquote>
  189. <p>Ce jouet est bien trop cher… et c’est une bonne chose. D’une certaine manière, c’est la seule innovation de 2023&nbsp;qui ne comporte pas IA dans le premier écran marketing, c’est déjà pas mal. Je n’ai pas la naïveté de penser que la version 2&nbsp;ne nous amènera pas vers le <em>SpatIAl Computing</em> pour autant, restons&nbsp;sérieux.</p>
  190. <p>Je peux imaginer des des <a data-link-domain="theinfiniteexperience.world" href="https://theinfiniteexperience.world">expériences immersives</a> dans des endroits dédiés, de la location comme on pouvait louer un DVD il y a des années, des salles dédiées en bibliothèques (ambiance dystopie cyberpunk assurée), à un moment il pourrait même y avoir un espace pour ça (payant&#8239;?) dans les <em>Apple Store</em>. Si le son est aussi bon que ce que peut décrire <em>Daring Fanboy</em>, j’aurais vraiment envie de me retrouver au milieu d’un concert, d’avoir le choix entre plusieurs points de vues et&nbsp;acoustiques.</p>
  191. <p>Le côté immersif aurait aussi sa place en terme d’apprentissage / transmission. Être au premier rang d’une conférence ou d’un cours pourrait permettre de redéfinir son attention&nbsp;(?) et sachant que la dernière version de l’iPhone permet de capter de telles vidéos, c’est peut-être un moyen de faire entrer quelqu’un dans son salon ce qui produirait un autre type&nbsp;d’intimité.</p>
  192. <p>En parlant de captation et d’intimité, avec les <em>deepfakes</em> il devient possible de se retrouver dans un salon mais dans une autre tenue. Toute prise de vidéo devient une menace potentielle. Impossible de ne pas penser à des objets connectés / synchronisés autour de la&nbsp;pornographie…</p>
  193. <a href="#hr-59" title="Lien vers cette section de la page"><hr id="hr-59" /></a>
  194. <blockquote lang="en">
  195. <p>The “i” in iPhone stands for “inequality”. […]</p>
  196. <p><mark>iPhone owners live in a different world</mark> than high-end Android buyers, and light-years away what the bulk of the market experiences. No matter how you slice it, the performance inequality gap is growing for CPU-bound workloads like JavaScript-heavy web&nbsp;apps.</p>
  197. <p><cite><em><a data-link-domain="infrequently.org" href="https://infrequently.org/2024/01/performance-inequality-gap-2024/" hreflang="en"
  198. title="Consultation de l’article (anglais)">The Performance Inequality Gap, 2024</a>
  199. <a href="/david/cache/2024/0676c7ccf1ab2b380641866789366d26/" hreflang="en"
  200. data-tippy data-description="How much HTML, CSS, and JavaScript can we afford? More than in years past, but much less than frontend developers are burdening users with."
  201. data-source="https://infrequently.org/2024/01/performance-inequality-gap-2024/"
  202. data-date="2024-01-31"
  203. data-favicon="https://infrequently.org/assets/images/favicons/ino-dark-opt-192x192.png"
  204. data-domain="infrequently.org"
  205. ><svg xmlns="http://www.w3.org/2000/svg"
  206. width="24" height="24" viewBox="0 0 24 24" fill="none"
  207. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  208. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  209. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  210. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  211. </svg>
  212. <span class="sr-only">[archive]</span></a></em></cite></p>
  213. </blockquote>
  214. <p>Ce rapport me rappelle que la notion d’accessibilité est très vaste. Et je suis mal placé pour donner des leçons en vous faisant charger 5&nbsp;polices de caractères pour vous afficher une page… je n’ai pas encore travaillé les performances du thème de l’année et c’est une&nbsp;erreur.</p>
  215. <blockquote lang="en">
  216. <p>We got to a place where performance has been a constant problem in large part because a tribe of programmers convinced themselves that it <em>wasn’t</em> and <em>wouldn’t be</em>. […]</p>
  217. <p>But tribalism-boosted confirmation bias mixed with JavaScript’s toxic positivity culture to precipitate out a Silicon Prosperity Gospel; all resources would go infinite if you just <em>believed</em>. […]</p>
  218. <p>The solutions are social, not technical, because <mark>the delusions are social,</mark> rather than&nbsp;technical.</p>
  219. <p><cite><em>Ibid.</em></cite></p>
  220. </blockquote>
  221. <p>Ça&nbsp;pique.</p>
  222. <a href="#hr-60" title="Lien vers cette section de la page"><hr id="hr-60" /></a>
  223. <blockquote lang="en">
  224. <p>Rather, the biggest benefits I see are <em>collective</em>, cutting across the industry as a whole. I think web components can make the entire web more accessible. They have the potential to unify currently fragmented communities, including various JavaScript frameworks <em>and</em> <mark>those who avoid them</mark>.</p>
  225. <p>[…] Web components won’t take web development by storm, or show us the One True Way to build websites. They don’t need to dethrone JavaScript frameworks. We probably won’t even all learn how to write&nbsp;them!</p>
  226. <p><cite><em><a data-link-domain="jakelazaroff.com" href="https://jakelazaroff.com/words/the-web-component-success-story/" hreflang="en"
  227. title="Consultation de l’article (anglais)">The Web Component Success Story</a>
  228. <a href="/david/cache/2024/f4d2d42eba58062be910407690ae447c/" hreflang="en"
  229. data-tippy data-description="Web components won't take web development by storm, or show us the One True Way to build websites. What they will do is let us collectively build a rich ecosystem of dynamic components that work with any web stack."
  230. data-source="https://jakelazaroff.com/words/the-web-component-success-story/"
  231. data-date="2024-01-31"
  232. data-favicon="https://jakelazaroff.com/favicon.ico"
  233. data-domain="jakelazaroff.com"
  234. ><svg xmlns="http://www.w3.org/2000/svg"
  235. width="24" height="24" viewBox="0 0 24 24" fill="none"
  236. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  237. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  238. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  239. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  240. </svg>
  241. <span class="sr-only">[archive]</span></a></em></cite></p>
  242. </blockquote>
  243. <p>Très bon article et la boite de prévisualisation au survol de chaque lien ressemble beaucoup à ce que j’avais l’intention de faire pour régler mes soucis d’accès à la version archivée tout en affichant le domaine. Actuellement chaque lien devient trop long et hache le texte lorsque ça n’est pas en pied de citation (et encore). Il faut que je creuse comment cela est fait, via un <em>web component</em> réutilisable&nbsp;j’imagine&nbsp;:-).</p>
  244. <p>PS&nbsp;: si vous minifiez votre JavaScript, les <a data-link-domain="MDN" href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/SourceMap">SourceMap</a> sont un moyen de partager votre expérience. Sinon l’aspect <q lang="en">collective</q> est beaucoup moins&nbsp;pertinent.</p>
  245. <nav>
  246. <p>
  247. <a href="/david/2024/accessibilite/"
  248. title="Liste de tous les articles 2024 associés à cette étiquette"
  249. rel="tag">#accessibilité</a>
  250. <a href="/david/2024/dystopie/"
  251. title="Liste de tous les articles 2024 associés à cette étiquette"
  252. rel="tag">#dystopie</a>
  253. <a href="/david/2024/evolution/"
  254. title="Liste de tous les articles 2024 associés à cette étiquette"
  255. rel="tag">#évolution</a>
  256. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  257. </p>
  258. </nav>
  259. <h2>
  260. <a href="/david/2024/01/09/" title="Lien permanent vers cet article">Blessure</a> <time datetime="2024-01-09">9 janvier 2024</time>
  261. </h2>
  262. <p>Avec les amis, on profite des premières chutes de neige sur Montréal pour aller s’amuser sur le Mont Royal et vérifier que les skis de rando sont encore en bon état. Cinq minutes avant, je tirais l’enfant avec son baudrier en mode remontée musculaire, en pleine forme. Une descente entre les arbres même pas tant engagée et au moment de rejoindre le groupe, légère perte de contrôle dans un endroit très boisé. Mon ski se coince entre deux arbres assez fins mais suffisamment solides pour que ma cheville doive tourner dans le mauvais sens vu que mon corps a choisi de continuer sa course. <em>Ouille.</em></p>
  263. <p>La tristesse de se faire mal au tout début de la saison. Aussi, c’est la pire chose à expérimenter lorsqu’on prépare un <a href="/david/2024/01/06/" title="Objectif">défi sportif</a>…</p>
  264. <p>Youtube est le plus proche du célèbre <q lang="en">I know kung-fu</q> de Neo, j’ai appris à straper une cheville et j’ai l’espoir de pouvoir aller jusqu’au refuge avec l’enfant dans 2&nbsp;semaines vu que j’ai déjà réservé. Une cheville <em>tape</em>ée devrait pouvoir tenir les 5&#8239;km à skis si j’en prends suffisamment soin d’ici&nbsp;là&nbsp;🤞.</p>
  265. <p>Ce soir, j’ai besoin d’y&nbsp;croire.</p>
  266. <a href="#hr-19" title="Lien vers cette section de la page"><hr id="hr-19" /></a>
  267. <p>Copsaé publie un <a data-link-domain="copsae.fr" href="https://www.copsae.fr/">nouveau site web</a> qui me donne des idées. J’apprécie aussi ce qu’a fait Access42 pour <a data-link-domain="access42.net" href="https://access42.net/">le sien</a>. Ne pas oublier <a data-link-domain="koena.net" href="https://koena.net/">Koena</a> aussi&#8239;! J’ai déjà vu passer des commentaires comme quoi un site accessible était forcément moche, j’apprécie de pouvoir proposer des&nbsp;contre-exemples.</p>
  268. <a href="#hr-20" title="Lien vers cette section de la page"><hr id="hr-20" /></a>
  269. <blockquote lang="en">
  270. <p>In short, building with accessible semantics from the get-go can give you expressive, meaningful style hooks for free. Leaning on those style hooks in your CSS selectors lets you reduce the number of moving parts in your site or application, and it can prevent accessibility bugs from creeping in down the&nbsp;road.</p>
  271. <p><cite><em><a data-link-domain="benmyers.dev" href="https://benmyers.dev/blog/semantic-selectors/" hreflang="en"
  272. title="Consultation de l’article (anglais)">Style with Stateful, Semantic Selectors</a>
  273. <a href="/david/cache/2024/99e7d2ba7e4adc69dbf0f1b2858a5248/" hreflang="en"
  274. data-tippy data-description="See how building with accessible semantics from the get-go can give you expressive, meaningful style hooks for free."
  275. data-source="https://benmyers.dev/blog/semantic-selectors/"
  276. data-date="2024-01-08"
  277. data-favicon="https://benmyers.dev/favicon-32x32.png"
  278. data-domain="benmyers.dev"
  279. ><svg xmlns="http://www.w3.org/2000/svg"
  280. width="24" height="24" viewBox="0 0 24 24" fill="none"
  281. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  282. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  283. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  284. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  285. </svg>
  286. <span class="sr-only">[archive]</span></a></em></cite></p>
  287. </blockquote>
  288. <p>C’est ce que j’essaye de faire depuis plusieurs années déjà et non seulement ça me permet d’améliorer le couple sémantique HTML/CSS mais ça rend mon JS plus résilient&nbsp;aussi&#8239;!</p>
  289. <blockquote lang="en">
  290. <p>Recently I decided to stop using the word <em>semantics</em>. Instead I talk about the <abbr title="User eXperience">UX</abbr> of <abbr title="HyperText Markup Language">HTML</abbr>. And all of a sudden my students are not allergic to <abbr>HTML</abbr> anymore but really interested. Instead of explaining the meaning of a certain element, I show them <em>what it does</em>. So we look at <em>what happens</em> when you add a label to an input: The input and the label now form a pair. You can now click on the label to interact with a checkbox. The label will be read out loud when you focus on an input with a screenreader. When you hover over a <em>label</em>, the hover state of the connected <em>input</em> is shown. My students <em>love</em> stuff like that. They care about <abbr>UX</abbr>.</p>
  291. <p><cite><em><a data-link-domain="vasilis.nl" href="https://vasilis.nl/nerd/the-ux-of-html/" hreflang="en"
  292. title="Consultation de l’article (anglais)">The UX of HTML</a>
  293. <a href="/david/cache/2024/e5056f8e0e6acf87c5777ba5b3a2ba92/" hreflang="en"
  294. data-tippy data-description=""
  295. data-source="https://vasilis.nl/nerd/the-ux-of-html/"
  296. data-date="2024-01-08"
  297. data-favicon="https://vasilis.nl/favicon.ico"
  298. data-domain="vasilis.nl"
  299. ><svg xmlns="http://www.w3.org/2000/svg"
  300. width="24" height="24" viewBox="0 0 24 24" fill="none"
  301. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  302. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  303. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  304. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  305. </svg>
  306. <span class="sr-only">[archive]</span></a></em></cite></p>
  307. </blockquote>
  308. <nav>
  309. <p>
  310. <a href="/david/2024/accessibilite/"
  311. title="Liste de tous les articles 2024 associés à cette étiquette"
  312. rel="tag">#accessibilité</a>
  313. <a href="/david/2024/sport/"
  314. title="Liste de tous les articles 2024 associés à cette étiquette"
  315. rel="tag">#sport</a>
  316. <a href="/david/2024/technique/"
  317. title="Liste de tous les articles 2024 associés à cette étiquette"
  318. rel="tag">#technique</a>
  319. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  320. </p>
  321. </nav>
  322. <form action="/david/recherche/" method="get">
  323. <fieldset>
  324. <legend>Recherche</legend>
  325. <label for="input-search">Termes de votre recherche :</label>
  326. <input id="input-search" type="search" name="s" aria-describedby="indexation-infos" required>
  327. <input type="submit" value="Chercher">
  328. <p id="indexation-infos">
  329. <small>
  330. Seuls les contenus de ces 8 dernières années sont indexés.
  331. </small>
  332. </p>
  333. </fieldset>
  334. </form>
  335. <aside>
  336. <theme-toggle></theme-toggle>
  337. </aside>
  338. </article>
  339. <hr>
  340. <footer>
  341. <p>
  342. <a href="/david/" title="Aller à l’accueil">Accueil</a>
  343. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  344. <a href="http://larlet.com"
  345. title="Go to my English profile"
  346. data-instant>Pro</a>
  347. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">Email</a>
  348. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">Légal</abbr>
  349. </p>
  350. <template id="theme-selector">
  351. <form>
  352. <style type="text/css">
  353. fieldset div {
  354. text-align: center;
  355. }
  356. </style>
  357. <fieldset>
  358. <legend>Thème</legend>
  359. <div>
  360. <label>
  361. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  362. Auto
  363. </label>
  364. <label>
  365. <input type="radio" value="dark" name="chosen-color-scheme">
  366. Foncé
  367. </label>
  368. <label>
  369. <input type="radio" value="light" name="chosen-color-scheme">
  370. Clair
  371. </label>
  372. </div>
  373. </fieldset>
  374. </form>
  375. </template>
  376. </footer>
  377. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  378. <script>
  379. class ThemeToggle extends HTMLElement {
  380. constructor() {
  381. super()
  382. const themeSelectorTemplate = document.querySelector('#theme-selector')
  383. const form = themeSelectorTemplate.content.firstElementChild
  384. this.attachShadow({ mode: 'open' })
  385. this.shadowRoot.appendChild(form.cloneNode(true))
  386. }
  387. connectedCallback() {
  388. const form = this.shadowRoot.querySelector('form')
  389. form.addEventListener('change', (e) => {
  390. const chosenColorScheme = e.target.value
  391. localStorage.setItem('theme', chosenColorScheme)
  392. toggleTheme(chosenColorScheme)
  393. })
  394. const selectedTheme = localStorage.getItem('theme')
  395. if (selectedTheme && selectedTheme !== 'undefined') {
  396. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  397. }
  398. }
  399. }
  400. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  401. window.addEventListener('load', () => {
  402. let colorsLayer = undefined
  403. let hasDarkRules = false
  404. for (const styleSheet of Array.from(document.styleSheets)) {
  405. let mediaRules = []
  406. for (const layerRule of styleSheet.cssRules) {
  407. if (!(layerRule instanceof CSSLayerBlockRule)) {
  408. continue
  409. }
  410. if (layerRule.name === 'colors') {
  411. colorsLayer = layerRule
  412. }
  413. for (const cssRule of layerRule.cssRules) {
  414. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  415. continue
  416. }
  417. // WARNING: Safari does not have/supports `conditionText`.
  418. if (cssRule.conditionText) {
  419. if (cssRule.conditionText !== prefersColorSchemeDark) {
  420. continue
  421. }
  422. } else {
  423. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  424. continue
  425. }
  426. }
  427. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  428. }
  429. }
  430. // WARNING: do not try to insert a Rule to a styleSheet you are
  431. // currently iterating on, otherwise the browser will be stuck
  432. // in a infinite loop…
  433. for (const mediaRule of mediaRules) {
  434. // Safari requires the `0` second parameter (even if default).
  435. colorsLayer.insertRule(mediaRule.cssText, 0)
  436. hasDarkRules = true
  437. }
  438. }
  439. if (hasDarkRules) {
  440. if ('customElements' in window && !customElements.get('theme-toggle')) {
  441. customElements.define('theme-toggle', ThemeToggle)
  442. }
  443. }
  444. })
  445. </script>
  446. </body>
  447. </html>