Guión de estilo de lista de HTML


222

¿Hay alguna manera de crear un estilo de lista en HTML con un guión (es decir, o - –o - —) es decir

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

Salida:

- abc

Se me ocurrió hacer esto con algo así li:before { content: "-" };, aunque no conozco las desventajas de esa opción (y estaría muy obligado a recibir comentarios).

Más genéricamente, no me importaría saber cómo usar caracteres genéricos para los elementos de la lista.


79
Dado que el guión se usa comúnmente en las listas, ¿por qué no se incluye de forma predeterminada en CSS?
temirbek

101
Más importante aún, ¿por qué hay numeración armenia y katakana ... pero no guiones?
Henry C

Respuestas:


108

Podría usar :beforey content:tener en cuenta que esto no es compatible con IE 7 o inferior. Si está de acuerdo con eso, entonces esta es su mejor solución. Consulte las tablas de compatibilidad de Can I Use o QuirksMode CSS para obtener todos los detalles.

Una solución un poco más desagradable que debería funcionar en los navegadores más antiguos es usar una imagen para la viñeta y simplemente hacer que la imagen parezca un guión. Consulte la página del W3Clist-style-image para ver ejemplos.


27
El problema :beforees que cuando los elementos de la lista abarcan varias líneas, la sangría en la segunda línea comienza donde está el guión, lo que arruina el efecto de la lista sangrada. Debe usar sangrías colgantes para evitar esto. Vea esto: alistapart.com/articles/taminglists
chiborg

3
Para poner mdash en contentusocontent: "\2014\a0"
Ivan Z

¡Vea la respuesta de @three, que es más genérica y menos detallada!
Ben Vertonghen

221

Hay una solución fácil (sangría de texto) para mantener el efecto de lista sangrado con la :beforepseudo clase.

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
Funciona, pero no olvides poner list-style-type: none;el <ul>elemento.
toesslab

55
sin sangría soloul li:before{ content:"- ";}
Qlimax

44
Prefiero agregar display: block; float: left;al li:beforeque puede sacarlo más fácilmente del flujo de contenido, de lo contrario es bastante difícil / con errores conseguir que la primera y las siguientes líneas se alineen correctamente. O la respuesta de Keyan Zhang también lo hace con posicionamiento absoluto.
Simon East

8
bastante tonto que list-style-type dashya no es parte de CSS
Pixelomo

¿Cuál sería una solución solo HTML similar a la que usted propuso?
plutón

74

Aquí hay una versión sin posición relativa o absoluta y sin sangría de texto:

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

Disfrutar;)


1
¡Excelente! Sugeriría 'ul.dash> li: before'. de lo contrario, los uls internos se estropean.
w.stoettinger

1
Prefiero agregar display: block; float: left;al li:beforeque puede sacarlo más fácilmente del flujo de contenido, de lo contrario es bastante difícil / con errores conseguir que la primera y las siguientes líneas se alineen correctamente. O la respuesta de Keyan Zhang también lo hace con posicionamiento absoluto.
Simon East

Lo uso como una .activeclase de navegación con li:before { visibility: hidden; }yli.active:before { visibility: visible; }
mostrar el

La mejor sugerencia imo!
Ben Vertonghen

64

Utilizar este:

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

3
Desafortunadamente, no se respetan los colores del texto CSS.
Hereblur

77
La única solución posible para correos electrónicos
Oleg

No funciona para Gmail (noviembre de 2018) y Outlook 2016 ahora.
usuario2875289

33
ul {
  list-style-type: none;
}

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

violín de demostración


25

Permítame agregar mi versión también, principalmente para que encuentre mi propia solución preferida nuevamente:

ul {
  list-style-type: none;
  /*use padding to move list item from left to right*/
  padding-left: 1em;
}

ul li:before {
  content: "–";
  position: absolute;
  /*change margin to move dash around*/
  margin-left: -1em;
}
<!-- 
Just use the following CSS to turn your
common disc lists into a list-style-type: 'dash' 
Give credit and enjoy!
-->
Some text
<ul>
  <li>One</li>
  <li>Very</li>
  <li>Simple Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</li>
  <li>Approach!</li>
</ul>

https://codepen.io/burningTyger/pen/dNzgrQ


En mi humilde opinión es la mejor solución hasta ahora. Gracias por compartir!
Axel

15

En mi caso, agregar este código a CSS

ul {
    list-style-type: '- ';
}

fue suficiente. Tan simple como es.


1
Asumiendo que esta es una adición relativamente nueva a CSS ya que no puedo encontrar otra respuesta que lo mencione, pero esta realmente debería ser la respuesta aceptada en estos días.
ahstro

44
Parece que esto solo se admite en Firefox de escritorio: developer.mozilla.org/en-US/docs/Web/CSS/list-style-type
dave

Esto ahora también es compatible con Chrome (a partir de 79 creo): chromestatus.com/feature/5893875400966144 y caniuse.com/#feat=mdn-css_properties_list-style-type_string
Alex

9

Una de las principales respuestas no funcionó para mí, porque, después de un poco de prueba y error, li: before también necesitaba la visualización de la regla css: inline-block.

Entonces esta es una respuesta totalmente funcional para mí:

ul.dashes{
  list-style: none;
  padding-left: 2em;
  li{
    &:before{
      content: "-";
      text-indent: -2em;
      display: inline-block;
    }
  }
}

Esto está escrito en MENOS / SASS.
Arslan Ameer

7
ul {
margin:0;
list-style-type: none;
}
li:before { content: "- ";}

probablemente `` `ul {margen: 0; tipo-estilo-lista: ninguno; } ul li: before {content: "-";} `` `de lo contrario, también afecta a las listas ol
Sasha Bond

5

Aquí está mi versión de violín :

La clase (modernizr) .generatedcontenten <html>prácticamente significa IE8 + y cualquier otro navegador cuerdo.

<html class="generatedcontent">
  <ul class="ul-dash hanging">
    <li>Lorem ipsum dolor sit amet stack o verflow dot com</li>
    <li>Lorem ipsum dolor sit amet stack o verflow dot com</li>
  </ul>

CSS:

.ul-dash {
  margin: 0;
}

.ul-dash {
  margin-left: 0em;
  padding-left: 1.5em;
}

.ul-dash.hanging > li { /* remove '>' for IE6 support */
  padding-left: 1em;
  text-indent: -1em;
}  

.generatedcontent .ul-dash {
  list-style: none;
}
.generatedcontent .ul-dash > li:before {
  content: "–";
  text-indent: 0;
  display: inline-block;
  width: 0;
  position: relative;
  left: -1.5em;
}

3

No sé si hay una mejor manera, pero puede crear un gráfico de viñeta personalizado que represente un guión y luego informar al navegador que desea usarlo en su lista con el tipo de estilo de lista propiedad de . Un ejemplo en esa página muestra cómo usar un gráfico como una viñeta.

Nunca he tratado de usar: antes de la manera que lo ha hecho, aunque puede funcionar. La desventaja es que algunos navegadores antiguos no lo admitirán. Mi reacción instintiva es que esto sigue siendo lo suficientemente importante como para tenerlo en cuenta. En el futuro, esto puede no ser tan importante.

EDITAR: He hecho algunas pruebas con el enfoque del OP. En IE8, no pude lograr que la técnica funcionara, por lo que definitivamente todavía no es un navegador cruzado. Además, en Firefox y Chrome, parece que ignorar la configuración de tipo de estilo de lista en ninguno.


3

Mi solución es agregar una etiqueta de extensión adicional con mdash:

<ul class="mdash-list">
    <li><span class="mdash-icon">&mdash;</span>ABC</li>
    <li><span class="mdash-icon">&mdash;</span>XYZ</li>
</ul>

y agregando a css:

ul.mdash-list 
{
    list-style:none;
}

ul.mdash-list  li
{
    position:relative;
}

ul.mdash-list li .mdash-icon
{
    position:absolute;
    left:-20px;
}

3

De otra manera:

li:before {
  content: '\2014\00a0\00a0'; /* em-dash followed by two non-breaking spaces*/
}
li {
  list-style: none;
  text-indent: -1.5em;
  padding-left: 1.5em;    
}

3

CSS:

li:before {
  content: '— ';
  margin-left: -20px;
}

li {
  margin-left: 20px;
  list-style: none;
}

HTML:

<ul>
  <li>foo</li>
  <li>bar</li>
</ul>

1
esto no funciona para artículos que abarcan más de una línea
jenlampton

2

En lugar de usar lu li, usado dl (definition list) and dd. <dd>se puede definir utilizando un estilo css estándar como {color:blue;font-size:1em;}y usar como marcador cualquier símbolo que coloque después de la etiqueta html. Funciona como ul li, pero le permite usar cualquier símbolo, solo tiene que sangrarlo para obtener el efecto de lista sangrado que normalmente obtiene ul li.

CSS:
dd{text-indent:-10px;}

HTML
<dl>
<dd>- One</dd>
<dd>- Two</dd>
<dd>- Three</dd></dl>

Te da un código mucho más limpio! De esa manera, ¡podrías usar cualquier tipo de personaje como marcador! Sangría es de aproximadamente -10pxy funciona perfecto!


77
Esto es bastante malo por dos razones. En primer lugar, coloca los caracteres de las viñetas directamente en el texto, mezclando contenido y estilo. En segundo lugar, está haciendo mal uso del elemento dl, aquí hay un artículo sobre el uso correcto .
mzgajner

1

Para cualquiera que tenga este problema hoy, la solución es simplemente:

estilo de lista: "- "


-1

Lo que funcionó para mí fue

<ul>
    <li type= "none">  &ndash; line 1 </li>
    <li type= "none">  &ndash; line 2 </li>
    <li type= "none">  &ndash; line 3 </li>
</ul>
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.