28172 sujets

CSS et mise en forme, CSS3

Pages :
(reprise du message précédent)

En fait je ne saisis pas où tu vois une ambiguïté.
Car dans la définition cela correspond aussi. La définition typographique de l'em (cadratin) étant :

This unit defines the proportion of the letter width and height with respect to the point size of the current font. Originally the unit was derived from the width of the capital "M" in the currently used typeface.[1] This unit is not defined in terms of any specific typeface, and thus is the same for all fonts at a given point size.[2] So, 1 em in a 16 point typeface is 16 points.

A moins que tu ais en tête une définition plus historique du cadratin qui n'a plus vraiment court ?
Je ne vois pas trop ce qui te pousse à faire la distinction entre les deux ? Il y a une subtilité qui m'échappe peut être ? Smiley confus
Modérateur
a écrit :
A moins que tu ais en tête une définition plus historique du cadratin qui n'a plus vraiment court ?


Edit : Ooups, étant donné que je n'avais pas tout lu, je ne fais que paraphraser me semble-t-il.

Et l'eau,

Dans le web, il n'a "pas" court puisque qu'un cadratin est basé sur le point Didot ou point Pica. C'est une unité relative. De mémoire, pour une corp de police de 10pt, un cadratin vaut 3.7 mm en pt Didot et 3.5 mm en pt Pica. Un cadratin est une valeur de base pour définir des paramètres pour la mise au point du texte. Or en html, la mise au point d'un texte est loin d'être parfaite. Il y a des efforts, mais ce n'est pas encore cela.

Je rejoins la même pensée que Florent, j'aimerai bosser en pt. Mais pour le moment, je ne vois pas l'intérêt puisqu'il y a pleins de choses que l'on ne peut pas faire.

+1 Florent
Modifié par niuxe (14 Apr 2011 - 20:55)
Laissons de côté la question de la référence au cadratin typographique. Je me suis mal exprimé. Quand je disais «1em ce n'est pas un cadratin, c'est une valeur qui dépend de la valeur calculée de font-size», ce n'est pas pour nier l'origine de l'unité mais pour souligner qu'il faut prêter attention au fonctionnement de concret CSS pour savoir si un usage d'une unité a du sens ou pas.

Je voulais surtout réagir à ton affirmation, qui s'avère être illogique:
Ywg a écrit :
CSS 4.3.2 : "The 'em' unit is equal to the computed value of the 'font-size' property of the element on which it is used."
Donc définir un font-size en em n'a pas de sens.

Si la spec s'arrêtait là, effectivement on ne pourrait pas utiliser em avec font-size, car une valeur relative ne peut pas faire référence à elle-même (120% de 120% de... rien?). Mais la phrase suivante dans la spec dit: The exception is when 'em' occurs in the value of the 'font-size' property itself, in which case it refers to the font size of the parent element. Donc si on utilise font-size:Xem, on a bien une valeur de référence: la valeur calculée de font-size pour le parent.

En sachant que:
- Absolument tous les éléments HTML ont une valeur calculée de chaque propriété. Donc tout élément a une valeur calculée de font-size, que la propriété soit déclarée pour cet élément ou non.
- Si les styles auteur ou navigateur ne définissent pas de font-size pour un élément, celui-ci hérite du font-size de son parent.
- Si l'élément racine (<html>) n'a pas de font-size déclaré, la valeur calculée de font-size pour cet élément correspondra à une valeur fournie par le navigateur (16px à l'heure actuelle pour les navigateurs desktop) et le plus souvent modifiable par l'utilisateur dans les préférences du navigateur.

Tout ça marche correctement dans les navigateurs. Tu ne peux pas affirmer que «définir un font-size en em n'a pas de sens».
Bonsoir niuxe.

Tu l'as trouvé où cette définition ?
Pour ma part je me reporte au "Guide pratique de la typographie - 2ème ed." de Damien Gautier (ed Pyramyd)

a écrit :
Cadratin
Blanc dont la largeur est égale au corps. Un cadratin de corps 10 points à une largeur de 10 points. Les rentrées d'alinéa ont une valeur minimum d'un cadratin. Voir Rentrée d'alinéa.


Ce qui me semble correspondre à la définition de Wikipedia et des normes CSS.
fvsch a écrit :
Tout ça marche correctement dans les navigateurs. Tu ne peux pas affirmer que «définir un font-size en em n'a pas de sens».


C'est vrai, mais (et ça c'est mon appréciation personnelle) me semble plus être un "cas extrême" couvert par la norme. Pas une utilisation correcte de l'unité.

D'un point de vue lisibilité et maintenance c'est casse gueule.

La où je voulais en venir c'est que l'unité d'un point de vue typographique ne devrait logiquement pas être utilisée pour cette propriété. Après la norme pour éviter de trop grands écarts entre les implémentations décrit le comportement à adopter dans certains cas à priori illogiques.

Donc oui je comprends maintenant ce que tu veux dire en disant que l'em CSS n'est pas strictement le même que l'em purement typographique. Dans une feuille de style on peut grâce à cette précision couvrir certains cas dénués de logique typographiquement parlant. Après, mon point de vue est, que maintenant que techniquement rien ne nous y contraint nous devrions nous abstenir de le faire.
Ywg a écrit :
La où je voulais en venir c'est que l'unité d'un point de vue typographique ne devrait logiquement pas être utilisée pour cette propriété. Après la norme pour éviter de trop grands écarts entre les implémentations décrit le comportement à adopter dans certains cas à priori illogiques.

Franchement, là tu es à côté de la plaque. Smiley smile

Il n'y a aucun problème logique. La spécification ne s'efforce pas de coller des rustines sur des cas illogiques, elle définit juste plutôt clairement le fonctionnement d'une unité relative dans différents contextes.

Je veux bien qu'en typographie au plomb on ne puisse pas dire «écoute coco, tu me compose ce texte en 1.5em et ça ira bien». Mais la typographie au plomb ne s'applique pas ici.

Dans le présent, en CSS, utiliser em avec font-size marche. Pas grâce à un hack ou une bizarrerie de la spécification, mais parce que c'est conçu pour marcher. Si le glissement sémantique entre le EM en typographie et l'unité CSS em te chiffonne, et je comprends parfaitement ce type de réticence, tu peux aussi utiliser les pourcentages avec font-size pour faire strictement la même chose (1.5em = 150%).

Et à l'avenir, on verra bien si on se met à utiliser des pt (valeurs absolues), ou des valeurs relatives en em ou pourcentages. Il y a un risque que le px perde en importance avec des résolutions d'écran de plus en plus variées (de 60 à 300dpi). On verra bien.
C'est vrai que le glissement sémantique me dérange, quand on commence à ne plus appeler un chat un chat plus personne ne se comprends.

Mais après ma réticence est plus sur le référentiel de l'unité qu'un simple problème de jargon.

Définir une hauteur de texte par rapport à une hauteur de texte c'est quand même un concept vachement tordu je n'en démordrais pas (ça implique plein de problèmes que j'ai évoqué quand on les met en cascade, imprévisibilité, perte de précision et intrinsèquement cela n'a pas de réel avantage). Une unité relative au texte est utile pour définir des métriques par rapport au texte (interlignages, alinéas, interlettrage, lettrines, exposants et indices).

D'ailleurs tu me dis que ça marche, je ne suis pas d'accord. Ça ne marche pas : car pour une même règle il est impossible de prévoir son résultat en la lisant. Voir même avec l'imbrication, on ne peut pas décrire certaines tailles. On a donc une unité qui échoue à quantifier et dénombrer... Et pourquoi celà ? Parce qu'en réalité ce n'est pas une unité, mais un facteur, et quand on met des utilise des facteurs entre eux et que ces facteurs ont une précision finie, on perds en précision dans le nombre de résultats exprimables. En substance c'est assez proche des problèmes que l'on as avec les nombres à virgule flottante quand on atteint de grandes échelles, sauf qu'en css, la précision étant de 0.1 on atteint cette échelle très vite.

Personnellement j'aurai largement préféré que la specs css indique clairement que l'em est une unité illégale pour les propriété font-size, height et width. Cela éviterait beaucoup de cas alambiqués. Le problème fondamental à mes yeux c'est qu'on peut utiliser cette unité pour trois choses qui ne sont pas compatibles : la maquette, le texte et "l'intra-texte".

La maquette devrait être en pixels/cm/%
Le texte en pixels/point
Et l'intra-texte (qui inclut font-size-adjust mais pas font-size) en em/ex

Une unité relative pour du texte devrait avoir comme référentiel le périphérique d'affichage.
Le point étant préférable car moins ambigüe et moins rattaché à la notion physique du photophore.
Après pour ce qui est du pixel, même si le terme est malheureux la norme parle bien de "reference pixel" définit non par la physique de l'écran mais par un angle oculaire.

Et dans un monde parfait on pourrait dissocier l'agrandissement du texte et de la maquette, çàd bien que pixels et points aient comme référentiel le périphérique d'affichage leur appliquer deux facteurs indépendamment.

Mais la je divague. Il faudrait refaire tout CSS pour ça, un peu comme le système de flux qui fait que le balisage et la présentation ne seront jamais réellement dissociables sans une couche supplémentaire. Smiley bawling

Sur ce bonne nuit à tous, et merci pour cette conversation intéressante Smiley biggrin

PS : d'ailleurs je ne suis pas vraiment le seul à y avoir pensé (pour le problème du flux) vu que cette couche existe et s'appelle XSLT/XSLT-FO.

PPS : je crois que je suis parti un peu loin et que c'est un peu confus... on va dire qu'il est tard Smiley sweatdrop
Ywg a écrit :
Définir une hauteur de texte par rapport à une hauteur de texte c'est quand même un concept vachement tordu je n'en démordrais pas

Disons que ça pose des problèmes de cohérence des tailles de texte dès que l'on s'amuse à définir des font-size:90% sur un conteneur, font-size:120% sur enfant de ce conteneur qui contient lui-même des éléments avec des tailles de texte relatives. La solution à ce problème est simple: ne pas déclarer des tailles de texte sur des conteneurs intermédiaires.

À noter qu'en CSS3 on peut aussi utiliser l'unité rem, qui règle les problèmes d'imbrication.

Par exemple tu peux définir sur l'élément racine ou sur BODY: font-size: 115% (mettons que la fonte utilisée a une hauteur d'x faible, donc au augmente par rapport à la taille par défaut pour maintenir une bonne lisibilité). Et ensuite, on va définir des tailles de texte en pourcentages sur certains éléments précis: titres, quelques éléments d'interface qui varient par rapport à la taille de texte de base.
C'est une méthodologie qui fonctionne très bien si le but n'est pas d'obtenir des tailles de texte en pixels bien précises. Si le but est d'obtenir des pixels, on utilise px partout (avec sans doute la même approche que ci-dessus, bien que cette fois on puisse s'autoriser plus facilement des font-size sur des conteneurs intermédiaires).

(Je donne mes exemples en % mais on peut faire strictement la même chose avec em, bien sûr.)

Ywg a écrit :
Une unité relative au texte est utile pour définir des métriques par rapport au texte (interlignages, alinéas, interlettrage, lettrines, exposants et indices).

D'accord avec ça. Je note aussi que:
- Dans certains cas précis ça peut être utile d'avoir un bloc avec une largeur ou une hauteur. C'est rare, mais ça arrive.
- Les EM sont plutôt pratiques combinés à min-height ou à max-width (moins souvent avec max-height ou min-width).
- Pour line-height, on peut aussi utiliser un ratio sans unité, et j'ai tendance à préférer cette solution.

Ywg a écrit :
Ça ne marche pas : car pour une même règle il est impossible de prévoir son résultat en la lisant.

Question de rigueur. (Ou bien il faut utiliser rem.)

Il faut voir aussi ce qu'on cherche à prévoir: un ratio visuel (ce texte sera X% plus grand que la taille de base) ou une taille précise en pixels? Si ton but est systématiquement de prédire des tailles en pixels, utilise des pixels, c'est clairement le meilleur outil pour atteindre ce but. Mais il n'y a pas de raison de concevoir tous les sites web de cette manière. Smiley smile

Ywg a écrit :
Une unité relative pour du texte devrait avoir comme référentiel le périphérique d'affichage.

CSS3 définit les unités vw (un centième de la largeur du viewport) et vh (un centième de la hauteur du viewport). J'imagine que ça peut être utile pour dimensionner le texte dans une présentation.

Ywg a écrit :
Mais la je divague. Il faudrait refaire tout CSS pour ça, un peu comme le système de flux qui fait que le balisage et la présentation ne seront jamais réellement dissociables sans une couche supplémentaire. Smiley bawling

Jamais? Il me semble que c'est justement au programme:
- http://dev.w3.org/csswg/css3-grid-align/ (parmi les trois brouillons qui traitent du sujet, celui-ci a le vent en poupe, et sera implémenté dans IE10)
- C'est très récent et ça mélange des problématiques différentes, mais cette proposition d'Adobe inclut un système pour créer une zone de contenu à partir de conteneurs disjoints.
Bonjour,


fvsch a écrit :

- Utiliser l'unité em pour dimensionner des blocs n'est pas un détournement de quoi que ce soit, mais c'est plutôt casse-gueule. Et si le but est de simuler un zoom de tous les éléments lors du zoom texte, eh bien c'est une astuce casse-gueule et obsolète, donc je recommande pas.


L'alternative consiste bien à utiliser les pourcentages ? Je n'en connais aucune autre...

Devant respecter scrupuleusement les bonnes pratiques en terme d'accessibilité, et plus particulièrement le RGAA (je suis référent en ce domaine sur divers projets), le zoom texte seul x 5 (ou 6, de mémoire...) est un point de validation.

Les pourcentages, première solution envisagée, m'ont posé beaucoup de problèmes, notamment pour la gestion des marges.
Au final l'utilisation des em, pour tout (font, blocs, marges) est ce qui me donne le meilleur résultat et la plus grande précision.

Reste quelques bizarreries avec Opera.

En quoi est-ce donc obsolète comme pratique ? Quelles solutions prôneriez vous pour ce genre de travail ?






Note :Le sujet étant taggé "résolu", aurais-je du en créer un second pour poursuivre cette conversation ?
Moi ce qui me dépasse c'est que le "zoom texte seul" soit un point de validation.

Donc en terme d'accessibilité il est mieux de favoriser ce genre de solution plutôt qu'un zoom intégral ? Les personnes avec des problèmes de vue n'ont pas le droit d'avoir accès aux images et schémas ? Ou encore de lire des lignes de plus de 4 mots ?

"Quelles solutions prôneriez vous pour ce genre de travail ?"

Pour du zoom texte seul, je n'ai aucun conseil à te donner car je ne le fais pas (et dans ce cas je viserai plutôt du côté em).
Je préfère laisser ça aux navigateurs qui font tous un zoom intégral solution largement supérieure en terme d'accessibilité.

PS : je ne comprends pas dans ton message, tu indique vouloir faire du zoom texte seul, mais tu dis utiliser les em pour les tailles de blocs... ?!
En fait le zoom texte seul des spécifications vise à faire en sorte que le site reste utilisable si on active cette option (ou pour certains navigateurs comme IE6 qui ne font que du zoom texte ) par opposition aux fonctionnalités "récentes" où le navigateur gère un zoom artificiel de l'ensemble de la page.

Si on prend Firefox comme navigateur, dans les options d'affichage on a bien "zoom texte seulement" mais l'objectif est bien entendu d'avoir un design qui s'adapte.


Les % fonctionnent très bien pour des design fluides simples mais là j'ai pas mal de contraintes supplémentaires et les premiers dev en pourcentage se sont avéré être un véritable casse tête.
Retour vers le futur... 8 mois après m'être fait traité "d'âne". Il semblerait que Luke Wroblewsky (expert reconnu en ergonomie et UX) et Nicole Sullivan (experte reconnue en CSS) prêchent dans leur conférences et sur leur blog EXACTEMENT la même chose que moi :

http://www.lukew.com/ff/entry.asp?1469

Preuve est fait qu'assener des sophisme d'autorité ne remplace pas une vraie réflexion et une approche pragmatique.
J'applique depuis un certain temps les principes d'OOCSS (Nicole Sullivan a d'ailleurs fait une présentation à paris web à ce sujet) et j'y vois un réel bénéfice en terme de maintenabilité du code et de productivité.

Cependant le zoom du navigateur et le zoom texte sont deux choses totalement différentes.

- Il n'existe pas de moyen d'auto-zoomer sur tous les sites (chaque session de navigation est gérée séparément, tu peux faire le test).
- La taille du texte, modifiable via les options du navigateur, est généralisée à l'intégralité de l'expérience de navigation.

Une pratique d'excellence serait donc de privilégier les em pour respecter le choix de l'utilisateur qui veulent un texte affiché plus gros.

Les ems posent d'autres problèmes : positionnement des backgrounds, sprites, calculs de tailles du texte en fonction du contexte…

Dans un contexte pro (une appli web, ou bien un site sur lequel il y a beaucoup d'itérations successives), et en équipe, il est contre productif d'utiliser les em partout (brainfuck inside). Le px est une unité prévisible, bien plus productive, donc.

Un compromis est faisable pour tirer parti du meilleur des deux mondes :
- utiliser les em pour la zone de contenu
- utiliser les px pour l'interface

C'est ce que Google fait pour Gmail, et ça fonctionne.

En espérant avoir mis tout le monde d'accord…
Pages :