【问题标题】:How to cope with chrome/firefox margin-collapsing <details>/<summary> differently?如何以不同方式处理 chrome/firefox margin-collapsing <details>/<summary>?
【发布时间】:2023-01-15 08:52:48
【问题描述】:

查看此 HTML/CSS 示例,观察 Chrome (v110) 和 Firefox (v108) 如何以不同方式呈现它们。

* {border:0; font-size:100%; font:inherit; margin:0; padding:0; vertical-align:baseline;}
details {margin:0;}
details summary {margin: 1em 0 1em 1em;}
<details>
  <summary>First</summary>
</details> 
<details>
  <summary>Second</summary>
</details> 

第一个 &lt;details&gt; 标签除了 &lt;summary&gt; 之外是空的。 据我所知,Chrome 决定 margin collapse 第一个 &lt;summary&gt; 的底部边距和第二个 &lt;summary&gt; 的顶部边距仅当 &lt;details&gt; 打开时,而 Firefox 在任何一种情况下都会折叠它们。我正在构建一个语义“模板”,所以我想知道如何将 CSS 编写为 Firefox/Chrome 不可知论者。我想要:

  • &lt;details&gt; 的打开/关闭是空的,除了他们的 &lt;summary&gt; 根本不影响间距/边距。
  • 开盘、空 &lt;details&gt; 和收盘 &lt;details&gt; 之间的保证金一致。

您如何编写能够一致地呈现 HTML 的 CSS?


研究此浏览器差异后,Firefox 似乎是不符合 W3 标准的浏览器。请参阅此可能相关的CSS margin test。在这里收集了可能相关的阅读资料:

【问题讨论】:

    标签: html css google-chrome firefox margin


    【解决方案1】:

    抛开 Firefox/Chrome 的差异不谈,有一种方法可以完全避免这个问题。

    宣布没有边距&lt;summary&gt;;而是将它们放在&lt;details&gt; 中。

    details {margin: 1em 0 1em 1em;}
    details summary {margin:0;}
    

    这是有道理的,因为 &lt;details&gt; 是这里的“块”元素,并且应该处理相对于 HTML 中任何其他块元素的边距。 &lt;summary&gt; 标签的默认值为 display:list-item; — 它实际上只是为了包含一些文本或单击以展开详细信息的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-30
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多