Quando si utilizzano inline-blockelementi, ci sarà sempre un whitespace problema tra questi elementi (lo spazio è largo circa 4 px).
Quindi, i tuoi due divs, che hanno entrambi il 50% di larghezza, più quello whitespace(~ 4px) è più del 100% di larghezza, e quindi si rompe. Esempio del tuo problema:
body{
margin: 0;
}
div{
display: inline-block;
width: 50%;
}
.left{
background-color: aqua;
}
.right{
background-color: gold;
}
<div class="left">foo</div>
<div class="right">bar</div>
Ci sono alcuni modi per risolverlo:
1. Nessuno spazio tra questi elementi
body{
margin: 0;
}
div{
display: inline-block;
width: 50%;
}
.left{
background-color: aqua;
}
.right{
background-color: gold;
}
<div class="left">foo</div><div class="right">bar</div>
2. Utilizzo di commenti HTML
body{
margin: 0;
}
div{
display: inline-block;
width: 50%;
}
.left{
background-color: aqua;
}
.right{
background-color: gold;
}
<div class="left">foo</div><div class="right">bar</div>
3. Impostare i genitori font-sizesu 0, quindi aggiungere un valore agli inline-blockelementi
body{
margin: 0;
}
.parent{
font-size: 0;
}
.parent > div{
display: inline-block;
width: 50%;
font-size: 16px;
}
.left{
background-color: aqua;
}
.right{
background-color: gold;
}
<div class="parent">
<div class="left">foo</div>
<div class="right">bar</div>
</div>
4. Utilizzo di un margine negativo tra di loro ( non preferibile )
body{
margin: 0;
}
div{
display: inline-block;
width: 50%;
margin-right: -4px;
}
.left{
background-color: aqua;
}
.right{
background-color: gold;
}
<div class="left">foo</div>
<div class="right">bar</div>
5. Caduta dell'angolo di chiusura
body{
margin: 0;
}
div{
display: inline-block;
width: 50%;
}
.left{
background-color: aqua;
}
.right{
background-color: gold;
}
<div class="left">foo</div
><div class="right">bar</div>
<hr>
<div class="left">foo</div><div class="right">
bar</div>
6. Saltare alcuni tag di chiusura HTML (grazie @thirtydot per il riferimento )
body{
margin: 0;
}
ul{
margin: 0;
padding: 0;
}
li{
display: inline-block;
width: 50%;
}
.left{
background-color: aqua;
}
.right{
background-color: gold;
}
<ul>
<li class="left">foo
<li class="right">bar
</ul>
Riferimenti:
- Combattere lo spazio tra elementi di blocco in linea su trucchi CSS
- Rimuovi spazi vuoti tra elementi inline-block di David Walsh
- Come rimuovere lo spazio tra gli elementi inline-block?
Come @ MarcosPérezGude detto , il miglior modo è quello di utilizzare rem, e aggiungere un po valore predefinito per font-sizeil htmltag (come in HTML5Boilerplate ). Esempio:
html{
font-size: 1em;
}
.ib-parent{
font-size: 0;
}
.ib-child{
display: inline-block;
font-size: 1rem;
}
Aggiornamento : poiché è quasi il 2018, usa flexbox o, ancora meglio, layout a griglia CSS .