Histoires de pourcentages et de calcul arrondi
On trouve parfois, sur les forums, des sujets et des discussions bien intéressantes. C'est une excellente source d'information... surtout lorsqu'on tombe sur des différences d'interprétation entre les navigateurs qui nous avaient échappées jusqu'alors.
Jusqu'à présent, la principale différence d'affichage entre les navigateurs était expliquée par le Modèle de boîte, décrit par Openweb et où une solution est proposée sur cet article.
Récemment, sur le Forum dédié aux Standards et CSS, un sujet a légèrement dévié sur une petite expérience intéressante qui tendrait à montrer qu'il existe une autre différence d'appréciation entre les navigateurs et qui s'appliquerait aux tailles en pourcentage. Je mets tout cela au conditionnel car aucune source officielle ne confirme encore la véracité des conclusions qui sont faites ici.
Le problème ouvert sur le forum traite d'une mise en page avec des éléments qui passent à la ligne alors que le total de leurs largeurs cumulées est inférieur à la largeur de leur conteneur. C'est en général un problème classique de modèle de boîte, sauf que ce n'est pas le cas ici.
En fait, le conteneur (menu) a une taille fixée à 100% (ou 511px). Les éléments internes (liens) ont une largeur telle que leur total fait 100% également (pas de marges, ni bordures ni padding).
Or le dernier élément passe à la ligne sous Internet Explorer, et reste sagement à côté des autres dans Firefox. En fait, après tests, il passe à la ligne dès que le total des éléments dépasse 99%.
Une petite expérience réalisée par FlorentG tend à montrer qu'il existe bien une différence entre les navigateurs dans le calcul des arrondis des pourcentages :
- Internet Explorer fait un vrai arrondi mathématique (si 33% correspondrait à 19.7px, alors IE considère la valeur comme étant 20px)
- Mozilla Firefox se contente simplement de supprimer la partie décimale (si 33% correspondrait à 19.7px, alors FF considère la valeur comme étant 19px)
Dans le cas exposé sur le forum, les différence de calcul arrondi font que le total calculé par Internet Explorer est de 512px, ce qui dépasse du conteneur dont la taille est de 511px. Le dernier élément du menu est défini à 16%, soit 81.76px (arrondi à 82 sous IE et 81 sous FF).
Cette différence dans le calcul arrondi des pourcentages (qui s'applique d'ailleurs également aux unités en "em") pourrait expliquer certains problèmes courants de débordements dans les designs fluides.
Je n'ai malheureusement trouvé que très peu de sources sur cette différence de calcul à part les deux liens et pistes suivantes :
- Sur Le Coin des Experts :
Il est clair que seul IE5-windows et NN4.7-unix (dans notre enquête) se conforment à peu près à cette règle. On a l'impression que IE5-mac applique plutôt une règle d'arrondi à l'entier immédiatement inférieur. Surtout on notera le comportement nettement aberrant de NN4.7-mac ou windows, pour qui 100% donne une taille plus grande que la taille par défaut (jusqu'à 3 px de plus !!!), ce qui obligera généralement à prévoir des feuilles de style séparées, l'une pour NN4x et l'autre pour les autres navigateurs.
- Sur WebDesignGroup (au sujet des frames) :
9.12. Pourquoi mes cadres ne font pas exactement la taille que j'ai demandé?
Netscape Navigator semble convertir en pourcentages entiers les dimensions de cadre exprimées en pixels, et utiliser ces pourcentages pour disposer les cadres. Ainsi, les cadres avec des dimensions exprimées en pixels apparaitront avec une taille légérement différente que celle spécifiée dans le plan de découpage. L'erreur d'arrondie dépendra de la taille exacte de la fenêtre du navigateur.
De surcroît, en interne, Netscape semble stocker la conversion des dimensions en pourcentage, plutôt que les tailles en pixels. Donc, quand une fenêtre est redimensionnée, les cadres sont redessinés en se basant sur les anciens pourcentages. Ceci peut aggraver davantage l'erreur d'arrondi.
Il n'y aucune façon d'empêcher ce comportement. Pour s'en accomoder, vous devez construire un site qui s'adapte aux variations de la taille des cadres. Il s'agit d'une situation supplémenantaire où il est bien d'être capable de s'adapter aux variations.
Merci à tous les intervenants sur la discussion du forum citée.
EDIT : merci à HoPHP pour avoir trouvé la source de ce bug. Il semblerait donc que ce soit bien un bug ("Tracking Bug" numéro 134942) de Mozilla Firefox, selon Bugzilla.
Par Raphael GOETTER - dimanche 9 janvier 2005 à 17:08
Astuces - #109 - Lu 11737 fois - Intérêt du billet: 1.56(9) - Fil RSS








Trackbacks
Aucun trackback pour le moment.
Les trackbacks pour ce billet sont fermés.
Evaluez ce billet
Commentaires
Le dimanche 9 janvier 2005 à 17:46, par Groumphy :: #
Le dimanche 9 janvier 2005 à 17:58, par Raphael :: site :: #
Le dimanche 9 janvier 2005 à 18:33, par pablo :: #
Le dimanche 9 janvier 2005 à 18:43, par Piou2fois :: site :: #
Le dimanche 9 janvier 2005 à 18:51, par Raphael :: site :: #
Le dimanche 9 janvier 2005 à 18:56, par Daniel :: site :: #
Le dimanche 9 janvier 2005 à 20:54, par Olivier :: site :: #
Le dimanche 9 janvier 2005 à 22:02, par Guillink :: #
Le lundi 10 janvier 2005 à 00:02, par Olivier :: site :: #
Le lundi 10 janvier 2005 à 20:32, par [ NikO ] :: site :: #
Le jeudi 20 janvier 2005 à 18:05, par Nico :: #
Le jeudi 3 février 2005 à 18:54, par sarl :: site :: #
Ajouter un commentaire
Les commentaires pour ce billet sont fermés.