Le saviez-vous ? display est inutile sur un élément flottant
J’ai envie aujourd’hui de revenir sur une idée reçue de longue date : le mélange du positionnement flottant (float) et de la propriété display.
Associer float et display: block (ou inline)
C’est parfaitement inutile.
Tout simplement parce que les deux schémas de positionnement ne peuvent pas cohabiter : un seul sera interprété, le flottant.
Pourtant, bon nombre de feuilles de styles cumulent les deux propriétés sur le même élément, sous prétexte de pouvoir lui attribuer une largeur width ou une hauteur height.
Eh ben non, c’est inutile.
La seule exception acceptable est celle d’employer display: inline pour corriger un bug identifié sur IE6 sous le nom de double-float margin bug.
Ah mais oui puisqu’un flottant devient un élément de rendu block !
Non.
Float n’a aucune influence sur la valeur de display d’un élément. Pour preuve, un élément qui sort du flux de quelque manière que ce soit (float, position: absolute ou fixed) occupe par défaut la largeur de son contenu et non la largeur de son parent. Donc pas du tout le comportement d’un bloc.
Par contre, un élément qui sort du flux bénéficie d’un avantage commun aux display block : celui de pouvoir supporter les propriétés de dimensionnement (largeur, hauteur).
Cumul des mandats ?
Les spécifications W3C admettent l’éventualité de cumuler différents schémas de positionnement.
Voici exactement comment cela se passe pour éviter les règles contradictoires :
- Si display: none est appliqué, alors l’élément ne crée pas de boîte et les propriétés position et float ne sont pas employables.
- Sinon, si une propriété position est appliquée et a pour valeur absolute ou fixed, ce schéma devient prioritaire, la valeur de la propriété float est forcée à none (elle devient inutile) et l’élément est placé selon les éventuelles valeurs de top, right, bottom et left.
- Sinon, si une propriété float est appliquée avec la valeur left ou right, l’élément devient flottant et display devient inutile
- Sinon, l’élément est disposé selon son mode de rendu par défaut inhérent à la propriété display (inline, block, list-item, etc.).
En résumé : si les propriétés float et display apparaissent au sein du même bloc de déclarations, alors display (à l’exception de display none) doit être purement et simplement ignorée par les navigateurs. Elle devient inutile.
De même, si position absolute, float et display cohabitent, ces deux dernières doivent être ignorées par les navigateurs.
Pour élargir le débat, je vous invite à consulter cet article dédié au positionnement flottant : http://www.alsacreations.com/article/lire/972-float-le-grand-bluff.html







