在项目符号之前将列表项与自定义CSS内容对齐

时间:2014-12-02 10:07:51

标签: css html5 css3 html-lists

我有这段HT​​ML代码:

<ul class="custom">
    <li data-bullet="a">Item 1</li>
    <li data-bullet="aa">Item 2</li>
    <li data-bullet="ab">Item 3.1<br/>Item 3.2</li>
    <li data-bullet="c">Item 4</li>
    <li data-bullet="d">Item 5</li>
    <li data-bullet="de">Item 6</li>
</ul>

和CSS:

.custom {
    list-style:none;
    padding:0;
    margin:0;
}
.custom li:before {
    display:inline-block;
    content:attr(data-bullet);
    width:50px;
}

/*
.custom {
    list-style:none;
    padding:0;
    margin:0;
}
.custom li:before {
    display:inline-block;
    content:attr(data-bullet);
    position:relative;
    top:0;
    left:-50px;
}
.custom li {
    padding-left:50px;
}
*/

http://jsfiddle.net/g0w989aa/1/

它在列表项的内容之前使用CSS以创建自定义列表编号。问题是如果列表项的内容长于一行,则文本的对齐不能正常工作。

有没有办法正确对齐线条的内容?我已经尝试将内容定位为相对位置并为列表项添加填充(请参阅示例中的注释掉的css),但这也不起作用。

3 个答案:

答案 0 :(得分:7)

尝试将整个div的边距偏移before的宽度,然后在before之后取消边距。

像这样:

.custom {
  list-style: none;
  padding: 0;
  margin: 0;
  margin-left: 50px;
}
.custom li:before {
  display: inline-block;
  content: attr(data-bullet);
  width: 50px;
  margin-left: -50px;
}
<ul class="custom">
  <li data-bullet="a">Item 1</li>
  <li data-bullet="aa">Item 2</li>
  <li data-bullet="ab">Item 3.1
    <br/>Item 3.2</li>
  <li data-bullet="c">Item 4</li>
  <li data-bullet="d">Item 5</li>
  <li data-bullet="de">Item 6</li>
</ul>

你也可以选择定位,但是你可能会遇到其他元素受到影响的障碍。

答案 1 :(得分:3)

希望这就是你要找的东西。

http://jsfiddle.net/xcfc63sL/

<强> CSS

.custom {
    list-style: none;
    padding: 0;
    margin: 0;
}
.custom li {
    position: relative;
    padding-left: 50px;
}
.custom li:before {
    display: inline-block;
    content: attr(data-bullet);
    width: 50px;
    position: absolute;
    left: 0;
}

<强> HTML

<ul class="custom">
    <li data-bullet="a">Item 1</li>
    <li data-bullet="aa">Item 2</li>
    <li data-bullet="ab">Item 3.1
        <br/>Item 3.2</li>
    <li data-bullet="c">Item 4</li>
    <li data-bullet="d">Item 5</li>
    <li data-bullet="de">Item 6</li>
</ul>

答案 2 :(得分:1)

您可以移除li元素before的宽度,并使用padding-leftposition: relative代替li制作:before内容为position:absolute如下。

.custom {
    list-style: none;
    padding: 0;
    margin: 0;
}
.custom li {
    position: relative;
    padding-left: 50px;
}
.custom li:before {
    display: inline-block;
    content: attr(data-bullet);
    position: absolute;
    left: 0;
}

Working Fiddle