¿Cómo configuro el espacio vertical entre los elementos de la lista?

115

Dentro de un <ul>elemento, claramente el espaciado vertical entre líneas se puede formatear con el atributo line-height.

Mi pregunta es, dentro de un <ul>elemento, ¿cómo establezco el espacio vertical entre los elementos de la lista?

Brice Coustillas
fuente
1
ul li { margin: ???; padding: ???; line-height: ???; }todos o algunos de esos atributos CSS.
Brad Christie

Respuestas:

112

Puede utilizar margin. Vea el ejemplo:

http://jsfiddle.net/LthgY/

li{
  margin: 10px 0;
}

fuente
específicamente, use el margen en los lielementos, no en el ulelemento.
duanev
41

HTML

<ul>
   <li>A</li>
   <li>B</li>
   <li>C</li>
   <li>D</li>
   <li>E</li>
</ul>

CSS

li:not(:last-child) {
    margin-bottom: 5px;
}

EDITAR: Si no usa el caso especial para el último elemento li, su lista tendrá un pequeño espacio después que puede ver aquí: http://jsfiddle.net/wQYw7/

Ahora compare eso con mi solución: http://jsfiddle.net/wQYw7/1/

Seguro que esto no funciona en navegadores más antiguos, pero puede usar fácilmente extensiones js que lo habilitarán para navegadores más antiguos.


fuente
1
@Layne parte de nuestro trabajo como desarrolladores / codificadores web es proporcionar soluciones que funcionen en tantos entornos como sea posible. Su respuesta es realmente exagerada para la pregunta formulada.
desinfor
1
No lo creo. Solo proporciona una solución para el entorno al que desea dirigirse, todo lo demás sería excesivo a menos que planee expandirse. Además, todas las respuestas tienen la desventaja de agregar espacio antes y / o después del primer / último elemento de la lista. Cuál no era la pregunta, solo quería tener un espacio ENTRE los elementos de la lista (al menos lo escribió). El último elemento en las otras respuestas tendrá un espaciado después, aunque no hay elementos li siguientes.
El entorno con el que trabaja son los navegadores web. No es exagerado sugerir una solución que funcione en todas partes. Además, si realmente está preocupado por el margen del último elemento, no sugeriría una solución que necesitaría js para corregir. Podría usar :first-childy funcionaría en todo IE7 +
desinfor
4
@disinfor No estoy de acuerdo con apuntar a todo. Parte del estrés del desarrollo web proviene de la compatibilidad con navegadores que no nos admiten. Safari es uno de ellos. Necesitamos hacer frente a los navegadores que frenan Internet, medium.com/@richtr/… . Nuestras páginas web deberían traer de vuelta los avisos de "No admitimos su navegador" y no pasar por el infierno para que funcione en todas partes. Y también necesitamos informar y hacer frente a los clientes. O no podemos hacer nada y ser increíbles tapetes.
1,21 gigavatios
@ 1.21gigawatts "Nuestras páginas web deberían mostrar el mensaje" No admitimos su navegador "" mhm, no. Eso se llama sabotaje de la competencia y es ilegal en varios países. Microsoft hizo eso con Skype para Web. Skype para Web todavía funciona perfectamente en otros navegadores. Google hizo que Youtube funcionara mal en Safari durante más de un año. Google bloquea a los usuarios de Tor para que no utilicen ciertos servicios. ¿No es el objetivo de la "plataforma web" hacer que las aplicaciones y los servicios sean independientes de la plataforma, es decir, no bloquear plataformas específicas? Si quieres hacer eso, ¿por qué no crear programas nativos? Al final, son más poderosos.
Andreas
35

Me inclinaría a esto, que tiene la virtud del soporte IE8.

li{
    margin-top: 10px;
    border:1px solid grey;
}

li:first-child {
    margin-top:0;
}

JSFiddle

Paulie_D
fuente
27

Agregue un margina sus lietiquetas. Eso creará un espacio entre liy puede usar line-heightpara establecer el espaciado del texto dentro de las lietiquetas.

desinformar
fuente
3

Muchas veces, al producir envíos masivos de correo electrónico HTML, no puede utilizar hojas de estilo o bloques de estilo / estilo. Todo CSS debe estar en línea. En el caso de que desee ajustar el espacio entre las viñetas, utilizo li style = "margin-bottom: 8px;" en cada elemento de viñeta. Personaliza el valor de los píxeles a tu gusto.

Malcolm Stone
fuente
Además, las etiquetas de estilo / tipo de estilo están en desuso
Ben Slade
2

Para aplicar a una lista completa, use

ul.space_list li { margin-bottom: 1em; }

Luego, en el html:

<ul class=space_list>
<li>A</li>
<li>B</li>
</ul>
Tom Bartenstein
fuente
0

establecer padding-bottom para cada lista usando una pseudoclase es un método viable. También se puede utilizar la altura de la línea. Recuerde que las propiedades de la fuente, como la familia de fuentes, el peso de la fuente, etc., influyen en las alturas irregulares.

Rishi jung
fuente
2
¿Puede dar un ejemplo de su solución?
Muldec
-9

<br>entre <li></li>entradas de línea parece funcionar perfectamente bien en todos los navegadores web que he probado, pero no pasa el verificador en línea W3C CSS3. Me da precisamente el interlineado que busco. En lo que a mí respecta, dado que sin duda funciona, persisto en su uso, diga lo que diga el W3C, hasta que alguien pueda encontrar una buena alternativa legal.

Melvyn Owen
fuente
Su sugerencia funciona bien si está satisfecho con la altura de línea actual, pero creo que él quiere especificar su propia cantidad de espacio. El uso de saltos de línea solo crea nuevas líneas usando la altura de línea actual.
1,21 gigavatios
Si itera en una lista con muchos elementos, agregar br es una práctica terrible. El marcado es la forma más segura y segura de agregar espacio, como lo han sugerido las respuestas anteriores.
SeaWarrior404