A place to cache linked articles (think custom and personal wayback machine)
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

index.html 28KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609
  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>
  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,minimum-scale=1,initial-scale=1,shrink-to-fit=no">
  11. <!-- Required to make a valid HTML5 document. -->
  12. <title>Your Interactive Makes Me Sick (archive) — David Larlet</title>
  13. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  14. <link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons/apple-touch-icon.png">
  15. <link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons/favicon-32x32.png">
  16. <link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons/favicon-16x16.png">
  17. <link rel="manifest" href="/manifest.json">
  18. <link rel="mask-icon" href="/static/david/icons/safari-pinned-tab.svg" color="#5bbad5">
  19. <link rel="shortcut icon" href="/static/david/icons/favicon.ico">
  20. <meta name="apple-mobile-web-app-title" content="David Larlet">
  21. <meta name="application-name" content="David Larlet">
  22. <meta name="msapplication-TileColor" content="#da532c">
  23. <meta name="msapplication-config" content="/static/david/icons/browserconfig.xml">
  24. <meta name="theme-color" content="#f0f0ea">
  25. <!-- That good ol' feed, subscribe :p. -->
  26. <link rel=alternate type="application/atom+xml" title=Feed href="/david/log/">
  27. <meta name="robots" content="noindex, nofollow">
  28. <meta content="origin-when-cross-origin" name="referrer">
  29. <!-- Canonical URL for SEO purposes -->
  30. <link rel="canonical" href="https://source.opennews.org/articles/motion-sick/">
  31. <style>
  32. /* http://meyerweb.com/eric/tools/css/reset/ */
  33. html, body, div, span,
  34. h1, h2, h3, h4, h5, h6, p, blockquote, pre,
  35. a, abbr, address, big, cite, code,
  36. del, dfn, em, img, ins,
  37. small, strike, strong, tt, var,
  38. dl, dt, dd, ol, ul, li,
  39. fieldset, form, label, legend,
  40. table, caption, tbody, tfoot, thead, tr, th, td,
  41. article, aside, canvas, details, embed,
  42. figure, figcaption, footer, header, hgroup,
  43. menu, nav, output, ruby, section, summary,
  44. time, mark, audio, video {
  45. margin: 0;
  46. padding: 0;
  47. border: 0;
  48. font-size: 100%;
  49. font: inherit;
  50. vertical-align: baseline;
  51. }
  52. /* HTML5 display-role reset for older browsers */
  53. article, aside, details, figcaption, figure,
  54. footer, header, hgroup, menu, nav, section { display: block; }
  55. body { line-height: 1; }
  56. blockquote, q { quotes: none; }
  57. blockquote:before, blockquote:after,
  58. q:before, q:after {
  59. content: '';
  60. content: none;
  61. }
  62. table {
  63. border-collapse: collapse;
  64. border-spacing: 0;
  65. }
  66. /* http://practicaltypography.com/equity.html */
  67. /* https://calendar.perfplanet.com/2016/no-font-face-bulletproof-syntax/ */
  68. /* https://www.filamentgroup.com/lab/js-web-fonts.html */
  69. @font-face {
  70. font-family: 'EquityTextB';
  71. src: url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff2') format('woff2'),
  72. url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff') format('woff');
  73. font-weight: 300;
  74. font-style: normal;
  75. font-display: swap;
  76. }
  77. @font-face {
  78. font-family: 'EquityTextB';
  79. src: url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff2') format('woff2'),
  80. url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff') format('woff');
  81. font-weight: 300;
  82. font-style: italic;
  83. font-display: swap;
  84. }
  85. @font-face {
  86. font-family: 'EquityTextB';
  87. src: url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff2') format('woff2'),
  88. url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff') format('woff');
  89. font-weight: 700;
  90. font-style: normal;
  91. font-display: swap;
  92. }
  93. @font-face {
  94. font-family: 'ConcourseT3';
  95. src: url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff2') format('woff2'),
  96. url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff') format('woff');
  97. font-weight: 300;
  98. font-style: normal;
  99. font-display: swap;
  100. }
  101. /* http://practice.typekit.com/lesson/caring-about-opentype-features/ */
  102. body {
  103. /* http://www.cssfontstack.com/ Palatino 99% Win 86% Mac */
  104. font-family: "EquityTextB", Palatino, serif;
  105. background-color: #f0f0ea;
  106. color: #07486c;
  107. font-kerning: normal;
  108. -moz-osx-font-smoothing: grayscale;
  109. -webkit-font-smoothing: subpixel-antialiased;
  110. text-rendering: optimizeLegibility;
  111. font-variant-ligatures: common-ligatures contextual;
  112. font-feature-settings: "kern", "liga", "clig", "calt";
  113. }
  114. pre, code, kbd, samp, var, tt {
  115. font-family: 'TriplicateT4c', monospace;
  116. }
  117. em {
  118. font-style: italic;
  119. color: #323a45;
  120. }
  121. strong {
  122. font-weight: bold;
  123. color: black;
  124. }
  125. nav {
  126. background-color: #323a45;
  127. color: #f0f0ea;
  128. display: flex;
  129. justify-content: space-around;
  130. padding: 1rem .5rem;
  131. }
  132. nav:last-child {
  133. border-bottom: 1vh solid #2d7474;
  134. }
  135. nav a {
  136. color: #f0f0ea;
  137. }
  138. nav abbr {
  139. border-bottom: 1px dotted white;
  140. }
  141. h1 {
  142. border-top: 1vh solid #2d7474;
  143. border-bottom: .2vh dotted #2d7474;
  144. background-color: #e3e1e1;
  145. color: #323a45;
  146. text-align: center;
  147. padding: 5rem 0 4rem 0;
  148. width: 100%;
  149. font-family: 'ConcourseT3';
  150. display: flex;
  151. flex-direction: column;
  152. }
  153. h1.single {
  154. padding-bottom: 10rem;
  155. }
  156. h1 span {
  157. position: absolute;
  158. top: 1vh;
  159. left: 20%;
  160. line-height: 0;
  161. }
  162. h1 span a {
  163. line-height: 1.7;
  164. padding: 1rem 1.2rem .6rem 1.2rem;
  165. border-radius: 0 0 6% 6%;
  166. background: #2d7474;
  167. font-size: 1.3rem;
  168. color: white;
  169. text-decoration: none;
  170. }
  171. h2 {
  172. margin: 4rem 0 1rem;
  173. border-top: .2vh solid #2d7474;
  174. padding-top: 1vh;
  175. }
  176. h3 {
  177. text-align: center;
  178. margin: 3rem 0 .75em;
  179. }
  180. hr {
  181. height: .4rem;
  182. width: .4rem;
  183. border-radius: .4rem;
  184. background: #07486c;
  185. margin: 2.5rem auto;
  186. }
  187. time {
  188. display: bloc;
  189. margin-left: 0 !important;
  190. }
  191. ul, ol {
  192. margin: 2rem;
  193. }
  194. ul {
  195. list-style-type: square;
  196. }
  197. a {
  198. text-decoration-skip-ink: auto;
  199. text-decoration-thickness: 0.05em;
  200. text-underline-offset: 0.09em;
  201. }
  202. article {
  203. max-width: 50rem;
  204. display: flex;
  205. flex-direction: column;
  206. margin: 2rem auto;
  207. }
  208. article.single {
  209. border-top: .2vh dotted #2d7474;
  210. margin: -6rem auto 1rem auto;
  211. background: #f0f0ea;
  212. padding: 2rem;
  213. }
  214. article p:last-child {
  215. margin-bottom: 1rem;
  216. }
  217. p {
  218. padding: 0 .5rem;
  219. margin-left: 3rem;
  220. }
  221. p + p,
  222. figure + p {
  223. margin-top: 2rem;
  224. }
  225. blockquote {
  226. background-color: #e3e1e1;
  227. border-left: .5vw solid #2d7474;
  228. display: flex;
  229. flex-direction: column;
  230. align-items: center;
  231. padding: 1rem;
  232. margin: 1.5rem;
  233. }
  234. blockquote cite {
  235. font-style: italic;
  236. }
  237. blockquote p {
  238. margin-left: 0;
  239. }
  240. figure {
  241. border-top: .2vh solid #2d7474;
  242. background-color: #e3e1e1;
  243. text-align: center;
  244. padding: 1.5rem 0;
  245. margin: 1rem 0 0;
  246. font-size: 1.5rem;
  247. width: 100%;
  248. }
  249. figure img {
  250. max-width: 250px;
  251. max-height: 250px;
  252. border: .5vw solid #323a45;
  253. padding: 1px;
  254. }
  255. figcaption {
  256. padding: 1rem;
  257. line-height: 1.4;
  258. }
  259. aside {
  260. display: flex;
  261. flex-direction: column;
  262. background-color: #e3e1e1;
  263. padding: 1rem 0;
  264. border-bottom: .2vh solid #07486c;
  265. }
  266. aside p {
  267. max-width: 50rem;
  268. margin: 0 auto;
  269. }
  270. /* https://fvsch.com/code/css-locks/ */
  271. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  272. font-size: 1rem;
  273. line-height: calc( 1.5em + 0.2 * 1rem );
  274. }
  275. h1 {
  276. font-size: 1.9rem;
  277. line-height: calc( 1.2em + 0.2 * 1rem );
  278. }
  279. h2 {
  280. font-size: 1.6rem;
  281. line-height: calc( 1.3em + 0.2 * 1rem );
  282. }
  283. h3 {
  284. font-size: 1.35rem;
  285. line-height: calc( 1.4em + 0.2 * 1rem );
  286. }
  287. @media (min-width: 20em) {
  288. /* The (100vw - 20rem) / (50 - 20) part
  289. resolves to 0-1rem, depending on the
  290. viewport width (between 20em and 50em). */
  291. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  292. font-size: calc( 1rem + .6 * (100vw - 20rem) / (50 - 20) );
  293. line-height: calc( 1.5em + 0.2 * (100vw - 50rem) / (20 - 50) );
  294. margin-left: 0;
  295. }
  296. h1 {
  297. font-size: calc( 1.9rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  298. line-height: calc( 1.2em + 0.2 * (100vw - 50rem) / (20 - 50) );
  299. }
  300. h2 {
  301. font-size: calc( 1.5rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  302. line-height: calc( 1.3em + 0.2 * (100vw - 50rem) / (20 - 50) );
  303. }
  304. h3 {
  305. font-size: calc( 1.35rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  306. line-height: calc( 1.4em + 0.2 * (100vw - 50rem) / (20 - 50) );
  307. }
  308. }
  309. @media (min-width: 50em) {
  310. /* The right part of the addition *must* be a
  311. rem value. In this example we *could* change
  312. the whole declaration to font-size:2.5rem,
  313. but if our baseline value was not expressed
  314. in rem we would have to use calc. */
  315. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  316. font-size: calc( 1rem + .6 * 1rem );
  317. line-height: 1.5em;
  318. }
  319. p, li, pre, details {
  320. margin-left: 3rem;
  321. }
  322. h1 {
  323. font-size: calc( 1.9rem + 1.5 * 1rem );
  324. line-height: 1.2em;
  325. }
  326. h2 {
  327. font-size: calc( 1.5rem + 1.5 * 1rem );
  328. line-height: 1.3em;
  329. }
  330. h3 {
  331. font-size: calc( 1.35rem + 1.5 * 1rem );
  332. line-height: 1.4em;
  333. }
  334. figure img {
  335. max-width: 500px;
  336. max-height: 500px;
  337. }
  338. }
  339. figure.unsquared {
  340. margin-bottom: 1.5rem;
  341. }
  342. figure.unsquared img {
  343. height: inherit;
  344. }
  345. @media print {
  346. body { font-size: 100%; }
  347. a:after { content: " (" attr(href) ")"; }
  348. a, a:link, a:visited, a:after {
  349. text-decoration: underline;
  350. text-shadow: none !important;
  351. background-image: none !important;
  352. background: white;
  353. color: black;
  354. }
  355. abbr[title] { border-bottom: 0; }
  356. abbr[title]:after { content: " (" attr(title) ")"; }
  357. img { page-break-inside: avoid; }
  358. @page { margin: 2cm .5cm; }
  359. h1, h2, h3 { page-break-after: avoid; }
  360. p3 { orphans: 3; widows: 3; }
  361. img {
  362. max-width: 250px !important;
  363. max-height: 250px !important;
  364. }
  365. nav, aside { display: none; }
  366. }
  367. ul.with_columns {
  368. column-count: 1;
  369. }
  370. @media (min-width: 20em) {
  371. ul.with_columns {
  372. column-count: 2;
  373. }
  374. }
  375. @media (min-width: 50em) {
  376. ul.with_columns {
  377. column-count: 3;
  378. }
  379. }
  380. ul.with_two_columns {
  381. column-count: 1;
  382. }
  383. @media (min-width: 20em) {
  384. ul.with_two_columns {
  385. column-count: 1;
  386. }
  387. }
  388. @media (min-width: 50em) {
  389. ul.with_two_columns {
  390. column-count: 2;
  391. }
  392. }
  393. .gallery {
  394. display: flex;
  395. flex-wrap: wrap;
  396. justify-content: space-around;
  397. }
  398. .gallery figure img {
  399. margin-left: 1rem;
  400. margin-right: 1rem;
  401. }
  402. .gallery figure figcaption {
  403. font-family: 'ConcourseT3'
  404. }
  405. footer {
  406. font-family: 'ConcourseT3';
  407. display: flex;
  408. flex-direction: column;
  409. border-top: 3px solid white;
  410. padding: 4rem 0;
  411. background-color: #07486c;
  412. color: white;
  413. }
  414. footer > * {
  415. max-width: 50rem;
  416. margin: 0 auto;
  417. }
  418. footer a {
  419. color: #f1c40f;
  420. }
  421. footer .avatar {
  422. width: 200px;
  423. height: 200px;
  424. border-radius: 50%;
  425. float: left;
  426. -webkit-shape-outside: circle();
  427. shape-outside: circle();
  428. margin-right: 2rem;
  429. padding: 2px 5px 5px 2px;
  430. background: white;
  431. border-left: 1px solid #f1c40f;
  432. border-top: 1px solid #f1c40f;
  433. border-right: 5px solid #f1c40f;
  434. border-bottom: 5px solid #f1c40f;
  435. }
  436. </style>
  437. <h1>
  438. <span><a id="jumper" href="#jumpto" title="Un peu perdu ?">?</a></span>
  439. Your Interactive Makes Me Sick (archive)
  440. <time>Pour la pérennité des contenus liés. Non-indexé, retrait sur simple email.</time>
  441. </h1>
  442. <section>
  443. <article>
  444. <h3><a href="https://source.opennews.org/articles/motion-sick/">Source originale du contenu</a></h3>
  445. <p>Picture this: you’re sitting in a car, and the car next to you starts to pull forward. For a moment you feel like you’re moving backwards. That brief feeling of disorientation, where the world is moving in a way your body doesn’t quite process—imagine that you feel like that all the time.</p>
  446. <p>Or picture this: you’re short on sleep, your head feels tight, you ate something funky yesterday, and everything in the world just seems <em>too loud</em>. Lights are too bright, colors are too colorful, and the clink of silverware against plates makes your eardrums throb. Imagine that you feel like this all the time.</p>
  447. <p>Now picture this: A journalist has published a piece of work you’re interested in. Ooh, the teaser sounds good! You click over to the page and <strong><span class="caps">WHOOSH</span></strong> some sort of video moves unbidden behind the header. You scroll a bit and <strong><span class="caps">WHOA</span></strong> two different pieces of the page move with your scrolling. A graph animates! A wolf howls in the distance! You’re starting to get a bit overwhelmed, and maybe a touch nauseated. I don’t know what you’d do at this point, but I’m gonna close the page.</p>
  448. <h3>Delightful Surprise! Or Maybe Barfing and Pain</h3>
  449. <p>Browsing the web nowadays is a hairy business. There’s a lot of movement, a lot of noise, and most of it can’t be controlled by the user. For someone like me—who spends about half of any given month coping with chronic migraines—the web feels downright hostile, even dangerous. On days that I have a headache, my entire nervous system is…fragile. I can’t handle bright lights, sharp sounds, or repetitive motion. On days without a headache, I’m constantly on the lookout for something that might trigger the next one. Think of the kinds of things that overwhelm you or make you feel motion-sick: shaky camera work, sirens and emergency lights, sudden shifts in visual perspective. I have all those same sensitivities, but my threshold for bad reactions is much lower than an average person’s. </p>
  450. <p>All this to say: you journalists, with your fancy interactive stories and animation libraries, are making me sick.</p>
  451. <p>
  452. Migraines, of course, aren’t the only condition that causes people to have </p>
  453. <p><a href="https://alistapart.com/article/designing-safer-web-animation-for-motion-sensitivity">issues with animation and motion on the web</a><p>. People with vestibular disorders and visual processing issues often have a hard time with visual motion, and anyone who’s feeling a bit sensitive—due to morning sickness, a bad night of sleep, or a simple ear infection—can find unexpected movement problematic.</p>
  454. <p></p><p>The issue usually isn’t the motion itself, or the existence of animation. The problem is a mismatch between my expectations for what I’m going to encounter on a webpage and what actually displays on that page. There’s a sense of disorientation when my physical behavior—sliding my finger down a trackpad or screen, or pressing the arrow keys—triggers unexpected movement on the screen. When I try to scroll a few lines, and some other movement happens instead (like a horizontal slide-in, or a sidebar div sticking in place, or a parallax foreground changing at a different speed from its background), my brain gets very upset. </p></p>
  455. <p>There are surely readers who are delighted by this subversion of expectations, who find it a pleasant surprise in the midst of their day. Others might be irked and scroll past the fancy bits until they get back to plain text. And then there’s me.</p>
  456. <h3>When Scrolling Goes Horribly Wrong</h3>
  457. <p>Let’s look at a few stories that exhibit some of these problematic behaviors. (Writers and coders, I’m sorry if I’m picking on something you created. I swear that the criticism is based in love: I want more people to be able to see and enjoy your work.)</p>
  458. <p>As we scroll down this story, we reach the “Homeless relocations from <span class="caps">NYC</span>” and the vertical scrolling stops and is replaced by an animated horizontal graph. It’s unclear how much (or how long) we’ll have to scroll to reach the next section of the story.</p>
  459. <p>The header images here are bright, colorful, and redraw themselves into five new kaleidoscopic collages as we try to reach the opening line of the piece. Later in the piece (and not pictured in our video), when the user reaches the phone frames displaying Twitter content, the left- and right-hand columns begin to scroll at different rates, and the phone flashes and redraws itself over and over as we move down the screen.</p>
  460. <p>Moving the mouse around the screen shifts the camera angle on each story’s animated illustration. Sometimes the scrolling behavior matches expectations, and other times it speeds up or slows down based on where we are in the story. </p>
  461. <p>The cursor has been turned into a navigation arrow (left or right, depending on what part of the image you’re hovering over). When we click the right arrow, images slide in from the bottom, not always into the same location. Some slides are auto-playing videos, with unexpected perspective shifts and flashing lights.</p>
  462. <h2>Scrolling for Good</h2>
  463. <p>I also see plenty of interactive elements that, despite their fanciness, don’t cause any vestibular or visual processing issues at all—for me, at least. </p>
  464. <p>The right column scrolls normally, and the corresponding changes in the circle on the left aren’t animated. We get interesting visuals without disorienting movement.</p>
  465. <p>The “High Voltage Penalties” section provides interaction on the reader’s own terms: a user can explore the data visualization as much or as little as they want. A video further down the page doesn’t auto-play, and waits patiently for a reader to indicate interest.</p>
  466. <p>The movement triggered by scrolling has the same physics as regular scroll behavior, and the popups aren’t sliding in or staying sticky to a window location.</p>
  467. <h3>Good News: You Can Fix It</h3>
  468. <p>I’m not suggesting you shouldn’t make more cool interactive news stories, or use motion in interesting ways. But I’m advocating here for some guidelines to help make your story a better experience for <em>all</em> your readers.</p>
  469. <h4>1) Respect the Physics</h4>
  470. <p>These articles are intended to be experienced inside a web browser. Browsers have had consistent scrolling behavior for years, even across vendors and platforms. There’s an established set of physics, and if you muck with the physics, you can assume you’re making some people sick. </p>
  471. <p>For each animation or interaction you’re planning, ask yourself, “If this effect was stronger (much faster, or bouncier, or swoopier), would it be disorienting, or make me feel motion-sick?” If the answer is yes, then you can rest assured there are plenty of people in the world whose threshold is already low enough to be bothered.</p>
  472. <h4>2) Remember that We Call Them “Readers”</h4>
  473. <p>Right now, in 2018, part of respecting the context of the web is remembering that a large portion of your audience is interested in <em>reading</em> your story. Not watching, not immersing, not “experiencing”: reading. For every person thrilled by a video or animated chart, there’s another who would prefer a plain-text transcript.</p>
  474. <p>This doesn’t mean you should abandon videos and interactive features, but remember that for many people, those fancy features are <em>enhancements</em>, and what they’re really here for are the words. Make sure that the features don’t get in the way of people who really want to read your words.</p>
  475. <p>In a magazine, newspaper, or book, readers get to choose their journey through a story: one person may prefer to read the whole piece and then go back and review the image captions, where another will jump all around from story to image to chart to story. The linear format of a website removes a bit of this choice (just as paper size does in print), and it’s up to you to make sure you don’t remove any more.</p>
  476. <h4>3) Ask for Consent</h4>
  477. <p>This third guideline is so important, and so powerful, that if you do it well, you can ignore all my previous advice about browser physics and parallax and fancy interactive features. It requires only one thing: ask your reader what they want. Let them decide what experience they want to have.</p>
  478. <p>You could provide controls on each individual element of a story, allowing the reader to decide whether they want any given video or animation to play and loop. Animated charts and infographics could include a “skip to the end-state” shortcut. I’m not generally one for blanket statements, but I feel comfortable proclaiming that <em>any element that moves or animates needs to include a pause/stop button</em>. Every reader’s triggers are unique: a movement that bothers you might be fine with me, or might be fine on my laptop but difficult on my phone. Providing element-level control means the user can stop any particular piece that’s giving them trouble. </p>
  479. <p>Consider whether the default state of your interactive elements will be on or off. Are you going to assume consent, and require users to do work to stop scrolling behaviors or animations they don’t want? Or will you build a story that works without the fancier features, and allow readers to opt-in to animated charts and videos as an enhancement?</p>
  480. <p>If you’re implementing consent at the element level, you can give users the option of reading an <em>entire</em> unadorned version of your interactive story: plain words, static images, unanimated charts and graphs. Like the olden days. </p>
  481. <div class="image-full-width-wrapper"> <img src="https://s3.amazonaws.com/media.opennews.org/img/uploads/article_images/fml.jpg" alt=""/><p class="caption">The Huffington Post’s <a href="http://highline.huffingtonpost.com/articles/en/poor-millennials/">Poor Millennials feature</a> is extremely challenging but includes a text-only version that limits the damage.</p></div>
  482. <h4>Also Some Code</h4>
  483. <p>I’d be remiss if I didn’t mention a code solution to movement issues. <a href="https://ericwbailey.design/">Eric Bailey</a> has a <a href="https://css-tricks.com/introduction-reduced-motion-media-query/">nice write-up of a relatively new type of media query</a>: the “prefers reduced media motion” declaration. You can wrap low- or no-motion experiences in this media query, and readers who have set that preference in their browser will see the simpler version of your story. I caution against relying too strongly on this, since many people (especially those with a temporary or situational disability, like browsing with an ear infection or on a lurching train) won’t know the setting exists. If you decide that your story will assume consent by default, this media query would be a great way to swap the state of each element to “off” instead of “on”.</p>
  484. <h3>It’s Not Actually In Your Control Anyway</h3>
  485. <p>As an industry, tech has a particularly stubborn blind spot when it comes to assuming we know what our audiences want. It goes something like, “<em>I</em> want it, so therefore <em>they</em> must want it too!” </p>
  486. <p>It’s not true. It’s never been true, and will never be true. Yes, some people want what you want. Plenty of others don’t. To paraphrase the wise words of <span class="caps">UX</span> leader <a href="https://karenmcgrane.com/">Karen McGrane</a>, “You don’t get to decide how users will experience your content: <em>they do</em>.” </p>
  487. <p>Given all the work that goes into a powerful piece of journalism—research, interviews, writing, fact-checking, editing, design, coding, testing—is it really in our best interests to end up with a finished product that some people literally can’t bear to scroll through? Taking the time to look at each element from an accessibility standpoint, and ensuring that users can control their own level of engagement with a piece, will make your stories stronger and available to a wider audience of readers.</p>
  488. </article>
  489. </section>
  490. <nav id="jumpto">
  491. <p>
  492. <a href="/david/blog/">Accueil du blog</a> |
  493. <a href="https://source.opennews.org/articles/motion-sick/">Source originale</a> |
  494. <a href="/david/stream/2019/">Accueil du flux</a>
  495. </p>
  496. </nav>
  497. <footer>
  498. <div>
  499. <img src="/static/david/david-larlet-avatar.jpg" loading="lazy" class="avatar" width="200" height="200">
  500. <p>
  501. Bonjour/Hi!
  502. Je suis <a href="/david/" title="Profil public">David&nbsp;Larlet</a>, je vis actuellement à Montréal et j’alimente cet espace depuis 15 ans. <br>
  503. Si tu as apprécié cette lecture, n’hésite pas à poursuivre ton exploration. Par exemple via les <a href="/david/blog/" title="Expériences bienveillantes">réflexions bimestrielles</a>, la <a href="/david/stream/2019/" title="Pensées (dés)articulées">veille hebdomadaire</a> ou en t’abonnant au <a href="/david/log/" title="S’abonner aux publications via RSS">flux RSS</a> (<a href="/david/blog/2019/flux-rss/" title="Tiens c’est quoi un flux RSS ?">so 2005</a>).
  504. </p>
  505. <p>
  506. Je m’intéresse à la place que je peux avoir dans ce monde. En tant qu’humain, en tant que membre d’une famille et en tant qu’associé d’une coopérative. De temps en temps, je fais aussi des <a href="https://github.com/davidbgk" title="Principalement sur Github mais aussi ailleurs">trucs techniques</a>. Et encore plus rarement, <a href="/david/talks/" title="En ce moment je laisse plutôt la place aux autres">j’en parle</a>.
  507. </p>
  508. <p>
  509. Voici quelques articles choisis :
  510. <a href="/david/blog/2019/faire-equipe/" title="Accéder à l’article complet">Faire équipe</a>,
  511. <a href="/david/blog/2018/bivouac-automnal/" title="Accéder à l’article complet">Bivouac automnal</a>,
  512. <a href="/david/blog/2018/commodite-effondrement/" title="Accéder à l’article complet">Commodité et effondrement</a>,
  513. <a href="/david/blog/2017/donnees-communs/" title="Accéder à l’article complet">Des données aux communs</a>,
  514. <a href="/david/blog/2016/accompagner-enfant/" title="Accéder à l’article complet">Accompagner un enfant</a>,
  515. <a href="/david/blog/2016/senior-developer/" title="Accéder à l’article complet">Senior developer</a>,
  516. <a href="/david/blog/2016/illusion-sociale/" title="Accéder à l’article complet">L’illusion sociale</a>,
  517. <a href="/david/blog/2016/instantane-scopyleft/" title="Accéder à l’article complet">Instantané Scopyleft</a>,
  518. <a href="/david/blog/2016/enseigner-web/" title="Accéder à l’article complet">Enseigner le Web</a>,
  519. <a href="/david/blog/2016/simplicite-defaut/" title="Accéder à l’article complet">Simplicité par défaut</a>,
  520. <a href="/david/blog/2016/minimalisme-esthetique/" title="Accéder à l’article complet">Minimalisme et esthétique</a>,
  521. <a href="/david/blog/2014/un-web-omni-present/" title="Accéder à l’article complet">Un web omni-présent</a>,
  522. <a href="/david/blog/2014/manifeste-developpeur/" title="Accéder à l’article complet">Manifeste de développeur</a>,
  523. <a href="/david/blog/2013/confort-convivialite/" title="Accéder à l’article complet">Confort et convivialité</a>,
  524. <a href="/david/blog/2013/testament-numerique/" title="Accéder à l’article complet">Testament numérique</a>,
  525. et <a href="/david/blog/" title="Accéder aux archives">bien d’autres…</a>
  526. </p>
  527. <p>
  528. On peut <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">échanger par courriel</a>. Si éventuellement tu souhaites que l’on travaille ensemble, tu devrais commencer par consulter le <a href="http://larlet.com">profil dédié à mon activité professionnelle</a> et/ou contacter directement <a href="http://scopyleft.fr/">scopyleft</a>, la <abbr title="Société coopérative et participative">SCOP</abbr> dont je fais partie depuis six ans. Je recommande au préalable de lire <a href="/david/blog/2018/cout-site/" title="Attention ce qui va suivre peut vous choquer">combien coûte un site</a> et pourquoi je suis plutôt favorable à une <a href="/david/pro/devis/" title="Discutons-en !">non-demande de devis</a>.
  529. </p>
  530. <p>
  531. Je ne traque pas ta navigation mais mon
  532. <abbr title="Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33.184162340">hébergeur</abbr>
  533. conserve des logs d’accès.
  534. </p>
  535. </div>
  536. </footer>
  537. <script type="text/javascript">
  538. ;(_ => {
  539. const jumper = document.getElementById('jumper')
  540. jumper.addEventListener('click', e => {
  541. e.preventDefault()
  542. const anchor = e.target.getAttribute('href')
  543. const targetEl = document.getElementById(anchor.substring(1))
  544. targetEl.scrollIntoView({behavior: 'smooth'})
  545. })
  546. })()
  547. </script>