J'ai deux éléments div
inline-block, identiques, positionnés l'un à côté de l'autre. Cependant, il semble y avoir un mystérieux espace de 4 pixels entre les deux divs malgré le fait que la marge soit définie sur 0. Il n'y a pas de divs parents les effectuant - Qu'est-ce qui se passe?
CSS
#container
{
display:inline-block;
position:relative;
background:rgb(255,100,0);
margin:0px;
width:40%;
height:100px;
}
Voici ce que je veux qu'il ressemble à:
Dans ce cas, vos éléments div
ont été changés d’éléments de niveau block
à éléments inline
. Une caractéristique typique des éléments inline
est qu'ils respectent les espaces dans le balisage. Ceci explique pourquoi un gap d'espace est généré entre les éléments. (Exemple)
Quelques solutions peuvent être utilisées pour résoudre ce problème.
Exemple 1 - Commentez les espaces: (exemple)
<div>text</div><!--
--><div>text</div><!--
--><div>text</div><!--
--><div>text</div><!--
--><div>text</div>
Exemple 2 - Supprime les sauts de ligne: (exemple)
<div>text</div><div>text</div><div>text</div><div>text</div><div>text</div>
Exemple 3 - Ferme une partie de la balise sur la ligne suivante (exemple)
<div>text</div
><div>text</div
><div>text</div
><div>text</div
><div>text</div>
Exemple 4 - Ferme la balise entière sur la ligne suivante: (exemple)
<div>text
</div><div>text
</div><div>text
</div><div>text
</div><div>text
</div>
font-size
Etant donné que les espaces entre les éléments inline
sont déterminés par le font-size
, vous pouvez simplement réinitialiser le font-size
à 0
et ainsi supprimer l'espace entre les éléments.
Il suffit de définir font-size: 0
sur les éléments parents, puis de déclarer un nouveau font-size
pour les éléments enfants. Cela fonctionne, comme démontré ici (exemple)
#parent {
font-size: 0;
}
#child {
font-size: 16px;
}
Cette méthode fonctionne plutôt bien car elle ne nécessite aucune modification du balisage. Cependant, cela ne fonctionne pas si le font-size
de l'élément enfant est déclaré en utilisant des unités em
. Je recommanderais donc de supprimer les espaces blancs du balisage, ou alternativement flottant les éléments et d'éviter ainsi l'espace généré par les éléments inline
.
display: flex
Dans certains cas, vous pouvez également définir la display
de l'élément parent sur flex
. (Exemple)
Cela supprime efficacement les espaces entre les éléments de navigateurs pris en charge . N'oubliez pas d'ajouter les préfixes de fournisseur appropriés pour une assistance 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>
Il est incroyablement peu fiable d’utiliser des marges négatives pour supprimer l’espace entre les éléments inline
. N'utilisez pas de marges négatives s'il existe d'autres solutions plus optimales.
L'utilisation de inline-block
permet de laisser un espace dans votre code HTML. Cela équivaut généralement à 0,25em (ou 4 pixels).
Vous pouvez commenter l'espace blanc ou, une solution plus courante, consiste à définir le font-size
du parent sur 0 et à le réinitialiser à la taille requise dans les éléments de bloc en-ligne.
inline-block
définit automatiquement un white-space
par défaut comme tout le monde le dit. (Cela est dû aux propriétés "inline" des éléments, identiques à l'espacement entre les mots d'une chaîne de texte dans votre balise HTML
. C'est pourquoi la suppression de white-space
dans la balise fonctionne également.) La solution la plus simple consiste simplement à float
le conteneur. (par exemple, float: left;
) Sur une autre note, chaque id
devrait être unique, ce qui signifie que vous ne pouvez pas utiliser le même id
deux fois dans le même document HTML
. Vous devriez plutôt utiliser des classes, 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;
}
Nous avons trouvé une solution n'impliquant pas Flex, car Flex ne fonctionne pas dans les anciens navigateurs. 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;
}
ajoutez simplement une bordure: 2px solid #e60000
; à votre 2ème balise div CSS.
Ça marche vraiment
#Div2Id {
border: 2px solid #e60000; --> color is your preference
}