我正在创建一些图标字体规则,以便在我的网站中使用。使用Sass我想列出列表变量中的所有图标,并使用@each循环遍历它们。
代码如下所示:
$icons:
wifi 600,
wifi-hotspot 601,
weather 602;
@each $icon in $icons {
.icon-#{nth($icon, 1)},
%icon-#{nth($icon, 1)} {
content: "\#{nth($icon, 2)}";
}
}
问题是content:
行的反斜杠。我需要它用于字符编码,但它逃避变量插值,输出如下所示的CSS:
.icon-wifi {
content: "\#{nth($icon, 2)}";
}
再添加一个反斜杠:content: "\\#{nth($icon, 2)}";
输出此CSS:
.icon-wifi {
content: "\\600";
}
有没有办法让Sass在保持变量插值的同时只用一个反斜杠输出CSS?
答案 0 :(得分:7)
如果在实际变量中包含反斜杠,那么当sass生成css时,它实际上会生成计算出的unicode字符,而不是在css输出中输出unicode。这通常仍然有效,但如果出现问题则很难调试,并且在渲染图标时更容易导致浏览器出现问题。
要在生成的CSS中输出实际的unicode,您可以这样做:
@function icon($character){
@return unquote('\"') + unquote(str-insert($character,'\\', 1)) + unquote('\"');
}
$icon-thing: "e60f";
.icon-thing:before {
content: icon($icon-thing); //outputs content: "\e60f";
}
答案 1 :(得分:5)
我通过弄乱插值
来解决这个问题.icon-wifi {
content: "\600";
}
.icon-wifi-hotspot {
content: "\601";
}
.icon-weather {
content: "\602";
}
编译到
Evaluate(evalStr)
答案 2 :(得分:2)
您可以在$icons
变量中为参数添加反斜杠。也就是说,
$icons: wifi "\600", wifi-hotspot "\601", weather "\602";
@each $icon in $icons {
.icon-#{nth($icon, 1)}, %icon-#{nth($icon, 1)} {
content: "#{nth($icon, 2)}";
}
}
生成的CSS:
.icon-wifi {
content: "\600";
}
.icon-wifi-hotspot {
content: "\601";
}
.icon-weather {
content: "\602";
}
答案 3 :(得分:0)
如果您正在使用Gulp编译Sass文件,则安装此Gulp插件可能是解决问题的最简单方法:
https://www.npmjs.com/package/gulp-sass-unicode
var sass = require('gulp-sass');
var sassUnicode = require('gulp-sass-unicode');
gulp.task('sass', function(){
gulp.src('style.scss')
.pipe(sass())
.pipe(sassUnicode()) // <-- This is the bit that does the magic
.pipe(gulp.dest( "css/" ));
});
无需在Sass文件中进行任何代码更改。写出所需的Sass代码,并且Unicode字符会自动解码为输出CSS中的常规转义字符串。
输入SCSS
$testContent: "\f26e";
#test {
content: $testContent;
}
输出CSS
#test {
content: "\f26e";
}
答案 4 :(得分:0)
不幸的是,这些解决方案并不完全对我有用,但是我终于能够与SASS maps
一起使用它
//node-sass 4.11.0
//libsass 3.5.4
$hexes: (
checkmark: \2714
);
@function out-content($var) {
@return unquote("\"#{ $var }\"");
}
@each $mod, $code in $hexes {
.#{$mod}-after {
&:after {
content: out-content($code);
}
}
}
//output
//.checkmark-after:after {
//content: "\2714";
//}
答案 5 :(得分:0)
使用引号和双斜杠
$ var:123→内容:“ \ e123”
date:add-duration