¿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:decimal
ha producido solo 1, 2, 3, no 1.1, 1.2., 1.3.
¿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:decimal
ha producido solo 1, 2, 3, no 1.1, 1.2., 1.3.
Respuestas:
Puede usar contadores para hacerlo:
Los siguientes números de hoja de estilo anidan elementos de la lista como "1", "1.1", "1.1.1", etc.
OL { counter-reset: item } LI { display: block } LI:before { content: counters(item, ".") " "; counter-increment: item }
Ejemplo
ol { counter-reset: item }
li{ display: block }
li:before { content: counters(item, ".") " "; counter-increment: item }
<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>
Consulte Contadores anidados y alcance para obtener más información.
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:
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, ".") " ";
}
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 */
}
JSFiddle: http://jsfiddle.net/3J4Bu/
ol
comportamiento predeterminado . Se puede eliminar fácilmente eliminando el último "."
de la content
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?
/* Numbered lists like 1, 1.1, 2.2.1... */
ol li {display:block;} /* hide original list counter */
ol > li:first-child {counter-reset: item;} /* reset counter */
ol > li {counter-increment: item; position: relative;} /* increment counter */
ol > li:before {content:counters(item, ".") ". "; position: absolute; margin-right: 100%; right: 10px;} /* print counter */
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
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
y counter
,
.foo {
counter-reset: foo;
}
.foo li {
list-style-type: none;
}
.foo li::before {
counter-increment: foo;
content: "1." counter(foo) " ";
}
<ol class="foo">
<li>uno</li>
<li>dos</li>
<li>tres</li>
<li>cuatro</li>
</ol>
.foo > ol > li
.
counters()
función como en los ejemplos anteriores en lugar de la counter()
función.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="author" content="Sandro Alvares - KingRider">
</head>
<body>
<style type="text/css">
li.title {
font-size: 20px;
font-weight: lighter;
padding: 15px;
counter-increment: ordem;
}
.foo {
counter-reset: foo;
padding-left: 15px;
}
.foo li {
list-style-type: none;
}
.foo li:before {
counter-increment: foo;
content: counter(ordem) "." counter(foo) " ";
}
</style>
<ol>
<li class="title">TITLE ONE</li>
<ol class="foo">
<li>text 1 one</li>
<li>text 1 two</li>
<li>text 1 three</li>
<li>text 1 four</li>
</ol>
<li class="title">TITLE TWO</li>
<ol class="foo">
<li>text 2 one</li>
<li>text 2 two</li>
<li>text 2 three</li>
<li>text 2 four</li>
</ol>
<li class="title">TITLE THREE</li>
<ol class="foo">
<li>text 3 one</li>
<li>text 3 two</li>
<li>text 3 three</li>
<li>text 3 four</li>
</ol>
</ol>
</body>
</html>
Resultado: http://i.stack.imgur.com/78bN8.jpg
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
<ol>
<li>lorem</li>
<li>lorem ipsum</li>
</ol>
<div>
<ol>
<li>lorem (should be 1.)</li>
<li>lorem ipsum ( should be 2.)</li>
</ol>
</div>
http://jsfiddle.net/3J4Bu/364/
EDITAR: Resolví el problema con este http://jsfiddle.net/hy5f6161/
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:
::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>
Es posible que también desee consultar este excelente artículo de smashingmagazine sobre el tema.
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;
}
Lo siguiente funcionó para mí:
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, ".") ") ";
}
Mira: http://jsfiddle.net/rLebz84u/2/
o este http://jsfiddle.net/rLebz84u/3/ con más texto justificado
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>
<li class="title"> <p class="page-header list_title">Acceptance of Terms. </p>
<ol class="my_ol_class">
<li>
<p>
my text 1.
</p>
</li>
<li>
<p>
my text 2.
</p>
</li>
</ol>
</li>
</ol>