CSS list-style-image size

Bit*_*ter 69 html css

我正在尝试使用CSS在<ul>列表项上设置自定义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>
Run Code Online (Sandbox Code Playgroud)

问题是图像太大,并拉伸线条的高度.我不想改变图像大小,因为使用SVG的目的是按分辨率进行缩放.有没有办法使用CSS设置图像的大小而没有某种background-image黑客攻击?

编辑:这是一个预览(故意选择用于插图和戏剧的大图):http ://jsfiddle.net/tWQ65/4/
我当前的background-image解决方法,使用CSS3 background-size:http://jsfiddle.net/kP375/1/

Chr*_*ris 62

我用的是:

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

  • `.ladybug {list-style:none; } .ladybug:before {content:''; 显示:内联块; 高度:1EM; 宽度:1em的; 背景图像:网址(http://www.openclipart.org/people/lemmling/lemmling_Ladybug.svg); 背景尺寸:包含; 背景重复:不重复; 这样做的好处是你可以独立调整大小甚至动画.我知道它在Firefox和Chrome中对我有用. (10认同)
  • `background-size:contains`是更好的选择,但我不知道它为什么不适合你.我所有的SVG图像都将高度和宽度设置为100%,有些浏览器很有趣,除非你在SVG中设置它. (4认同)
  • 没有用,我什至尝试了`background-size:16px auto;`。 (2认同)

小智 39

我正在使用:

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;
}
Run Code Online (Sandbox Code Playgroud)

其中background-size设置背景图像大小.


Cou*_*one 21

您可以在此处查看布局引擎如何确定列表图像大小:http://www.w3.org/wiki/CSS/Properties/list-style-image

在保持CSS优势的同时,有三种方法可以解决这个问题:

  1. 调整图像大小.
  2. 使用背景图像和填充(最简单的方法).
  3. 使用没有定义大小的SVG viewBox,然后在用作list-style-image(Kudos to Jeremy)时将其大小调整为1em .

  • 好吧,如果你有一个没有声明宽度和高度的SVG图像,而是一个`viewBox`,我想你会得到想要的效果.在浏览器中单独查看图像将填充窗口(保留纵横比),因此我想象它将填充可用空间的`list-style-image`,即`1em`. (5认同)
  • 从链接的 W3C 文档中的规则来看,最好的解决方案实际上是从 SVG 文件中删除“宽度”和“高度”声明。 (2认同)
  • 使用SVG解决方案时,除了“ 1em”以外,还有其他方法可以指定大小吗? (2认同)
  • 在 Firefox 52 ESR 中,从 SVG 中删除高度和宽度会导致其无法渲染。 (2认同)

小智 11

您可能想尝试使用img标签而不是设置'list-style-image'属性.使用css设置宽度和高度实际上会裁剪图像.但是如果你使用img标签,图像将被重新调整为宽度和高度的值.

  • 图像标记的问题在于,如果我为不同的行重用某些图标,则以后更难更改.它还混合了内容和演示文稿,这是我尽力避免的.不过,如果没有其他工作正常的话,我会记住这一点. (14认同)

小智 6

感谢 Chris 在这里的起点是解决所用图像大小调整的改进,使用 first-child 只是为了表明您可以使用列表中的各种图标来让您完全控制。

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;
}
Run Code Online (Sandbox Code Playgroud)

这似乎适用于所有现代浏览器,您需要确保宽度和左边距具有相同的值,希望它有所帮助


Jah*_*mic 5

几乎像作弊一样,我只是进入了图像编辑器并将图像调整了一半.对我来说就像一个魅力.