{"id":3099,"date":"2012-10-29T08:59:33","date_gmt":"2012-10-29T07:59:33","guid":{"rendered":"https:\/\/www.creativejuiz.fr\/blog\/?p=3099"},"modified":"2013-06-05T11:04:22","modified_gmt":"2013-06-05T09:04:22","slug":"taille-police-en-fonction-largeur-ecran-viewport","status":"publish","type":"post","link":"https:\/\/www.creativejuiz.fr\/blog\/veille-technologique\/taille-police-en-fonction-largeur-ecran-viewport","title":{"rendered":"Une taille de police en fonction de la largeur d&rsquo;\u00e9cran"},"content":{"rendered":"<p>J&rsquo;ai souvent eu l&rsquo;occasion \u00e0 travers mes divers projets Web mobile (responsive), d&rsquo;avoir \u00e0 r\u00e9duire la taille des polices de titre car m\u00eame un simple mot ne passait pas en largeur. Pour \u00e9viter d&rsquo;avoir une c\u00e9sure sur chaque mot du titre, le plus simple \u00e9tait de s&rsquo;autoriser une r\u00e9duction approximative du corps. (approximative&hellip; fa\u00e7on de parler). Je vous propose des solutions relative.<!--more--><\/p>\n<h2>CSS3 \u00e0 la rescousse<\/h2>\n<p>Il existe une unit\u00e9 encore peu connue car prise en charge par nos navigateurs depuis peu de temps, il s&rsquo;agit des unit\u00e9s relative au viewport. Pour comprendre ce qu&rsquo;est le viewport, je vous invite \u00e0 lire cette article de Rapha\u00ebl Goetter : <a href=\"http:\/\/www.alsacreations.com\/article\/lire\/1490-comprendre-le-viewport-dans-le-web-mobile.html\">Comprendre le viewport dans le Web mobile<\/a>.<\/p>\n<p>Pour r\u00e9sumer, nous allons proposer un corps de texte qui d\u00e9pend de la largeur de la fen\u00eatre du navigateur.<br \/>\nVous connaissez certainement les unit\u00e9s <code>px<\/code>, <code>em<\/code>, <code>rem<\/code> ou <code>pt<\/code> pour dimensionner vos corps de texte&nbsp;? Rajoutez \u00e0 cette liste&nbsp;:<\/p>\n<ul>\n<li><code>vw<\/code> : \u00ab\u00a0Viewport Width\u00a0\u00bb, correspond \u00e0 l&rsquo;unit\u00e9 relative \u00e0 la largeur de votre \u00e9cran<\/li>\n<li><code>vh<\/code> : \u00ab\u00a0Viewport Height\u00a0\u00bb, correspond \u00e0 l&rsquo;unit\u00e9 relative \u00e0 la hauteur de votre \u00e9cran<\/li>\n<li><code>vmin<\/code> (<code>vm<\/code> pour IE9) : \u00ab\u00a0Viewport Min\u00a0\u00bb, correspond \u00e0 l&rsquo;unit\u00e9 relative \u00e0 la plus petite des deux dimensions (largeur ou hauteur selon l&rsquo;orientation)<\/li>\n<li><code>vmax<\/code> : \u00ab\u00a0Viewport Max\u00a0\u00bb, correspond \u00e0 l&rsquo;unit\u00e9 relative \u00e0 la plus grande des deux dimensions (largeur ou hauteur selon l&rsquo;orientation)<\/li>\n<\/ul>\n<p>Tr\u00e8s bien, mais que repr\u00e9sente une unit\u00e9 de <code>vw<\/code>, par exemple ?<br \/>\nC&rsquo;est assez simple mais pas forc\u00e9ment intuitif de prime abord : 1 unit\u00e9 repr\u00e9sente 1% de la dimension de r\u00e9f\u00e9rence.<\/p>\n<p>Prenons un exemple plus parlant.<br \/>\nSi j&rsquo;\u00e9cris ce morceau de code CSS appliqu\u00e9 \u00e0 mon titre de niveau 1 :<\/p>\n<pre class=\"code\"><code class=\"css boc-nocontrols boc-nogutter\">h1 {\r\n   font-size: 10vw;\r\n}<\/code><\/pre>\n<p>Mon corps de texte aura un \u00e9quivalent de 10% de la largeur de mon viewport, \u00e0 savoir la largeur de la fen\u00eatre de votre navigateur.<br \/>\nSur l&rsquo;\u00e9cran que j&rsquo;utilise actuellement, la d\u00e9finition est de 1920px de large, mon titre de niveau 1 aura alors une <code>font-size<\/code> \u00e9quivalente \u00e0 <code>192px<\/code>.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2012\/10\/w3c-logo.jpg\" alt=\"\" width=\"140\" height=\"87\" class=\"alignleft size-full wp-image-3135\" \/> Bien que <a href=\"http:\/\/dev.w3.org\/csswg\/css3-values\/#viewport-relative-lengths\" hreflang=\"en\">la sp\u00e9cification du W3C sur ces unit\u00e9s<\/a> pr\u00e9voit qu&rsquo;au changement de dimensions du viewport, les dimensions des \u00e9l\u00e9ments b\u00e9n\u00e9ficiant des unit\u00e9s vw, vh, vmin et vmax soient mis \u00e0 jour, il semblerait que Chrome n&rsquo;en fasse qu&rsquo;\u00e0 sa t\u00eate (Safari \u00e9galement probablement, mais je n&rsquo;ai pas la version 6 sur PC \ud83d\ude09 )<\/p>\n<p>Il vous faudra donc recharger la page sur la page de d\u00e9monstration \u00e0 chaque redimensionnement de la fen\u00eatre du navigateur.<br \/>\n<a href=\"\/blog\/doc\/viewport-related-font-size.html\" class=\"demonstration\" title=\"Voir la d\u00e9monstration de corps de textes proportionnels \u00e0 la largeur de l'\u00e9cran\">Voir la d\u00e9monstration<\/a><br \/>\nJ&rsquo;ai ajout\u00e9 un petit script JavaScript pour auto rafraichir le calcul, bas\u00e9 sur l&rsquo;\u00e9v\u00e8nement \u00ab\u00a0resize\u00a0\u00bb de la fen\u00eatre.<br \/>\nPour les curieux, le voici, il est bas\u00e9 sur jQuery.<\/p>\n<pre class=\"code\"><code class=\"js boc-nocontrols boc-nogutter\">&lt;script&gt;\r\n  $(window).resize(function() {\r\n\t$('h1, h2').css('z-index', 'auto'); \/\/auto reflow\r\n  });\r\n&lt;\/script&gt;<\/code><\/pre>\n<p>Le support est encore partiel, mais ces unit\u00e9s sont utilisables pour bient\u00f4t, et d\u00e9j\u00e0 pour la cible iPhone, Chrome 20+, Firefox 19+, Opera 15.0+ et IE10+.<br \/>\n<a class=\"livre\" href=\"http:\/\/caniuse.com\/viewport-units\" title=\"Voir le support des unit\u00e9s relatives au viewport sur CanIuse\">Voir le support sur CanIuse<\/a><\/p>\n<p>Pour les curieux, voici \u00e9galement une petite <a href=\"http:\/\/codepen.io\/CreativeJuiz\/pen\/KzkgL\" target=\"_blank\" title=\"Exp\u00e9rimentation du CodePen.io (nouvelle fen\u00eatre)\">exp\u00e9rimentation de respect d&rsquo;un ratio 16:9 en fonction du viewport<\/a>.<\/p>\n<h2>Solution de secours en JS<\/h2>\n<p class=\"center\"><a href=\"http:\/\/fittextjs.com\/\"><img decoding=\"async\" src=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2012\/10\/fittext-js.png\" alt=\"Fittext.js\" width=\"600\" height=\"387\" class=\"aligncenter size-full wp-image-3134\" srcset=\"https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2012\/10\/fittext-js.png 600w, https:\/\/www.creativejuiz.fr\/blog\/wp-content\/uploads\/2012\/10\/fittext-js-300x193.png 300w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<p>Il existe une alternative en JavaScript &#8211; comme souvent &#8211; qui se nomme <a href=\"http:\/\/fittextjs.com\/\">FitText.js<\/a>, qui est un plugin jQuery (h\u00e9las).<br \/>\nCette solution fonctionne a priori partout sauf sur IE et propose de rajouter dynamiquement un attribut style sur un \u00e9l\u00e9ment en faisant varier la taille de font-size en pixels.<\/p>\n<ol>\n<li>T\u00e9l\u00e9chargez <a href=\"https:\/\/github.com\/davatron5000\/FitText.js\">la ressource sur Github<\/a><\/li>\n<li>Appelez la librairie jQuery et le script Fittext depuis votre document HTML\n<pre class=\"code\"><code class=\"html boc-nocontrols boc-nogutter\">&lt;script src=\"http:\/\/ajax.googleapis.com\/ajax\/libs\/jquery\/1\/jquery.min.js\"&gt;&lt;\/script&gt;\r\n&lt;script src=\"jquery.fittext.js\"&gt;&lt;\/script&gt;<\/code><\/pre>\n<\/li>\n<li>Puis ciblez les \u00e9l\u00e9ments textuels que vous souhaitez contraindre\n<pre class=\"code\"><code class=\"js boc-nocontrols boc-nogutter\">&lt;script&gt;\r\n   $(\".responsive_headline\").fitText(); \/\/ basique\r\n   $(\".responsive_h3\").fitText(1.2); \/\/ compression proportionnelle\r\n   $(\".responsive_headline\").fitText(0.8); \/\/ d\u00e9compression proportionnelle\r\n   $(\".responsive_headline\").fitText(1.2, { minFontSize: '20px', maxFontSize: '40px' }); \/\/ compression avec taille max et taille min\r\n&lt;\/script&gt;<\/code><\/pre>\n<\/li>\n<\/ol>\n<p><a href=\"http:\/\/fittextjs.com\/\" class=\"demonstration\">Voir la d\u00e9monstration sur fittextjs.com<\/a><\/p>\n<p>C&rsquo;est probablement la meilleure alternative aujourd&rsquo;hui, cependant elle ne fonctionne pas sur Internet Explorer.<\/p>\n<h2>Conclusion<\/h2>\n<p>Ces essais manquent de tests, n&rsquo;h\u00e9sitez pas \u00e0 me faire vos retours dans les commentaires sur diff\u00e9rents navigateurs (Safari 6 Mac, Android, etc.).<br \/>\nMerci \u00e0 vous !<\/p>\n<div class=\"sources\">\n<h2>Liens utiles<\/h2>\n<ul>\n<li><a href=\"http:\/\/fittextjs.com\/\">FitText.js<\/a><\/li>\n<li><a href=\"http:\/\/css-tricks.com\/viewport-sized-typography\/\">Quelques tests sur CSS Tricks<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>J&rsquo;ai souvent eu l&rsquo;occasion \u00e0 travers mes divers projets Web mobile (responsive), d&rsquo;avoir \u00e0 r\u00e9duire la taille des polices de titre car m\u00eame un simple mot ne passait pas en largeur. Pour \u00e9viter d&rsquo;avoir une c\u00e9sure sur chaque mot du titre, le plus simple \u00e9tait de s&rsquo;autoriser une r\u00e9duction approximative du corps. (approximative&hellip; fa\u00e7on de [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":3137,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_bluesky_dont_syndicate":"","_bluesky_syndication_accounts":"","_bluesky_syndication_text":"","footnotes":""},"categories":[17,12],"tags":[428,29,403,518],"coauthors":[],"class_list":["post-3099","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-css-css3","category-veille-technologique","tag-css3","tag-font","tag-responsive","tag-viewport"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/3099","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/comments?post=3099"}],"version-history":[{"count":0,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/3099\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media\/3137"}],"wp:attachment":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media?parent=3099"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/categories?post=3099"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/tags?post=3099"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/coauthors?post=3099"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}