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.