【问题标题】:unordered list in a paragraph element段落元素中的无序列表
【发布时间】:2011-08-23 23:26:47
【问题描述】:

当我写这个时:

<p class="paragraph">the list:
  <ul>
    <li>item</li>
  </ul>
</p>

我的浏览器在语义上呈现为:

<p class="paragraph">the list:</p>
<ul>
  <li>item</li>
</ul>
<p></p>

为什么?有没有更好的方法在段落中引入列表项?

【问题讨论】:

  • 那会是哪个浏览器?这里jsfiddle.net/B5f4b如果看结果的frame source,好像还不错。

标签: html


【解决方案1】:

根据HTML 5规范,一个段落可能包含phrasing content仍然不包括其他分组元素:

http://www.w3.org/TR/html5/grouping-content.html#the-p-element

根据 HTML 4.01 规范,段落只能包含内联元素:

http://www.w3.org/TR/html401/struct/text.html#h-9.3.1

9.3.1 Paragraphs: the P element

<!ELEMENT P - O (%inline;)*            -- paragraph -->
<!ATTLIST P
  %attrs;                              -- %coreattrs, %i18n, %events --
  >

在这种情况下,正确的标记是在开始列表之前关闭您的段落。

或者,您可以使用不以这种方式处理的段落以外的其他标签(如&lt;div&gt;)。

<div>
   <ul> ... </ul>
</div>

【讨论】:

  • 强烈建议不要使用&lt;div&gt;,因为它不是语义化的。正确的解决方案是按照这里描述的方式使用&lt;p&gt;标签。
  • 是的,我看到了规范,但这对我来说有点不一致,因为他们写道,块级元素可以包含块级元素。是期待吗?
  • 要完成这个答案,“为什么?”的一部分是段落标签在某些版本的 HTML 中并不总是需要关闭;允许浏览器在有意义的地方插入结束 &lt;\p&gt;(通常假设在您打开下一段之前,但不是以这种方式硬定义)。因此,根据上述规范,在无序列表等块级元素之前关闭它对浏览器来说是合乎逻辑的。
【解决方案2】:

我刚遇到这个问题,不想将它包含在 DIV 中,因为我在该页面的其余部分和所有页面中都使用了 P。相反,我将 SPAN 设置为表现得像 LI。

SPAN.li  {display: list-item; margin-left: 2em}
<P>These issues are currently on my mind
<SPAN class=li>My hat</SPAN>
<SPAN class=li>Global warming</SPAN>
<SPAN class=li>Global cooling</SPAN>
<SPAN class=li>Global terrorism</SPAN>
<SPAN class=li>Global narrow-mindedness</SPAN></P>

【讨论】:

    【解决方案3】:

    段落中不允许使用列表 - 没有办法做到这一点,这在语义上是不可能的。

    如果您希望列表继承段落的样式,只需将 UL 元素添加到与您的 P 元素相同的 CSS 样式:

    例如:

    p, ul { font-size: 12px; }
    

    或者更好的是,将这两个元素都包含在一些合乎逻辑的东西(部分、文章、div)中。

    您必须问自己为什么要将列表放在段落中。如果是因为您希望它们的样式相同,那么您希望它们都在同一个包含元素中,例如:

    <article>
        <p>Paragraph of text</p>
        <ul>
            <li>List</li>
        </ul>
        <p>Next paragraph</p>
    </article>
    

    然后为文章设置样式。

    【讨论】:

    • 我想在我的段落中添加一个列表,因为它极大地强调了我的句子结构。例如。 “我今天想买[list]• 牛奶、• 糖、• 苹果和• 中提琴[/list]。” 这通常在用TeX 排版文本时使用。将我的句子分成两段在语义上是不正确的。
    • 所以可能 div 是最好的选择了。
    • “语义上不可能”是什么意思?一段文字包含一个列表绝对不是不可能的。我写了许多包含列表的段落。事实上,我写了很多包含列表的句子。
    【解决方案4】:

    试试这个。我在我的段落中间添加了它并且它起作用了。我还给了它一个类和换行符。

    HTML:

    <div>
    <ul class="list">
    <br><li>LIST</li></br>
    <br><li>LIST</li></br>
    </ul>
    </div>
    

    CSS:

    .list{
    list-style: black circle;
    padding: 15 15 15 15;
    background-color: grey;
    }
    

    我刚刚添加了背景颜色和填充,之后您可以将其删除。 它有助于了解正在发生的事情。

    【讨论】:

    • 这并不能真正回答所提出的问题。 ulonly 有效子代是 li: HTML5 Spec 。此外,br 是一个自闭合标签 HTML 中没有 &lt;/br&gt;
    猜你喜欢
    • 2016-12-06
    • 2020-01-16
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 2015-06-19
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多