28172 sujets

CSS et mise en forme, CSS3

Bonjour à tous,

Ce post ne traite pas un problème concret, mais plutôt une question générale sur l'unité em, qui doit être préférée aux pixels pour définir les tailles de police (cf. l'excellent article de Florent V. gérer la taille du texte avec les « em »).

Pour résumer, en utilisant l'unité em, la taille du texte est calculée en fonction de la taille du texte de l'élément parent.

Par exemple:

<body style="font-size:100%">
     <div style="font-size:0.8em">
          <div style="font-size:0.8em">blabla</div>
     </div>
<body>

Dans cet exemple, "blabla" sera écrit en taille 100% x 0.8 x 0.8 = 64% (donc très petit). 100% étant la taille par défaut choisie par le navigateur (ou l'utilisateur s'il zoome).

Comme je le disais, on comprend bien que l'unité em appliquée à un font-size se calcule par rapport à la taille de police de l'élément parent.

Ma question est: est-ce le cas également si on utilise cette unité pour d'autres propriétés que font-size ?

Reprenons l'exemple précédent en ajoutant une propriété line-height:

<body style="font-size:100%">
     <div style="font-size:0.8em">
          <div style="font-size:0.8em; line-height:2em">blabla</div>
     </div>
<body>


Comme tout à l'heure, le texte sera écrit en 100% x 0.8 x 0.8 = 0.64%. Mais qu'en est-il de la hauteur de la ligne ? Est-elle calculée également à partir de la taille de police de l'élément parent (ce qui donnerait 100% x 0.8 x 2 = 160%) ou par rapport à la taille de police de l'élément courant (ce qui donnerait 100% x 0.8 x 0.8 x 2 = 128%) ?

Je me pose cette question, car, supposons que je veule avoir une hauteur de ligne équivalente au double de la hauteur de police, je mettrais instinctivement "line-height:2em", ce qui ne marcherait que dans ma deuxième hypothèse.

De même, si je définis d'autres propriétés en em (des marges, des padding, ce genre de choses), les valeurs seront-elles relatives à l'élément parent ou à l'élément courant ?

Je sais pas si tout ça est très clair, mais ça fait un petit moment que ça me tracasse. Donc si quelqu'un a un avis, qu'il n'hésite pas Smiley cligne

Bon dimanche à tous.
Modifié par jiber2fr (01 Aug 2010 - 10:50)
Je n'avais pas pensé à regarder la spec (faut dire qu'à chaque fois que je m'y risque, je me noie dedans et je ne trouve presque jamais ce que je cherche Smiley decu ).

Cela dit, je viens de m'y plonger, et il semble qu'on puisse généraliser ce que tu as vu pour la propriété line-height.

Spec CSS2:
Spec CSS2 a écrit :
L'unité 'em' correspond à la valeur calculée pour la propriété 'font-size' d'un élément donné. Sauf quand cette unité est spécifiée dans la propriété 'font-size' elle-même, auquel cas, elle se réfère à la taille de la police de l'élément parent.

J'ai fait quelques essais avec les propriétés height, margin et padding, ça semble correctement interprété par tous les navigateurs (ie 6 compris).