Как убрать пустое место между блоками inline-block?
Делаю сайт
Между двумя блоками div есть пространство буквально в 1px, и снизу блока то же самое.
Все margin'ы я обнулил, откуда они взялись и как их убрать, чтобы блоки вплотную стояли?
Знаю, что можно сделать с помощью float, но хотелось бы оставить display: inline-block.
* {
margin: 0;
}
body {
background-color: #f3f3f3;
}
.header {
border: 1px solid red;
}
.header__left {
background-image: url(../images/1.png);
width: 65%;
height: 715px;
display: inline-block;
}
.header__right {
background-image: url(../images/2.png);
width: 34%;
height: 715px;
display: inline-block;
}
<div class="header">
<div class="header__left"></div>
<div class="header__right"></div>
</div>
<div class="mider">
<div class="mider__left"></div>
<div class="mider__right">
<div class="mider__right-top"></div>
<div class="mider__right-bot"></div>
</div>
</div>
<div class="footer">
<div class="footer__left"></div>
<div class="footer__right"></div>
</div>
Ответы (2 шт):
Такое может происходить из за пустого места в шаблоне HTML, которое обычно убирается на этапе минификации.
Если она не планируется, то понадобиться самостоятельно убрать пробелы:
// как сейчас
<div class="header">
<div class="header__left"></div>
<div class="header__right"></div>
</div>
// как следует поменять
<div class="header"><div class="header__left"></div><div class="header__right"></div></div>
// или так (не рекомендую, просто для информации)
<div class="header"
><div class="header__left"></div
><div class="header__right"></div
></div>
// или так (еще одно извращение)
<div class="header"><!--
--><div class="header__left"></div><!--
--><div class="header__right"></div><!--
--></div>
Результат после:
Рабочий пример:
.header {
display: inline-block;
height: 45px;
border: 1px solid red;
}
.header__left, .header__right {
display: inline-block;
height: 45px;
}
.header__left {
width: 165px;
background-color: blue;
}
.header__right {
width: 135px;
background-color: green;
}
<div class="header"><div class="header__left"></div><div class="header__right"></div></div>
В случае, когда мы имеем дело с определенными inline-элементами может потребоваться дополнительное обнуление свойств font-size и line-height, которые могут провоцировать нежелательные отступы.
Отдельно стоит отметить что у div-элементов margin и padding по дефолту и так равны нулю, т.е специально обнулять их не требуеться.
Между элементами появляется пространство, вызванное тем, при написание вы использовали "новую строку", а браузер из этого уже сделал "пробел":
Решений несколько, вот те которые могу предложить:
Выставить родителю font-size: 0
.header {
border: 1px solid red;
/* ----- */
font-size: 0;
}
.header__left {
background: red;
width: 65%;
height: 90vh;
display: inline-block;
}
.header__right {
background: blue;
width: 34%;
height: 90vh;
display: inline-block;
}
<div class="header">
<div class="header__left"></div>
<div class="header__right"></div>
</div>
Использовать float: left;
.header {
border: 1px solid red;
}
/* fix */
.header::after {
content: '';
display: block;
clear: both;
}
.header__left {
background: red;
width: 65%;
height: 90vh;
display: inline-block;
/* ----- */
float: left;
}
.header__right {
background: blue;
width: 34%;
height: 90vh;
display: inline-block;
/* ----- */
float: left;
}
<div class="header">
<div class="header__left"></div>
<div class="header__right"></div>
</div>
Использовать комментарий
.header {
border: 1px solid red;
}
.header__left {
background: red;
width: 65%;
height: 90vh;
display: inline-block;
}
.header__right {
background: blue;
width: 34%;
height: 90vh;
display: inline-block;
}
<div class="header">
<div class="header__left"></div><!--
--><div class="header__right"></div>
</div>
Использовать "новые" технологии Flexbox или Grid Layout
.header {
border: 1px solid red;
/* ---- */
display: flex;
}
.header__left {
background: red;
width: 65%;
height: 90vh;
display: inline-block;
}
.header__right {
background: blue;
width: 34%;
height: 90vh;
display: inline-block;
}
<div class="header">
<div class="header__left"></div>
<div class="header__right"></div>
</div>

