Unicode-Zeichen als Aufzählungszeichen für Listenelement in CSS

114

Ich muss zum Beispiel das Sternsymbol (★) als Aufzählungszeichen für ein Listenelement verwenden.

Ich habe das CSS3-Modul gelesen : Listen , in denen beschrieben wird, wie benutzerdefinierter Text als Aufzählungszeichen verwendet wird, aber es funktioniert bei mir nicht. Ich denke, die Browser unterstützen das Pseudoelement einfach nicht ::marker.

Wie kann ich das machen, ohne Bilder zu verwenden?

AntonAL
quelle
Können Sie den von Ihnen verwendeten Code eingeben? Und in welchem ​​Browser testen Sie das?
Jonny Haynes
1
stackoverflow.com/questions/3068199/… enthält einige Unicode-Aufzählungszeichen. Weder das Sternsymbol, das Sie oben haben, noch 26AB (mittlerer schwarzer Kreis) werden auf meinem Windows-Computer angezeigt, obwohl sie unter Ubuntu in Ordnung sind.
Pete Kirkham
Diese Antwort (auf eine ähnliche Frage) löste es für mich: stackoverflow.com/a/12216973/907575
Piotr Migdal

Antworten:

77

BEARBEITEN

Ich würde wahrscheinlich nicht mehr empfehlen, Bilder zu verwenden. Ich würde mich an den Ansatz halten, ein Unicode-Zeichen wie folgt zu verwenden:

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

ALTE ANTWORT

Ich würde mich wahrscheinlich für einen Bildhintergrund entscheiden, sie sind viel effizienter, vielseitiger und browserübergreifender.

Hier ist ein Beispiel:

<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>
agbb
quelle
47
Wie ist das "viel effizienter"? Sie senden eine zusätzliche HTTP-Anforderung, um das Bild abzurufen, und die Gesamtdatei erhöht sich, wenn Sie ein Bild für etwas laden, das nur mithilfe eines einzelnen Unicode-Zeichens ausgeführt werden kann.
Mathias Bynens
2
Sie haben Recht, wahrscheinlich ist "effizient" nicht das Wort, das ich hätte verwenden sollen, wenn Sie nach Leistung suchen, aber die Verwendung eines Bildhintergrunds ist sicherlich viel vielseitiger als die Verwendung von Text.
Agbb
3
Es ist nicht sehr gut, die Größe eines Bildes zu ändern, aber ein Charakter ist in jeder Größe perfekt, daher würde ich sagen, dass ein Charakter vielseitiger ist: PI denke, Backword-kompatibel oder mit größtmöglicher Browserunterstützung wäre das Wort ...
JustGoscha
Dies funktioniert nicht gut, wenn der <li>Text umbrochen wird: Das Aufzählungszeichen bleibt nicht ungerückt und sieht am Ende wie der Anfang eines Textabsatzes aus. Diese Antwort behebt dieses Problem: stackoverflow.com/a/14301918/1450294
Michael Scheper
105

Verwenden von Text als Aufzählungszeichen

Verwendung li:beforemit einer maskierten Hex-HTML-Entität (oder einem beliebigen einfachen Text).


Beispiel

In meinem Beispiel werden Listen mit Häkchen als Aufzählungszeichen erstellt.

CSS :

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

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

Browser-Kompatibilität

Ich habe mich nicht getestet, aber es sollte ab IE8 unterstützt werden. Zumindest sagen das Quirksmode & CSS-Tricks .

Sie können bedingte Kommentare verwenden, um ältere / langsamere Lösungen wie Bilder oder Skripte anzuwenden. Besser noch, verwenden Sie beide mit <noscript>für die Bilder.

HTML :

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

Über Hintergrundbilder

Hintergrundbilder sind zwar einfach zu handhaben, aber ...

  1. Browser-Unterstützung für background-sizeist eigentlich nur ab IE9.
  2. HTML-Textfarben und spezielle ( verrückte ) Schriftarten können mit weniger HTTP-Anforderungen viel bewirken.
  3. Eine Skriptlösung kann einfach die HTML-Entität einfügen und dasselbe CSS die Arbeit erledigen lassen.
  4. Ein gutes Zurücksetzen des CSS-Codes könnte list-style(die logischere Wahl) erleichtern.

Genießen.

222
quelle
1
nützliches Konvertierungswerkzeug für die Flucht vor Sonderzeichen rishida.net/tools/conversion
dh
23
Dies funktioniert nicht ordnungsgemäß, wenn der Inhalt des liElements mehrere Zeilen umfasst. Diese umbrochenen Zeilen werden nicht richtig eingerückt.
Richard Ev
5
float: left; margin-left: -12px;am: vorher, um sich darum zu kümmern, @RichardEverett
Dudo
1
Ich arbeite für eine Zeile, aber nicht, wenn mehrere Zeilen umbrochen werden.
VDarricau
1
Funktioniert nur für einzeilige Listenelemente. Mehrzeilige Zeilen fallen unter die Kugel und werden nicht eingerückt.
Clarus Dignus
35

Sie können es konstruieren:

#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;
}
defann
quelle
4
Dies ist eine großartige Technik, denn wenn Sie die absolute Positionierung des Charakters nicht vornehmen, wird die "Kugel" mit dem Rest des Listenelements in Einklang gebracht. Das ist ein sehr kugelförmiges Verhalten. Mit diesem Fix erhalten Sie die "Kugel" links neben dem Listenelement, genau wie bei einer normalen Kugel.
General Redneck
Danke dafür! Genau das, was ich brauchte, damit sich meine Kugeln wieder verhalten.
tubaguy50035
1
Dies macht einen wunderbaren Navigationsbaum mit '\21B3'! Vielen Dank! Es hat besser funktioniert als die anderen Antworten hier. Außerdem wurde das padding-leftin meinem Design auf geändert 1em, was sich gut anpasst, wenn sich die Größe Ihrer Baumebenen ändert.
ndm13
23

Dies ist die W3C-Lösung. Sie können es in 3012 verwenden!

ul { list-style-type: "*"; }
/* Sets the marker to a "star" character */

https://drafts.csswg.org/css-lists/#text-markers

PHPst
quelle
12
Ich habe gehört, dass Internet Explorer 3012 endlich funktioniert!
Mark K Cowan
2
Dies funktioniert in Firefox 48, jedoch nicht in Chromium 51 oder auf meinem Telefon / Tablet. Ein muss die li:beforeLösung verwenden.
CoderGuy123
1
Funktioniert. Willkommen in der Zukunft, meine Damen und Herren.
Mikko Ohtamaa
12

Bilder werden nicht empfohlen, da sie auf einigen Geräten (Apple-Geräte mit Retina-Display) oder beim Vergrößern pixelig erscheinen können. Mit einem Zeichen sieht Ihre Liste jedes Mal fantastisch aus.

Hier ist die beste Lösung, die ich bisher gefunden habe. Es funktioniert hervorragend und ist browserübergreifend (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;
}

Wichtig ist, dass sich das Zeichen in einem schwebenden Block mit einer festen Breite befindet, damit der Text ausgerichtet bleibt, wenn er zu lang ist, um in eine einzelne Zeile zu passen. 1.2em ist die Breite, die Sie für Ihren Charakter wünschen, ändern Sie sie für Ihre Bedürfnisse. Vergessen Sie nicht, die Polsterung und den Rand für ul- und li-Elemente zurückzusetzen.

BEARBEITEN: Beachten Sie, dass die Größe von "1.2em" variieren kann, wenn Sie zuvor eine andere Schriftart in ul und li: verwenden. Es ist sicherer, Pixel zu verwenden.

NicolasBernier
quelle
Fügen Sie vielleicht "height: 1px" oder ähnliches zu li: before hinzu? Dadurch wird sichergestellt, dass sich der Schwimmer nicht bis zum nächsten <li> erstreckt, was zu unerwünschten Verschachtelungen führt.
Alan De Smet
Warum die Anzeige: Block; auf li: vorher? liegt es daran, dass es standardmäßig inline ist und Sie keine Breite angeben können?
Alexander Solonik
6

Um einen Stern hinzuzufügen, verwenden Sie das Unicode-Zeichen 22C6.

Ich habe ein Leerzeichen hinzugefügt, um eine kleine Lücke zwischen dem liund dem Stern zu machen. Der Code für Leerzeichen lautet A0.

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

Ein vollständigeres Beispiel für die Antwort von 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;
}

Ich habe Star-Hack-Eigenschaften eingefügt, um die Standardlistenstile in älteren IE-Versionen wiederherzustellen. Sie können diese herausziehen und bei Bedarf in ein bedingtes Include aufnehmen oder durch eine auf Hintergrundbildern basierende Lösung ersetzen. Meine bescheidene Meinung ist, dass spezielle Aufzählungsstile, die auf diese Weise implementiert wurden, sich in den wenigen Browsern, die keine Pseudoselektoren unterstützen, elegant verschlechtern sollten.

In Firefox, Chrome, Safari und IE8-10 getestet und insgesamt korrekt gerendert.

pospi
quelle
text-indent: -1em;ist eine wichtige Eigenschaft, wenn Sie mehrzeilige Listenelemente haben. Ohne sie stimmen die zweite und die folgenden Zeilen eher mit der Kugel als mit der vorherigen Zeile überein.
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;
}
Iacchus
quelle
1

Ich habe diese ganze Liste durchgesehen und ab 2020 gibt es teilweise korrekte und teilweise falsche Elemente.

Ich habe festgestellt, dass der Einzug und der Versatz das größte Problem bei der Verwendung von UTF-8 sind. Daher veröffentliche ich dies als 2020-kompatible CSS-Lösung am Beispiel des Aufzählungszeichens "aufrechtes Dreieck".

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
}

Verwenden Sie diese emOption als Einheit, um Konflikte mit der Schriftgröße zu vermeiden

Beerswiller
quelle
0

Versuchen Sie diesen Code ...

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

Dieses Thema mag alt sein, aber hier ist eine schnelle Lösung ul {list-style:outside none square;}oder ul {list-style:outside none disc;}, etc ...

Fügen Sie dann das linke Element zum Listenelement hinzu

ul li{line-height: 1.4;padding-bottom: 6px;}
user2415803
quelle