Pourquoi y a-t-il un écart inexplicable entre ces éléments div en ligne-bloc?

j'ai deux éléments en ligne-bloc div , qui sont les mêmes, placés l'un à côté de l'autre. Cependant, il semble y avoir un espace mystérieux de 4 pixels entre les deux divs malgré le fait que la marge soit fixée à 0. Il n'y a pas de divs parent les affectant - que se passe-t-il?

CSS

#container
{
    display:inline-block;
    position:relative;
    background:rgb(255,100,0);
    margin:0px;
    width:40%;
    height:100px;
}

Div problem

C'est à ça que je veux qu'il ressemble:

What it SHOULD look like

242
demandé sur Josh Crozier 2013-09-27 01:13:05

6 réponses

dans ce cas, vos éléments div ont été changés des éléments de niveau block aux éléments inline . Une caractéristique typique des éléments inline est qu'ils respectent l'espace dans le markup. Ceci explique pourquoi un gap de l'espace est généré entre les éléments. (exemple)

Il y a quelques solutions qui peuvent être utilisées pour résoudre ce problème.

Méthode 1-Supprimer les espaces blancs du balisage

Exemple 1 - Commentaire de l'espace: (exemple)

<div>text</div><!--
--><div>text</div><!--
--><div>text</div><!--
--><div>text</div><!--
--><div>text</div>

exemple 2 - supprimer les sauts de ligne: (exemple)

<div>text</div><div>text</div><div>text</div><div>text</div><div>text</div>

exemple 3 - Fermer une partie de l'étiquette sur la ligne suivante (exemple)

<div>text</div
><div>text</div
><div>text</div
><div>text</div
><div>text</div>

exemple 4 - fermez l'étiquette entière sur la ligne suivante: (exemple)

<div>text
</div><div>text
</div><div>text
</div><div>text
</div><div>text
</div>

Méthode 2-Réinitialiser le font-size

puisque l'espace entre les éléments inline est déterminé par le font-size , vous pouvez simplement réinitialiser le font-size en 0 , et ainsi supprimer l'espace entre les éléments.

Juste mis font-size: 0 sur le parent des éléments, et ensuite déclarer une nouvelle font-size pour les enfants des éléments. Cela fonctionne, comme démontré ici (exemple)

#parent {
    font-size: 0;
}

#child {
    font-size: 16px;
}

cette méthode fonctionne assez bien, car il ne nécessite pas un changement dans le markup; cependant, il ne fonctionne pas si l'élément enfant font-size est déclaré en utilisant les unités em . Je recommande donc de supprimer l'espace blanc du balisage, ou bien flottant les éléments et d'éviter ainsi l'espace généré par les éléments inline .

Méthode 3-Régler l'élément parent à display: flex

Dans certains cas, vous pouvez également définir la display de l'élément parent à flex . (exemple)

cela supprime efficacement les espaces entre les éléments dans navigateurs pris en charge . N'oubliez pas d'ajouter fournisseur approprié préfixes pour un soutien supplémentaire.

.parent {
    display: flex;
}
.parent > div {
    display: inline-block;
    padding: 1em;
    border: 2px solid #f00;
}

.parent {
    display: flex;
}
.parent > div {
    display: inline-block;
    padding: 1em;
    border: 2px solid #f00;
}
<div class="parent">
    <div>text</div>
    <div>text</div>
    <div>text</div>
    <div>text</div>
    <div>text</div>
</div>

notes latérales:

Il est incroyablement peu fiable utiliser des marges négatives pour supprimer l'espace entre inline éléments. N'utilisez pas de marges négatives s'il existe d'autres solutions plus optimales.

489
répondu Josh Crozier 2015-05-12 18:29:41

L'utilisation de inline-block permet un espace blanc dans votre HTML, ce qui équivaut généralement à .25em (ou 4px).

vous pouvez soit commenter l'espace blanc ou, une solution plus commune, est de mettre le parent font-size à 0 et de le réinitialiser à la taille requise sur les éléments en ligne-bloc.

31
répondu Paulie_D 2018-01-26 14:12:42

inline-block définit automatiquement une valeur par défaut white-space comme tout le monde le dit. (Ceci est dû aux propriétés "inline" des éléments, de même que l'espacement entre les mots dans une chaîne de texte dans votre HTML markup. C'est pourquoi supprimer white-space dans le markup fonctionne aussi.) La solution la plus simple est de simplement float le conteneur. (eg. float: left; ) sur une autre note, chaque id doit être unique, ce qui signifie que vous ne pouvez pas utiliser le même id deux fois dans le même HTML document. Vous devriez utiliser des classes à la place, où vous pouvez utiliser le même class pour plusieurs éléments.

.container {
    display: inline-block;
    position: relative;
    background: rgb(255, 100, 0);
    margin: 0;
    width: 40%;
    height: 100px;
    float: left;
}
14
répondu bradcush 2018-08-26 01:59:16

a trouvé une solution n'impliquant pas Flex, parce que Flex ne fonctionne pas dans les navigateurs plus anciens. Exemple:

.container {
    display:block;
    position:relative;
    height:150px;
    width:1024px;
    margin:0 auto;
    padding:0px;
    border:0px;
    background:#ececec;
    margin-bottom:10px;
    text-align:justify;
    box-sizing:border-box;
    white-space:nowrap;
    font-size:0pt;
    letter-spacing:-1em;
}

.cols {
    display:inline-block;
    position:relative;
    width:32%;
    height:100%;
    margin:0 auto;
    margin-right:2%;
    border:0px;
    background:lightgreen;  
    box-sizing:border-box;
    padding:10px;
    font-size:10pt;
    letter-spacing:normal;
}

.cols:last-child {
    margin-right:0;
}
1
répondu Larry 2017-08-21 14:10:56

il suffit d'ajouter une bordure: 2px solid #e60000 ; à votre deuxième étiquette div CSS.

Certainement, il fonctionne

#Div2Id {
    border: 2px solid #e60000; --> color is your preference
}
0
répondu Podile venkata krishna 2017-07-19 08:26:06

vous devez ajouter

#container
{
    display:inline-block;
    position:relative;
    background:rgb(255,100,0);
    margin:0px;
    width:40%;
    height:100px;
    margin-right:-4px;
}

parce que chaque fois que vous écrivez display:inline-block il faut un margin-right:4px supplémentaire . Donc, vous avez besoin de l'enlever.

0
répondu BigFan 2018-04-26 06:50:09