javascript - 通过 JavaScript 创建时内联 block 元素的行为不一致

标签 javascript html css

我有一堆相同的 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 添加它们,顶部和底部边距保持不变,但左右似乎消失了。

在这段代码中,如果我切换到第一个元素然后按回车键,则会创建新的 div 并将其添加到 DOM 中,但如上所述,边距消失了当我开始添加更多的时候(多次点击回车)。

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 代码有问题吗?

最佳答案

您混淆了空白和页边距。内联元素对代码中的空格很敏感,因此当您通过 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>

关于javascript - 通过 JavaScript 创建时内联 block 元素的行为不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50417549/

相关文章:

javascript - Rails 应用程序 JavaScript 放置在 application.js 中时不起作用

javascript - React Native 如何使用 FlatList inside nativebase Tabs onEndReach keep fire non-stop

html - CSS - 如何使内部包裹 float 的 DIV 的大小与容纳 float 所需的大小一样大?

css - CSS Level 3 中允许的功能行为是否是 CSS Level 2 中允许的*子集*?

html - css网格如何计算行自动高度?

匿名函数中的javascript奇怪行为

html - 在其他两个 div 之间垂直放置 div 文本

jquery - 通过更改 :before 折叠时将加号更改为减号

html - html中img的宽度和高度不起作用

javascript - 我可以用 javascript 更改正文 html 中特定区域的样式吗?