Несогласованное поведение inline-block элементов при создании с помощью JavaScript

У меня есть несколько таких же 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?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы путаете пустое пространство с полями. Встроенные элементы чувствительны к пробелам в вашем коде, поэтому, когда вы генерируете их с помощью 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.

Sebastian Simon 18.05.2018 20:56

Спасибо вам обоим, я не думал об этом так.

Matus Dubrava 18.05.2018 20:58

Другие вопросы по теме