Добавление еще одного ответа на этот вопрос, потому что мне нужно было именно то, о чем просил @derek, и я уже прошел немного дальше, прежде чем увидел ответы здесь. В частности, мне нужен был CSS, который мог бы также учитывать для случая ровно два элемента списка, где запятая НЕ желательна. Например, некоторые авторские подписи, которые я хотел создать, выглядели бы следующим образом:
Один автор:
By Adam Smith.
Два автора:
By Adam Smith and Jane Doe.
Три автора:
By Adam Smith, Jane Doe, and Frank Underwood.
Решения, уже приведенные здесь, работают для одного автора и для 3 или более авторов, но не учитывают случай с двумя авторами, когда стиль «Оксфордская запятая» (также известный как стиль «Гарвардская запятая» в некоторых частях) не не применяется - т. е. перед соединением не должно быть запятой.
После полудня, я придумал следующее:
<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>
Отображает подписи, как я их выше.
В конце концов, мне также пришлось избавиться от любого пробела между li
элементами, чтобы обойти раздражение: свойство inline-block в противном случае оставляло бы пробел перед каждой запятой. Вероятно, есть альтернативный приличный взлом для этого, но это не предмет этого вопроса, поэтому я оставлю это, чтобы кто-то еще ответил.
Скрипка здесь: http://jsfiddle.net/5REP2/