2017-08-03 2 views
3

Chaque fois que je place des divs dans une rangée horizontale en utilisant display:inline-block, il y a toujours une marge entre eux, même si je règle margin: 0 !important. Est-il possible d'avoir exactement 0 pixels entre les divs?Comment mettre divs dans une rangée avec "display: inline-block", sans marge?

Voici un exemple de base où j'ai trois boîtes noires qui devraient être continue, mais il y a un espace blanc entre eux: (Fiddle)

.div { 
 
    position: relative; 
 
    display: inline-block; 
 
    background: black; 
 
    width: 100px; 
 
    height: 100px; 
 
    margin: 0 !important; 
 
}
<div class="div"></div> 
 
<div class="div"></div> 
 
<div class="div"></div>

+0

Avez-vous essayé/vérifié flexbox? –

+0

https: // stackoverflow.com/questions/5078239/comment-supprimer-l'entre-espace-entre-inline-block-elements –

+0

Il existe différentes façons de résoudre ce problème, consultez ce lien, qui devrait aider: https://css-tricks.com/ combat-l'-espace-entre-inline-block-elements/ –

Répondre

4

Il est à cause de la nouvelle ligne entre les éléments. Vous pourriez faire des commentaires comme je l'ai fait, ou faire ces éléments en ligne les uns aux autres

.div { 
 
    position: relative; 
 
    display: inline-block; 
 
    background: black; 
 
    width: 100px; 
 
    height: 100px; 
 
    margin: 0 !important; 
 
}
<div class="div"></div><!-- 
 
--><div class="div"></div><!-- 
 
--><div class="div"></div>

+0

Woooooooow. Je n'aurais jamais pensé ça. C'est fou. Merci! –

0

Vous devez donner le font-size: 0 au parent récipient. La taille de la police donne ces petites marges aux blocs en ligne.

.div { 
 
    position: relative; 
 
    display: inline-block; 
 
    background: black; 
 
    width: 100px; 
 
    height: 100px; 
 
    margin: 0 !important; 
 
} 
 
.container { 
 
    font-size: 0; 
 
}
<div class="container"> 
 
    <div class="div"></div> 
 
    <div class="div"></div> 
 
    <div class="div"></div> 
 
</div>

+0

Etes-vous sûr? Je l'ai essayé: https://jsfiddle.net/ketrb1ac/2/ –

+0

Oui: https://jsfiddle.net/xooL3drg/ –

+0

@Swellar, merci, fait :) –

0

.divlist { 
 
    position: relative; 
 
    font-size: 0; 
 
} 
 
.div { 
 
    position: relative; 
 
    display: inline-block; 
 
    background: black; 
 
    width: 100px; 
 
    height: 100px; 
 
    font-size: 16px; 
 
}
<div class="divlist"> 
 
    <div class="div"></div> 
 
    <div class="div"></div> 
 
    <div class="div"></div> 
 
</div>

-2

J'ai ajouté une enveloppe définie comme FlexBox.

.wrapper { 
 
    display: inline-flex; 
 
} 
 

 
.div { 
 
    position: relative; 
 
    display: inline-block; 
 
    background: black; 
 
    width: 100px; 
 
    height: 100px; 
 
}
<div class="wrapper"> 
 
    <div class="div"></div> 
 
    <div class="div"></div> 
 
    <div class="div"></div> 
 
</div>

+1

Les éléments Flex sont bloqués, ils n'ont donc plus la valeur d'affichage 'inline-block' – Alohci

+0

Bon point. Je l'ai changé en inline-flex – Gerard

+0

Notez que faire le wrapper inline-flex n'aide pas. Les éléments Inline-flex sont toujours des conteneurs flex, les enfants des conteneurs flex sont des éléments flex, et les éléments flex sont bloqués. – Alohci

0

Il vaut mieux avoir la taille extérieure de style div et ajouter 0

Par exemple:

.div { 
 
    position: relative; 
 
    display: inline-block; 
 
    background: black; 
 
    width: 100px; 
 
    height: 100px; 
 
    margin: 0 !important; 
 
    font-size: 14px; 
 
    color:#fff; 
 
    text-align:center; 
 
} 
 
.main-div { 
 
    font-size:0; 
 
}
<div class="main-div"> 
 
<div class="div">1</div> 
 
<div class="div">2</div> 
 
<div class="div">3</div> 
 
</div>

-1

Comme l'a dit Gleb, mettre le font-size:0; sur le conteneur. Vous pouvez également placer le conteneur dans display: inline-flex; ou display: flex;.

0

Utilisez display: table-cell;

.div { 
 
    position: relative; 
 
    display: table-cell; 
 
    background: black; 
 
    width: 100px; 
 
    height: 100px; 
 
}
<div class="div"></div> 
 
<div class="div"></div> 
 
<div class="div"></div>

0

Je sais que ce n'est pas la solution la plus propre, mais voici comment je le fais:

.div { 
 
    display: inline-block; 
 
    background: black; 
 
    width: 100px; 
 
    height: 100px; 
 
    white-space: nowrap; 
 
    overflow: hidden; 
 
    margin-right : -0.25em; 
 
}
<div class="div"></div> 
 
<div class="div"></div> 
 
<div class="div"></div>

La marge indésirable inline-block est bien connue et vous trouverez d'autres solutions here