279 votes

HTML list-style-type dash

Existe-t-il un moyen de créer un style de liste en HTML avec un tiret (c'est-à-dire - ou -) ? – ou - — ), c'est-à-dire

<ul>
  <li>abc</li>
</ul>

Sortie :

- abc

J'ai eu l'idée de faire cela avec quelque chose comme li:before { content: "-" }; mais je ne connais pas les inconvénients de cette option (et je vous serais reconnaissant de me faire part de vos commentaires).

De manière plus générale, j'aimerais bien savoir comment utiliser les caractères génériques pour les éléments de liste.

93 votes

Puisque le tiret est couramment utilisé dans les listes, pourquoi n'est-il pas inclus par défaut dans les css ?

126 votes

Plus important encore, pourquoi y a-t-il une numérotation arménienne et des katakana... mais pas de tirets ?

258voto

aron.lakatos Points 591

Il existe un correctif facile (text-indent) pour conserver l'effet de liste indentée avec l'attribut :before pseudo-classe.

ul {
  margin: 0;
}
ul.dashed {
  list-style-type: none;
}
ul.dashed > li {
  text-indent: -5px;
}
ul.dashed > li:before {
  content: "-";
  text-indent: -5px;
}

Some text
<ul class="dashed">
  <li>First</li>
  <li>Second</li>
  <li>Third</li>
</ul>
<ul>
  <li>First</li>
  <li>Second</li>
  <li>Third</li>
</ul>
Last text

14 votes

Ça marche, mais n'oubliez pas de mettre la list-style-type: none; au <ul> élément.

7 votes

Sans indentation juste ul li:before{ content:"- ";}

5 votes

Je préfère ajouter display: block; float: left; au li:before ce qui permet de le sortir plus facilement du flux de contenu, sinon il est assez difficile d'aligner correctement la première ligne et les suivantes. La réponse de Keyan Zhang permet également d'utiliser le positionnement absolu.

116voto

Darko Z Points 16570

Vous pourriez utiliser :before y content: en gardant à l'esprit que cela n'est pas pris en charge par IE 7 ou inférieur. Si cela ne vous pose pas de problème, c'est la meilleure solution. Voir le Puis-je utiliser o QuirksMode Tableaux de compatibilité CSS pour plus de détails.

Une solution un peu plus désagréable, mais qui devrait fonctionner dans les anciens navigateurs, consiste à utiliser une image pour la puce et à faire en sorte que l'image ressemble à un tiret. Voir le W3C list-style-image page par exemple.

33 votes

Le problème avec :before est que lorsque les éléments de la liste s'étendent sur plusieurs lignes, l'indentation de la deuxième ligne commence là où se trouve le tiret, ce qui ruine l'effet de liste indentée. Vous devez utiliser des indentations suspendues pour éviter cela. Voir ceci : alistapart.com/articles/taminglists

4 votes

Pour placer mdash dans content utiliser content: "\2014\a0"

0 votes

Voir la réponse de @three , qui est plus générique et moins verbeuse !

90voto

velop Points 157

Voici une version sans position relative ou absolue et sans alinéa de texte :

ul.dash {
    list-style: none;
    margin-left: 0;
    padding-left: 1em;
}
ul.dash > li:before {
    display: inline-block;
    content: "-";
    width: 1em;
    margin-left: -1em;
}

Profitez-en ;)

1 votes

Super ! je suggérerais 'ul.dash > li:before'. sinon, les uls internes sont mélangés.

2 votes

Je préfère ajouter display: block; float: left; au li:before ce qui permet de le sortir plus facilement du flux de contenu, sinon il est assez difficile d'aligner correctement la première ligne et les lignes suivantes. La réponse de Keyan Zhang permet également d'utiliser le positionnement absolu.

0 votes

J'utilise ceci comme une navigation .active classe avec li:before { visibility: hidden; } y li.active:before { visibility: visible; }

64voto

Jase Points 401

Utilisez ça :

ul
{
    list-style: square inside url('data:image/gif;base64,R0lGODlhBQAKAIABAAAAAP///yH5BAEAAAEALAAAAAAFAAoAAAIIjI+ZwKwPUQEAOw==');
}

3 votes

Malheureusement, il ne respecte pas les couleurs du texte css.

7 votes

La seule solution possible pour les e-mails

0 votes

Cela ne fonctionne pas pour Gmail (Nov 2018) et Outlook 2016 maintenant.

38voto

Keyan Zhang Points 61
ul {
  list-style-type: none;
}

ul > li:before {
  content: "–"; /* en dash */
  position: absolute;
  margin-left: -1.1em; 
}

Démo violon

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X