¿Puede la lista ordenada producir un resultado similar a 1.1, 1.2, 1.3 (en lugar de solo 1, 2, 3, ...) con css?
201
¿Puede una lista ordenada producir resultados que se vean como 1.1, 1.2, 1.3 (en lugar de solo 1, 2, 3, ...) con CSS? Hasta ahora, el uso list-style-type:decimalha producido solo 1, 2, 3, no 1.1, 1.2., 1.3.
<ol><li>li element
<ol><li>sub li element</li><li>sub li element</li><li>sub li element</li></ol></li><li>li element</li><li>li element
<ol><li>sub li element</li><li>sub li element</li><li>sub li element</li></ol></li></ol>
Esta solución pierde una pequeña cosa: el punto que sigue al número de artículo. No se parece al estilo de lista estándar. Arregle agregando un punto a la regla para li:before: content: counters(item, ".")". ";
LS
44
Esta es una respuesta pobre. No funciona correctamente Echa un vistazo a la respuesta de Jakub Jirutka a continuación
Sr. Pablo
1
@Gumbo Lo sé, y la respuesta de Jakub me dio la numeración correcta.
Mr Pablo
236
Ninguna de las soluciones en esta página funciona de manera correcta y universal para todos los niveles y párrafos largos (ajustados). Es realmente difícil lograr una sangría consistente debido al tamaño variable del marcador (1., 1.2, 1.10, 1.10.5, ...); no puede ser simplemente "falso", ni siquiera con un margen / relleno precalculado para cada nivel de sangría posible.
Finalmente descubrí una solución que realmente funciona y no necesita JavaScript.
Se ha probado en Firefox 32, Chromium 37, IE 9 y el navegador de Android. No funciona en IE 7 y anteriores.
CSS:
ol {
list-style-type: none;
counter-reset: item;
margin:0;
padding:0;}
ol > li {
display: table;
counter-increment: item;
margin-bottom:0.6em;}
ol > li:before {
content: counters(item,".")". ";
display: table-cell;
padding-right:0.6em;}
li ol > li {
margin:0;}
li ol > li:before {
content: counters(item,".")" ";}
Buen trabajo logrando este tipo de sangría. Sin embargo, aún argumentaría que los primeros 2 casos de sangría que ha enumerado son una cuestión de preferencia en lugar de correcto e incorrecto. Considere el caso 1 y el caso 2 : este último logra exprimir muchos más niveles antes de que el espacio se vuelva difícil de manejar, sin dejar de verse bastante ordenado. Además, MS Word y el estilo predeterminado del navegador usan sangría de caso 2. ¿Supongo que también lo están haciendo mal?
Saul Fautley
2
@ saul-fautley Está mal en términos de tipografía. Su ejemplo con una cantidad increíble de niveles anidados demuestra que la numeración anidada no es adecuada para demasiados niveles, pero eso es bastante obvio. MS Words no es un sistema de composición tipográfica, es un mero procesador de documentos con una tipografía pobre. Estilo de navegador predeterminado ... oh, no sabes mucho sobre tipografía, ¿verdad?
Jakub Jirutka
3
Realmente funciona (técnicamente) para todos los niveles y párrafos largos. Si es razonable usar docenas de niveles, esa es otra pregunta que no tiene nada que ver con la solución técnica. El punto es que no tiene que predefinir una regla CSS para cada nivel de anidación como con algunas otras soluciones.
Jakub Jirutka
44
Si bien no diría que hay algo intrínsecamente "incorrecto" con las otras respuestas, diría que están incompletas. Esta respuesta es acertada, e incluso funcionó en un sitio horriblemente extraño que estoy modificando.
DanielM
2
@tremby: La discrepancia se puede resolver haciendo que li use "display: table-row" en lugar de "display: table". El problema que esto trae es que la li no puede usar márgenes / rellenos ya que las filas de la tabla siempre se dimensionan automáticamente por su contenido. Esto se puede solucionar agregando un "li: after" con "display: block". Ver jsFiddle para un ejemplo completo. Como un extra adicional agregué "text-align: right" a "li: before" para alinear los números a la derecha.
mmlr
64
La respuesta elegida es un gran comienzo, pero esencialmente obliga al list-style-position: inside;estilo de los elementos de la lista, lo que dificulta la lectura del texto envuelto. Aquí hay una solución simple que también da control sobre el margen entre el número y el texto, y alinea el número a la derecha según el comportamiento predeterminado.
ol {
counter-reset: item;}
ol li {
display: block;
position: relative;}
ol li:before {
content: counters(item,".")".";
counter-increment: item;
position: absolute;
margin-right:100%;
right:10px;/* space between number and text */}
Una desventaja es que agrega un punto al final de cada elemento de la lista.
Davin Studer
3
@Davin Studer: solo agrega un punto al final de cada número, según el olcomportamiento predeterminado . Se puede eliminar fácilmente eliminando el último "."de la contentpropiedad, pero esto me parece un poco extraño.
Esta solución falla horriblemente cuando las listas están anidadas.
LS
@LS Siempre puede acomodar los selectores para satisfacer sus necesidades. .foo > ol > li.
kennytm
1
Mi punto es que has codificado "1". en el estilo ¿Qué sucede cuando la sublista es hija del segundo elemento en la lista principal? Desea que aparezca como "2", pero siempre será "1". por la forma en que está codificado aquí. ¿Cual es la solución? ¿Hacer nuevos conjuntos de estilos para cada número posible? No. Use la counters()función como en los ejemplos anteriores en lugar de la counter()función.
En el futuro cercano, podrá usar el ::markerelemento psuedo para lograr el mismo resultado que otras soluciones en una sola línea de código.
Recuerde consultar la tabla de compatibilidad del navegador ya que sigue siendo una tecnología experimental. En el momento de escribir solo Firefox y Firefox para Android, a partir de la versión 68, son compatibles con esto.
Aquí hay un fragmento que se representará correctamente si se prueba en un navegador compatible:
::marker {content: counters(list-item,'.')':'}
li {padding-left:0.5em}
<ol><li>li element
<ol><li>sub li element</li><li>sub li element</li><li>sub li element</li></ol></li><li>li element</li><li>li element
<ol><li>sub li element</li><li>sub li element</li><li>sub li element</li></ol></li></ol>
Necesitaba agregar esto a la solución publicada en 12 ya que estaba usando una lista con una mezcla de componentes de listas ordenadas y listas no ordenadas. content: no-close-quote parece algo extraño para agregar Lo sé, pero funciona ...
ol ul li:before {
content:no-close-quote;
counter-increment: none;
display: list-item;
margin-right:100%;
position: absolute;
right:10px;}
ol {
list-style-type: none;
counter-reset: item;
margin:0;
padding:0;}
ol > li {
display: table;
counter-increment: item;
margin-bottom:0.6em;}
ol > li:before {
content: counters(item,".")") ";
display: table-cell;
padding-right:0.6em;}
li ol > li {
margin:0;}
li ol > li:before {
content: counters(item,".")") ";}
Pérdida de tiempo para mirar. Casi idéntico a una respuesta anterior. La única diferencia es ")" se ha agregado al final del marcador.
juanitogan
0
este es el código apropiado si desea primero cambiar el tamaño de otro CSS.
<style>
li.title {font-size:20px;counter-increment: ordem;color:#0080B0;}.my_ol_class {counter-reset: my_ol_class;padding-left:30px!important;}.my_ol_class li {display: block;position: relative;}.my_ol_class li:before {counter-increment: my_ol_class;content: counter(ordem)"." counter(my_ol_class)" ";position: absolute;margin-right:100%;right:10px;/* space between number and text */}
li.title ol li{font-size:15px;color:#5E5E5E;}</style>
en archivo html.
<ol><liclass="title"><pclass="page-header list_title">Acceptance of Terms. </p><olclass="my_ol_class"><li><p>
my text 1.
</p></li><li><p>
my text 2.
</p></li></ol></li></ol>
Respuestas:
Puede usar contadores para hacerlo:
Ejemplo
Consulte Contadores anidados y alcance para obtener más información.
fuente
li:before
:content: counters(item, ".")". ";
Ninguna de las soluciones en esta página funciona de manera correcta y universal para todos los niveles y párrafos largos (ajustados). Es realmente difícil lograr una sangría consistente debido al tamaño variable del marcador (1., 1.2, 1.10, 1.10.5, ...); no puede ser simplemente "falso", ni siquiera con un margen / relleno precalculado para cada nivel de sangría posible.
Finalmente descubrí una solución que realmente funciona y no necesita JavaScript.
Se ha probado en Firefox 32, Chromium 37, IE 9 y el navegador de Android. No funciona en IE 7 y anteriores.
CSS:
Ejemplo:
Pruébalo en JSFiddle , bifurca en Gist .
fuente
La respuesta elegida es un gran comienzo, pero esencialmente obliga al
list-style-position: inside;
estilo de los elementos de la lista, lo que dificulta la lectura del texto envuelto. Aquí hay una solución simple que también da control sobre el margen entre el número y el texto, y alinea el número a la derecha según el comportamiento predeterminado.JSFiddle: http://jsfiddle.net/3J4Bu/
fuente
ol
comportamiento predeterminado . Se puede eliminar fácilmente eliminando el último"."
de lacontent
propiedad, pero esto me parece un poco extraño.Las soluciones publicadas aquí no funcionaron bien para mí, así que hice una combinación de las preguntas de esta pregunta y la siguiente: ¿Es posible crear una lista ordenada de varios niveles en HTML?
Resultado:
Nota: la captura de pantalla, si desea ver el código fuente o lo que sea de esta publicación: http://estiloasertivo.blogspot.com.es/2014/08/introduccion-running-lean-y-lean.html
fuente
Nota: Use CSS para crear numeración anidada en un navegador moderno. Ver la respuesta aceptada. Lo siguiente es solo para interés histórico.
counters
Si el navegador admite
content
ycounter
,fuente
.foo > ol > li
.counters()
función como en los ejemplos anteriores en lugar de lacounter()
función.Resultado: http://i.stack.imgur.com/78bN8.jpg
fuente
Tengo algún problema cuando hay dos listas y la segunda está dentro de DIV La segunda lista debe comenzar en 1. no 2.1
http://jsfiddle.net/3J4Bu/364/
EDITAR: Resolví el problema con este http://jsfiddle.net/hy5f6161/
fuente
En el futuro cercano, podrá usar el
::marker
elemento psuedo para lograr el mismo resultado que otras soluciones en una sola línea de código.Recuerde consultar la tabla de compatibilidad del navegador ya que sigue siendo una tecnología experimental. En el momento de escribir solo Firefox y Firefox para Android, a partir de la versión 68, son compatibles con esto.
Aquí hay un fragmento que se representará correctamente si se prueba en un navegador compatible:
Es posible que también desee consultar este excelente artículo de smashingmagazine sobre el tema.
fuente
Necesitaba agregar esto a la solución publicada en 12 ya que estaba usando una lista con una mezcla de componentes de listas ordenadas y listas no ordenadas. content: no-close-quote parece algo extraño para agregar Lo sé, pero funciona ...
fuente
Lo siguiente funcionó para mí:
Mira: http://jsfiddle.net/rLebz84u/2/
o este http://jsfiddle.net/rLebz84u/3/ con más texto justificado
fuente
este es el código apropiado si desea primero cambiar el tamaño de otro CSS.
en archivo html.
fuente