首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >css中的svg sprite -是变换缩放的合法方式

问css中的svg sprite -是变换缩放的合法方式
EN

Stack Overflow用户
提问于 2016-04-11 21:01:56
回答 2查看 1.7K关注 0票数 0

我使用SVG雪碧图作为CSS背景图片,如下所示:

代码语言:javascript
复制
.icon-arrow-down-dims {
  background: url("../sprite/css-svg-sprite.svg") no-repeat;
  background-position: 16.666666666666668% 0;
  width: 32px;
  height: 32px;
  display: inline-block;
}

我唯一可以扩展它并按预期工作的方法是使用transform: scale(2)将其放大2倍,或使用transform: scale(.5)将其缩小2倍。

代码语言:javascript
复制
.icon-arrow-down-dims {
  @extend %svg-common;
  background-position: 16.666666666666668% 0;
  width: 32px;
  height: 32px;
  display: inline-block;
  transform: scale(2);
}

这真的很好用,因为它不像png精灵那样像素化。我的问题是:这是一种合法的扩展svg css精灵的方式吗?有没有其他方法可以做到这一点?提前感谢

EN

回答 2

Stack Overflow用户

发布于 2016-04-11 21:13:26

为什么不使用宽度和高度来缩放呢?

你的伸缩方式没有错,但我不确定它是否会兼容所有的浏览器。

下面是一个例子。

代码语言:javascript
复制
.icon {
    background-size: auto 100% !important;
    display:inline-block;
}
.icon.small {
    height: 1em;
    width: 1em;
}
.icon.large {
    height: 2em;
    width: 2em;
}
.icon_1 {
    background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="64" height="16" viewBox="0 0 64 16"> <circle fill="blue" cx="8" cy="8" r="8"/> <circle fill="red" cx="24" cy="8" r="8"/> <circle fill="yellow" cx="40" cy="8" r="8"/> <circle fill="green" cx="56" cy="8" r="8"/> </svg>') 100% 0 no-repeat;
}
.icon_2 {
    background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="64" height="16" viewBox="0 0 64 16"> <circle fill="blue" cx="8" cy="8" r="8"/> <circle fill="red" cx="24" cy="8" r="8"/> <circle fill="yellow" cx="40" cy="8" r="8"/> <circle fill="green" cx="56" cy="8" r="8"/> </svg>') 33.33% 0 no-repeat;
}

编辑如果不指定viewBox,上面的示例将不起作用。谢谢@RobertLongson

transform属性定义了应用于元素及其子元素的转换定义列表

现在看,transform = scale(2)将非常有效,直到您没有包含svg的div元素的子元素,如果您确实有一个子元素,那么它也将被缩放。但是,如果您使用的是宽度和高度,则只会缩放父对象。

有关更多示例https://css-tricks.com/scale-svg/,请查看此链接>>

票数 1
EN

Stack Overflow用户

发布于 2016-04-11 22:48:26

这是合法的。转换是原生SVG功能,应该始终与SVG元素配合使用。

如果你只需要一个特定的大小就能让它看起来很漂亮,我建议你编辑SVG sprite代码(它是XML,看起来和HTML完全一样,所以你理解它没有问题),确保所有SVG元素都封装在一个组中,并将transform作为属性添加到这个组中。这基本上就像在图形编辑器中打开精灵,缩放它,然后保存。

如果您有更多关于SVG的问题,请提出来。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36549475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档