【问题标题】:<p> tag inside <li> tag with counter based on counter-reset forces unwanted new line<li> 标签内的 <p> 标签,带有基于 counter-reset 的计数器强制不需要的新行
【发布时间】:2014-06-13 05:48:49
【问题描述】:

CSS counter-reset 属性允许自动编号 HTML 元素(例如 here)。除了在链接中演示的用途之外,当&lt;li&gt; 元素并非都出现在同一个&lt;ol&gt; 标记内时,此属性还可用于在网页上制作连续的有序列表。

但是,当&lt;li&gt; 标记内有&lt;p&gt; 标记时,这会强制文本出现在实际计数器之后的一行上。有什么方法可以防止这种行为同时仍然使用&lt;p&gt; 标签?也就是说,如何使以下最小工作示例中的文本“Life is bad”与其计数器显示在同一行同时将文本保留在 HTML 标记中的 &lt;p&gt; 标记内 em>?

这是最小的工作示例(在 JSFiddle 上):

HTML:

<div id="test">
    <ol>
        <li class="continuous-list">Life is good</li>
        <li class="continuous-list">
            <p>Life is bad</p>
        </li>
    </ol>
    <ol>
        <li class="continuous-list">Life is good</li>
        <li class="continuous-list">Life is good</li>
    </ol>
</div>

CSS:

#test {
    counter-reset: continuous-counter;
}
li.continuous-list {
    list-style-type: none;
    counter-increment: continuous-counter;
}
li.continuous-list:before {
    content:"(" counter(continuous-counter)") ";
}

【问题讨论】:

    标签: html css html-lists pseudo-element


    【解决方案1】:

    因为p块级元素,所以需要内联

    ol li p {
        display: inline;
    }
    

    Demo

    现在,上面的选择器会将ol li 中的所有p 元素设为display: inline,因此当您使用id 时,您可以通过使用使您的选择器独一无二

    div#test ol li p {
        display: inline; /* Or you can use inline-block as well if you are 
                            looking to work with margins and paddings, inline-block 
                            will be handy */
    }
    

    【讨论】:

    • 内联段落仅适用于一个段落,但如果&lt;li&gt; 元素中有两个(或更多)段落,是否可以做一些事情?将 display 更改为 inline 会将这些段落放在同一行。
    • @AdamLiter 使用br 标签将它们分开
    【解决方案2】:

    float:left 添加到before

    li.continuous-list:before {
        float: left;
        content:"(" counter(continuous-counter)") ";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-19
      • 2011-01-05
      • 1970-01-01
      • 2019-02-14
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 2015-12-24
      相关资源
      最近更新 更多