Normalement, lorsque nous voulons avoir plusieurs DIVs
à la suite, nous utiliserons float: left
, mais j'ai découvert le truc de display:inline-block
.
Exemple de lien ici . Il me semble que display:inline-block
est un meilleur moyen de align
DIVs
de manière consécutive, mais y a-t-il des inconvénients? Pourquoi cette approche est-elle moins populaire que l’astuce float
?
En 3 mots: inline-block
est meilleur.
Bloc en ligne
Le seul inconvénient de l'approche display: inline-block
est que, dans IE7 et au-dessous, un élément ne peut être affiché que inline-block
s'il était déjà inline
par défaut. Cela signifie qu'au lieu d'utiliser un élément <div>
, vous devez utiliser un élément <span>
. Ce n'est pas vraiment un gros inconvénient car sémantiquement un <div>
sert à diviser la page alors qu'un <span>
ne sert qu'à couvrir une partie de la page, il n'y a donc pas une énorme différence sémantique. Un avantage énorme de display:inline-block
est que, lorsque d'autres développeurs conservent votre code ultérieurement, il est beaucoup plus évident que ce que display:inline-block
et text-align:right
essaie d'accomplir qu'un float:left
ou float:right
. Mon avantage préféré de l’approche inline-block
est qu’il est facile d’utiliser vertical-align: middle
, line-height
et text-align: center
pour parfaitement centrer les éléments, de manière intuitive. J'ai trouvé un excellent article de blog sur la manière de mettre en œuvre un inline-block inter-navigateurs, sur le blog de Mozilla . Voici le compatibilité du navigateur .
Flotter
L'utilisation de la méthode float
ne convient pas à la mise en page de votre page, car la propriété float
CSS était initialement conçue pour que le texte entoure une image (style magazine) = et ne convient pas, par définition, à la mise en page en général. Lorsque vous modifiez ultérieurement des éléments flottants, vous rencontrez parfois des problèmes de positionnement car ils ne sont pas dans le flux de pages . Un autre inconvénient est que cela nécessite généralement un correctif, sinon cela pourrait casser certains aspects de la page. Le correctif nécessite l'ajout d'un élément après les éléments flottants pour arrêter leur parent de s'effondrer autour d'eux, qui croise la ligne sémantique séparant le style du contenu et est donc n anti-motif en développement Web .
Tout problème d’espace blanc mentionné dans le lien ci-dessus pourrait facilement être résolu avec la propriété white-space
CSS.
SitePoint est une source très crédible de conseils en conception de sites Web et ils semblent avoir le même avis que moi:
Si vous débutez dans les modèles CSS, vous aurez l’impression que penser à utiliser des flottants CSS de manière imaginative est le summum de la compétence. Si vous avez utilisé autant de tutoriels de mise en page CSS que vous pouvez en trouver, vous pouvez supposer que la maîtrise des flottants est un rite de passage. Vous serez ébloui par l'ingéniosité, étonné par la complexité, et vous aurez un sentiment d'accomplissement lorsque vous comprendrez enfin le fonctionnement des flotteurs.
Ne soyez pas dupe. Vous êtes en train de subir un lavage de cerveau.
http://www.sitepoint.com/give-floats-the-flick-in-css-layouts/
2015 Update - Flexbox est une bonne alternative à navigateurs modernes:
.container {
display: flex; /* or inline-flex */
}
.item {
flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}
Mise à jour du 21 décembre 2016
Bootstrap 4 supprime le support pour IE9 et élimine ainsi les flottants des lignes pour devenir une Flexbox intégrale.
Bien que je sois d’accord pour dire que inline-block
est généralement préférable, il y a une chose supplémentaire à prendre en compte si vous utilisez des largeurs en pourcentage pour créer une grille sensible (ou si vous voulez des largeurs parfaites en pixels):
Si vous utilisez inline-block
pour des grilles d’une largeur totale de 100% ou presque, assurez-vous que votre balise HTML ne contient pas d’espace blanc entre les colonnes .
Avec les éléments flottants, vous n'avez pas à vous préoccuper de cette question. Les colonnes flottent au-dessus de tout espace ou de tout autre contenu entre les colonnes. Les réponses à cette question contiennent de bons conseils sur la manière de supprimer les blancs HTML sans rendre votre code laid .
Si, pour une raison quelconque, vous ne pouvez pas contrôler le balisage HTML (par exemple, un CMS restrictif), vous pouvez essayer les astuces décrites ici ou vous pouvez avoir besoin de compromettre et d'utiliser des flottants au lieu de inline-block. Il existe également de mauvais trucs CSS qui ne devraient être utilisés que dans des circonstances extrêmes, comme font-size:0;
sur le conteneur de colonnes puis réapplique la taille de la police dans chaque colonne .
Par exemple:
float: left
. Cela "fonctionne" (mais pour le wrapper qui doit être effacé).inline-block
. Les espaces entre les blocs créent un espace de largeur fixe qui pousse la largeur totale au-delà de 100%, ce qui casse la présentation et force la dernière colonne à se dérouler.inline-block
et sans espace entre les colonnes du code HTML . Cela "fonctionne à nouveau" à nouveau - mais le code HTML est plus laid et votre système de gestion de contenu peut imposer une sorte de prétraitement ou d'indentation à sa sortie HTML, ce qui rend cela difficile à réaliser en réalité.Si vous souhaitez aligner le div
avec une précision de pixel, utilisez float. inline-block
semble vous obliger à couper quelques pixels (au moins dans IE)
Vous pouvez trouver la réponse en profondeur ici .
Mais en général, avec float
, vous devez être conscient des éléments environnants et en prendre soin, ainsi que inline-block
de manière simple pour aligner des éléments.
Merci
Il y a une caractéristique à propos de inline-block qui peut ne pas être simple. C'est-à-dire que la valeur par défaut pour l'alignement vertical dans CSS est baseline. Cela peut entraîner un comportement d'alignement inattendu. Regardez cet article.
http://www.brunildo.org/test/inline-block.html
Au lieu de cela, lorsque vous faites un float: left, les div sont indépendantes les unes des autres et vous pouvez les aligner facilement en utilisant margin.