Adicionando outra resposta a esta pergunta, porque eu precisava exatamente do que @derek estava pedindo e já havia me aprofundado um pouco antes de ver as respostas aqui. Especificamente, eu precisava de CSS que também pudesse explicar o caso com exatamente dois itens de lista, nos quais a vírgula NÃO é desejada. Como exemplo, algumas linhas de autoria que eu queria produzir teriam a seguinte aparência:
Um autor:
By Adam Smith.
Dois autores:
By Adam Smith and Jane Doe.
Três autores:
By Adam Smith, Jane Doe, and Frank Underwood.
As soluções já fornecidas aqui funcionam para um autor e para três ou mais autores, mas negligenciam o caso de dois autores - onde o estilo "Oxford Comma" (também conhecido como estilo "Harvard Comma" em algumas partes) não se aplica - ou seja, não deve haver vírgula antes da conjunção.
Depois de uma tarde de mexer, eu vim com o seguinte:
<html>
<head>
<style type="text/css">
.byline-list {
list-style: none;
padding: 0;
margin: 0;
}
.byline-list > li {
display: inline;
padding: 0;
margin: 0;
}
.byline-list > li::before {
content: ", ";
}
.byline-list > li:last-child::before {
content: ", and ";
}
.byline-list > li:first-child + li:last-child::before {
content: " and ";
}
.byline-list > li:first-child::before {
content: "By ";
}
.byline-list > li:last-child::after {
content: ".";
}
</style>
</head>
<body>
<ul class="byline-list">
<li>Adam Smith</li>
</ul>
<ul class="byline-list">
<li>Adam Smith</li><li>Jane Doe</li>
</ul>
<ul class="byline-list">
<li>Adam Smith</li><li>Jane Doe</li><li>Frank Underwood</li>
</ul>
</body>
</html>
Ele exibe os bylines como os tenho acima.
No final, eu também tive que me livrar de qualquer espaço em branco entre li
elementos, a fim de evitar um aborrecimento: a propriedade inline-block deixaria um espaço antes de cada vírgula. Provavelmente existe um truque decente alternativo para ele, mas esse não é o assunto desta pergunta, então deixarei isso para outra pessoa responder.
Violino aqui: http://jsfiddle.net/5REP2/