我认为自己是一个相当有经验的CSS用户,但这个问题困扰了我.我有一个基本的CSS设置,我希望以一种可预测的方式工作.

.grid {
  display: grid;
}

.card > div {
  border-left: 1px solid black;
  height: 100%
}
<div class="grid">
  <a class="card" href="https://example.com">
    <div>
      <p>
        Hello Stackoverflow! There is 2em of margin below me!
      </p>
    </div>
  </a>
</div>

请注意一个有趣的行为,p的底部边距似乎是2em,而不是下面的合理预期

  • 顶部1em,底部1em
  • 0em

这让我措手不及,所以我把这些价值观搞砸了.这才是真正有趣的地方

  • 移除display: grid:2em,底部下降至0
  • 移除height: 100%:底部的2em下降到0
  • change border-left to border: 顶部1em,底部1em

当我们移除a并调整我们的类以匹配它时(内部div变成.card)

  • Patterns are normal but still confusing
    • Usually 顶部1em,底部1em
  • border-left-&gt;border:什么都不会改变
  • height: 100%:什么都不会改变
  • 删除display: grid:使边缘0

这到底是怎么回事?inspect工具没有显示任何信息,如果有任何信息的话,它会让问题变得更加混乱.div与锚的偏移量为1em,但原因尚不清楚

理想情况下,边距是0(没有display: grid样式),但我可以接受两边都是1em.我很好奇为什么会发生这种行为,以及我能做些什么来否定它.

谢谢巫师们!

推荐答案

这是一种奇怪的行为.

看起来p上的margin-top是从网格but的顶部流出的网格是根据包含该边距计算其自身高度的,所以看起来p上的margin-bottom2em,而不是1em(虽然不是).

enter image description here

这是一种奇怪的行为,但我认为这与margins collapse with adjacent elements人的行为方式有关.

我们可以通过在p元素中添加display: inline-block来确认这一点(这可以防止它折叠边距).

Inline Block

with position inline block

现在我们知道发生了什么,该怎么办?

如果你能接受p上的display: inline-block,那就行了.否则,您可以删除边距(p { margin: 0 })并用填充物替换它.

Padding instead of Margin

padding instead of margin

Html相关问答推荐

使用tauri构建的Next.js应用程序不显示我的404页面

css网格区域的布局不展开,也不显示滚动条

将弹性容器设置为内容宽度

与窗高匹配的响应式正方形网格

div 中的垂直中心表格

目标第一个祖先标签的 XPath

带有排序元素的 CSS 网格

如何使元素具有粘性

当浏览器宽度减小时字体大小变得太大

如何影响 HTML 元素的哪些子元素导致其增长,哪些不增长?

排列卡片时遇到困难

如何使用html css将图像显示为附加形状

白色栏超出页面100%的右侧

主要元素内滚动时,固定导航栏会消失

需要帮助个性化我的 CSS 导航栏:如何在鼠标悬停时突出显示
  • 元素?
  • 绝对类在另一个绝对类之上

    使用 calc 函数设置字体大小时 Flexbox 项目重叠

    为四开本网站主页添加背景图片

    在一行中对齐两个不同形式的按钮

    focusout() Select 器不适用于搜索框