De kleur van de opsommingstekens van een HTML-lijst wijzigen zonder span te gebruiken

Ik vroeg me af of er een manier is om de kleur van de opsommingstekens in een lijst te wijzigen.

Ik heb een lijst als deze:

<ul>
   <li>House</li>
   <li>Car</li>
   <li>Garden</li>
</ul>

Het is voor mij niet mogelijk om iets in de li’s in te voegen, zoals een ‘span’ of een ‘p’. Dus kan ik de kleur van de opsommingstekens veranderen, maar niet de tekst op een slimme manier?


Antwoord 1, autoriteit 100%

Ik heb dit voor elkaar gekregen zonder opmaak toe te voegen, maar in plaats daarvan li:beforete gebruiken. Dit heeft uiteraard alle beperkingen van :before(geen oude IE-ondersteuning), maar het lijkt te werken met IE8, Firefox en Chrome na een aantal zeer beperkte tests. De stijl van opsommingstekens wordt ook beperkt door wat er in unicode staat.

li {
  list-style: none;
}
li:before {
  /* For a round bullet */
  content: '\2022';
  /* For a square bullet */
  /*content:'\25A0';*/
  display: block;
  position: relative;
  max-width: 0;
  max-height: 0;
  left: -10px;
  top: 0;
  color: green;
  font-size: 20px;
}
<ul>
  <li>foo</li>
  <li>bar</li>
</ul>

Snippet uitvouwen


Antwoord 2, autoriteit 18%

Als u een afbeelding kunt gebruiken, kunt u dit doen. En zonder een afbeelding kunt u niet alleen de kleur van de opsommingstekens wijzigen en niet de tekst.

Een afbeelding gebruiken

li { list-style-image: url(images/yourimage.jpg); }

Zie

list-style-image

Zonder een afbeelding te gebruiken

Vervolgens moet je de HTML-opmaak bewerken en een span in de lijst opnemen en de li en span met verschillende kleuren kleuren.


Antwoord 3, autoriteit 10%

We kunnen list-style-imagecombineren met svgs, die we kunnen inline in css! Deze methode biedt ongelooflijke controle over de “kogels”, die alles kunnen worden.

Gebruik de volgende css om een ​​rode cirkel te krijgen:

ul {
  list-style-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" width="10" height="10"><circle fill="red" cx="5" cy="5" r="2"/></svg>');
}

Maar dit is nog maar het begin. Hierdoor kunnen we alle gekke dingen doen die we willen met die kogels. cirkels of rechthoeken zijn gemakkelijk, maar alles wat je kunt tekenen met svgkun je erin plakken! Bekijk het onderstaande voorbeeld in de roos:

Codefragment weergeven


Antwoord 4, autoriteit 8%

Voortbouwend op de oplossing van @Marc — aangezien het opsommingsteken anders wordt weergegeven met verschillende lettertypen en browsers, heb ik de volgende css3-techniek met border-radius gebruikt om een ​​opsommingsteken te maken waar ik meer controle over heb:

li:before {
    content: '';
    background-color: #898989;
    display: inline-block;
    position: relative;
    height: 12px;
    width: 12px;
    border-radius: 6px;
    -webkit-border-radius: 6px;
    -moz-border-radius: 6px;
    -moz-background-clip: padding;
    -webkit-background-clip: padding-box;
    background-clip: padding-box;
    margin-right: 4px;
    top: 2px;
}

Antwoord 5, autoriteit 6%

Ik weet dat dit een heel, heel oude vraag is, maar ik speelde hiermee en kwam op een manier die ik nog niet eerder heb gezien. Geef de lijst een kleur en overschrijf de tekstkleur met de ::first-lineselector. Ik ben geen expert, dus misschien is er iets mis met deze aanpak die ik mis, maar het lijkt te werken.

li {
  color: blue;
}
li::first-line {
  color: black;
}
<ul>
  <li>House</li>
  <li>Car</li>
  <li>Garden</li>
</ul>

Snippet uitvouwen


Antwoord 6, autoriteit 3%

Voortbouwend op zowel @Marc- als @jessica-oplossingen – Dit is de oplossing die ik gebruik:

li { 
   position:relative;
}
li:before {
      content:'';
      display: block;
      position: absolute;
      width: 6px;
      height:6px;
      border-radius:6px;
      left: -20px;
      top: .5em;
      background-color: #000;
}

Ik gebruik emvoor lettergroottes, dus als u uw top-waarde instelt op .5em, wordt deze altijd in het midden geplaatst van uw eerste regel tekst. Ik heb left:-20pxgebruikt omdat dat de standaardpositie van opsommingstekens in browsers is: bovenliggende padding/2


Antwoord 7, autoriteit 2%

::markering

U kunt de ::markerCSS pseudo-element om het markeringsvak van een lijstitem te selecteren (dwz opsommingstekens of cijfers).

ul li::marker {
  color: red;
}

Opmerking:Op het moment dat dit antwoord wordt gepost, wordt dit beschouwd als experimentele technologie en is het alleen geïmplementeerd in Firefox en Safari (tot nu toe).


Antwoord 8

Ik vond het antwoord van Marc ook erg leuk – ik had een set UL’s met verschillende kleuren nodig en het zou natuurlijk gemakkelijker zijn om gewoon een klas te gebruiken. Dit is wat ik bijvoorbeeld voor sinaasappel heb gebruikt:

ul.orange {
    list-style: none;
    padding: 0px;
}
ul.orange > li:before {
    content: '\25CF ';
    font-size: 15px;
    color: #F00;
    margin-right: 10px;
    padding: 0px;
    line-height: 15px;
}

Bovendien ontdekte ik dat de hexadecimale code die ik gebruikte voor ‘inhoud:’ anders was dan die van Marc (die hexadecimale cirkel leek iets te hoog te zitten). Degene die ik gebruikte lijkt perfect in het midden te zitten. Ik vond ook verschillende andere vormen (vierkanten, driehoeken, cirkels, enz.) hier


Antwoord 9

Voor mij is de beste optie om CSS-pseudo-elementen te gebruiken, dus voor discopsommingstekens zou het er als volgt uitzien:

ul {
  list-style-type: none;
}
li {
  position: relative;
}
li:before {
  content: '';
  display: block;
  position: absolute;
  width: 5px; /* adjust to suit your needs */
  height: 5px; /* adjust to suit your needs */
  border-radius: 50%;
  left: -15px; /* adjust to suit your needs */
  top: 0.5em;
  background: #f00; /* adjust to suit your needs */
}
<ul>
  <li>first</li>
  <li>second</li>
  <li>third</li>
</ul>

Snippet uitvouwen


Antwoord 10

Voortbouwend op het antwoord van @ddilsaver. Ik wilde een sprite kunnen gebruiken voor de kogel. Dit lijkt te werken:

li {
  list-style: none;
  position: relative;
}
li:before {
  content:'';
  display: block;
  position: absolute;
  width: 20px;
  height: 20px;
  left: -30px;
  top: 5px;
  background-image: url(i20.png); 
  background-position: 0px -40px; /* or whatever offset you want */
}

Antwoord 11

Ik heb dit vandaag geprobeerd en dit getypt:
Ik moest kleurmarkeringen in mijn lijsten weergeven (zowel opsommingstekens als cijfers). Ik kwam deze tiptegen en schreef in mijn stylesheet met mutualisatie van de eigenschappen:

ul,
ol {
  list-style: none;
  padding: 0;
  margin: 0 0 0 15px;
}
ul {}
ol {
  counter-reset: li;
}
li {
  padding-left: 1em; 
}
ul li {}
ul li::before,
ol li::before {
  color: #91be3c;
  display: inline-block;
  width: 1em;
}
ul li::before {
  content: "\25CF";
  margin: 0 0.1em 0 -1.1em;
}
ol li {
  counter-increment: li;
}
ol li::before {
  content: counter(li);
  margin: 0 0 0 -1em;
}

Ik heb een ander teken gekozen om een ​​opsommingsteken weer te geven en bekijk het hier. Ik moest de marge dienovereenkomstig aanpassen, misschien zijn de waarden niet van toepassing op het lettertype dat u hebt gekozen (de cijfers gebruiken uw weblettertype).


Antwoord 12

Probeer in plaats daarvan dit te gebruiken:

ul {
  color: red;
}

Antwoord 13

Inline-versie, werkt voor Outlook Desktop:

<ul style="list-style:square;">
  <li style="color:red;"><span style="color:black;">Lorem.</span></li>
  <li style="color:red;"><span style="color:black;">Lorem.</span></li>
</ul>

JSFiddle.

Other episodes