Почему существует необъяснимый разрыв между этими элементами divline-блока?

У меня есть два встроенных блока div, которые одинаковы, расположены рядом друг с другом. Тем не менее, кажется, что существует такое загадочное пространство в 4 пикселя между двумя div, несмотря на то, что маржа установлена ​​равной 0. Нет никаких родительских divs, влияющих на них. Что происходит?

CSS

#container
{
    display:inline-block;
    position:relative;
    background:rgb(255,100,0);
    margin:0px;
    width:40%;
    height:100px;
}

Div problem

Вот что я хочу, чтобы он выглядел следующим образом:

What it SHOULD look like

Ответ 1

В этом случае элементы div были изменены с элементов уровня block на элементы inline. Типичной характеристикой элементов inline является то, что они соблюдают пробелы в разметке. Это объясняет, почему между элементами создается промежуток пространства. (пример)

Есть несколько решений, которые могут быть использованы для решения этой проблемы.

Способ 1 - Удалить пробел из разметки

Пример 1. Прокомментируйте пробелы: (пример)

<div>text</div><!--
--><div>text</div><!--
--><div>text</div><!--
--><div>text</div><!--
--><div>text</div>

Пример 2 - Удалите разрывы строк: (пример)

<div>text</div><div>text</div><div>text</div><div>text</div><div>text</div>

Пример 3. Закройте часть тега на следующей строке (пример)

<div>text</div
><div>text</div
><div>text</div
><div>text</div
><div>text</div>

Пример 4. Закройте весь тег на следующей строке: (пример)

<div>text
</div><div>text
</div><div>text
</div><div>text
</div><div>text
</div>

Способ 2 - Reset font-size

Так как пробел между элементами inline определяется font-size, вы можете просто Reset font-size до 0 и, таким образом, удалить пробел между элементами.

Просто установите font-size: 0 на родительские элементы, а затем объявите новый элемент font-size для дочерних элементов. Это работает, как показано здесь (пример)

#parent {
    font-size: 0;
}

#child {
    font-size: 16px;
}

Этот метод работает очень хорошо, так как он не требует изменения разметки; однако он не работает, если дочерний элемент font-size объявлен с использованием единиц em. Поэтому я рекомендовал бы удалить пробелы из разметки или, альтернативно, плавающие элементы и тем самым избежать пространства, генерируемого элементами inline.

Метод 3 - установите родительский элемент на display: flex

В некоторых случаях вы также можете установить display родительского элемента на flex. (пример)

Это эффективно удаляет пробелы между элементами в поддерживаемых браузерах. Не забудьте добавить соответствующие префиксы поставщиков для дополнительной поддержки.

.parent {
    display: flex;
}
.parent > div {
    display: inline-block;
    padding: 1em;
    border: 2px solid #f00;
}

.parent {
    display: flex;
}
.parent > div {
    display: inline-block;
    padding: 1em;
    border: 2px solid #f00;
}
<div class="parent">
    <div>text</div>
    <div>text</div>
    <div>text</div>
    <div>text</div>
    <div>text</div>
</div>

Ответ 2

Использование inline-block позволяет использовать пробел в вашем HTML, обычно это эквивалентно.25em (или 4px).

Вы можете либо прокомментировать белое пространство, либо, более общее решение, установить font-size родительского font-size в 0 и вернуть его обратно к требуемому размеру элементов встроенного блока.

Ответ 3

inline-block автоматически устанавливает стандартное white-space как говорят все. (Это связано с элементами "встроенные" свойства, такими же, как расстояние между словами в строке текста в вашей разметке HTML. Именно поэтому удаляется white-space в разметке.) Самое простое исправление - просто float контейнер. (например, float: left;) В другой заметке каждый id должен быть уникальным, то есть вы не можете использовать один и тот же id дважды в одном документе HTML. Вместо этого вы должны использовать классы, где вы можете использовать один и тот же class для нескольких элементов.

.container {
    display: inline-block;
    position: relative;
    background: rgb(255, 100, 0);
    margin: 0;
    width: 40%;
    height: 100px;
    float: left;
}

Ответ 4

Нашел решение, не связанное с Flex, потому что Flex не работает в старых браузерах. Пример:

.container {
    display:block;
    position:relative;
    height:150px;
    width:1024px;
    margin:0 auto;
    padding:0px;
    border:0px;
    background:#ececec;
    margin-bottom:10px;
    text-align:justify;
    box-sizing:border-box;
    white-space:nowrap;
    font-size:0pt;
    letter-spacing:-1em;
}

.cols {
    display:inline-block;
    position:relative;
    width:32%;
    height:100%;
    margin:0 auto;
    margin-right:2%;
    border:0px;
    background:lightgreen;  
    box-sizing:border-box;
    padding:10px;
    font-size:10pt;
    letter-spacing:normal;
}

.cols:last-child {
    margin-right:0;
}

Ответ 5

просто добавьте границу: 2px solid #e60000; на ваш второй тег CSS.

Определенно это работает

#Div2Id {
    border: 2px solid #e60000; --> color is your preference
}

Ответ 6

Вы должны добавить

#container
{
    display:inline-block;
    position:relative;
    background:rgb(255,100,0);
    margin:0px;
    width:40%;
    height:100px;
    margin-right:-4px;
}

потому что всякий раз, когда вы пишете display:inline-block требуется дополнительный margin-right:4px. Итак, вам нужно удалить его.