¿Puedes diseñar números de lista ordenados?


89

Estoy tratando de diseñar los números en una lista ordenada, me gustaría agregar color de fondo, radio de borde y color para que coincidan con el diseño con el que estoy trabajando:

ingrese la descripción de la imagen aquí

Supongo que no es posible y tendré que usar diferentes imágenes para cada número, es decir

ol li:first-child {list-style-image:url('1.gif')};
ol li:nth-child(2) {list-style-image:url('2.gif');} 
etc...

¿Existe una solución más sencilla?


3
Puede buscar una solución de mi demostración aquí jsfiddle.net/viphalongpro/Hj8Nn Por cierto, no creo que esto sea imposible de buscar, buscar primero puede darle muchos resultados , justo en SO, este tipo de pregunta ha sido preguntado muchas veces.
King King

1
algunos enlaces para la información 1. codeitdown.com/ordered-list-css-styles 2. css-tricks.com/numbering-in-style Es un buen qtn, pero un poco de búsqueda podría haberle dado la respuesta
crafter

1
@KingKing - Sugeriría marcar esto como un duplicado entonces ...
Lee Taylor

Respuestas:


188

Puede hacer esto usando contadores CSS , junto con el :beforepseudo elemento:

 ol {
   list-style: none;
   counter-reset: item;
 }
 li {
   counter-increment: item;
   margin-bottom: 5px;
 }
 li:before {
   margin-right: 10px;
   content: counter(item);
   background: lightblue;
   border-radius: 100%;
   color: white;
   width: 1.2em;
   text-align: center;
   display: inline-block;
 }
<ol>
  <li>item</li>
  <li>item</li>
  <li>item</li>
  <li>item</li>
</ol>


12
El counter-reset: item;debe ir en el bloque ol, de lo contrario el contador no se restablecerá en anidada <ol>.
Michael Klöpzig

2
una buena solución, pero ¿cómo es la representación cuando el cuerpo del lielemento tiene más de una línea?
cmhughes

Creo que, como en stackoverflow.com/questions/13354578/… , puede usar, por ejemplo, `margin-left: -2.0em; ancho: -2.0em; `
cmhughes

Un valor de 50%para border-radius(en lugar de 100%) es suficiente para obtener un círculo. (Ver, por ejemplo, Lea Verou, " El curioso caso de radio de borde: 50% ", 30 de octubre de 2010.)
Jim Ratliff

@cmhughes: si quisieras hacer eso, darías el li position: relative;, y luego :beforedarías eso position: absolute;y luego usarías topy leftcolocarlo exactamente como quieras.
Mike

25

Estaba buscando algo diferente y encontré este ejemplo en CodePen;

prueba esto: http://codepen.io/sawmac/pen/txBhK

body {
  font-size: 1.2em;
  font-family: "Helvetica Neue", Helvetica, sans-serif;
  margin: 50px;
}
.custom-counter {
  margin: 0;
  padding: 0;
  list-style-type: none;
}
.custom-counter li {
  counter-increment: step-counter;
  margin-bottom: 5px;
}
.custom-counter li::before {
  content: counter(step-counter);
  margin-right: 20px;
  font-size: 80%;
  background-color: rgb(180, 180, 180);
  color: white;
  font-weight: bold;
  padding: 3px 8px;
  border-radius: 11px;
}
<ol class="custom-counter">
  <li>This is the first item</li>
  <li>This is the second item</li>
  <li>This is the third item</li>
  <li>This is the fourth item</li>
  <li>This is the fifth item</li>
  <li>This is the sixth item</li>
</ol>

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.