【问题标题】:Block element inside custom element inside <p><p> 内的自定义元素内的块元素
【发布时间】:2014-12-02 02:21:39
【问题描述】:

我正在使用 HTML5 自定义元素来创建所谓的“丰富脚注”(基本上是小的鼠标悬停框)。标记看起来像

<p>
  Socrates is a
  <x-info>
    <x-text>
      man
    </x-text>
    <x-planation>
      <p>What is a man? Here are some examples of men:</p>
      <ul>
        <li>Bill Clinton</li>
        <li>Aristotle</li>
      </ul>
    </x-planation>
  </x-info>, therefore Socrates is mortal
</p>

应该呈现类似的东西

苏格拉底是一个,因此苏格拉底是必死的

这样,当您将鼠标悬停在 ma​​n 上时,该框就会出现。当&lt;x-info&gt; 仅包含内联元素时,这可以正常工作。但是,在上面的示例中,HTML 解析器很生气,因为我将 &lt;p&gt;s 和 &lt;ul&gt;s 嵌套在另一个 &lt;p&gt; 中,并破坏了标记,使其呈现得更像

苏格拉底是个男人

什么是男人?以下是一些男性的例子:

  • 比尔·克林顿
  • 亚里士多德

,因此苏格拉底是必死的

有没有办法解决这个问题?我想避免更改标记结构,这在某种程度上是我无法控制的(否则,我将不得不在后端对其进行预处理)。

【问题讨论】:

标签: html web-component custom-element


【解决方案1】:

html 解析器并没有“生气”,它只是将默认样式应用于您使用的元素的浏览器。

列表 (ul, ol, dl) 是一个块级元素,具有可接受的默认样式,所有浏览器都将这些样式(填充、边距、项目符号、数字等)应用于这些元素以 让它们看起来像列表

在您的情况下,无序列表、项目符号列表项是所有浏览器的标准呈现。你的问题是你不希望你的列表看起来像一个列表,所以你有两个选择:

  1. 不要将标记用于列表。
  2. 删除列表的默认样式。

如果您无法更改标记,那么您将需要选项 2,您可以通过一点 css 来实现。

ul {display: inline-block; padding: 0, margin: 0; list-style: none}
ul > li {display: inline;}

当然,选项一要容易得多,因为您可以使用:

<p>What is a man? Here are some examples of men: Bill Clinton, Aristotle, therefore Socrates is mortal</p>

这在语义上没有错,因为没有明显的理由不能将所有内容视为一个段落;尤其是因为这就是您希望它出现的方式。

附言在这个特定示例中,最好使用&lt;dfn&gt; 元素来标记您正在为其创建定义的单词。定义列表&lt;dl&gt; 也是一个不错的选择。

【讨论】:

  • 我不认为这是正确的。如果您查看 jsfiddle.net/22p7rams 并检查浏览器中呈现页面的 DOM,您会看到浏览器正在将列表和嵌套段落移动到根段落标记之外(以及自定义标记之外)。这不仅仅是造型问题。再说一次,在那个小提琴中,我没有定义自定义元素。也许如果我这样做了,行为会有所不同?我想...
  • 浏览器只是试图理解您不正确的标记。 &lt;p&gt; 元素不能包含其他块级元素,如 &lt;p&gt;&lt;ul&gt;,它们只能包含内联元素。
  • 没错。我的观点是,正如这个答案所暗示的那样,问题似乎与样式无关。
  • 它与造型有关。您所看到的是合理的默认浏览器样式的结果。当然,您可以使用我的回答中详述的 css 来更改它;这就是我理解你想要做的。但是,正如我在回答中所解释的那样,正确使用 html 可能更有意义。如果您使用正确的元素来提供您想要的基本样式,我认为您会发现问题更少。
  • 仅供参考,我不是 OP。 (您对我的 cmets 的回答似乎暗示您认为我是。)从我所见,问题不在于样式。 OP 正在尝试使用 自定义元素(看起来像 x-tags 库)来提供“丰富的脚注”类型的功能。问题是浏览器正在将应该在 x-info 标记内的脚注内容移动到文档中的其他位置,导致他的代码行为不正确。
猜你喜欢
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 2010-12-15
  • 1970-01-01
  • 2012-02-24
  • 1970-01-01
  • 2022-11-14
  • 1970-01-01
相关资源
最近更新 更多