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 29KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848
  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>Cours IUT : Flexbox et Styleguide — 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. <!-- Canonical URL for SEO purposes -->
  28. <link rel="canonical" href="https://larlet.fr/david/blog/2014/cours-iut-flexbox-styleguide/">
  29. <!-- SEO/Semantic metadata -->
  30. <meta name="description" content="Participer à une formation reste la meilleure façon d’apprendre." />
  31. <meta name="twitter:description" property="og:description" itemprop="description" content="Participer à une formation reste la meilleure façon d’apprendre." />
  32. <meta name="twitter:title" property="og:title" itemprop="name" content="Cours IUT : Flexbox et Styleguide" />
  33. <meta name="twitter:card" content="summary" />
  34. <meta name="twitter:creator" content="@davidbgk" />
  35. <meta name="twitter:url" property="og:url" content="https://larlet.fr/david/blog/2014/cours-iut-flexbox-styleguide/" />
  36. <meta property="og:type" content="article" />
  37. <meta property="og:site_name" content="David Larlet (@davidbgk)" />
  38. <meta name="twitter:image" property="og:image" itemprop="image" content="https://larlet.fr/static/david/blog/2014/cours-iut-flexbox-styleguide.jpg" />
  39. <style>
  40. /* http://meyerweb.com/eric/tools/css/reset/ */
  41. html, body, div, span,
  42. h1, h2, h3, h4, h5, h6, p, blockquote, pre,
  43. a, abbr, address, big, cite, code,
  44. del, dfn, em, img, ins,
  45. small, strike, strong, tt, var,
  46. dl, dt, dd, ol, ul, li,
  47. fieldset, form, label, legend,
  48. table, caption, tbody, tfoot, thead, tr, th, td,
  49. article, aside, canvas, details, embed,
  50. figure, figcaption, footer, header, hgroup,
  51. menu, nav, output, ruby, section, summary,
  52. time, mark, audio, video {
  53. margin: 0;
  54. padding: 0;
  55. border: 0;
  56. font-size: 100%;
  57. font: inherit;
  58. vertical-align: baseline;
  59. }
  60. /* HTML5 display-role reset for older browsers */
  61. article, aside, details, figcaption, figure,
  62. footer, header, hgroup, menu, nav, section { display: block; }
  63. body { line-height: 1; }
  64. blockquote, q { quotes: none; }
  65. blockquote:before, blockquote:after,
  66. q:before, q:after {
  67. content: '';
  68. content: none;
  69. }
  70. table {
  71. border-collapse: collapse;
  72. border-spacing: 0;
  73. }
  74. /* http://practicaltypography.com/equity.html */
  75. /* https://calendar.perfplanet.com/2016/no-font-face-bulletproof-syntax/ */
  76. /* https://www.filamentgroup.com/lab/js-web-fonts.html */
  77. @font-face {
  78. font-family: 'EquityTextB';
  79. src: url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff2') format('woff2'),
  80. url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff') format('woff');
  81. font-weight: 300;
  82. font-style: normal;
  83. font-display: swap;
  84. }
  85. @font-face {
  86. font-family: 'EquityTextB';
  87. src: url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff2') format('woff2'),
  88. url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff') format('woff');
  89. font-weight: 300;
  90. font-style: italic;
  91. font-display: swap;
  92. }
  93. @font-face {
  94. font-family: 'EquityTextB';
  95. src: url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff2') format('woff2'),
  96. url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff') format('woff');
  97. font-weight: 700;
  98. font-style: normal;
  99. font-display: swap;
  100. }
  101. @font-face {
  102. font-family: 'ConcourseT3';
  103. src: url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff2') format('woff2'),
  104. url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff') format('woff');
  105. font-weight: 300;
  106. font-style: normal;
  107. font-display: swap;
  108. }
  109. /* http://practice.typekit.com/lesson/caring-about-opentype-features/ */
  110. body {
  111. /* http://www.cssfontstack.com/ Palatino 99% Win 86% Mac */
  112. font-family: "EquityTextB", Palatino, serif;
  113. background-color: #f0f0ea;
  114. color: #07486c;
  115. font-kerning: normal;
  116. -moz-osx-font-smoothing: grayscale;
  117. -webkit-font-smoothing: subpixel-antialiased;
  118. text-rendering: optimizeLegibility;
  119. font-variant-ligatures: common-ligatures contextual;
  120. font-feature-settings: "kern", "liga", "clig", "calt";
  121. }
  122. pre, code, kbd, samp, var, tt {
  123. font-family: 'TriplicateT4c', monospace;
  124. }
  125. em {
  126. font-style: italic;
  127. color: #323a45;
  128. }
  129. strong {
  130. font-weight: bold;
  131. color: black;
  132. }
  133. nav {
  134. background-color: #323a45;
  135. color: #f0f0ea;
  136. display: flex;
  137. justify-content: space-around;
  138. padding: 1rem .5rem;
  139. }
  140. nav:last-child {
  141. border-bottom: 1vh solid #2d7474;
  142. }
  143. nav a {
  144. color: #f0f0ea;
  145. }
  146. nav abbr {
  147. border-bottom: 1px dotted white;
  148. }
  149. h1 {
  150. border-top: 1vh solid #2d7474;
  151. border-bottom: .2vh dotted #2d7474;
  152. background-color: #e3e1e1;
  153. color: #323a45;
  154. text-align: center;
  155. padding: 5rem 0 4rem 0;
  156. width: 100%;
  157. font-family: 'ConcourseT3';
  158. display: flex;
  159. flex-direction: column;
  160. }
  161. h1.single {
  162. padding-bottom: 10rem;
  163. }
  164. h1 span {
  165. position: absolute;
  166. top: 1vh;
  167. left: 20%;
  168. line-height: 0;
  169. }
  170. h1 span a {
  171. line-height: 1.7;
  172. padding: 1rem 1.2rem .6rem 1.2rem;
  173. border-radius: 0 0 6% 6%;
  174. background: #2d7474;
  175. font-size: 1.3rem;
  176. color: white;
  177. text-decoration: none;
  178. }
  179. h2 {
  180. margin: 4rem 0 1rem;
  181. border-top: .2vh solid #2d7474;
  182. padding-top: 1vh;
  183. }
  184. h3 {
  185. text-align: center;
  186. margin: 3rem 0 .75em;
  187. }
  188. hr {
  189. height: .4rem;
  190. width: .4rem;
  191. border-radius: .4rem;
  192. background: #07486c;
  193. margin: 2.5rem auto;
  194. }
  195. time {
  196. display: bloc;
  197. margin-left: 0 !important;
  198. }
  199. ul, ol {
  200. margin: 2rem;
  201. }
  202. ul {
  203. list-style-type: square;
  204. }
  205. a {
  206. text-decoration-skip-ink: auto;
  207. text-decoration-thickness: 0.05em;
  208. text-underline-offset: 0.09em;
  209. }
  210. article {
  211. max-width: 50rem;
  212. display: flex;
  213. flex-direction: column;
  214. margin: 2rem auto;
  215. }
  216. article.single {
  217. border-top: .2vh dotted #2d7474;
  218. margin: -6rem auto 1rem auto;
  219. background: #f0f0ea;
  220. padding: 2rem;
  221. }
  222. article p:last-child {
  223. margin-bottom: 1rem;
  224. }
  225. p {
  226. padding: 0 .5rem;
  227. margin-left: 3rem;
  228. }
  229. p + p,
  230. figure + p {
  231. margin-top: 2rem;
  232. }
  233. blockquote {
  234. background-color: #e3e1e1;
  235. border-left: .5vw solid #2d7474;
  236. display: flex;
  237. flex-direction: column;
  238. align-items: center;
  239. padding: 1rem;
  240. margin: 1.5rem;
  241. }
  242. blockquote cite {
  243. font-style: italic;
  244. }
  245. blockquote p {
  246. margin-left: 0;
  247. }
  248. figure {
  249. border-top: .2vh solid #2d7474;
  250. background-color: #e3e1e1;
  251. text-align: center;
  252. padding: 1.5rem 0;
  253. margin: 1rem 0 0;
  254. font-size: 1.5rem;
  255. width: 100%;
  256. }
  257. figure img {
  258. max-width: 250px;
  259. max-height: 250px;
  260. border: .5vw solid #323a45;
  261. padding: 1px;
  262. }
  263. figcaption {
  264. padding: 1rem;
  265. line-height: 1.4;
  266. }
  267. aside {
  268. display: flex;
  269. flex-direction: column;
  270. background-color: #e3e1e1;
  271. padding: 1rem 0;
  272. border-bottom: .2vh solid #07486c;
  273. }
  274. aside p {
  275. max-width: 50rem;
  276. margin: 0 auto;
  277. }
  278. /* https://fvsch.com/code/css-locks/ */
  279. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  280. font-size: 1rem;
  281. line-height: calc( 1.5em + 0.2 * 1rem );
  282. }
  283. h1 {
  284. font-size: 1.9rem;
  285. line-height: calc( 1.2em + 0.2 * 1rem );
  286. }
  287. h2 {
  288. font-size: 1.6rem;
  289. line-height: calc( 1.3em + 0.2 * 1rem );
  290. }
  291. h3 {
  292. font-size: 1.35rem;
  293. line-height: calc( 1.4em + 0.2 * 1rem );
  294. }
  295. @media (min-width: 20em) {
  296. /* The (100vw - 20rem) / (50 - 20) part
  297. resolves to 0-1rem, depending on the
  298. viewport width (between 20em and 50em). */
  299. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  300. font-size: calc( 1rem + .6 * (100vw - 20rem) / (50 - 20) );
  301. line-height: calc( 1.5em + 0.2 * (100vw - 50rem) / (20 - 50) );
  302. margin-left: 0;
  303. }
  304. h1 {
  305. font-size: calc( 1.9rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  306. line-height: calc( 1.2em + 0.2 * (100vw - 50rem) / (20 - 50) );
  307. }
  308. h2 {
  309. font-size: calc( 1.5rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  310. line-height: calc( 1.3em + 0.2 * (100vw - 50rem) / (20 - 50) );
  311. }
  312. h3 {
  313. font-size: calc( 1.35rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  314. line-height: calc( 1.4em + 0.2 * (100vw - 50rem) / (20 - 50) );
  315. }
  316. }
  317. @media (min-width: 50em) {
  318. /* The right part of the addition *must* be a
  319. rem value. In this example we *could* change
  320. the whole declaration to font-size:2.5rem,
  321. but if our baseline value was not expressed
  322. in rem we would have to use calc. */
  323. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  324. font-size: calc( 1rem + .6 * 1rem );
  325. line-height: 1.5em;
  326. }
  327. p, li, pre, details {
  328. margin-left: 3rem;
  329. }
  330. h1 {
  331. font-size: calc( 1.9rem + 1.5 * 1rem );
  332. line-height: 1.2em;
  333. }
  334. h2 {
  335. font-size: calc( 1.5rem + 1.5 * 1rem );
  336. line-height: 1.3em;
  337. }
  338. h3 {
  339. font-size: calc( 1.35rem + 1.5 * 1rem );
  340. line-height: 1.4em;
  341. }
  342. figure img {
  343. max-width: 500px;
  344. max-height: 500px;
  345. }
  346. }
  347. figure.unsquared {
  348. margin-bottom: 1.5rem;
  349. }
  350. figure.unsquared img {
  351. height: inherit;
  352. }
  353. @media print {
  354. body { font-size: 100%; }
  355. a:after { content: " (" attr(href) ")"; }
  356. a, a:link, a:visited, a:after {
  357. text-decoration: underline;
  358. text-shadow: none !important;
  359. background-image: none !important;
  360. background: white;
  361. color: black;
  362. }
  363. abbr[title] { border-bottom: 0; }
  364. abbr[title]:after { content: " (" attr(title) ")"; }
  365. img { page-break-inside: avoid; }
  366. @page { margin: 2cm .5cm; }
  367. h1, h2, h3 { page-break-after: avoid; }
  368. p3 { orphans: 3; widows: 3; }
  369. img {
  370. max-width: 250px !important;
  371. max-height: 250px !important;
  372. }
  373. nav, aside { display: none; }
  374. }
  375. ul.with_columns {
  376. column-count: 1;
  377. }
  378. @media (min-width: 20em) {
  379. ul.with_columns {
  380. column-count: 2;
  381. }
  382. }
  383. @media (min-width: 50em) {
  384. ul.with_columns {
  385. column-count: 3;
  386. }
  387. }
  388. ul.with_two_columns {
  389. column-count: 1;
  390. }
  391. @media (min-width: 20em) {
  392. ul.with_two_columns {
  393. column-count: 1;
  394. }
  395. }
  396. @media (min-width: 50em) {
  397. ul.with_two_columns {
  398. column-count: 2;
  399. }
  400. }
  401. .gallery {
  402. display: flex;
  403. flex-wrap: wrap;
  404. justify-content: space-around;
  405. }
  406. .gallery figure img {
  407. margin-left: 1rem;
  408. margin-right: 1rem;
  409. }
  410. .gallery figure figcaption {
  411. font-family: 'ConcourseT3'
  412. }
  413. footer {
  414. font-family: 'ConcourseT3';
  415. display: flex;
  416. flex-direction: column;
  417. border-top: 3px solid white;
  418. padding: 4rem 0;
  419. background-color: #07486c;
  420. color: white;
  421. }
  422. footer > * {
  423. max-width: 50rem;
  424. margin: 0 auto;
  425. }
  426. footer a {
  427. color: #f1c40f;
  428. }
  429. footer .avatar {
  430. width: 200px;
  431. height: 200px;
  432. border-radius: 50%;
  433. float: left;
  434. -webkit-shape-outside: circle();
  435. shape-outside: circle();
  436. margin-right: 2rem;
  437. padding: 2px 5px 5px 2px;
  438. background: white;
  439. border-left: 1px solid #f1c40f;
  440. border-top: 1px solid #f1c40f;
  441. border-right: 5px solid #f1c40f;
  442. border-bottom: 5px solid #f1c40f;
  443. }
  444. </style>
  445. <h1 class="single">
  446. <span><a id="jumper" href="#jumpto" title="Un peu perdu ?">?</a></span>
  447. Cours IUT : Flexbox et Styleguide
  448. <time>Publié le 16 novembre 2014</time>
  449. </h1>
  450. <article class="single">
  451. <blockquote>
  452. <p>Afin de faire émerger les pratiques personnelles des élèves, renforcer leurs connaissances, il me semble important d’instaurer l’horizontalité dans les rapports humains, au sein de la classe. J’espère pouvoir devenir alors un accompagnateur, un facilitateur, encadrant le processus de maîtrise des concepts de littérature et de grammaire. Le but est de fluidifier la communication, d’augmenter les feedbacks, de rendre les réussites plus accessibles.</p>
  453. <p><cite><em><a href="http://pedagogieagile.com/2014/11/09/une-classe-est-un-organisme-vivant/">D’une sélection artificielle à une sélection naturelle dans un écosystème complexe</a></em></cite></p>
  454. </blockquote>
  455. <p>Suite de <a href="/david/pro/enseignement/">mes aventures dans l’enseignement</a>, après <a href="/david/blog/2014/cours-iut-bases/">les bases</a>, on passe à du plus consistant. On commence par repartir de zéro sur un sujet qui leur tient à cœur et en plus petit groupes comme proposé en rétro. La première contrainte et d’établir un <em>styleguide</em> en parallèle du développement du site, c’est quelque chose que j’utilise <a href="/david/biologeek/archives/20070522-des-css-de-qualite/">depuis 7 ans</a> et qui dispose maintenant <a href="http://styleguides.maban.co.uk/">de nombreuses ressources</a>. J’aime <a href="http://la-cascade.ghost.io/creer-un-guide-de-style/">cette approche</a> pour plusieurs raisons :</p>
  456. <ul>
  457. <li>réflexion sur la sémantique lorsqu’on se rend compte du nombre d’<em>id</em>/<em>class</em> à ajouter au <em>styleguide</em> pour avoir quelque chose de potable ;</li>
  458. <li>documentation dynamique pour les divers contributeurs et pour soi-même, on a vite fait de dupliquer un style par méconnaissance du projet ;</li>
  459. <li>facilité d’expérimentation lors de refontes en applicant directement la nouvelle feuille de style au <em>styleguide</em>.</li>
  460. </ul>
  461. <p>Il s’avère que c’est aussi extrêmement utile en terme de retour pour corriger <a href="/david/blog/2013/tdd-conception-emergente/">un bug récalcitrant de façon visuelle</a>.</p>
  462. <p>Le second concept que je souhaite aborder est <a href="http://www.w3.org/TR/css3-flexbox/">Flexbox</a>, c’est encore relativement récent mais Vincent me rappelait à juste titre que l’<cite>« on enseigne pour aujourd’hui et pour demain »</cite> (pour hier, il reste les <em>polyfills</em>) et <em>Flexbox</em> est aussi un moyen de ne pas les dégoûter tout de suite des <em>CSS</em> :-). C’était bien sûr une occasion pour moi de me mettre à niveau dans ce domaine et d’expérimenter, <strong>participer à une formation reste la meilleure façon d’apprendre.</strong></p>
  463. <p>Quelques ressources sur le sujet :</p>
  464. <ul>
  465. <li><a href="http://www.alsacreations.com/tuto/lire/1493-css3-flexbox-layout-module.html">CSS3 Flexbox Layout module</a> chez Alsacréations</li>
  466. <li><a href="http://www.sketchingwithcss.com/samplechapter/cheatsheet.html">The Ultimate Flexbox Cheat Sheet</a></li>
  467. <li><a href="https://philipwalton.github.io/solved-by-flexbox/">Solved by Flexbox</a></li>
  468. <li><a href="http://jonibologna.com/flexbox-cheatsheet/">Flexbox Cheatsheet Cheatsheet</a></li>
  469. <li><a href="http://css-tricks.com/snippets/css/a-guide-to-flexbox/">A Complete Guide to Flexbox</a></li>
  470. </ul>
  471. <p>Si j’ai le temps, je terminerai sur l’approche <em>mobile</em> et les <em>media-queries</em> pour tirer pleinement partie de <em>Flexbox</em>. Je me rends compte à quel point les minutes sont comptées lorsqu’on est limité à 24 heures de cours sur un sujet aussi vaste…</p>
  472. </article>
  473. <section>
  474. <h3>Discussion suite à l’article :</h3>
  475. <article id="comment-1" class="comment">
  476. <blockquote>
  477. <p>(pour hier, il reste les polyfills) et Flexbox est aussi un moyen de ne pas les dégoûter tout de suite des CSS</p>
  478. </blockquote>
  479. <p>C’est aussi le moyen de comprendre l’horreur de l’utilisation prématurée d’une technologie avant maturation. La syntaxe ayant changée trois fois de suite en quelques années. En Asie de nombreux sites ne sont que flexbox 1ere ou 2eme génération.</p>
  480. <p>Conséquences :</p>
  481. <ul>
  482. <li>quand le site a la vieille syntaxe seulement, il ne marche pas dans les navigateurs autre que iOS (récent et courant)</li>
  483. <li>comme les sites l’utilisent abondamment sans corriger, Safari ne peut pas abandonner la vieille syntaxe, bien que la nouvelle syntaxe est présente.</li>
  484. <li>quand on conçoit un site aujourd’hui et si on veut donner une expérience aux utilisateurs possédant des iOS sur devices de vieilles générations donc bloqués à iOS 6, il faut ajouter la vieille syntaxe en plus de la syntaxe normale.</li>
  485. </ul>
  486. <p>Une bonne façon de comprendre les conséquences de notre pratique Web en tant que développeurs.</p>
  487. <p><cite>Karl Dubost, le <a href="#comment-1">2014-11-29 à 03:47</a></cite></p>
  488. </article>
  489. <article id="comment-2" class="comment">
  490. <blockquote>
  491. <p>Une bonne façon de comprendre les conséquences de notre pratique Web en tant que développeurs.</p>
  492. </blockquote>
  493. <p>Ce qui rappelle furieusement le "legacy" qu’a subi l’équipe Microsoft
  494. pendant des années, ou encore le moment où, faute de CSS préfixées, la
  495. propriété clip() n’a jamais pu être généralisée alors que c’était une
  496. bonne idée.</p>
  497. <p>Bis repetita et tout ça.</p>
  498. <p><cite>Stéphane Deschamps, le <a href="#comment-2">2014-11-29 à 12:45</a></cite></p>
  499. </article>
  500. <article id="comment-3" class="comment">
  501. <blockquote>
  502. <p>Bis repetita et tout ça.</p>
  503. </blockquote>
  504. <p>Je lisais hier <a href="http://css-tricks.com/using-flexbox/">cet article à ce sujet</a>.</p>
  505. <p>Confusant qu’ils disaient…</p>
  506. <p><cite>David Larlet, le <a href="#comment-3">2014-11-30 à 05:19</a></cite></p>
  507. </article>
  508. </section>
  509. <figure class="image" property="schema:image">
  510. <img src="/static/david/blog/2014/cours-iut-flexbox-styleguide.jpg" alt="" />
  511. </figure>
  512. <nav id="jumpto">
  513. <p>
  514. <a rel=prev href="/david/blog/2014/flux-donnees/">← Flux et données</a> | <a href="/david/blog/" title="Retour à la liste des expériences">↑</a> | <a rel=next href="/david/blog/2014/cours-iut-responsive-documentation/">Cours IUT : Responsive et Documentation →</a>
  515. </p>
  516. </nav>
  517. <footer>
  518. <div>
  519. <img src="/static/david/david-larlet-avatar.jpg" loading="lazy" class="avatar" width="200" height="200">
  520. <p>
  521. Bonjour/Hi!
  522. 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>
  523. 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>).
  524. </p>
  525. <p>
  526. 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>.
  527. </p>
  528. <p>
  529. Les dernières publications hebdomadaires sont :
  530. </p>
  531. <ul class="with_columns">
  532. <li>
  533. <a href="/david/stream/2019/12/31/">Merci</a>
  534. </li>
  535. <li>
  536. <a href="/david/stream/2019/12/27/">Intemporels</a>
  537. </li>
  538. <li>
  539. <a href="/david/stream/2019/12/24/">Outils</a>
  540. </li>
  541. <li>
  542. <a href="/david/stream/2019/12/17/">Origines</a>
  543. </li>
  544. <li>
  545. <a href="/david/stream/2019/12/10/">Publier</a>
  546. </li>
  547. <li>
  548. <a href="/david/stream/2019/12/03/">En forêt</a>
  549. </li>
  550. <li>
  551. <a href="/david/stream/2019/11/26/">Ecocentric</a>
  552. </li>
  553. <li>
  554. <a href="/david/stream/2019/11/19/">Se livrer</a>
  555. </li>
  556. <li>
  557. <a href="/david/stream/2019/11/12/">Dépendances</a>
  558. </li>
  559. <li>
  560. <a href="/david/stream/2019/11/05/">Positif</a>
  561. </li>
  562. <li>
  563. <a href="/david/stream/2019/10/29/">Dettes</a>
  564. </li>
  565. <li>
  566. <a href="/david/stream/2019/10/22/">Privilèges</a>
  567. </li>
  568. <li>
  569. <a href="/david/stream/2019/10/15/">Discrétion</a>
  570. </li>
  571. <li>
  572. <a href="/david/stream/2019/10/08/">Désespérance</a>
  573. </li>
  574. <li>
  575. <a href="/david/stream/2019/10/01/">Présent</a>
  576. </li>
  577. <li>
  578. <a href="/david/stream/2019/09/24/">Manifester</a>
  579. </li>
  580. <li>
  581. <a href="/david/stream/2019/09/17/">Arpenter</a>
  582. </li>
  583. <li>
  584. <a href="/david/stream/2019/09/10/">Nostalgie</a>
  585. </li>
  586. <li>
  587. <a href="/david/stream/2019/09/03/">Déconstruire</a>
  588. </li>
  589. <li>
  590. <a href="/david/stream/2019/08/27/">Documenter</a>
  591. </li>
  592. <li>
  593. <a href="/david/stream/2019/08/20/">Frustration</a>
  594. </li>
  595. <li>
  596. <a href="/david/stream/2019/08/13/">Holisme</a>
  597. </li>
  598. <li>
  599. <a href="/david/stream/2019/08/06/">1%</a>
  600. </li>
  601. <li>
  602. <a href="/david/stream/2019/07/30/">Exemplarité</a>
  603. </li>
  604. <li>
  605. <a href="/david/stream/2019/07/23/">Timelines</a>
  606. </li>
  607. <li>
  608. <a href="/david/stream/2019/07/16/">Écoute</a>
  609. </li>
  610. <li>
  611. <a href="/david/stream/2019/07/02/">Anxiété</a>
  612. </li>
  613. <li>
  614. <a href="/david/stream/2019/06/21/">À lier</a>
  615. </li>
  616. <li>
  617. <a href="/david/stream/2019/06/14/">Pauvreté</a>
  618. </li>
  619. <li>
  620. <a href="/david/stream/2019/06/07/">Amateur</a>
  621. </li>
  622. <li>
  623. <a href="/david/stream/2019/05/31/">Pollution</a>
  624. </li>
  625. <li>
  626. <a href="/david/stream/2019/05/24/">Apaisement</a>
  627. </li>
  628. <li>
  629. <a href="/david/stream/2019/05/10/">Folie</a>
  630. </li>
  631. <li>
  632. <a href="/david/stream/2019/05/03/">Sympathie</a>
  633. </li>
  634. <li>
  635. <a href="/david/stream/2019/04/12/">Péremption</a>
  636. </li>
  637. <li>
  638. <a href="/david/stream/2019/04/05/">Définitions</a>
  639. </li>
  640. <li>
  641. <a href="/david/stream/2019/03/29/">Acceptation</a>
  642. </li>
  643. <li>
  644. <a href="/david/stream/2019/03/22/">Dissonance</a>
  645. </li>
  646. <li>
  647. <a href="/david/stream/2019/03/15/">Reconnaissance</a>
  648. </li>
  649. <li>
  650. <a href="/david/stream/2019/03/08/">Lecture</a>
  651. </li>
  652. <li>
  653. <a href="/david/stream/2019/03/01/">Journaux</a>
  654. </li>
  655. <li>
  656. <a href="/david/stream/2019/02/22/">Écriture</a>
  657. </li>
  658. <li>
  659. <a href="/david/stream/2019/02/15/">Kyriarchie</a>
  660. </li>
  661. <li>
  662. <a href="/david/stream/2019/02/08/">Mots-serrures</a>
  663. </li>
  664. <li>
  665. <a href="/david/stream/2019/02/01/">Sans voie</a>
  666. </li>
  667. <li>
  668. <a href="/david/stream/2019/01/25/">Auto-diagnostic</a>
  669. </li>
  670. <li>
  671. <a href="/david/stream/2019/01/18/">Agilité</a>
  672. </li>
  673. <li>
  674. <a href="/david/stream/2019/01/11/">Métaphores</a>
  675. </li>
  676. <li>
  677. <a href="/david/stream/2019/01/04/">Balbutiements</a>
  678. </li>
  679. </ul>
  680. <p>
  681. Voici quelques articles choisis :
  682. <a href="/david/blog/2019/faire-equipe/" title="Accéder à l’article complet">Faire équipe</a>,
  683. <a href="/david/blog/2018/bivouac-automnal/" title="Accéder à l’article complet">Bivouac automnal</a>,
  684. <a href="/david/blog/2018/commodite-effondrement/" title="Accéder à l’article complet">Commodité et effondrement</a>,
  685. <a href="/david/blog/2017/donnees-communs/" title="Accéder à l’article complet">Des données aux communs</a>,
  686. <a href="/david/blog/2016/accompagner-enfant/" title="Accéder à l’article complet">Accompagner un enfant</a>,
  687. <a href="/david/blog/2016/senior-developer/" title="Accéder à l’article complet">Senior developer</a>,
  688. <a href="/david/blog/2016/illusion-sociale/" title="Accéder à l’article complet">L’illusion sociale</a>,
  689. <a href="/david/blog/2016/instantane-scopyleft/" title="Accéder à l’article complet">Instantané Scopyleft</a>,
  690. <a href="/david/blog/2016/enseigner-web/" title="Accéder à l’article complet">Enseigner le Web</a>,
  691. <a href="/david/blog/2016/simplicite-defaut/" title="Accéder à l’article complet">Simplicité par défaut</a>,
  692. <a href="/david/blog/2016/minimalisme-esthetique/" title="Accéder à l’article complet">Minimalisme et esthétique</a>,
  693. <a href="/david/blog/2014/un-web-omni-present/" title="Accéder à l’article complet">Un web omni-présent</a>,
  694. <a href="/david/blog/2014/manifeste-developpeur/" title="Accéder à l’article complet">Manifeste de développeur</a>,
  695. <a href="/david/blog/2013/confort-convivialite/" title="Accéder à l’article complet">Confort et convivialité</a>,
  696. <a href="/david/blog/2013/testament-numerique/" title="Accéder à l’article complet">Testament numérique</a>,
  697. et <a href="/david/blog/" title="Accéder aux archives">bien d’autres…</a>
  698. </p>
  699. <p>
  700. 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>.
  701. </p>
  702. <p>
  703. Je ne traque pas ta navigation mais mon
  704. <abbr title="Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33.184162340">hébergeur</abbr>
  705. conserve des logs d’accès.
  706. </p>
  707. </div>
  708. </footer>
  709. <script type="text/javascript">
  710. ;(_ => {
  711. const jumper = document.getElementById('jumper')
  712. jumper.addEventListener('click', e => {
  713. e.preventDefault()
  714. const anchor = e.target.getAttribute('href')
  715. const targetEl = document.getElementById(anchor.substring(1))
  716. targetEl.scrollIntoView({behavior: 'smooth'})
  717. })
  718. })()
  719. </script>
  720. <script>
  721. /* Service workers */
  722. if (navigator.serviceWorker) {
  723. window.addEventListener('load', function () {
  724. var selector = 'a[href^="/david/cache/"], a[rel=prev], a[rel=next]'
  725. function sendLinks (selector) {
  726. var links = [].slice.call(document.querySelectorAll(selector)).map(function (link) {
  727. return link.getAttribute('href')
  728. })
  729. links.push(location.pathname) // Put the current page in cache too.
  730. navigator.serviceWorker.controller.postMessage({ links: links })
  731. }
  732. navigator.serviceWorker.getRegistration()
  733. .then(function (registration) {
  734. if (!registration || !navigator.serviceWorker.controller) {
  735. return navigator.serviceWorker.register('/serviceworker.js')
  736. .then(navigator.serviceWorker.ready)
  737. .then(function () {
  738. console.log('[ServiceWorker] Ready to go!')
  739. })
  740. .catch(console.error.bind(console))
  741. } else {
  742. console.log('[ServiceWorker] Send links via registration')
  743. sendLinks(selector)
  744. }
  745. })
  746. navigator.serviceWorker.addEventListener('controllerchange', function () {
  747. console.log('[ServiceWorker] Send links via controller change')
  748. sendLinks(selector)
  749. })
  750. navigator.serviceWorker.addEventListener('message', function (event) {
  751. var link = document.querySelector('a[href="' + event.data.link + '"]')
  752. if (event.data.status && link) {
  753. link.style.backgroundColor = '#2d7474'
  754. link.style.color = '#f0f0ea'
  755. link.setAttribute('title', 'En cache pour consultation sans connexion')
  756. }
  757. })
  758. })
  759. } else {
  760. console.warn('[ServiceWorker] No cache for old browsers.')
  761. }
  762. </script>