【问题标题】:Can we have content text directly in <div>?我们可以直接在 <div> 中包含内容文本吗?
【发布时间】:2023-06-27 19:46:01
【问题描述】:

我们可以直接在&lt;div&gt;text content&lt;/div&gt; 中包含内容文本还是应该像&lt;div&gt;&lt;p&gt;text content&lt;/p&gt;&lt;/div&gt; 一样?根据网络标准。

【问题讨论】:

    标签: xhtml


    【解决方案1】:

    屏幕阅读器似乎可以处理 html &lt;div&gt;phrasing content&lt;/div&gt;html &lt;div&gt;&lt;p&gt;phrasing content&lt;/p&gt;&lt;/div&gt;

    在某些情况下会有所不同。

    似乎可以包含流式内容的元素和可以包含短语内容的元素的规则是不同的。

    【讨论】:

      【解决方案2】:

      来自html 4 strict DTD,从技术上讲,W3C 表示。

          HTML has two basic content models:
      
              %inline;     character level elements and text strings
              %block;      block-like elements e.g. paragraphs and lists
      
      
      <!ENTITY % block
           "P | %heading; | %list; | %preformatted; | DL | DIV | NOSCRIPT |
            BLOCKQUOTE | FORM | HR | TABLE | FIELDSET | ADDRESS">
      
      <!ENTITY % flow "%block; | %inline;">
      
      
      <!ELEMENT DIV - - (%flow;)*            -- generic language/style container -->
      

      翻译为“DIV 可以包含任何 %flow 实体”并且 flow entity 可以是内容模型 %block %inline ,如上所述是 %inline “字符级元素和文本字符串”,因此 DIV 可以直接包含字符串或&lt;!ENTITY % block ...中定义的元素

      和 %heading,%list, %preformated 当然可以进一步翻译,因为它们又是一个实体 ex。 &lt;!ENTITY % list "UL | OL"&gt;

      【讨论】:

        【解决方案3】:

        是的,您可以直接将内容文本添加到 div 标签中,尽管在大多数情况下使用 p 标签会更好。

        【讨论】:

          【解决方案4】:

          您可以在 div 元素中直接包含字符数据。如果(且仅当)该字符数据是一个段落,那么它也应该被标记为一个段落(根据您的第二个示例)。如果 div 中只有一段内容,那么通常应该避免使用 div 元素,因为它没有任何用处。

          【讨论】:

          • 我不同意div 元素总是毫无用处。如果您有可重用的 OOCSS 类型的样式,或者如果文本将来可以扩展到多个段落(并且这些段落需要一起作为一个块起作用),那么将其包装在 div 中可能是完全合理的。您不知道 html 的用途,那么您如何合法地指定结构!考虑嵌套的divp 的情况——如果将它们和它们的样式组合成一个p,那么当内容更改为两个段落时,您必须将其拆分回来。这显示了脆弱性。
          • 如果有的话,很高兴在这里明确讨论可访问性的含义。
          【解决方案5】:

          标准没有那么明确。我会选择您的第二个示例,因为它在结构上更合理,因此更具语义。

          【讨论】:

            【解决方案6】:

            可以直接在div 中拥有它。 div 通常用于对块元素进行分组以使用样式对其进行格式化,但 div 中的普通未标记文本就可以了。

            【讨论】: