При використанні inline-blockелементів завжди виникатиме whitespace проблема між цими елементами (цей простір становить приблизно ~ 4 пікселі).
Отже, ваші два divs, у яких обидва мають ширину 50%, плюс це whitespace(~ 4px) більше 100% в ширину, і тому він ламається. Приклад вашої проблеми:
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>
Є кілька способів виправити це:
1. Немає простору між цими елементами
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. Використання 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. Встановіть для батьків font-sizeзначення 0, а потім додайте деяке значення inline-blockелементам
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. Використання від’ємного запасу між ними ( не переважно )
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. Падіння кута закриття
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. Пропуск певних закриваючих тегів HTML (спасибі @thirtydot за посилання )
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>
Список літератури:
- Боротьба з простором між вбудованими блочними елементами на CSS Tricks
- Видаліть пробіл між елементами вбудованого блоку Девіда Уолша
- Як прибрати пробіл між елементами вбудованого блоку?
Як @ MarcosPérezGude сказав , то кращий спосіб полягає у використанні rem, а також додати значення по замовчуванням деякі font-sizeна htmlмітці (наприклад , в HTML5Boilerplate ). Приклад:
html{
font-size: 1em;
}
.ib-parent{
font-size: 0;
}
.ib-child{
display: inline-block;
font-size: 1rem;
}
Оновлення : оскільки вже майже 2018 рік, використовуйте flexbox або навіть краще - макет сітки CSS .