Comment définir un espace vertical entre les éléments de la liste?

115

Dans un <ul>élément, il est clair que l'espacement vertical entre les lignes peut être formaté avec l'attribut line-height.

Ma question est, dans un <ul>élément, comment définir l'espacement vertical entre les éléments de la liste?

Brice Coustillas
la source
1
ul li { margin: ???; padding: ???; line-height: ???; }tout ou partie de ces attributs CSS.
Brad Christie

Réponses:

112

Vous pouvez utiliser la marge. Voir l'exemple:

http://jsfiddle.net/LthgY/

li{
  margin: 10px 0;
}

la source
plus précisément, utilisez une marge sur les liéléments et non sur l' ulélément.
duanev le
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;
}

EDIT: Si vous n'utilisez pas le cas spécial pour le dernier élément li, votre liste aura ensuite un petit espacement que vous pouvez voir ici: http://jsfiddle.net/wQYw7/

Maintenant, comparez cela avec ma solution: http://jsfiddle.net/wQYw7/1/

Bien sûr, cela ne fonctionne pas dans les navigateurs plus anciens, mais vous pouvez facilement utiliser les extensions js qui l'activeront pour les navigateurs plus anciens.


la source
1
@Layne une partie de notre travail en tant que développeurs / codeurs Web est de fournir des solutions qui fonctionneront dans autant d'environnements que possible. Votre réponse est vraiment exagérée pour la question posée.
désin pour
1
Je ne pense pas. Vous ne fournissez une solution que pour l'environnement que vous souhaitez cibler, tout le reste serait excessif à moins que vous ne prévoyiez de vous développer. De plus, toutes les réponses ont l'inconvénient d'ajouter de l'espace avant et / ou après le premier / dernier élément de la liste. Ce qui n'était pas la question, il voulait seulement avoir un espacement ENTRE les éléments de la liste (du moins il l'a écrit). Le dernier élément dans les autres réponses aura un espacement par la suite bien qu'il n'y ait pas d'éléments li suivants.
L'environnement avec lequel il travaille sont les navigateurs Web. Ce n'est pas exagéré de proposer une solution qui fonctionne partout. De plus, si vous êtes vraiment préoccupé par la marge du dernier élément, vous ne suggérez pas une solution qui aurait besoin de js pour être corrigée. Vous pouvez utiliser :first-childet cela fonctionnerait dans tout IE7 +
désin pour
4
@disinfor Je ne suis pas d'accord pour tout cibler. Une partie du stress du développement Web provient de la prise en charge des navigateurs qui ne nous prennent pas en charge. Safari en fait partie. Nous devons résister aux navigateurs qui retiennent Internet, medium.com/@richtr/… . Nos pages Web devraient ramener les avis "Nous ne prenons pas en charge votre navigateur" et ne passeront pas par l'enfer pour le faire fonctionner partout. Et nous devons également informer et tenir tête aux clients. Ou nous ne pouvons rien faire et être de superbes tapis de sol.
1,21 gigawatts
@ 1.21gigawatts "Nos pages Web devraient ramener le message" Nous ne prenons pas en charge votre navigateur "" mhm, non. Cela s'appelle le sabotage de la concurrence et est illégal dans plusieurs pays. Microsoft l'a fait avec Skype pour le Web. Skype pour le Web fonctionne toujours parfaitement dans d'autres navigateurs. Google a fait un dysfonctionnement de Youtube dans Safari pendant plus d'un an. Google empêche les utilisateurs de Tor d'utiliser certains services. Le but de la "plate-forme Web" n'est-il pas de rendre les applications et les services indépendants de la plate-forme, comme de ne pas bloquer des plates-formes spécifiques? Si vous voulez faire cela, pourquoi ne pas créer des programmes natifs à la place? En fin de compte, ils sont plus puissants.
Andreas le
35

Je serais enclin à ce qui a la vertu du support IE8.

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

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

JSFiddle

Paulie_D
la source
27

Ajoutez un marginà vos libalises. Cela créera un espace entre le liet que vous pourrez utiliser line-heightpour définir l'espacement du texte dans les libalises.

désinfecter
la source
3

Plusieurs fois, lors de la production de messages électroniques HTML, vous ne pouvez pas utiliser de feuilles de style ou de blocs de style / style. Tous les CSS doivent être en ligne. Dans le cas où vous souhaitez ajuster l'espacement entre les puces, j'utilise li style = "margin-bottom: 8px;" dans chaque élément de puce. Personnalisez la valeur des pixels à votre guise.

Malcolm Stone
la source
En outre, les balises de type style / style sont obsolètes
Ben Slade
2

Pour appliquer à une liste entière, utilisez

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

Ensuite, dans le html:

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

définir padding-bottom pour chaque liste en utilisant une pseudo-classe est une méthode viable. La hauteur de ligne peut également être utilisée. N'oubliez pas que les propriétés de police telles que font-family, Font-weight, etc. jouent un rôle pour les hauteurs inégales.

Rishi jung
la source
2
Pouvez-vous donner un exemple de votre solution?
Muldec le
-9

<br>entre les <li></li>entrées de ligne semble fonctionner parfaitement bien dans tous les navigateurs Web que j'ai essayés, mais il ne parvient pas à passer le vérificateur W3C CSS3 en ligne. Cela me donne précisément l'espacement des lignes que je recherche. En ce qui me concerne, comme cela fonctionne sans aucun doute, je persiste à l'utiliser, quoi qu'en dise le W3C, jusqu'à ce que quelqu'un puisse trouver une bonne alternative juridique.

Melvyn Owen
la source
Votre suggestion fonctionne bien si vous êtes satisfait de la hauteur de ligne actuelle, mais je pense qu'il veut spécifier sa propre quantité d'espace. En utilisant des sauts de ligne, créez simplement de nouvelles lignes en utilisant la hauteur de ligne actuelle.
1,21 gigawatts
Si vous parcourez une liste avec de nombreux éléments, l'ajout de br est une pratique terrible. Le balisage est le moyen le plus sûr et le plus sûr d'ajouter de l'espace, comme l'ont suggéré les réponses ci-dessus.
SeaWarrior404