aboutsummaryrefslogtreecommitdiff
path: root/files/fr/conflicting/learn/css/styling_text/fundamentals/index.html
blob: 8506c0ab749726453126e5e5ad3b339d522614d7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
---
title: Mettre en forme du texte
slug: conflicting/Learn/CSS/Styling_text/Fundamentals
tags:
  - Apprendre
  - CSS
  - Débutant
translation_of: Learn/CSS/Styling_text/Fundamentals
translation_of_original: Learn/CSS/Howto/style_text
original_slug: Apprendre/CSS/Comment/Mettre_en_forme_du_texte
---
<p class="summary">La mise en forme du texte est au cœur de CSS. Celui-ci fournit de nombreuses propriétés permettant de modifier l'apparence du texte. En quelque sorte, CSS est le prolongement, sur le Web, de la typographie qui existe depuis plusieurs siècles.</p>

<p>La mise en forme du texte se décline sur deux composantes : la police et la disposition du texte. Ces deux éléments sont des bases, abordées parmi les premiers concepts qu'on voit en CSS. Toutefois, la mise en forme du texte est plus subtile qu'il n'y paraît. Dans cet article, nous détaillerons les différentes possibilités offertes par CSS. Libre à vous de choisir ce dont vous avez besoin ou ce sur quoi vous souhaitez expérimenter.</p>

<h2 id="La_mise_en_forme_simple">La mise en forme simple</h2>

<p>Les polices de texte peuvent être modifiées et adaptées grâce à ces propriétés CSS :</p>

<ul>
 <li>{{cssxref("color")}} : modifie la couleur de la police.</li>
 <li>{{cssxref("font-family")}} : modifie la police utilisée.</li>
 <li>{{cssxref("font-size")}} : modifie la taille de la fonte.</li>
 <li>{{cssxref("font-style")}} : permet de passer d'une police italique à une police normale.</li>
 <li>{{cssxref("font-weight")}} : permet de gérer la graisse d'une police.</li>
 <li>{{cssxref("font-variant")}} : permet de choisir des variantes de police.</li>
 <li>{{cssxref("letter-spacing")}} : permet d'ajuster l'interlettrage, quelles que soient les options de crénage (<em>kerning</em>) de la police originale.</li>
 <li>{{cssxref("text-decoration")}} : permet d'afficher une ligne décorative, au-dessus, en-dessous ou au milieu du texte.</li>
 <li>{{cssxref("text-shadow")}} : permet de définir une ou plusieurs ombres portées depuis le texte.</li>
 <li>{{cssxref("text-transform")}} : permet de choisir la capitalisation du texte.</li>
</ul>

<p>CSS fournit également des unités dédiées aux polices et des outils pour le texte sélectionné :</p>

<ul>
 <li>{{cssxref("length#em","em")}} : la taille calculée pour la police de l'élément, relative par rapport à la taille de la police de l'élément parent.</li>
 <li>{{cssxref("length#rem","rem")}} : analogue à <code>em</code> mais toujours relative à la taille de la police pour l'élément racine.</li>
 <li>{{cssxref("::first-letter")}} : permet de sélectionner la première lettre d'un élément de bloc.</li>
 <li>{{cssxref("::first-line")}} : permet de sélectionner la première ligne d'un élément de bloc.</li>
 <li>{{cssxref("::selection")}} : correspond au texte actuellement sélectionné par l'utilisateur.</li>
</ul>

<p>Les propriétés les plus fréquemment utilisées peuvent être manipulées grâce à la propriété raccourcie {{cssxref("font")}}. Celle-ci se décompose (dans l'ordre) en : {{cssxref("font-style")}}, {{cssxref("font-variant")}}, {{cssxref("font-weight")}}, {{cssxref("font-stretch")}}, {{cssxref("font-size")}}, {{cssxref("line-height")}}, et {{cssxref("font-family")}}. Parmi toutes ces propriétés, seules <code>font-size</code> et <code>font-family</code> sont obligatoires pour cette notation raccourcie.</p>

<p>Prenons un exemple pour illustrer ce point.</p>

<p>Voici le fragment de code HTML qu'on utilisera :</p>

<pre class="brush: html">&lt;p&gt;
  He dressed himself "all in his best," and at last got out into the streets.
  The people were by this time pouring forth, as he had seen them with the
  Ghost of Christmas Present; and walking with his hands behind him, Scrooge
  regarded every one with a delighted smile. He looked so irresistibly pleasant,
  in a word, that three or four good-humoured fellows said, "Good morning, sir!
  A merry Christmas to you!" And Scrooge said often afterwards, that of all the
  blithe sounds he had ever heard, those were the blithest in his ears.
&lt;/p&gt;
&lt;p class="fancy"&gt;
  He dressed himself "all in his best," and at last got out into the streets.
  The people were by this time pouring forth, as he had seen them with the
  Ghost of Christmas Present; and walking with his hands behind him, Scrooge
  regarded every one with a delighted smile. He looked so irresistibly pleasant,
  in a word, that three or four good-humoured fellows said, "Good morning, sir!
  A merry Christmas to you!" And Scrooge said often afterwards, that of all the
  blithe sounds he had ever heard, those were the blithest in his ears.
&lt;/p&gt;</pre>

<p>Et voilà la feuille de style CSS qu'on appliquera :</p>

<pre class="brush: css">/* Voici un disposition simple pour que
   les paragraphes soient côte à côte. */
p {
  box-sizing: border-box;
  width     : 50%;
  padding   : 1em;
  float     : left;
}

.fancy {
  font: 0.85rem/150% Helvetica, Arial, sans-serif;
}

.fancy::first-line {
  font-variant: small-caps;
}

.fancy::first-letter {
  font-family: serif;
  font-size  : 3rem;

  float      : left;
  background : blanchedalmond;
  color      : goldenrod;
  border     : 0.5rem solid gold;
  padding    : 1rem;
  margin     : 0 0.5rem 0 0;
}</pre>

<p>Ces deux éléments permettront d'aboutir au résultat suivant :</p>

<p>{{EmbedLiveSample('La_mise_en_forme_simple', '100%', '320')}}</p>

<div class="note">
<p><strong>Note :</strong> Les styles de police vous permettent de faire de nombreuses choses. Toutefois, le Web reste un média principalement basé sur le texte et les polices ont donc leur importance. Nous vous encourageons donc à utiliser les mécanismes offerts par CSS pour améliorer la lisibilité du texte. Pour cela, vous pouvez consulter <a href="http://www.pompage.net/traduction/8-facons-simples-d-ameliorer-la-typographie-dans-vos">les différentes règles typographiques recommandées pour le Web</a>.</p>
</div>

<h2 id="Paramètres_avancées_des_polices_d'écriture">Paramètres avancées des polices d'écriture</h2>

<p>CSS fournit des propriétés, encore plus avancées, dédiées aux polices d'écriture. Cependant, ces propriétés sont toujours expérimentales et parfois mal supportées par certains navigateurs ou spécifiques à certaines langues (généralement les langues non latines) :</p>

<ul>
 <li>{{cssxref("font-kerning")}} : active ou désactive les options de crénage.</li>
 <li>{{cssxref("font-feature-settings")}} : active ou désactive les différentes fonctionnalités des polices <a href="https://fr.wikipedia.org/wiki/OpenType">OpenType</a>.</li>
 <li>{{cssxref("font-variant-alternates")}} : permet de contrôler l'utilisation de glyphes alternatifs pour une fonte donnée.</li>
 <li>{{cssxref("font-variant-caps")}} : permet de contrôler l'utilisation de glyphes capitaux alternatifs.</li>
 <li>{{cssxref("font-variant-east-asian")}} : permet de contrôler l'utilisation de glyphes alternatifs pour les scripts d'Asie orientale comme le japonais ou le chinois.</li>
 <li>{{cssxref("font-variant-ligatures")}} : permet de contrôler les ligatures et formes contextuelles qui sont utilisées dans le texte.</li>
 <li>{{cssxref("font-variant-numeric")}} : permet de contrôler l'utilisation de glyphes alternatifs pour les nombres, les fractions et les marqueurs ordinaux.</li>
 <li>{{cssxref("font-variant-position")}} : permet de contrôler l'utilisation de glyphes alternatifs de moindre taille pour les textes positionnés en indice ou en exposant par rapport à la ligne de base.</li>
 <li>{{cssxref("font-size-adjust")}} : permet d'ajuster la taille visuelle de la fonte sans modifier la taille intrinsèque de la fonte.</li>
 <li>{{cssxref("font-stretch")}} : permet de choisir des formes alternatives, plus ou moins étirées, d'une police donnée.</li>
 <li>{{cssxref("text-decoration-color")}} : définit la couleur utilisée lorsqu'une ligne est dessinée sur, sous ou à travers le texte.</li>
 <li>{{cssxref("text-decoration-line")}} : définit le type de ligne décorative qui peut être ajoutée à un élément.</li>
 <li>{{cssxref("text-decoration-style")}} : définit le style des lignes dessinées sur le texte.</li>
 <li>{{cssxref("text-underline-position")}} : définit la position du soulignement mis en place lorsque la propriété <code>text-decoration-line</code> vaut <code>underline</code>.</li>
 <li>{{cssxref("text-rendering")}} : essaie d'optimiser le rendu du texte.</li>
</ul>

<h2 id="Appliquer_des_fontes">Appliquer des fontes</h2>

<p>Il existe des milliers de polices, quelques unes sont très connues mais on peut s'y perdre rapidement. La typographie, l'art des polices ne sont pas nouveaux, cela dit, le Web apporte son lot de contraintes spécifiques et les fontes ne sont parfois pas aussi adaptées que sur le papier. Voyons ici comment gérer cela.</p>

<p>La propriété {{cssxref("font-family")}} vous permet de choisir la police de caractères que vous souhaitez appliquer à votre texte. Cette propriété fonctionne avec une valeur qui s'écrit sous la forme d'une liste de noms de polices, chacun séparé par des virgules. Le navigateur parcourera les polices de gauche à droite afin d'utiliser celle qui est disponible sur la machine.</p>

<pre class="brush: css">body {
  /* Si la police "Open Sans" est disponible, c'est
     celle-ci qui serait utilisée pour mettre en forme
     le texte. Sinon, ce sera la police Arial qui sera
     utilisée et enfin, si Arial n'est pas disponible,
     ce sera la police sans-serif disponible, par défaut
     sur le système, qui sera utilisée. */
  font-family: "Open Sans", Arial, sans-serif;
}</pre>

<h3 id="Les_polices_par_défaut">Les polices par défaut</h3>

<p>Tout d'abord, CSS définit cinq noms de polices génériques : <code>serif</code>, <code>sans-serif</code>, <code>monospace</code>, <code>cursive</code>, et <code>fantasy</code>. Celles-ci sont choisies par le navigateur selon le système d'exploitation utilisé (il est possible que les différents navigateurs choisissent des polices différentes). C'est en quelque sorte les polices de dernier recours à utiliser. Les polices désignées par <code>serif</code>, <code>sans-serif</code> et <code>monospace</code> devraient être assez prévisibles. En revanche, celles désignées par <code>cursive</code> et <code>fantasy</code> sont moins prévisibles et nous vous conseillons donc de les utiliser avec précaution.</p>

<div class="note">
<p><strong>Note :</strong> On ne peut jamais être sûr à 100% des polices disponibles sur un ordinateur, aussi, c'est une bonne pratique que de toujours ajouter une police générique en dernier dans la liste des valeurs pour la propriété <code>font-family</code>.</p>
</div>

<h3 id="Les_polices_adaptées_au_Web">Les polices adaptées au Web</h3>

<p>Les polices génériques sont convenables mais imprévisibles. La plupart du temps, on souhaite mieux contrôler la police qui sera utilisée pour afficher le contenu textuel. On a vu juste avant qu'il était impossible de déterminer à coup sûr les polices disponibles sur un système. Toutefois, on peut s'aider de statistiques pour parier sur différentes polices fréquemment utilisées. Parmi les différents systèmes d'exploitation courants (Windows, Mac, certaines distribution Linux grand public, Android, et iOS), il existe un ensemble de polices largement répandues. Ces polices sont parfois appelées « <em>web fonts</em> » car elles peuvent être utilisées sans trop de risque sur le Web.</p>

<p>Bien entendu, les systèmes d'exploitation évoluent et la liste des <em>web</em><em> fonts</em> peut évoluer au cour du temps. Cependant, à l'heure où nous écrivons ces lignes, on peut considérer que les polices suivantes sont largement répandues (notamment grâce à l'initiative <em><a href="https://fr.wikipedia.org/wiki/Core_fonts_for_the_Web">Core fonts for the Web</a></em> de Microsoft à la fin des années 90) :</p>

<table class="standard-table">
 <thead>
  <tr>
   <th scope="col">Nom</th>
   <th scope="col" style="white-space: nowrap;">Type générique</th>
   <th scope="col">Notes</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>Arial</td>
   <td>sans-serif</td>
   <td>On considère généralement qu'il est préférable d'ajouter également <em>Helvetica</em> devant <em>Arial</em>. En effet, les polices sont presque identiques et bien qu'Arial soit plus répandue, <em>Helvetica</em> est plus appréciée (en termes de forme).</td>
  </tr>
  <tr>
   <td>Courier New</td>
   <td>monospace</td>
   <td>Certains systèmes d'exploitation disposent d'une autre version (potentiellement plus ancienne), appelée <em>Courier</em>. C'est une bonne pratique d'utiliser les deux tout en favorisant <em>Courier New</em> dans l'ordre des priorités.</td>
  </tr>
  <tr>
   <td style="white-space: nowrap;">Georgia</td>
   <td>serif</td>
   <td> </td>
  </tr>
  <tr>
   <td style="white-space: nowrap;">Times New Roman</td>
   <td>serif</td>
   <td>Certains systèmes d'exploitation disposent d'une autre version (potentiellement plus ancienne), appelée <em>Times</em>. C'est une bonne pratique d'utiliser les deux tout en favorisant <em>Times New Roman</em> dans l'ordre des priorités.</td>
  </tr>
  <tr>
   <td>Trebuchet MS</td>
   <td>serif</td>
   <td>Attention, celle-ci n'est pas fortement répandue sur les systèmes d'exploitation mobiles.</td>
  </tr>
  <tr>
   <td>Verdana</td>
   <td>sans-serif</td>
   <td> </td>
  </tr>
 </tbody>
</table>

<div class="note">
<p><strong>Note :</strong> Parmi les différentes ressources disponibles sur le sujet, <a href="http://www.cssfontstack.com/">cssfontstack.com</a> maintient une liste des <em>web fonts</em> disponibles sur Windows et Mac OS. Cela peut vous aider à décider les polices à utiliser pour votre site.</p>
</div>

<h3 id="Les_polices_personnalisées">Les polices personnalisées</h3>

<p>Enfin, si vous souhaitez utiliser votre propre police sur votre site web, la meilleur façon reste d'intégrer cette police dans votre site web.</p>

<div class="warning">
<p><strong>Attention :</strong> les polices sont sujettes au droit d'auteur (<em>copyright</em>) et vous devez donc vérifier, avant de les utiliser, que vous pouvez les intégrer sur votre site. Certains sites vous permettent d'en utiliser certaines gratuitement, comme <a href="https://www.google.com/fonts">Google Fonts</a>. D'autres, vous permettent d'acheter le droit d'utiliser certaines polices comme, par exemple, <a href="http://www.fonts.com/">fonts.com</a>.</p>
</div>

<p>L'intégration d'une police personnalisée se fait en trois étapes :</p>

<ol>
 <li>Assurez-vous que la police soit disponible sur votre serveur web. Pour assurer une meilleure rétro-compatibilité, la police doit idéalement être disponible sous quatre format :
  <ul>
   <li><a href="https://fr.wikipedia.org/wiki/Web_Open_Font_Format">WOFF et WOFF2</a>, supportés par les navigateurs modernes (WOFF2 remplacera WOFF)</li>
   <li><a href="https://fr.wikipedia.org/wiki/Embedded_OpenType">EOT</a>, supporté par {{Glossary("Microsoft Internet Explorer","Internet Explorer")}} avant sa version 9</li>
   <li>SVG, supporté par l'ancienne version de Safari pour iOS (il est peu probable que celle-ci soit encore utilisée)</li>
   <li><a href="https://fr.wikipedia.org/wiki/OpenType">OTF</a>, supporté par les anciennes versions des navigateurs par défaut Android.</li>
  </ul>
 </li>
 <li>Utilisez la déclaration {{cssxref("@font-face")}} en utilisant les adresses des fichiers et les autres caractéristiques (comme le nom)</li>
 <li>Utilisez le nom déclaré pour la police personnalisée dans la liste des valeurs fournies à la propriété {{cssxref("font-family")}}.</li>
</ol>

<p>Voici un exemple d'un telle mise en œuvre.</p>

<p>On utilisera ce fragment de code HTML :</p>

<pre class="brush: html">&lt;p&gt;
  He dressed himself "all in his best," and at last
  got out into the streets. The people were by this
  time pouring forth, as he had seen them with the
  Ghost of Christmas Present; and walking with his
  hands behind him, Scrooge regarded every one with
  a delighted smile. He looked so irresistibly
  pleasant, in a word, that three or four good-humoured
  fellows said, "Good morning, sir! A merry Christmas
  to you!" And Scrooge said often afterwards, that of
  all the blithe sounds he had ever heard, those were
  the blithest in his ears.
&lt;/p&gt;
&lt;p class="fancy"&gt;
  He dressed himself "all in his best," and at last
  got out into the streets. The people were by this
  time pouring forth, as he had seen them with the
  Ghost of Christmas Present; and walking with his
  hands behind him, Scrooge regarded every one with
  a delighted smile. He looked so irresistibly
  pleasant, in a word, that three or four good-humoured
  fellows said, "Good morning, sir! A merry Christmas
  to you!" And Scrooge said often afterwards, that of
  all the blithe sounds he had ever heard, those were
  the blithest in his ears.
&lt;/p&gt;</pre>

<p>Et on appliquera cette feuille de style CSS :</p>

<pre class="brush: css">/* Une disposition simple pour voir
   les paragraphes côte à côte. */
p {
  box-sizing: border-box;
  width     : 50%;
  padding   : 1em;
  float     : left;
}

@font-face {
  /* Là on définit le nom pour la police
     personnalisé, on l'utilisera dans la
     liste */
  font-family:"Open Sans";

  /* Ici, on liste les fichiers de police,
     la syntaxe est détaillée ici :
     http://blog.fontspring.com/2011/02/the-new-bulletproof-font-face-syntax/ */
  src:url("https://developer.cdn.mozilla.net/static/fonts/OpenSans-Regular-webfont.a35546eef3ea.eot");
  src:url("https://developer.cdn.mozilla.net/static/fonts/OpenSans-Regular-webfont.a35546eef3ea.eot?#iefix") format('embedded-opentype'),
      url("https://developer.cdn.mozilla.net/static/fonts/OpenSans-Regular-webfont.3f642fa3ea74.woff2") format('woff2'),
      url("https://developer.cdn.mozilla.net/static/fonts/OpenSans-Regular-webfont.ac327c4db628.woff") format('woff'),
      url("https://developer.cdn.mozilla.net/static/fonts/OpenSans-Regular-webfont.cd7296352d15.ttf") format('truetype'),
      url("https://developer.cdn.mozilla.net/static/fonts/OpenSans-Regular-webfont.f641a7d4e80f.svg#OpenSansRegular") format('svg');

  /* Ici, on définit la graisse et le style de la police */
  font-weight:normal;
  font-style:normal;
}

/* Enfin, il suffit simplement d'ajouter la
   police personnalisée dans la liste des valeurs
   pour font. */
.fancy {
  font: 0.85rem/150% "Open Sans", Helvetica, Arial, sans-serif;
}
</pre>

<p>Le résultat obtenu sera :</p>

<p>{{EmbedLiveSample('Les_polices_personnalisées', '100%', '320')}}</p>

<h2 id="La_disposition_du_texte">La disposition du texte</h2>

<p>La disposition du teexte concerne les aspects liés aux sauts de ligne et à la position du texte par rapport à la ligne de base ou par rapport à son contenant.</p>

<ul>
 <li>{{cssxref("line-height")}} : définit la hauteur d'une ligne de texte, quelle que soit la taille actuelle de la police utilisée.</li>
 <li>{{cssxref("text-align")}} : décrit la façon dont le texte est aligné par rapport à son bloc.</li>
 <li>{{cssxref("text-indent")}} : définit l'espace qu'on ajoute à gauche du texte avant de commencer la première ligne du texte.</li>
 <li>{{cssxref("text-overflow")}} : définit la façon dont le contenu qui « déborde » est affiché (ou non).</li>
 <li>{{cssxref("white-space")}} : définit la façon dont les blancs et les sauts de ligne sont gérés au sein de l'élément.</li>
 <li>{{cssxref("word-break")}} : définit si on ajoute ou non des césures au sein des mots pour passer à la ligne.</li>
 <li>{{cssxref("word-spacing")}} : ajuste la distance entre les mots (inter mot).</li>
</ul>

<p>De la même façon qu'avec la mise en forme du texte, la disposition du texte est concernée par quelques propriétés expérimentales, assez peu supportées par certains navigateurs ou dédiées aux langues non latines. Celles-ci permettent de résoudre plusieurs problèmes d'ordre typographique et il est donc intéressant de les connaître (sans que cela doive devenir une source de préoccupation majeure).</p>

<ul>
 <li>{{cssxref("direction")}} : définit la direction du texte (cela dépend de la langue utilisée et généralement, on laissera cette tâche à HTML car cet aspect est fortement lié au contenu même).</li>
 <li>{{cssxref("hyphens")}} : active ou désactive l'ajout de trait d'union pour former les césures en fin de ligne.</li>
 <li>{{cssxref("line-break")}} : active ou désactive les sauts de lignes pour les langues asiatiques.</li>
 <li>{{cssxref("text-align-last")}} : définit la façon dont la dernière ligne d'un bloc (ou une ligne avant un saut à la ligne explicite) est alignée.</li>
 <li>{{cssxref("text-orientation")}} : définit l'orientation du texte sur une ligne.</li>
 <li>{{cssxref("word-wrap")}} : définit si le navigateur ajoute ou non des retours à la ligne automatiques pour éviter un débordement du texte.</li>
 <li>{{cssxref("writing-mode")}} : définit si les lignes du texte sont disposées horizontalement ou verticalement et la direction selon laquelle le bloc s'étend.</li>
</ul>

<h2 id="La_suite">La suite</h2>

<p>Avec tous ces éléments, vous devriez avoir un bon aperçu des outils CSS qui vous permettent de mettre en forme du texte. Nous vous encourageons à tester ces différentes propriétés et à bidouiller avec ces différents concepts pour concrétiser ces notions. Une fois à l'aise avec ces notions, n'hésitez pas à continuer avec un autre sujet : <a href="/fr/docs/Learn/CSS/Howto/create_fancy_boxes">créer de belles boîtes</a> contenant du texte.</p>