Al usar inline-block
elementos, siempre habrá un whitespace
problema entre esos elementos (ese espacio tiene aproximadamente ~ 4px de ancho).
Entonces, sus dos divs
, que tienen 50% de ancho, más que whitespace
(~ 4px) tiene más del 100% de ancho, por lo que se rompe. Ejemplo de su 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>
Hay algunas formas de solucionarlo:
1. No hay espacio entre esos elementos
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. Usar comentarios 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. Establecer los padres font-size
a 0
, y luego añadir un poco de valor a inline-block
los elementos
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. Usar un margen negativo entre ellos ( no es preferible )
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. Ángulo de caída de cierre
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. Omitir ciertas etiquetas de cierre HTML (gracias @thirtydot por la referencia )
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>
Referencias:
- Luchando contra el espacio entre elementos de bloques en línea en trucos CSS
- Eliminar espacios en blanco entre elementos de bloques en línea por David Walsh
- ¿Cómo eliminar el espacio entre elementos de bloques en línea?
Como dijo @ MarcosPérezGude , la mejor manera es usar y agregar algún valor predeterminado a la etiqueta (como en HTML5Boilerplate ). Ejemplo:rem
font-size
html
html{
font-size: 1em;
}
.ib-parent{
font-size: 0;
}
.ib-child{
display: inline-block;
font-size: 1rem;
}
Actualización : como es casi 2018., use flexbox o incluso mejor: diseño de cuadrícula CSS .