Changer la taille de la police (ou texte) par Javascript
Monday, 17. July 2006, 07:22:28
Passons maintenant à une autre méthode : le changement de la taille de la police ou du texte par un Javascript.
Malheureusement, ce n'est pas directement possible avec une quelconque manière de le faire (nativement). De fait, une personne nommée Dustin Diaz a créé une nouvelle fonctionnalité : getElementsByClass().
Cette fonctionnalité permet de travailler sur une classe précise et uniquement celle-ci. Ce qui est plutôt pratique car si nous disposons d'une mise en page précise et que nous ne souhaitons pas voir déformée par un agrandissement global de la page (nous augmenterons donc que la taille de la police d'un conteneur spécifique par exemple).
// Création : Dustin Diaz
//Site : http://www.dustindiaz.com/getelementsbyclass
function getElementsByClass(searchClass, node, tag) {
var classElements = new Array();
if ( node == null )
node = document;
if ( tag == null )
tag = '*';
var els = node.getElementsByTagName(tag);
var elsLen = els.length;
var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
for (i = 0, j = 0; i < elsLen; i++) {
if ( pattern.test(els[i].className) ) {
classElements[j] = els[i];
j++;
}
}
return classElements;
}
Encore une fois, si vous êtes un lecteur fidèle sur les articles concernant le Javascript, j'insiste pour dire que le Javascript est un langage interprété par le navigateur. L'internaute a le choix ou non d'utiliser cette technologie. A utiliser avec parcimonie donc.
Pour l'accessibilité directe, rien ne vaut de passer par l'interface du navigateur (le plus souvent Ctrl + Molette de la souris ou Menu Affichage et choisir les différentes tailles...).
Il est bien entendu possible (et plus aisé) d'agrandir la police de toute une page... Cela peut se faire tout aussi bien par Javascript. Point besoin d'utiliser la fonction décrite ci-dessus mais utilisons simplement une autre feuille de style (Cf. article précédent) ou une ligne de Javascript (utilisation de document.getElementByTag sur la balise Body par exemple).
Mais pourquoi faire simple lorsqu'il est plus aisé de faire complèxe.
Complèxe ne serait pas le bon mot vu que quelques personnes se sont déjà penchées sur le sujet et qu'il ne nous reste plus qu'à utiliser simplement et de manière pratique ce qu'elles ont développé. Nous pouvons même l'améliorer.
Une méthode que j'apprécie plus particulièrement et qui utilise justement getElementsByClass() est celle faite par Le Journal du Developpeur (Xavier Borderie).
Elle permet de fait à spécifier une classe sur laquelle est portée la fonction ainsi que la taille.
// Xavier Borderie
function tailleFonte(classe, taille) {
cibles = getElementsByClass(classe);
for (i = 0; i < cibles.length; i++) {
cibles[i].style.fontSize = taille;
}
}
Maintenant que nous avons nos deux fonctions, il ne nous reste plus qu'a faire le (x)HTML et la CSS...
Du coté CSS :
h1 {
font-family: "Times New Roman", Times, serif;
font-size: medium;
font-weight: bold;
font-variant: small-caps;
color: #0099FF;
background-color: #CCCCCC;
width: 100%;
border-bottom-width: 1px;
border-bottom-style: solid;
border-bottom-color: #FFFFFF;
}
#conteneur {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: small;
color: #FFFFFF;
background-color: #0099FF;
width: 100%;
border-bottom-width: 1px;
border-bottom-style: solid;
border-bottom-color: #0033FF;
}
#conteneur #entete {
}
#conteneur #corps {
font-size: x-small;
}
#conteneur #corps #zonetest {
font-size: small;
}
.serif {
font-family: serif;
font-size: x-small; }
li {
display: inline;
}
li:before {
content: "|";
}
li:after {
content: "|";
}
Du coté HTML :
<div id="conteneur">
<div id="entete">
<h1>Changer la taille de police par Javascript</h1>
</div>
<div id="corps">
<p>Augmenter ou diminuer la taille de la police</p>
<ul>
<li><a href="javascript:tailleFonte('serif', 'small');">Augmenter la taille</a></li>
<li><a href="javascript:tailleFonte('serif', 'x-small');">Diminuer la taille</a></li>
</ul>
<div id="zonetest">
<p id="nickname" title="monnickname" class="serif">Mon nickname est Groumphy</p>
</div>
</div>
</div>
Evidence même... Une classe, une taille avec les inconvéniants et avantages que j'ai cité ci-dessus.

