Thêm một câu trả lời khác cho câu hỏi này vì tôi cần chính xác những gì @derek đang yêu cầu và tôi đã tìm hiểu thêm một chút trước khi xem câu trả lời ở đây. Cụ thể, tôi cần CSS cũng có thể giải quyết trường hợp có chính xác hai mục danh sách, trong đó KHÔNG mong muốn dấu phẩy. Ví dụ: một số dòng tác giả mà tôi muốn tạo ra sẽ giống như sau:
Một tác giả:
By Adam Smith.
Hai tác giả:
By Adam Smith and Jane Doe.
Ba tác giả:
By Adam Smith, Jane Doe, and Frank Underwood.
Các giải pháp đã được đưa ra ở đây phù hợp với một tác giả và cho 3 tác giả trở lên, nhưng không tính đến trường hợp hai tác giả — trong đó kiểu "Dấu phẩy Oxford" (còn được gọi là kiểu "Dấu phẩy Harvard" trong một số phần) không áp dụng - tức là, không được có dấu phẩy trước liên từ.
Sau một buổi chiều mày mò, tôi đã nghĩ ra những điều sau:
<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>
Nó hiển thị các dòng như tôi đã có ở trên.
Cuối cùng, tôi cũng phải loại bỏ bất kỳ khoảng trắng nào giữa li
các phần tử, để tránh một điều khó chịu: thuộc tính khối nội tuyến sẽ để lại khoảng trắng trước mỗi dấu phẩy. Có lẽ có một cách hack khá phù hợp cho nó nhưng đó không phải là chủ đề của câu hỏi này nên tôi sẽ để người khác trả lời.
Fiddle tại đây: http://jsfiddle.net/5REP2/