I have this snippet of 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>
and 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/
It uses CSS before content of list items in order to create a custom list numbering. The problem is that the alignment of the text doesn't work properly if the content of the list item is longer than a single line.
Is there a way to align the content of the lines properly? I already tried to position the content relative and giving the list items a padding (see commented out css in example) but this doesn't work either.
Try offsetting the margin on the entire div by the width of the before and then take the margin off on the before after.
Like this:
.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>
You can alternatively do it with positioning but you may hit snags with other elements being affected.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With