Quería agregar a la respuesta de JOPLOmacedo. Su solución es mi favorita, pero siempre tuve problemas con la sangría cuando el li tenía más de una línea. Fue complicado encontrar la sangría correcta con márgenes, etc. Pero esto podría preocuparme solo a mí.
Para mí, el posicionamiento absoluto del :beforepseudo-elemento funciona mejor. Me puse padding-leften ul, la posición negativa que queda en el :beforeelemento, igual que la de ul padding-left. Para obtener la distancia del contenido desde el :beforeelemento correcto, solo configuro el padding-leften el li. Por supuesto, el li tiene que tener una posición relativa. Por ejemplo
ul {
margin: 0 0 1em 0;
padding: 0 0 0 1em;
/* make space for li's :before */
list-style: none;
}
li {
position: relative;
padding-left: 0.4em;
/* text distance to icon */
}
li:before {
font-family: 'my-icon-font';
content: 'character-code-here';
position: absolute;
left: -1em;
/* same as ul padding-left */
top: 0.65em;
/* depends on character, maybe use padding-top instead */
/* .... more styling, maybe set width etc ... */
}
Esperemos que esto sea claro y tenga algún valor para alguien más que yo.