A place to cache linked articles (think custom and personal wayback machine)
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 52KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913
  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>A Responsive Guide to Type Sizing (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="http://blog.cloudfour.com/responsive-guide-to-type-sizing/">
  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. A Responsive Guide to Type Sizing (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="http://blog.cloudfour.com/responsive-guide-to-type-sizing/">Source originale du contenu</a></h3>
  445. <p>When starting new projects, a CSS builder&#8217;s initial concerns tend to involve typography. Setting a typographic foundation with the right mixture of ingredients can form something solid enough to support many other building blocks of design. It&#8217;s an approach that makes structural sense.</p>
  446. <p><em>Proportions</em> are a key ingredient to the mixture. Calibrating your type proportions for a balance of aesthetics and order can be an obsessive undertaking. It’s a challenge getting proportions right for a given screen size, let alone <em>any possible</em> screen size. This process can be less challenging &#8212; even for responsive designs &#8212; if you use a <em>modular scale</em> and let math do the work for you.</p>
  447. <h3>Using a modular scale for typographic proportions</h3>
  448. <p>In his <a href="http://alistapart.com/article/more-meaningful-typography">detailed article</a> on the subject, Tim Brown demonstrates using a modular scale for composing type. He explains how compositions can benefit from using numbers that relate to each other in a meaningful way:</p>
  449. <blockquote><p>Modular scales[&#8230;] help us achieve a visual harmony not found in compositions that use arbitrary, conventional, or easily divisible numbers.</p></blockquote>
  450. <p>This <em>modulation-based</em> approach is particularly useful for determining type sizes. Selecting sizes using a ratio (instead of guessing) yields a more harmonious range of proportions.</p>
  451. <p>With tools like <a href="http://www.modularscale.com">this indispensable calculator</a>, you can see how different <em>bases</em> and <em>ratios</em> affect your scale. These are the variables in your scale&#8217;s equation. The value produced by multiplying or dividing these variables is a <em>step</em> on your scale. Repeating the operation on each resulting value forms a new step:</p>
  452. <figure style="margin:1em 0; text-align:center">
  453. <table style="display:table; width:100%; table-layout:fixed">
  454. <thead>
  455. <tr>
  456. <th style="text-align:center">Step</th>
  457. <th style="text-align:center">Math</th>
  458. <th style="text-align:center">Result</th>
  459. </tr>
  460. </thead>
  461. <tbody style="font:1em 'source code pro',monospace">
  462. <tr>
  463. <td>+3</td>
  464. <td>&nbsp;40 × 2</td>
  465. <td>80&nbsp;&nbsp;&nbsp;</td>
  466. </tr>
  467. <tr>
  468. <td>+2</td>
  469. <td>&nbsp;20 × 2</td>
  470. <td>40&nbsp;&nbsp;&nbsp;</td>
  471. </tr>
  472. <tr>
  473. <td>+1</td>
  474. <td>&nbsp;10 × 2</td>
  475. <td>20&nbsp;&nbsp;&nbsp;</td>
  476. </tr>
  477. <tr style="opacity:.5">
  478. <td>&nbsp;0</td>
  479. <td>&nbsp;none</td>
  480. <td>10&nbsp;&nbsp;&nbsp;</td>
  481. </tr>
  482. <tr>
  483. <td>−1</td>
  484. <td>&nbsp;10 ÷ 2</td>
  485. <td>&nbsp;5&nbsp;&nbsp;&nbsp;</td>
  486. </tr>
  487. <tr>
  488. <td>−2</td>
  489. <td>&nbsp;&nbsp;5 ÷ 2</td>
  490. <td>&nbsp;2.5&nbsp;</td>
  491. </tr>
  492. <tr>
  493. <td>−3</td>
  494. <td>2.5 ÷ 2</td>
  495. <td>&nbsp;1.25</td>
  496. </tr>
  497. </tbody>
  498. </table>
  499. <figcaption style="font-style:italic">
  500. Example with a base of 10 and a ratio of 2<br />
  501. </figcaption>
  502. </figure>
  503. <p>You can also associate each step in the sequence with the number of times the ratio has been multiplied or divided:</p>
  504. <figure style="margin:1em 0; text-align:center">
  505. <table style="display:table; width:100%; table-layout:fixed">
  506. <thead>
  507. <tr>
  508. <th style="text-align:center">Step</th>
  509. <th style="text-align:center">Math</th>
  510. <th style="text-align:center">Result</th>
  511. </tr>
  512. </thead>
  513. <tbody style="font:1em 'source code pro',monospace">
  514. <tr>
  515. <td>+3</td>
  516. <td>10 × 2 × 2 × 2</td>
  517. <td>80&nbsp;&nbsp;&nbsp;</td>
  518. </tr>
  519. <tr>
  520. <td>+2</td>
  521. <td>10 × 2 × 2&nbsp;&nbsp;&nbsp;&nbsp;</td>
  522. <td>40&nbsp;&nbsp;&nbsp;</td>
  523. </tr>
  524. <tr>
  525. <td>+1</td>
  526. <td>10 × 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  527. <td>20&nbsp;&nbsp;&nbsp;</td>
  528. </tr>
  529. <tr style="opacity:.5">
  530. <td>&nbsp;0</td>
  531. <td><em>none</em></td>
  532. <td>10&nbsp;&nbsp;&nbsp;</td>
  533. </tr>
  534. <tr>
  535. <td>−1</td>
  536. <td>10 ÷ 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  537. <td>&nbsp;5&nbsp;&nbsp;&nbsp;</td>
  538. </tr>
  539. <tr>
  540. <td>−2</td>
  541. <td>10 ÷ 2 ÷ 2&nbsp;&nbsp;&nbsp;&nbsp;</td>
  542. <td>&nbsp;2.5&nbsp;</td>
  543. </tr>
  544. <tr>
  545. <td>−3</td>
  546. <td>10 ÷ 2 ÷ 2 ÷ 2</td>
  547. <td>&nbsp;1.25</td>
  548. </tr>
  549. </tbody>
  550. </table>
  551. </figure>
  552. <p>Experimenting with base and ratio parameters is a quick way to gauge how much proportional contrast is right for your project. Compare the following scales:</p>
  553. <ul>
  554. <li><a href="http://www.modularscale.com/?1&amp;em&amp;1.618&amp;web&amp;text">The golden section</a> (1.618)</li>
  555. <li><a href="http://www.modularscale.com/?1&amp;em&amp;1.2&amp;web&amp;text">The minor third</a> (1.2)</li>
  556. </ul>
  557. <p>Due to their ratios, these scales have wildly differing degrees of change between each step. The &#8220;golden section&#8221; ratio yields much more change than the &#8220;minor third&#8221;. Consider how much change you&#8217;re likely to need, and how it correlates with varying screen sizes and content hierarchy.</p>
  558. <figure style="margin:1em 0">
  559. <a href="http://3w7ov13ob0hk2kk1w147yffjlu5.wpengine.netdna-cdn.com/wp-content/uploads/2015/12/modularscale-ratios_compared.png"><img src="http://3w7ov13ob0hk2kk1w147yffjlu5.wpengine.netdna-cdn.com/wp-content/uploads/2015/12/modularscale-ratios_compared.png" alt="Comparing two scale ratios"></a></p>
  560. <figcaption style="text-align:center; font-style:italic">
  561. Scales with the ratios of 1.618 and 1.2 compared on <a href="http://modularscale.com">modularscale.com</a><br />
  562. </figcaption>
  563. </figure>
  564. <p>The balance of typographic contrast in scale is dependent on screen size. A scale that works well on a large screen may have too much contrast for a small screen (and feel obtrusive). Likewise, a scale that is harmonious on a small screen may be too subtle when viewed on a large screen.</p>
  565. <p>One solution to this conundrum is to create a scale intended for small screens that is also capable of adapting for large ones. The first thing to consider when creating that scale is which ratio to use.</p>
  566. <figure style="margin:1em 0; text-align:center">
  567. <table style="display:table; width:100%; table-layout:fixed">
  568. <thead>
  569. <tr>
  570. <th style="text-align:center">Step</th>
  571. <th style="text-align:center">Font size</th>
  572. <th>Result</th>
  573. </tr>
  574. </thead>
  575. <tbody style="font-family:'source code pro',monospace">
  576. <tr>
  577. <td>&nbsp;0</td>
  578. <td>&nbsp;&nbsp;1.0em</td>
  579. <td>
  580. <div style="font-size:1em; text-align:left">Abcdefg</div>
  581. </td>
  582. </tr>
  583. <tr>
  584. <td>+1</td>
  585. <td>&nbsp;&nbsp;1.2em</td>
  586. <td>
  587. <div style="font-size:1.2em; text-align:left">Abcdefg</div>
  588. </td>
  589. </tr>
  590. <tr>
  591. <td>+2</td>
  592. <td>&nbsp;1.44em</td>
  593. <td>
  594. <div style="font-size:1.44em; text-align:left">Abcdefg</div>
  595. </td>
  596. </tr>
  597. <tr>
  598. <td>+3</td>
  599. <td>1.728em</td>
  600. <td>
  601. <div style="font-size:1.728em; text-align:left">Abcdefg</div>
  602. </td>
  603. </tr>
  604. <tr>
  605. <td>+4</td>
  606. <td>2.074em</td>
  607. <td>
  608. <div style="font-size:2.074em; text-align:left">Abcdefg</div>
  609. </td>
  610. </tr>
  611. <tr>
  612. <td>+5</td>
  613. <td>2.488em</td>
  614. <td>
  615. <div style="font-size:2.488em; text-align:left">Abcdefg</div>
  616. </td>
  617. </tr>
  618. </tbody>
  619. </table>
  620. <figcaption style="font-style:italic">
  621. The minor third ratio (1.2) with a base of 1em<br />
  622. </figcaption>
  623. </figure>
  624. <p><a href="http://www.modularscale.com/?1&amp;em&amp;1.2&amp;web&amp;text">The minor third</a> ratio of 1.2 yields a gradually changing range of sizes. They all feel reasonable for small screens, and are distinct enough for levels of typographic hierarchy. At step #5, the resulting size can still be used while retaining a reasonable number of characters per line. With these attributes, this ratio feels like a good selection for small screen proportions.<sup style="line-height:0"><a href="#responsive-guide-to-type-sizing-fn1">1</a></sup></p>
  625. <h3>Applying your scale from the ground up</h3>
  626. <p>After figuring out a scale that works well for your project, you&#8217;ll probably want to put it into practice. CSS offers a few options:</p>
  627. <ol>
  628. <li>Copying and pasting numbers for a bunch of property values</li>
  629. <li>Using preprocessors like <a href="http://sass-lang.com">Sass</a> with built-in math capabilities</li>
  630. <li>Using the native CSS <code>calc()</code> function</li>
  631. </ol>
  632. <p>The following examples employ option #3, using <a href="https://github.com/postcss">PostCSS</a> in order to provide browser support for <code>calc()</code> and <code>var()</code>. If you prefer a different CSS processor, you can apply the same operations with that tool&#8217;s own arithmetic and variable syntax.<sup style="line-height:0"><a href="#responsive-guide-to-type-sizing-fn2">2</a></sup></p>
  633. <p>For more complex modular scale applications, you should check out these plugins available for <a href="https://github.com/postcss">PostCSS</a> and <a href="http://sass-lang.com">Sass</a>:</p>
  634. <ul>
  635. <li><a href="https://github.com/kristoferjoseph/postcss-modular-scale">postcss-modular-scale</a></li>
  636. <li><a href="https://github.com/modularscalemodularscale-sass">modularscale-sass</a></li>
  637. </ul>
  638. <p>They provide a cleaner syntax than <code>calc()</code> for getting scale values, and also support multiple values for <em>base</em> and <em>ratio</em>.</p>
  639. <h4>Configuring the variables</h4>
  640. <p>The first step is to define values for the <em>ratio</em> and <em>base</em> variables that much of the scale logic depends on:</p>
  641. <div class="wp_syntax"><table><tr><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #3333ff;">:root </span><span style="color: #00AA00;">&#123;</span>
  642. --ratio<span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">1.2</span><span style="color: #00AA00;">;</span>
  643. --base<span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">1</span><span style="color: #00AA00;">;</span>
  644. --base-em<span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--base<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> <span style="color: #933;">1em</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
  645. --base-px<span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--base<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> <span style="color: #933;">16px</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
  646. <span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>
  647. <p>There are three base-related properties defined here. This is to provide flexibility when different CSS units (or no units) are needed.</p>
  648. <p>Next, you need to establish the range of scale steps you&#8217;re likely to use:</p>
  649. <div class="wp_syntax"><table><tr><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #3333ff;">:root </span><span style="color: #00AA00;">&#123;</span>
  650. --ms0<span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">1</span><span style="color: #00AA00;">;</span>
  651. --ms1<span style="color: #00AA00;">:</span> var<span style="color: #00AA00;">&#40;</span>--ratio<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/* 1.2 */</span>
  652. --ms2<span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--ratio<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> var<span style="color: #00AA00;">&#40;</span>--ms1<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/* 1.44 */</span>
  653. --ms3<span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--ratio<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> var<span style="color: #00AA00;">&#40;</span>--ms2<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/* 1.728 */</span>
  654. --ms4<span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--ratio<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> var<span style="color: #00AA00;">&#40;</span>--ms3<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/* 2.074 */</span>
  655. --ms5<span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--ratio<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> var<span style="color: #00AA00;">&#40;</span>--ms4<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/* 2.488 */</span>
  656. --ms6<span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--ratio<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> var<span style="color: #00AA00;">&#40;</span>--ms5<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/* 2.986 */</span>
  657. --ms7<span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--ratio<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> var<span style="color: #00AA00;">&#40;</span>--ms6<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/* 3.583 */</span>
  658. <span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>
  659. <p>With these step properties defined, you can now compute them with your base to get values from your scale:</p>
  660. <div class="wp_syntax"><table><tr><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--base-em<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> var<span style="color: #00AA00;">&#40;</span>--ms1<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/* 1.2em */</span>
  661. <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--base-em<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> var<span style="color: #00AA00;">&#40;</span>--ms2<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/* 1.44em */</span></pre></td></tr></table></div>
  662. <h4>Establishing default sizes</h4>
  663. <p>The browser default <code>font-size</code> paired with the scale step of 1.44 for <code>line-height</code> feels like an <a href="http://practicaltypography.com/line-spacing.html">appropriate choice</a> for body copy:</p>
  664. <div class="wp_syntax"><table><tr><td class="code"><pre class="css" style="font-family:monospace;">body <span style="color: #00AA00;">&#123;</span>
  665. <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--base-em<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> var<span style="color: #00AA00;">&#40;</span>--ms0<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
  666. <span style="color: #000000; font-weight: bold;">line-height</span><span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--base<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> var<span style="color: #00AA00;">&#40;</span>--ms2<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
  667. <span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>
  668. <p>Headings probably don&#8217;t need to consist of six different sizes (as there are other ways to differentiate them). However, if you do wish to incorporate a different size for each, you can use a series of steps from your scale:</p>
  669. <div class="wp_syntax"><table><tr><td class="code"><pre class="css" style="font-family:monospace;">h6 <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--base-em<span style="color: #00AA00;">&#41;</span> / var<span style="color: #00AA00;">&#40;</span>--ms1<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
  670. h5 <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--base-em<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> var<span style="color: #00AA00;">&#40;</span>--ms0<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
  671. h4 <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--base-em<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> var<span style="color: #00AA00;">&#40;</span>--ms1<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
  672. h3 <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--base-em<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> var<span style="color: #00AA00;">&#40;</span>--ms2<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
  673. h2 <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--base-em<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> var<span style="color: #00AA00;">&#40;</span>--ms3<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
  674. h1 <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--base-em<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> var<span style="color: #00AA00;">&#40;</span>--ms4<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>
  675. <p>In addition to heading <code>font-size</code>, you should also consider the values for <code>line-height</code>.</p>
  676. <blockquote class="twitter-tweet" lang="en"><p lang="en" dir="ltr">One of the most overlooked things in front-end development is the line-height of wrapped headings. They&#39;re often way too large</p>
  677. <p>&mdash; Matt Stow (@stowball) <a href="https://twitter.com/stowball/status/672710430628810752">December 4, 2015</a></p></blockquote>
  678. <p><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
  679. <p>Using a lower step of the scale in this case can benefit readability when lines are wrapping:</p>
  680. <div class="wp_syntax"><table><tr><td class="code"><pre class="css" style="font-family:monospace;">h3<span style="color: #00AA00;">,</span>
  681. h2 <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">line-height</span><span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--base<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> var<span style="color: #00AA00;">&#40;</span>--ms1<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
  682. h1 <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">line-height</span><span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--base<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> var<span style="color: #00AA00;">&#40;</span>--ms0<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>
  683. <p>With these defaults for body copy and headings in place, you have a nice foundational hierarchy that works well on small screens:</p>
  684. <figure style="margin:1em 0">
  685. <a href="http://3w7ov13ob0hk2kk1w147yffjlu5.wpengine.netdna-cdn.com/wp-content/uploads/2015/12/modularscale-ratio_in_use1.png"><img src="http://3w7ov13ob0hk2kk1w147yffjlu5.wpengine.netdna-cdn.com/wp-content/uploads/2015/12/modularscale-ratio_in_use1.png" alt="Ratio of 1.2 on a small screen"></a></p>
  686. <figcaption style="text-align:center; font-style:italic">
  687. A scale with a ratio of 1.2 applied to content on a 320&#215;480 screen<br />
  688. </figcaption>
  689. </figure>
  690. <h3>Expanding your scale when proportional contrast is needed</h3>
  691. <p>Increasing screen sizes and viewing distances will reveal new typographic requirements for your layout. Your body copy and the contrast in scale of all typographic elements will likely need adjustments to suit the new context:</p>
  692. <div class="wp_syntax"><table><tr><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #a1a100;">@media (min-width: 480px) {</span>
  693. html <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--base-px<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> var<span style="color: #00AA00;">&#40;</span>--ms1<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
  694. <span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>
  695. <p>Bumping the global font size like this is a practical adjustment that requires little effort. While this practice is <a href="https://bugsnag.com/blog/responsive-typography-with-rems">common</a>, it&#8217;s worth noting that even small tweaks like this can leverage steps from your modular scale. Rather than incrementing the size by an arbitrary few pixels or a percentage, you can use your scale to determine the new value.</p>
  696. <p>In line with amplifying your body copy, you might also want to increase the amount of change between each heading size. You can do this by overriding the larger headings with sizes from higher up your scale:</p>
  697. <div class="wp_syntax"><table><tr><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #a1a100;">@media (min-width: 768px) {</span>
  698. h3 <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--base-em<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> var<span style="color: #00AA00;">&#40;</span>--ms3<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
  699. h2 <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--base-em<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> var<span style="color: #00AA00;">&#40;</span>--ms4<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
  700. h1 <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--base-em<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> var<span style="color: #00AA00;">&#40;</span>--ms5<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
  701. <span style="color: #00AA00;">&#125;</span>
  702. &nbsp;
  703. <span style="color: #a1a100;">@media (min-width: 1024px) {</span>
  704. h2 <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--base-em<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> var<span style="color: #00AA00;">&#40;</span>--ms5<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
  705. h1 <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--base-em<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> var<span style="color: #00AA00;">&#40;</span>--ms6<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
  706. <span style="color: #00AA00;">&#125;</span>
  707. &nbsp;
  708. <span style="color: #a1a100;">@media (min-width: 1360px) {</span>
  709. h1 <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--base-em<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> var<span style="color: #00AA00;">&#40;</span>--ms7<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
  710. <span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>
  711. <p>With these size adjustments in place, viewport width will determine how far up the scale your headings are allowed to climb:</p>
  712. <p><iframe height='480' scrolling='no' src='//codepen.io/erikjung/embed/XmOdEo/?height=480&#038;theme-id=0&#038;default-tab=result' frameborder='no' allowtransparency='true' allowfullscreen='true' style='width: 100%;'>See the Pen <a href='http://codepen.io/erikjung/pen/XmOdEo/'>Responsive Type Sizing</a> by Erik Jung (<a href='http://codepen.io/erikjung'>@erikjung</a>) on <a href='http://codepen.io'>CodePen</a>.<br />
  713. </iframe></p>
  714. <p>(View <a href="http://codepen.io/erikjung/pen/XmOdEo">the full CodePen</a> to see how the text size responds.)</p>
  715. <h3>Broadening the usage of your scale</h3>
  716. <p>Limiting your scale&#8217;s influence to just specific elements would be <a href="https://www.youtube.com/watch?v=Ru9e2rTHeuk">highly illogical</a>. You want flexible, abstracted styles to build complex interfaces with. Utility classes can provide that flexibility:</p>
  717. <div class="wp_syntax"><table><tr><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #6666ff;">.u-textBigger</span> <span style="color: #00AA00;">&#123;</span>
  718. <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--base-em<span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">*</span> var<span style="color: #00AA00;">&#40;</span>--ms1<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
  719. <span style="color: #00AA00;">&#125;</span>
  720. &nbsp;
  721. <span style="color: #6666ff;">.u-textSmaller</span> <span style="color: #00AA00;">&#123;</span>
  722. <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> calc<span style="color: #00AA00;">&#40;</span>var<span style="color: #00AA00;">&#40;</span>--base-em<span style="color: #00AA00;">&#41;</span> / var<span style="color: #00AA00;">&#40;</span>--ms1<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
  723. <span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>
  724. <p>With one ratio relating all the text sizes, anything affected by these classes will adhere to the steps of your scale. Even when combining or nesting the classes, the resulting text will remain in relative proportion:</p>
  725. <div class="wp_syntax"><table><tr><td class="code"><pre class="html5" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;u-textBigger&quot;</span>&gt;</span>
  726. <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h2</span>&gt;</span>Now I'm as big as an H1<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h2</span>&gt;</span>
  727. <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h3</span>&gt;</span>Now I'm as big as an H2<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h3</span>&gt;</span>
  728. <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">p</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;u-textSmaller&quot;</span>&gt;</span>I haven't changed at all.<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">p</span>&gt;</span>
  729. <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
  730. &nbsp;
  731. <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;u-textSmaller&quot;</span>&gt;</span>
  732. <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;u-textSmaller&quot;</span>&gt;</span>
  733. <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;u-textBigger&quot;</span>&gt;</span>
  734. <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">span</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;u-textBigger&quot;</span>&gt;</span>Same as it ever was.<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;</span>
  735. <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
  736. <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
  737. <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></pre></td></tr></table></div>
  738. <p><iframe height='320' scrolling='no' src='//codepen.io/erikjung/embed/RrrzVr/?height=320&#038;theme-id=0&#038;default-tab=result' frameborder='no' allowtransparency='true' allowfullscreen='true' style='width: 100%;'>See the Pen <a href='http://codepen.io/erikjung/pen/RrrzVr/'>Responsive Type Sizing (utils)</a> by Erik Jung (<a href='http://codepen.io/erikjung'>@erikjung</a>) on <a href='http://codepen.io'>CodePen</a>.<br />
  739. </iframe></p>
  740. <h3>TL;DR</h3>
  741. <ul>
  742. <li>Use a modular scale to define your typographic proportions.</li>
  743. <li>Create a scale that is flexible enough to work on many screen sizes.</li>
  744. <li>Use higher steps from your scale when more proportional contrast is needed.</li>
  745. <li>Don&#8217;t limit the use of your scale to specific elements.</li>
  746. </ul>
  747. <h3>Further reading</h3>
  748. <ul>
  749. <li><a href="http://alistapart.com/article/more-meaningful-typography">More Meaningful Typography</a> by Tim Brown</li>
  750. <li><a href="http://typecast.com/blog/a-more-modern-scale-for-web-typography">A More Modern Scale for Web Typography</a> by Jason Pamental</li>
  751. <li><a href="http://madebymike.com.au/writing/precise-control-responsive-typography">Precise control over responsive typography</a> by Mike Riethmuller</li>
  752. <li><a href="https://bugsnag.com/blog/responsive-typography-with-modular-scale">Responsive typography with Modular Scale</a> by Max Luster</li>
  753. <li><a href="http://www.modularscale.com">Modular Scale Calculator</a></li>
  754. <li><a href="http://www.pearsonified.com/typography">Golden Ratio Typography Calculator</a></li>
  755. <li><a href="http://www.gridlover.net/try">Gridlover</a></li>
  756. <li><a href="http://type-scale.com">Type Scale</a></li>
  757. </ul>
  758. <p><hr />
  759. <h5>Footnotes</h5>
  760. <ol style="font-size:80%;">
  761. <li id="responsive-guide-to-type-sizing-fn1">
  762. Using one base and one ratio isn&#8217;t the only way to arrive at a scale that works within small screen limitations. You can also create a <em>multi-stranded</em> scale by using multiple base or ratio values instead of just one. Here is an <a href="http://www.modularscale.com/?1,4&#038;em&#038;1.5&#038;web&#038;text">example</a> using a secondary base value to shorten the distance between each step. See <a href="http://modularscale.com">modularscale.com</a> for a better explanation.
  763. </li>
  764. <li id="responsive-guide-to-type-sizing-fn2">
  765. The <a href="http://github.com/cssnext/postcss-cssnext">postcss-cssnext</a> plugin can be used to transform the output of <code>calc()</code> and <code>var()</code>.
  766. </li>
  767. </ol></p>
  768. </article>
  769. </section>
  770. <nav id="jumpto">
  771. <p>
  772. <a href="/david/blog/">Accueil du blog</a> |
  773. <a href="http://blog.cloudfour.com/responsive-guide-to-type-sizing/">Source originale</a> |
  774. <a href="/david/stream/2019/">Accueil du flux</a>
  775. </p>
  776. </nav>
  777. <footer>
  778. <div>
  779. <img src="/static/david/david-larlet-avatar.jpg" loading="lazy" class="avatar" width="200" height="200">
  780. <p>
  781. Bonjour/Hi!
  782. 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>
  783. 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>).
  784. </p>
  785. <p>
  786. 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>.
  787. </p>
  788. <p>
  789. Voici quelques articles choisis :
  790. <a href="/david/blog/2019/faire-equipe/" title="Accéder à l’article complet">Faire équipe</a>,
  791. <a href="/david/blog/2018/bivouac-automnal/" title="Accéder à l’article complet">Bivouac automnal</a>,
  792. <a href="/david/blog/2018/commodite-effondrement/" title="Accéder à l’article complet">Commodité et effondrement</a>,
  793. <a href="/david/blog/2017/donnees-communs/" title="Accéder à l’article complet">Des données aux communs</a>,
  794. <a href="/david/blog/2016/accompagner-enfant/" title="Accéder à l’article complet">Accompagner un enfant</a>,
  795. <a href="/david/blog/2016/senior-developer/" title="Accéder à l’article complet">Senior developer</a>,
  796. <a href="/david/blog/2016/illusion-sociale/" title="Accéder à l’article complet">L’illusion sociale</a>,
  797. <a href="/david/blog/2016/instantane-scopyleft/" title="Accéder à l’article complet">Instantané Scopyleft</a>,
  798. <a href="/david/blog/2016/enseigner-web/" title="Accéder à l’article complet">Enseigner le Web</a>,
  799. <a href="/david/blog/2016/simplicite-defaut/" title="Accéder à l’article complet">Simplicité par défaut</a>,
  800. <a href="/david/blog/2016/minimalisme-esthetique/" title="Accéder à l’article complet">Minimalisme et esthétique</a>,
  801. <a href="/david/blog/2014/un-web-omni-present/" title="Accéder à l’article complet">Un web omni-présent</a>,
  802. <a href="/david/blog/2014/manifeste-developpeur/" title="Accéder à l’article complet">Manifeste de développeur</a>,
  803. <a href="/david/blog/2013/confort-convivialite/" title="Accéder à l’article complet">Confort et convivialité</a>,
  804. <a href="/david/blog/2013/testament-numerique/" title="Accéder à l’article complet">Testament numérique</a>,
  805. et <a href="/david/blog/" title="Accéder aux archives">bien d’autres…</a>
  806. </p>
  807. <p>
  808. 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>.
  809. </p>
  810. <p>
  811. Je ne traque pas ta navigation mais mon
  812. <abbr title="Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33.184162340">hébergeur</abbr>
  813. conserve des logs d’accès.
  814. </p>
  815. </div>
  816. </footer>
  817. <script type="text/javascript">
  818. ;(_ => {
  819. const jumper = document.getElementById('jumper')
  820. jumper.addEventListener('click', e => {
  821. e.preventDefault()
  822. const anchor = e.target.getAttribute('href')
  823. const targetEl = document.getElementById(anchor.substring(1))
  824. targetEl.scrollIntoView({behavior: 'smooth'})
  825. })
  826. })()
  827. </script>