CSS 목록 스타일 이미지 크기


81

<ul>의 목록 항목 에 CSS로 사용자 정의 SVG 아이콘을 설정하려고 합니다. 예:

<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>

문제는 이미지가 너무 커서 선의 높이가 늘어난다는 것입니다. SVG 사용의 요점은 해상도에 따라 크기를 조정하는 것이기 때문에 이미지 크기를 변경하고 싶지 않습니다. background-image해킹 없이 CSS를 사용하여 이미지 크기를 설정하는 방법이 있습니까?

편집 : 여기에 미리보기가 있습니다 (그림과 드라마를 위해 의도적으로 선택한 큰 이미지) : http://jsfiddle.net/tWQ65/4/
그리고 background-imageCSS3를 사용하는 현재 해결 방법 background-size: http://jsfiddle.net/kP375/1/


1
아이콘 글꼴은 좋은 트릭입니다 stackoverflow.com/questions/13129995/how-to-use-icon-fonts/... 어떤 경우를 커버 할 수있다
Yauhen Yakimovich

답변:


13

'list-style-image'속성을 설정하는 대신 img 태그를 사용해 볼 수 있습니다. CSS를 사용하여 너비와 높이를 설정하면 실제로 이미지가 잘립니다. 그러나 img 태그를 사용하면 이미지의 너비와 높이 값이 조정됩니다.


22
이미지 태그의 문제점은 다른 라인에 일부 아이콘을 재사용하면 나중에 변경하기가 더 어렵다는 것입니다. 또한 콘텐츠와 프레젠테이션을 혼합하여 가능한 한 피하려고합니다. 그래도 다른 것이 제대로 작동하지 않으면 명심할 것입니다.
BitLooter

75

나는 사용합니다 :

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

3
didnt 한 작품, 난 시도background-size:16px auto;
BillyNair

5
background-size:contain더 나은 선택이지만 왜 당신에게 효과가 없는지 모르겠습니다. 내 모든 SVG 이미지는 높이와 너비를 100 %로 설정했으며 SVG에서 설정하지 않는 한 일부 브라우저는 재미 있습니다.
Chris

11
.ladybug{ list-style:none; } .ladybug:before{ content:''; display:inline-block; height:1em; width:1em; background-image:url(http://www.openclipart.org/people/lemmling/lemmling_Ladybug.svg); background-size:contain; background-repeat:no-repeat; }이것의 장점은 독립적으로 크기를 조정하고 애니메이션을 적용 할 수 있다는 것입니다. Firefox와 Chrome에서 작동하는 것을 알고 있습니다.
Chris

1
후속 조치에 감사드립니다. 다른 CSS 파일 중 하나가이 파일을 엉망으로 만들 가능성이 있습니다. 나는 "포토샵"트릭에서 이미지 크기를 조정 옛날에 의지 ...
BillyNair

나를 위해 일했습니다. 사용자 정의 SVG를 사용했고 백분율 용어로 지정된 너비 및 높이 값의 유무에 관계없이 작동한다는 것을 알았습니다. 여기에 몇 가지 추가 참고 사항이 있습니다 -w3.org/wiki/CSS/Properties/list-style-image
Afrowave

46

나는 사용하고있다 :

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;
}

여기서 background-size는 배경 이미지 크기를 설정합니다.


23

여기에서 레이아웃 엔진이 목록 이미지 크기를 결정하는 방법을 확인할 수 있습니다. http://www.w3.org/wiki/CSS/Properties/list-style-image

CSS의 이점을 유지하면서이 문제를 해결할 수있는 세 가지 방법이 있습니다.

  1. 이미지 크기를 조정하십시오.
  2. 대신 배경 이미지와 패딩을 사용하십시오 (가장 쉬운 방법).
  3. 정의 된 크기가없는 SVG를 viewBox사용하면 list-style-image(Kudos to Jeremy) 로 사용될 때 1em으로 크기가 조정됩니다 .

링크 된 W3C 문서의 규칙에서 가장 좋은 해결책은 실제로 SVG 파일에서 widthheight선언 을 제거하는 것 같습니다 .
Jeremy

그것이 내가 말했듯이 # 3에서 얻은 것입니다.하지만 SVG 문서가 일반적으로 문서의 선언 된 높이와 너비를 기반으로 X 및 Y 좌표를 필요로하는 방식을 알기 때문에 정확히 어떻게 수행되는지 잘 모르겠습니다.
CourtDemone 2013-10-23

5
음, 너비와 높이가 선언되지 않은 SVG 이미지가 있지만 a viewBox이면 원하는 효과를 얻을 수 있다고 생각합니다. 브라우저에서 이미지 만 보는 것은 창을 채울 것입니다 (가로 세로 비율 유지). 따라서 list-style-image사용 가능한 공간, 즉 1em.
제레미

맞습니다! 저는 SVG 마크 업에 능숙하지 않지만 원하는 솔루션처럼 들립니다. 내 첫 댓글을 수정하겠습니다.
CourtDemone 2013 년

2
SVG 솔루션을 사용하면 다른 크기를 지정하는 방법이 1em있습니까?
크리스 마틴

4

부정 행위와 거의 비슷하게 이미지 편집기에 들어가서 이미지 크기를 절반으로 조정했습니다. 나를위한 매력처럼 작동합니다.


3

Chris 덕분에 사용 된 이미지의 크기를 조정하는 개선 사항이 있습니다. 첫 번째 자식을 사용하는 것은 목록 내에서 다양한 아이콘을 사용하여 완전한 제어를 제공 할 수 있음을 나타냅니다.

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;
}

이것은 모든 최신 브라우저에서 잘 작동하는 것 같습니다. 너비와 음수 여백이 동일한 값을 갖는지 확인해야합니다. 도움이되기를 바랍니다.


0

나는 일종의 터미널 에뮬레이터를 사용 Bootstrap했고 Javascript쉽게 새 항목을 추가하기 위해 동적이 필요했기 때문에 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;
}

도움이 되었기를 바랍니다.


0

나는 li의 앞에 이미지 태그를 배치하여 그것을 달성했습니다.


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;
     }

0

이것은 늦은 답변이지만 후손을 위해 여기에 넣습니다

svg를 편집하고 크기를 설정할 수 있습니다. 내가 svg를 사용하는 것을 좋아하는 이유 중 하나는 텍스트 편집기에서 편집 할 수 있기 때문입니다.

다음은 처음에 10 * 10 이미지로 표시하도록 내부적으로 크기를 조정 한 32 * 32 svg입니다. 목록 이미지를 대체하기 위해 완벽하게 작동했습니다.

<?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>

그런 다음 내 CSS에 다음을 추가했습니다.

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

list-style: none;그것을 대체 이미지가로드되는 동안 표시에서 기본 목록 이미지를 방지 중요합니다.


0

다음은 목록 글 머리 기호에 대해 인라인 SVG 로 재생하는 예입니다 (2020 브라우저).

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>")
  • SVG로 재생 widthheight크기 설정
  • M70 42손을 배치하기 위해 플레이
  • FireFox 또는 Chromium에서 다른 동작!
  • 제거 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>


0
.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 */
}

이것은 이미지의 크기에 영향을 미치지 않는 것 같습니다.
Yuval A.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.