4

我试图弄清楚如何在我的 ol. 我的目标是最终结果使 ol 水平,数字在 li 文本下左对齐。

最终结果的示例:
项目 项目 项目 项目
1 2 3 4 5

4

3 回答 3

5

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

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

<ol class="list">
    <li>Apples</li>
    <li>Bananas</li>
    <li>Cherries</li>
    <li>Durian</li>
</ol>

应用以下 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;
}

定义一个自定义计数器并将其放置在一个伪元素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>

然后应用以下 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;
}

在这种情况下,您list-style-position: inside, 然后通过指定 20px 的 line-height 和 20px 的 padding-top 来定义一个两行文本区域。您还需要在列表项上指定宽度。

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

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

参见演示:http: //jsfiddle.net/audetwebdesign/PUH9V/

于 2013-09-30T15:15:51.567 回答
0

我在 li 内使用 span 将文本定位在元素上方。您可能需要调整 CSS 以在您的实际环境中更好地工作。

http://jsfiddle.net/j5Nbx/2/

HTML

<ol class="example">
    <li>
        <span>Item</span>
    </li>
    <li>
        <span>Item</span>
    </li>
    <li>
        <span>Item</span>
    </li>
    <li>
        <span>Item</span>
    </li>
    <li>
        <span>Item</span>
    </li>
</ol>

CSS

.example li {
    float:left;
    padding:10px;
}

.example:after{
    content:"";
    display:block;
    clear:both;
}

.example li span {
    position:relative;
    left:-35px;
    top:-20px;
}
于 2013-09-30T15:18:11.867 回答
0

这是我的方式,使用 CSS 2.x 和跨浏览器:)

HTML

<ol>
    <li><span>item</span></li>
    <li><span>item</span></li>
    <li><span>item</span></li>
    <li><span>item</span></li>
    <li><span>item</span></li>
</ol>

CSS

ol li {
    position:relative;
    min-width:100px;
    padding:30px 0 0;
    float:left;
}

ol li span {
    position:absolute;
    left:-30px;
    top:0px;
}

工作:http: //jsfiddle.net/shekhardesigner/fuLjk/

于 2013-09-30T15:20:00.493 回答