При использовании 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
- Удаление пробелов между элементами встроенного блока, Дэвид Уолш
- Как убрать пробел между inline-block элементами?
Как @ 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 .
flexbox
,table/table-row/table-cell
или использованиеfloat
.parent { font-size:0; } child {font-size: 1rem; }
. С ремами сейчас проще всегоborder
он выключен. Это может добавить пространство, если вы перемещаете div.хороший ответ в css3:
white-space: nowrap;
в родительском узле и:
white-space: normal; vertical-align: top;
в div (или другом) на 50%
пример: http://jsfiddle.net/YpTMh/19/
РЕДАКТИРОВАТЬ:
есть другой способ:
font-size: 0;
для родительского узла и переопределить его в дочернем узле
источник
Это потому, что пробел между вашими двумя div интерпретируется как пробел. Если вы разместите свои
<div>
теги в строке, как показано ниже, проблема будет исправлена :<div id="left"></div><div id="right"></div>
источник
Потому что между элементами есть пространство. Если вы удалите все пробелы, они поместятся .
<div id="left">Left</div><div id="right">Right</div>
источник
Либо сделайте их блокированными, а не встроенными блоками. Это будет отображать div без пробелов между ними.
display:block;
или удалите пробел между тегами
<div id='left'></div><div id='right'></div>
или добавить
margin: -1en;
в один из разделов, чтобы уменьшить пространство, занимаемое одним отображаемым пространством.
источник
Пожалуйста, проверьте код ниже:
body { margin: 0; } #left { width: 50%; background: lightblue; display: inline-block; float:left; } #right { width: 50%; background: orange; display: inline-block; float:left; }
<div id="left">Left</div> <div id="right">Right</div>
источник
Пример Flexbox - это будет использоваться для родительского класса, содержащего два расположенных рядом элемента.
.parentclass { display: flex; justify-content: center; align-items: center; }
Взято из вертикального центрирования div внутри другого div
источник
Это можно сделать, добавив css display: inline к div, который содержит встроенные элементы.
При удалении пустого пространства с использованием поля с отрицательным значением становится необходимым добавить его к этому конкретному элементу. Поскольку добавление его в класс повлияет на места, где этот класс использовался.
Так что безопаснее использовать display: inline;
источник
добавить float: left; к обоим тегам div.
div { float: left; }
источник