Carattere Unicode come punto elenco per elemento dell'elenco in CSS


114

Devo usare, ad esempio, il simbolo della stella (★) come punto elenco per un elemento dell'elenco.

Ho letto il modulo CSS3: Elenchi , che descrive come utilizzare il testo personalizzato come punti elenco , ma non funziona per me. Penso che i browser semplicemente non supportino lo ::markerpseudo elemento.

Come posso farlo senza utilizzare le immagini?


puoi inserire il codice che stai usando? E in quale browser lo stai testando?
— Jonny Haynes

1
stackoverflow.com/questions/3068199/… contiene alcuni punti Unicode. Né il simbolo della stella che hai sopra, né 26AB (cerchio nero medio) vengono visualizzati sulla mia macchina Windows, sebbene siano OK su Ubuntu.
— Pete Kirkham

Questa risposta (a una domanda simile) mi ha risolto: stackoverflow.com/a/12216973/907575
— Piotr Migdal

Risposte:


77

MODIFICARE

Probabilmente non consiglierei più di usare le immagini. Mi atterrei all'approccio di usare un carattere Unicode, come questo:

li:before {
  content: "\2605";
}

VECCHIA RISPOSTA

Probabilmente sceglierei uno sfondo per immagini, sono molto più efficienti, versatili e cross-browser-friendly.

Ecco un esempio:

<style type="text/css">
  ul {list-style:none;} /* you should use a css reset too... ;) */
  ul li {background:url(images/icon_star.gif) no-repeat 0 5px;}
</style>

<ul>
  <li>List Item 1</li>
  <li>List Item 2</li>
  <li>List Item 3</li>
</ul>

47
In che modo è "molto più efficiente"? Stai inviando una richiesta HTTP aggiuntiva per recuperare l'immagine e il file totale aumenta man mano che carichi un'immagine per qualcosa che potrebbe essere fatto semplicemente tramite l'uso di un singolo carattere Unicode.
— Mathias Bynens

2
hai ragione, probabilmente "efficiente" non è la parola che avrei dovuto usare se stai cercando prestazioni, ma usare un'immagine di sfondo è sicuramente molto più versatile che usare il testo.
— agbb

3
Non è molto bello ridimensionare un'immagine, ma un personaggio è perfetto su ogni dimensione, quindi direi che un personaggio è più versatile: PI penso che la parola sia compatibile con backword o con la più ampia gamma di supporto del browser ...
— JustGoscha

Questo non funziona bene quando il <li>testo va a capo: il punto non rimane senza rientro e finisce per sembrare l'inizio di un paragrafo di testo. Questa risposta risolve questo problema: stackoverflow.com/a/14301918/1450294
— Michael Scheper,

105

Usare il testo come punti elenco

Utilizzare li:beforecon un'entità HTML esadecimale con escape (o qualsiasi testo normale).


Esempio

Il mio esempio produrrà elenchi con segni di spunta come punti elenco.

CSS :

ul {
    list-style: none;
    padding: 0px;
}

ul li:before
{
    content: '\2713';
    margin: 0 1em;    /* any design */
}

Compatibilità del browser

Non ho testato me stesso, ma dovrebbe essere supportato da IE8. Almeno questo è quello che dicono quirksmode e css-tricks .

È possibile utilizzare commenti condizionali per applicare soluzioni più vecchie / lente come immagini o script. Meglio ancora, usa entrambi con<noscript> per le immagini.

HTML :

<!--[if lt IE 8]>
    *SCRIPT SOLUTION*
    <noscript>
        *IMAGE SOLUTION*
    </noscript>
<![endif]-->

Informazioni sulle immagini di sfondo

Le immagini di sfondo sono davvero facili da gestire, ma ...

  1. Supporto del browser per background-size è in realtà solo a partire da IE9.
  2. Colori del testo HTML e speciali ( crazy ) possono fare molto, con meno richieste HTTP.
  3. Una soluzione di script può semplicemente iniettare l'entità HTML e lasciare che lo stesso CSS faccia il lavoro.
  4. Un buon ripristino del codice CSS potrebbe rendere list-style(la scelta più logica) più facile.

Godere.


1
utile strumento di conversione per sfuggire ai caratteri speciali rishida.net/tools/conversion
— iiz

23
Questo non funziona correttamente se il contenuto lidell'elemento va a capo su più righe; quelle linee mandate a capo non saranno rientrate correttamente.
— Richard Ev

5
float: left; margin-left: -12px;il: prima di occuparsene, @RichardEverett
— Dudo

1
Lavoro per una riga ma non funziona se più righe vanno a capo.
— VDarricau

1
Funziona solo per voci di elenco a riga singola. Le linee multiple cadranno sotto il punto elenco anziché rientrare.
— Clarus Dignus

35

Puoi costruirlo:

#modal-select-your-position li {
/* handle multiline */
    overflow: visible;
    padding-left: 17px;
    position: relative;
}

#modal-select-your-position li:before {
/* your own marker in content */
   content: "—";
   left: 0;
   position: absolute;
}

4
Questa è un'ottima tecnica perché se non esegui il posizionamento assoluto del personaggio, finisci con il "Bullet" in linea con il resto della voce dell'elenco. Questo è un comportamento molto antiproiettile. Quindi, con questa correzione, si ottiene il "punto elenco" a sinistra dell'elemento dell'elenco proprio come si farebbe con un normale punto elenco.
— Generale Redneck

Grazie per questo! Esattamente quello che mi serviva per rimettere in moto i miei proiettili.
— tubaguy50035

1
Questo rende un meraviglioso albero di navigazione usando '\21B3'! Grazie! Ha funzionato meglio delle altre risposte qui. Anche cambiato padding-leftnel mio design in 1em, che si adatta bene quando i livelli dell'albero cambiano dimensione.
— ndm13


12

Le immagini non sono consigliate poiché possono apparire pixelate su alcuni dispositivi (dispositivi Apple con display Retina) o quando vengono ingrandite. Con un personaggio, la tua lista è sempre fantastica.

Ecco la migliore soluzione che ho trovato finora. Funziona benissimo ed è cross-browser (IE 8+).

ul {
    list-style: none;
    padding-left: 1.2em;
    text-indent: -1.2em;
}

li:before {
    content: "►";
    display: block;
    float: left;
    width: 1.2em;
    color: #ff0000;
}

L'importante è avere il carattere in un blocco mobile con una larghezza fissa in modo che il testo rimanga allineato se è troppo lungo per stare su una singola riga. 1.2em è la larghezza che desideri per il tuo personaggio, cambiala in base alle tue esigenze. Non dimenticare di reimpostare il riempimento e il margine per gli elementi ul e li.

EDIT: Tieni presente che la dimensione "1.2em" può variare se usi un carattere diverso in ul e li: prima. È più sicuro usare i pixel.


Forse aggiungi "altezza: 1px" o simile a li: prima? Ciò assicura che il float non si estenda al successivo <li>, causando annidamenti indesiderati.
— Alan De Smet

Perché il display: blocco; su li: prima? è perché per impostazione predefinita è in linea e non è possibile specificare una larghezza?
— Alexander Solonik

6

Per aggiungere una stella usa il carattere Unicode 22C6.

Ho aggiunto uno spazio per fare un piccolo spazio tra la lie la stella. Il codice per lo spazio è A0.

li:before {
    content: '\22C6\A0';
}

4

Un esempio più completo della risposta di 222 :

ul {
    list-style:none;
    padding: 0 0 0 2em;     /* padding includes space for character and its margin */

    /* IE7 and lower use default */
    *list-style: disc;
    *padding: 0 0 0 1em;
}
ul li:before {
    content: '\25BA';
    font-family: "Courier New", courier, "Lucida Sans Typewriter", "Lucida Typewriter", monospace;
    margin: 0 1em 0 -1em;   /* right margin defines spacing between bullet and text. negative left margin pushes back to the edge of the parent <ul> */

    /* IE7 and lower use default */
    *content: none;
    *margin: 0;
}
ul li {
    text-indent: -1em;      /* negative text indent brings first line back inline with the others */

    /* IE7 and lower use default */
    *text-indent: 0;
}

Ho incluso proprietà star-hack per ripristinare gli stili di elenco predefiniti nelle versioni precedenti di IE. È possibile estrarli e includerli in un'inclusione condizionale, se lo si desidera, o sostituirli con una soluzione basata su immagine di sfondo. La mia modesta opinione è che gli stili di proiettile speciali implementati in questo modo dovrebbero degradarsi con grazia sui pochi browser che non supportano gli pseudoselettori.

Testato in Firefox, Chrome, Safari e IE8-10 e viene visualizzato correttamente in tutti.


text-indent: -1em;è una proprietà importante se si dispone di voci di elenco su più righe. Senza di essa la seconda riga e le successive si illuminano con il punto elenco anziché con la riga precedente.
— Andris

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

ul li:before {
    content:'*'; /* Change this to unicode as needed*/
    width: 1em !important;
    margin-left: -1em;
    display: inline-block;
}

1

Ho esaminato l'intero elenco e ci sono elementi parzialmente corretti e parzialmente errati fino al 2020.

Ho scoperto che il rientro e l'offset erano il problema più grande quando si utilizza UTF-8, quindi lo sto pubblicando come una soluzione CSS compatibile con il 2020 utilizzando il punto elenco "triangolo verticale" come esempio.

ul {
    list-style: none;
    text-indent: -2em; // needs to be 1 + ( 2 x margin), and the result 'negative'
}

ul li:before {
    content: "\25B2";
    margin: 0 0.5em; // 0.5 x 2 = 1, + 1 offset to get the bullet back in the right spot
}

utilizzare emcome unità per evitare conflitti con il dimensionamento dei caratteri


0

Prova questo codice ...

li:before {
    content: "→ "; /* caractère UTF-8 */
}

-1

Questo argomento potrebbe essere vecchio, ma ecco una soluzione rapida ul {list-style:outside none square;}o ul {list-style:outside none disc;}, ecc ...

quindi aggiungi il riempimento sinistro all'elemento dell'elenco

ul li{line-height: 1.4;padding-bottom: 6px;}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.