Quiero hacer listas "gramaticalmente correctas" usando CSS. Esto es lo que tengo hasta ahora:
Las <li>
etiquetas se muestran horizontalmente con comas después de ellas.
li { display: inline; list-style-type: none; }
li:after { content: ", "; }
Eso funciona, pero quiero que el "último hijo" tenga un punto en lugar de una coma. Y, si es posible, me gustaría poner "y" antes del "último hijo" también. Las listas que estoy diseñando se generan dinámicamente, por lo que no puedo dar una clase a los "últimos hijos". No se pueden combinar pseudoelementos, pero ese es básicamente el efecto que quiero lograr.
li:last-child li:before { content: "and "; }
li:last-child li:after { content: "."; }
¿Cómo hago para que esto funcione?
Respuestas:
Esto funciona :) (espero que sea multi-navegador, a Firefox le gusta)
fuente
li:last-child:after
funciona peroli:after:last-child
no funciona.:last-child
no pertenece a la especificación CSS3, por lo que no es compatible con IE8 y versiones anteriores.Me gusta esto para elementos de lista en elementos <menu>. Considere el siguiente marcado:
Lo estilo con el siguiente CSS:
Esto mostrará:
Y esto es posible debido a lo que Martin Atkins explicó en su comentario
Tenga en cuenta que en CSS 2 usaría
:after
, no::after
. Si usa CSS 3, use::after
(dos semi-columnas) porque::after
es un pseudo-elemento (una sola semi-columna es para pseudo-clases).fuente
Un viejo hilo, sin embargo, alguien puede beneficiarse de esto:
Esto debería funcionar en CSS3 y CSS2 [no probado].
fuente
Usted puede combinar los pseudo-elementos! Lo siento chicos, me di cuenta de esto poco después de publicar la pregunta. Tal vez se usa con menos frecuencia debido a problemas de compatibilidad.
li:last-child:before { content: "and "; }
li:last-child:after { content: "."; }
Esto funciona a la perfección. CSS es algo sorprendente.
fuente
last-child
es un modificador en elli
, y luego, después de haber seleccionado todos losli
elementos que son los últimos hijos, selecciona (y crea implícitamente) un nuevo elemento antes y después de cada uno.Solo para mencionar, en CSS 3
debería usarse así
De https://developer.mozilla.org/de/docs/Web/CSS/::after :
Entonces debería ser:
fuente
::
sintaxis CSS3 de dos puntos también admiten solo la:
sintaxis, pero IE 8 solo admite los dos puntos, por lo que, por ahora, se recomienda usar solo dos puntos para obtener el mejor soporte del navegador.::
es el formato más nuevo sangrado para distinguir el pseudo contenido de los pseudo selectores. Si no necesita soporte para IE 8, no dude en usar los dos puntos dobles. De este artículoAgregué 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:
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/
fuente
Para tener algo como Uno, dos y tres , debe agregar un estilo CSS más
Esto eliminaría la coma del segundo último elemento.
Código completo
fuente
Estoy usando la misma técnica en una consulta de medios que efectivamente convierte una lista de viñetas en una lista en línea en dispositivos más pequeños a medida que ahorran espacio.
Entonces el cambio de:
a:
Artículo de la lista 1; Artículo de la lista 2; Artículo de la lista 3.
fuente