Only list-items have markers:
The ::marker
pseudo-element represents the automatically generated
marker box of a list item. (See display: list-item
.)
So you need list-item
:
The list-item
keyword causes the element to generate a
::marker
pseudo-element box with the content specified by its
list-style properties (CSS 2.1§12.5 Lists) together with a
principal box of the specified type for its own contents.
CSS Display 3 introduces some variants of list-item
:
list-item block flow
list-item block flow-root
list-item inline flow
list-item inline flow-root
list-item run-in flow
list-item run-in flow-root
but it seems there is no browser support, so better use the old display: list-item
.
That's why, if you use display: inline-block
or display: table-cell
, the markers disappear.
If you want to align the markers vertically, the CSS Lists and Counters drafts allows
li::marker {
display: inline-block;
vertical-align: middle;
}
However, don't expect any browser to support this yet. Instead, I would recommend hiding the markers and using a ::before
pseudo-element instead:
ul {
list-style: none;
padding-left: 0;
}
li::before {
content: url('image.ico');
display: inline-block;
vertical-align: middle;
}
Note the behavior will be like if you used list-style-position: inside
, which may not look right if the list items have line breaks. You can try absolute positioning if you want to emulate list-style-position: outside
.