- A+
所属分类:Web前端
在之前我们已经使用用 / 来进行计算,但如下情况不一样
例如
p{ font: 16px/30px Arial, Helvetica, sans-serif; }
如果需要使用变量,同时又要确保 / 不做除法运算,而是完整地编译到 CSS 文件中,这种情况怎么办???可以使用 #{} 插值语句将变量包裹。
使用插值语法
p { $font-size: 12px; $line-height: 30px; font: #{$font-size}/#{$line-height} Helvetica, sans-serif; }
通过 #{}
插值语句可以在选择器、属性名、注释中使用变量:
$class-name: danger; $attr: color; $author:'老姚'; /* * 这是文件的说明部分 @author: #{$author} */ a.#{$class-name} { border-#{$attr}: #F00; }
编译后
/* * 这是文件的说明部分 @author: 老姚 */ a.danger { border-color: #F00; }
插值语法说明
插值
一般就指插入值在某个位置,该功能不是sass才有的,其实很多语言都有,例如前段的js,如果我们想输出一个带变量的值
var name = '张三', age = 20; console.log('我叫' + name + ',今年' + age + '岁!');
如果有很多变量要输出,或这个串很长的情况是非常麻烦的,所以我们可以用模板字符串输出,像这样
var name = '张三', age = 20; console.log(`我叫${name},今年${age}岁!`);
而sass中的插值用的是#{}把变量包裹起来的,变量可以是几乎任意类型的值;
什么时候会用到插值语法?
注释、选择器、属性名等有变量输出时
上面的安全便是该种情况
$class-name: danger; $attr: color; $author:'老姚'; /* * 这是文件的说明部分 @author: #{$author} */ a.#{$class-name} { border-#{$attr}: #F00; }
用于调式
$themes:( 'light':#f00, 'dark':#000); @function color($key) { @if not map-has-key($themes, $key) { @warn " $themes有key里面不包含 `#{$key}`."; } @return map-get($themes, $key); } .container { background-color: color('light'); }
更多使用场景欢迎补充
这些情况不能使用插值语法
不可插值用于变量的一部分
$font-size-big: 40px; $font-size-base: 20px; $font-size-small: 12px; $size:big; .block { font-size: $font-size-#{$size}; // Error: Undefined variable. }
不能在混入里使用
@mixin base { margin-top: 20px; background: #F00; } $flag: "base"; .navigation { @include #{$flag}; // Error: Expected identifier. }
@import后不能使用
$var:'common'; @import #{var}; .block { font-size: $font-size; }
还有更多情况...
最后总结
插值语法在使用中还是非常方便的,但有些情况不能使用,但不代表后续不能使用,具体情况根据当前使用的版本来,有可能现目前版本不支持的情况,后续版本可能会支持。
关于sass插件语法#{}的使用就介绍到这里,更多教程请关注“老姚实战营”!