Pourquoi est-ce inline-block élément poussé vers le bas?
Voici mon code et je veux comprendre que pourquoi #firstDiv est poussé vers le bas par tous les navigateurs. J'ai vraiment envie de comprendre le fonctionnement interne du fait que pourquoi son être poussé vers le bas plutôt que de tirer vers le haut, d'une façon ou d'une autre. (et je sais comment aligner leurs tops :))
Et je sais que son overflow:hidden qui en est la cause, mais pas sûr que pourquoi ses poussant div à la baisse.
CSS:
body {
width: 350px;
margin: 0px auto;
}
#container {
border: 15px solid orange;
}
#firstDiv {
border: 10px solid brown;
display: inline-block;
width: 70px;
overflow: hidden;
}
#secondDiv {
border: 10px solid skyblue;
float: left;
width: 70px;
}
#thirdDiv {
display: inline-block;
border: 5px solid yellowgreen;
}
HTML:
<div id="container">
<div id="firstDiv">FIRST</div>
<div id="secondDiv">SECOND</div>
<div id="thirdDiv">THIRD
<br>some more content<br> some more content
</div>
</div>
Vous devez vous connecter pour publier un commentaire.
Fondamentalement, vous avez ajouté plus de désordre dans votre code, ce qui crée plus de confusion j'ai tout d'abord essayer de supprimer l'encombrement qui entrave la compréhension de la véritable question.
Tout d'abord, nous devons établir que ce qui est la vraie question?
C'est pourquoi "
inline-block
" élément est poussé vers le bas.Maintenant nous commençons à le comprendre et enlever le désordre de la première.
1 -
Pourquoi ne pas donner à tous les trois divs même la largeur de la bordure?
Nous allons lui donner.
2 - Ne flottante élément a aucun lien avec inline-block élément étant poussé vers le bas?
Non, il n'a rien à faire avec elle.
Donc, nous avons enlevé le div au total. Et vous assistons même le comportement de inline-block élément étant poussé vers le bas.
Ici vient le tour de certains la littérature de saisir l'idée de la ligne de boîtes et comment ils sont doublés dans la même ligne esp lire le dernier paragraphe avec soin, car c'est là que réside la réponse à votre question.
Si vous n'êtes pas sûr des référence voici une brève explication en termes simples.
Tous les caractères à l'exception de "gjpqy" sont écrites sur la ligne de base que vous pouvez penser de base que si vous dessinez une simple ligne horizontale de même que le soulignement juste en dessous de ces "caractères aléatoires", puis ce sera le départ, mais maintenant, si vous écrivez un de " gjpqy caractère(s) sur la même ligne puis la partie inférieure de ces personnages tombent au-dessous de la ligne.
Donc, nous pouvons dire que tous les caractères à l'exception de "gjpqy' sont écrits entièrement au-dessus de la ligne de base alors qu'une partie de ces caractères sont écrits au-dessous de la ligne de base.
3 - Pourquoi ne pas vérifier où est la base de notre ligne?
J'ai ajouté quelques personnages qui montrent la ligne de base de notre ligne.
4 - Pourquoi ne pas ajouter des caractères dans notre divs trop à trouver leurs lignes de base dans les div?
Ici, certains caractères ajoutés dans les divs pour clarifier de base.
Maintenant, quand vous comprenez au sujet de base, lire la suite de la version simplifiée sur base de inline-block.
i) Si inline-block en question a son débordement de la propriété a la valeur visible (qui est par défaut donc pas besoin de définir si).
Ensuite, son niveau de référence serait la ligne de base du bloc contenant de la ligne.
ii) Si inline-block en question a son débordement de jeu de propriétés AUTRES QUE visible.
Alors sa marge inférieure serait sur le point de référence de la ligne de la boîte contenant.
Maintenant regardez ce nouveau afin de clarifier votre concept que ce qui se passe avec le vert div.
Si encore toute confusion ici est ajouté plus de caractères à proximité de green div pour établir la ligne de base du bloc contenant et vert div de base est alignée.
Bien, je suis maintenant en affirmant qu'ils ont la même base? DROIT?
5 - Alors pourquoi ne pas se chevauchent et voir s'ils sont aptes droit l'un sur l'autre?
Donc, je vous apporte troisième div -left: 35px; pour vérifier si ils ont la même base maintenant?
Maintenant, nous avons eu notre premier point prouvé.
Bien, après explication du premier point deuxième point est facile à digérer et vous voyez que le premier div qui a pour propriété de dépassement différent de visible (caché) a sa marge inférieure sur la ligne de base de la ligne.
Maintenant, vous pouvez faire quelques expériences afin de mieux l'illustrer.
Maintenant votre désordre et de voir si tout est à la recherche d'amende pour vous.
augmenter la largeur de corps)
Vous voyez, il n'a pas d'effet.
la compréhension. (et bien sûr supprimer négatif à gauche)
Et maintenant nous sommes de retour là où nous avons commencé à partir.
J'espère avoir répondu à votre question.
vertical-align:top;
a fonctionné pour moi 😉La valeur par défaut pour
vertical-align
en CSSbaseline
& cette règle s'applique égalementinline-block
lire ce http://www.brunildo.org/test/inline-block.htmlÉcrire
vertical-align:top
dans votreinline-block
DIV.Cochez cette http://jsfiddle.net/WGCyu/1/
display:inline-block
combiné avecfloat:left/right
.vertical-align
propriété, aucune complexité décrite dans l'acceptation de réponse s'applique.vertical-align: text-top;
au travail!Suffit d'utiliser
vertical-align:top;
Démo
Vue cette autre exemple. La raison de ce comportement est décrit dans CSS3 module: de ligne: 3.2. Zone de ligne d'emballage [1]:
Comme vous pouvez le voir, le troisième élément est poussé vers le bas, bien qu'il ne dispose pas d'un
overflow
de la propriété. La raison doit être quelque part d'autre à trouver. Le second comportement est décrit dans Feuilles de Style en cascade Niveau 2 Révision 1 (CSS 2.1) Spécifications: 9.5 Flotteurs [2]:Tous vos
display:inline-block;
divs sont à l'aide d'un type spécial debaseline
dans ce cas 10.8 hauteur de la Ligne des calculs: 'line-height' et 'vertical-align' propriétés (très fin) [3]:Ainsi, lorsque vous êtes en utilisant des éléments flottants et
inline-block
éléments, l'élément flottant sera poussé sur le côté et le formatage en ligne sera recalculé en fonction Un. Sur l'autre main, la prochaine éléments sont raccourcies si elles ne conviennent pas. Puisque vous travaillez déjà avec un minimum d'espace, il n'y a pas d'autre façon de modifier vos éléments puis de les pousser à Deux. Dans ce cas, la plus haute de l'élément permet de définir la taille de votre emballage div, définissant ainsi lebaseline
Trois, tandis que, d'autre part, la modification de la position et de la largeur indiquée dans Deux ne peut pas être appliquée à de tels minimale espacés au maximum de la hauteur des éléments. Dans ce cas, un comportement que dans ma toute première démo du résultat.Enfin, la raison de votre
overflow:hidden
permettra d'éviter#firstDiv
être poussé jusqu'au bord inférieur de votre#container
, bien que je ne pouvais pas trouver une raison dans l'article 11. Sansoverflow:hidden
il fonctionne correctement et définie par Deux et Trois. DémoTL;DR: Ont un regard très attentif sur le W3 recommandations et la mise en œuvre dans le navigateur. À mon humble avis, les éléments flottants sont décidés à montrer un comportement inattendu si vous ne connaissez pas tous les changements qu'ils font de vos éléments environnants. Voici un autre démo qui montre un problème commun avec des flotteurs.
j'ai d'abord commencé sur le répondeur cette question, mais il a été enfermé comme dupe avant de finir, donc je poste la réponse ici.
Tout d'abord, nous avons besoin de comprendre ce que
inline-block
est.Le définition dans MDN dit:
De comprendre ce qui se passe ici, nous avons besoin de regarder
vertical-align
, et c'est la valeur par défautbaseline
.Dans cette illustration, vous avez cette couleur graphique:
Bleu: La base de référence
Rouge: le haut et Le bas de la hauteur de la ligne
Vert: le haut et Le bas de la ligne contenu de la boîte.
Dans la #gauche de l'élément, vous avez un contenu textuel qui contrôle ce qui est de la ligne de base. Cela signifie que le texte à l'intérieur définit la ligne de base pour la #gauche.
Dans le #droit, il n'y a pas de contenu, de sorte que le navigateur n'a pas d'autre choix que d'utiliser le fond de la boîte comme référence.
Se cette visualisation, d'où j'ai tiré la ligne de base sur un exemple où la première inline conteneur a peu de texte, et la prochaine est vide:
Si vous alignez un élément vers le haut, vous dire que vous alignez le haut de cet élément vers le haut de la boîte de ligne.
Cela pourrait être plus facile à comprendre par un exemple.
CSS:
HTML:
Le résultat est que cela - et j'ai ajouté la ligne bleue et la ligne rouge de la boîte:
Ce qui se passe ici, c'est que la hauteur de la ligne de la boîte dépend de la façon dont le contenu de l'ensemble de la ligne est tracée. Cela signifie que pour calculer le haut de l'alignement, de la basline alignements doivent être calculées dans un premier temps. Le
#middle
élément avertical-align:top
, ce n'est donc pas utilisé pour la ligne de base de positionnement. mais le#left
et#right
sont positionnés verticalement, de sorte que leurs lignes de base sont alignés. Lorsque cela est fait, la hauteur de la zone de ligne de a augmenté, parce que les#right
élément a été poussé un peu comme un résultat de la plus grande taille de police. Ensuite, la position de tête pour la#middle
élément peut être calculée, et c'est sur le haut de la boîte de ligne.le problème, c'est parce que vous avez appliqué float:left sur le deuxième div. ce qui rend la deuxième div à venir sur le côté gauche, et la première div gouttes et vient après votre deuxième div.
Si vous appliquez float:left sur le premier div également, votre problème sera parti.
overflow:hidden est à l'origine pas de problème à votre disposition, overflow:hidden affecte uniquement les éléments internes d'un div, il n'a rien à voir avec d'autres éléments qui sont à l'extérieur.
Essayez d'ajouter
padding:0;
pour le corps et le retrait de la marge de votre divs.Ajouter
background-color:*any
couleur de côté de fond* pour vérifier la différence.code
par exemple: .background-color:any color
Essayez de faire toutes les propriétés CSS de tous les Éléments de même.
J'ai eu le même problème et lors de la fixation de ce que j'ai identifié que j'étais de la suppression d'un Élément avec la propriété de Police dans l'Élément Div.
Après la suppression de cet Élément avec la propriété font l'alignement de toutes les DIV a été perturbé. Pour résoudre ce problème que je définir la Police de la propriété de tous les éléments DIV le même que l'élément qui est tombé dans l'il.
Dans l'exemple suivant, l'élément de la classe ".dldCuboidButton" défini avec une taille de police:30 px.
J'ai donc ajouté la même propriété pour les classes restantes à savoir .cuboidRecycle, .liCollect , .dldCollect qui sont utilisés par les éléments DIV. De cette façon, tous les élément DIV suivre les mêmes Mesures avant et après la chute de l'élément en elle.
Voici l'exemple de code HTML créé dynamiquement à l'aide de CSS ci-dessus.