Agregué otra respuesta a esta pregunta porque necesitaba precisamente lo que @derek estaba pidiendo y ya había avanzado un poco antes de ver las respuestas aquí. Específicamente, necesitaba CSS que pudiera también explicar el caso con exactamente dos elementos de la lista, donde NO se desea la coma. Como ejemplo, algunas líneas de autoría que quería producir se verían así:
Un autor:
By Adam Smith.
Dos autores:
By Adam Smith and Jane Doe.
Tres autores:
By Adam Smith, Jane Doe, and Frank Underwood.
Las soluciones ya dadas aquí funcionan para un autor y para 3 o más autores, pero no tienen en cuenta el caso de dos autores, donde el estilo "Oxford Comma" (también conocido como estilo "Harvard Comma" en algunas partes) no se aplica - es decir, no debe haber una coma antes de la conjunción.
Después de una tarde de retoques, se me ocurrió lo siguiente:
<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>
Muestra los bylines como los tengo arriba.
Al final, también tuve que deshacerme de cualquier espacio en blanco entre los li
elementos, para evitar una molestia: la propiedad de bloque en línea dejaría un espacio antes de cada coma. Probablemente haya un hack alternativo decente, pero ese no es el tema de esta pregunta, así que lo dejaré para que alguien más lo responda.
Violín aquí: http://jsfiddle.net/5REP2/