CSS-lijst-stijl-afbeeldingsgrootte

Ik probeer aangepaste SVG-pictogrammen met CSS in te stellen op de lijstitems van <ul>. Voorbeeld:

<ul>
    <li style="list-style-image: url('first.svg')">This is my first item</li>
    <li style="list-style-image: url('second.svg')">And here's my second</li>
</ul>

Het probleem is dat de afbeeldingen te groot zijn en de hoogte van de lijnen uitrekken. Ik wil de afbeeldingsgrootte niet wijzigen, want het punt van het gebruik van SVG is om te schalen met de resolutie. Is er een manier om de grootte van de afbeelding in te stellen met behulp van CSS zonder een soort background-imagehack?

BEWERKEN: Hier is een voorbeeld (grote afbeelding bewust gekozen voor illustratie en drama): http://jsfiddle.net /tWQ65/4/
En mijn huidige background-imagetijdelijke oplossing, met behulp van CSS3’s background-size: http://jsfiddle.net/kP375/1/


Antwoord 1, autoriteit 100%

Misschien wilt u de img-tag proberen in plaats van de eigenschap ‘list-style-image’ in te stellen. Door de breedte en hoogte in te stellen met css wordt de afbeelding daadwerkelijk bijgesneden. Maar als u de img-tag gebruikt, wordt het formaat van de afbeelding aangepast aan de waarde voor breedte en hoogte.


Antwoord 2, autoriteit 93%

Ik zou gebruiken:

li{
   list-style: none;
}
li::before{
   content: '';
   display: inline-block;
   height: y;
   width: x;
   background-image: url();
}

Antwoord 3, autoriteit 93%

Ik gebruik:

li {
	margin: 0;
	padding: 36px 0 36px 84px;
	list-style: none;
	background-image: url("../../images/checked_red.svg");
	background-repeat: no-repeat;
	background-position: left center;
	background-size: 40px;
}

Antwoord 4, autoriteit 90%

Je kunt hier zien hoe layout-engines de grootte van lijstafbeeldingen bepalen: http ://www.w3.org/wiki/CSS/Properties/list-style-image

Er zijn drie manieren om dit te omzeilen met behoud van de voordelen van CSS:

  1. Formaat van de afbeelding wijzigen.
  2. Gebruik in plaats daarvan een achtergrondafbeelding en opvulling (gemakkelijkste methode).
  3. Gebruik een SVG zonder een gedefinieerde grootte met behulp van viewBoxdie vervolgens wordt aangepast naar 1em wanneer deze wordt gebruikt als een list-style-image(een pluim voor Jeremy).

Antwoord 5, autoriteit 40%

Met dank aan Chris voor het startpunt hier is een verbetering die het formaat van de gebruikte afbeeldingen aanpakt. Het gebruik van eerste kind is alleen om aan te geven dat je een verscheidenheid aan pictogrammen in de lijst kunt gebruiken om je volledige controle te geven.

ul li:first-child:before {
    content: '';
    display: inline-block;
    height: 25px;
    width: 35px;
    background-image: url('../images/Money.png');
    background-size: contain;
    background-repeat: no-repeat;
    margin-left: -35px;
}

Dit lijkt goed te werken in alle moderne browsers, je moet ervoor zorgen dat de breedte en de negatieve marge dezelfde waarde hebben, ik hoop dat het helpt


Antwoord 6, autoriteit 27%

Bijna alsof ik vals speelde, ik ging gewoon naar een afbeeldingseditor en verkleinde de afbeelding met de helft. Werkt als een tierelier voor mij.


Antwoord 7, autoriteit 7%

Hier is een voorbeeld om met Inline SVGte spelen voor een opsommingsteken (2020 browsers)

list-style-image: url("data:image/svg+xml,
                      <svg width='50' height='50'
                           xmlns='http://www.w3.org/2000/svg' 
                           viewBox='0 0 72 72'>
                        <rect width='100%' height='100%' fill='pink'/>
                        <path d='M70 42a3 3 90 0 1 3 3a3 3 90 0 1-3 3h-12l-3 3l-6 15l-3
                                 l-6-3v-21v-3l15-15a3 3 90 0 1 0 0c3 0 3 0 3 3l-6 12h30
                                 m-54 24v-24h9v24z'/></svg>")
  • Speel met SVG width& heightom de maat in te stellen
  • Speel met M70 42om de hand te positioneren
  • ander gedrag op FireFox of Chromium!
  • verwijder de rect
li{
  font-size:2em;
  list-style-image: url("data:image/svg+xml,<svg width='3em' height='3em'                          xmlns='http://www.w3.org/2000/svg' viewBox='0 0 72 72'><rect width='100%' height='100%' fill='pink'/><path d='M70 42a3 3 90 0 1 3 3a3 3 90 0 1-3 3h-12l-3 3l-6 15l-3 3h-12l-6-3v-21v-3l15-15a3 3 90 0 1 0 0c3 0 3 0 3 3l-6 12h30m-54 24v-24h9v24z'/></svg>");
}
span{
  display:inline-block;
  vertical-align:top;
  margin-top:-10px;
  margin-left:-5px;
}
<ul>
  <li><span>Apples</span></li>
  <li><span>Bananas</span></li>
  <li>Oranges</li>
</ul>

Antwoord 8, Autoriteit 7%

.your_class li {
    list-style-image: url('../images/image.svg');
}
.your_class li::marker {
    font-size: 1.5rem; /* You can use px, but I think rem is more respecful */
}

Antwoord 9

Ik heb een soort terminale emulator met Bootstrapen Javascriptomdat ik wat dynamiek nodig had om eenvoudig nieuwe items toe te voegen, en ik heb de prompt van Javascript.

HTML:

 <div class="panel panel-default">
      <div class="panel-heading">Comandos SQL ejecutados</div>
      <div class="panel-body panel-terminal-body">
          <ul id="ulCommand"></ul>
      </div>
 </div>

Javascript:

function addCommand(command){
    //Creating the li tag   
    var li = document.createElement('li');
    //Creating  the img tag
    var prompt = document.createElement('img');
    //Setting the image 
    prompt.setAttribute('src','./lib/custom/img/terminal-prompt-white.png');
    //Setting the width (like the font)
    prompt.setAttribute('width','15px');
    //Setting height as auto
    prompt.setAttribute('height','auto');
    //Adding the prompt to the list item
    li.appendChild(prompt);
    //Creating a span tag to add the command
    //li.appendChild('el comando');   por que no es un nodo
    var span = document.createElement('span');
    //Adding the text to the span tag
    span.innerHTML = command;
    //Adding the span to the list item
    li.appendChild(span);
    //At the end, adding the list item to the list (ul)
    document.getElementById('ulCommand').appendChild(li);
}

CSS:

.panel-terminal-body {
  background-color: #423F3F;
  color: #EDEDED;
  padding-left: 50px;
  padding-right: 50px;
  padding-top: 15px;
  padding-bottom: 15px;
  height: 300px;
}
.panel-terminal-body ul {
  list-style: none;
}

Ik hoop dat dit je helpt.


Antwoord 10

Ik heb het bereikt door de afbeeldingstag voor de li’s te plaatsen:


HTML

<img src="https://www.pinclipart.com/picdir/big/1-17498_plain-right-white-arrow-clip-art-at-clipart.png" class="listImage">

CSS

    .listImage{
      float:left;
      margin:2px;
      width:25px
     }
     .li{
      margin-left:29px;
     }

Antwoord 11

Dit is een laat antwoord, maar ik plaats het hier voor het nageslacht

Je kunt de svg bewerken en de grootte instellen. een van de redenen waarom ik graag svg’s gebruik, is omdat je ze in een teksteditor kunt bewerken.

Het volgende is een 32*32 SVG die ik intern heb aangepast om in eerste instantie als een 10*10 afbeelding weer te geven. het werkte perfect om de lijstafbeelding te vervangen

<?xml version="1.0" ?><svg width="10" height="10"  id="chevron-right" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><path style="fill:#34a89b;" d="M12 1 L26 16 L12 31 L8 27 L18 16 L8 5 z"/></svg>

Ik heb vervolgens eenvoudig het volgende toegevoegd aan mijn CSS

* ul {
    list-style: none;
    list-style-image: url(../images/chevron-right.svg);
}

De list-style: none;is belangrijk omdat het voorkomt dat de standaardlijstafbeelding wordt weergegeven terwijl het alternatieve beeld wordt geladen.

Other episodes