li文本下面的ol数字

Joh*_*xon 4 css html-lists

我正在试图找出如何在我的ol中设置样式.我的目标是使最终结果具有水平线,左边的数字在li文本下对齐.

最终结果应如何显示的示例:
项目项目项目项目项目
1 2 3 4 5

Mar*_*det 5

这是使用伪元素定位自定义计数器来实现此设计的一种方法.

您可以从有序或无序列表开始:

<ol class="list">
    <li>Apples</li>
    <li>Bananas</li>
    <li>Cherries</li>
    <li>Durian</li>
</ol>
Run Code Online (Sandbox Code Playgroud)

应用以下CSS:

.list {
    counter-reset:itemcounter;
    margin: 0;
    padding: 0;
}
.list li {
    border: 1px dotted gray;
    margin-right: 30px;
    float: left;
    list-style: none;
}
.list li:after {
    content:counter(itemcounter);
    color:#000;
    counter-increment: itemcounter;
    display: block;
    background-color: pink;
    padding: 0px;
    text-align: left;
    padding-right: 5px;
}
Run Code Online (Sandbox Code Playgroud)

定义自定义计数器并将其放置在伪元素中li:after.

我浮动列表项以获取水平菜单,但您也可以使用内联块.

请参阅演示:http://jsfiddle.net/audetwebdesign/DgZvg/

向后兼容性

这里的限制设计因素是自定义计数器,IE8将继续支持该计数器:http://caniuse.com/#feat=css-counters

替代旧版浏览器

对于不支持计数器和生成内容的旧版浏览器,您可以尝试以下操作.

您需要在列表内容上添加包装元素:

<ol class="list">
    <li><p>Apples</p></li>
    <li><p>Bananas</p></li>
    <li><p>Cherries</p></li>
    <li><p>Durians</p></li>
</ol>
Run Code Online (Sandbox Code Playgroud)

然后应用以下CSS:

.list {
    margin: 0;
    padding: 0;
}
.list li {
    list-style-position: inside;
    border: 1px dotted gray;
    margin-right: 30px;
    padding-left: 5px; /* gives you some control... */
    float: left;
    padding-top: 20px;
    line-height: 20px;
    width: 100px;
    position: relative;
}
.list li p {
    height: 20px;
    margin: 0;
    position: absolute;
    bottom: 20px;
    left: 0;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您list-style-position: inside可以通过指定20px的行高和20px的padding-top来定义两行文本区域.您还需要在列表项上指定宽度.

然后将高度设置为内包装,然后使用绝对定位将底部偏移20px.

由于宽度和高度的长度,这是更多的工作,有点受限,但它是一个概念验证.

请参阅演示:http://jsfiddle.net/audetwebdesign/PUH9V/

  • 我想说根本不用担心IE7. (2认同)