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.
Hope this is what you are looking for.
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>
You can remove the width from your li
elements before
and use padding-left
and position: relative
for your li
and make your :before
contents to be position:absolute
as follows.
.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