【发布时间】:2017-11-24 18:28:41
【问题描述】:
我正在尝试创建一个 sass 映射以将图标类应用于嵌套元素。
我的元素是一个 div(将应用该类)和一个内部“保存”图标的 span:
<div class="pboi-tour_adventure">
<span></span>
</div>
实际上,如果重要的话,它是 AngularJS ng-for 的一部分:
<div class="icon-sample" ng-repeat="icon in maps.icons">
<div class="{{icon}}">
<span></span>
</div>
</div>
所以,在guidance in this article 之后,我使用的是 sass 映射和 each 循环:
$poi-icons: (
tour_adventure: "\e96c",
tour_beach: "\e96d",
tour_tourist_attractions: "\e96e",
tour_tourist_infomation: "\e96f"
);
@each $name, $icon in $poi-icons {
.pboi-#{$name} {
span::before {
content: $icon;
}
}
}
我的问题是,当我检查html时,检查器中显然没有“before”伪元素,编译后的css是
.pboi-tour_adventure span::before { content: ""; }
当我期望它是:
.pboi-tour_adventure span::before { content: "\e96c"; }
当然,因为这个,图标不起作用。
注意:即使我将其展平以匹配文章中的示例:
@each $name, $icon in $poi-icons {
.pboi-#{$name}::before {
content: $icon;
}
}
同样的事情也会发生。
简化案例:
我把这个放到萨斯迈斯特:
$foo: 'bar';
$icons: (
busi_ATM: 'foo',
busi_bank: $foo,
busi_business: '\e902'
);
@each $name, $icon in $icons {
.pboi-#{$name}:before {
content: $icon;
}
}
我明白了
.pboi-busi_ATM:before {
content: "foo";
}
.pboi-busi_bank:before {
content: "bar";
}
.pboi-busi_business:before {
content: "";
}
为什么 Sass 会通过前 2 个字符串而不是 '\e902'?
另外,更令人困惑的是,当我使用循环时,:before 会出现在编译的 CSS 文件中,但不会出现在浏览器的 Web Inspector 中。这个我完全不明白。
【问题讨论】:
-
与您的内容相关联的字体是什么?
-
icomoon 应用字体。这无关紧要,因为字符代码没有传递给css。它应该简单地将“\e69e”直接传递给css。
-
Sass 解析 unicode 字符有问题,结果总是会返回一个方框,只是原来的转义码。但这不应该阻止图标呈现。