У меня есть несколько таких же div, у которых свойство display установлено на inline-block. Я знаю, что элементы inline-block по умолчанию имеют некоторый запас вокруг них, поэтому без каких-либо изменений я ожидал бы некоторого свободного пространства вокруг этих элементов (этот вопрос не об их удалении).
Если я просто жестко закодирую их в файл html, они будут вести себя так, как я от них ожидаю.
* {
margin: 0;
padding: 0;
}
div.box {
width: 100px;
height: 40px;
background: red;
display: inline-block;
}<div tabindex = "1" class='box'></div>
<div class='box'></div>
<div class='box'></div>Но если я начну добавлять их через JavaScript, верхнее и нижнее поля останутся прежними, а левое и правое, кажется, исчезнут.
В этом коде, если я перехожу к первому элементу, а затем нажимаю Enter, новый div создается и добавляется в DOM, но, как упоминалось выше, поля исчезают, когда я начинаю добавлять их (нажимая несколько раз Enter).
const btn = document.querySelector('div.box');
btn.addEventListener('keypress', event => {
if (event.key === 'Enter') {
const box = document.createElement('div');
box.className = 'box';
document.body.appendChild(box);
}
});* {
margin: 0;
padding: 0;
}
div.box {
width: 100px;
height: 40px;
background: red;
display: inline-block;
}<div tabindex = "1" class='box'></div>Кто-нибудь знает, почему существует разница в том, как эти div отображаются при жестком кодировании и добавлении программным способом? Что-то не так с кодом JavaScript?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы путаете пустое пространство с полями. Встроенные элементы чувствительны к пробелам в вашем коде, поэтому, когда вы генерируете их с помощью JS, эти пробелы не существуют, если вы не добавляете их вручную. Самый простой способ увидеть это - в вашем первом примере, поместив все ваши div в одну строку без пробелов и возврата каретки.
* {
margin: 0;
padding: 0;
}
div.box {
width: 100px;
height: 40px;
background: red;
display: inline-block;
}<div tabindex = "1" class='box'></div><div class='box'></div><div class='box'></div>Спасибо вам обоим, я не думал об этом так.
И наоборот, если вы добавите
document.createText("\n")между каждымbox, вы увидите тот же результат, что и в HTML.