使用 CSS 预处理器语言的一个主要原因是想使用 Sass 获得一个更好的结构体系。比如说你想写更干净的、高效的和面向对象的 CSS。Sass 中的插值(Interpolation)就是重要的一部分。让我们看一下下面的例子:

$properties: (margin, padding);
@mixin set-value($side, $value) {
@each $prop in $properties {
#{$prop}-#{$side}: $value;
}
}
.login-box {
@include set-value(top, 14px);
}

它可以让变量和属性工作的很完美,上面的代码编译成 CSS:

.login-box {
margin-top: 14px;
padding-top: 14px;
}

这是 Sass 插值中一个简单的实例。当你想设置属性值的时候你可以使用字符串插入进来。另一个有用的用法是构建一个选择器。可以这样使用:

@mixin generate-sizes($class, $small, $medium, $big) {
.#{$class}-small { font-size: $small; }
.#{$class}-medium { font-size: $medium; }
.#{$class}-big { font-size: $big; }
}
@include generate-sizes("header-text", 12px, 20px, 40px);

编译出来的 CSS:

.header-text-small { font-size: 12px; }
.header-text-medium { font-size: 20px; }
.header-text-big { font-size: 40px; }

一旦你发现这一点,你就会想到超级酷的 mixins,用来生成代码或者生成另一个 mixins。然而,这并不完全是可能的。第一个限制,这可能会很删除用于 Sass 变量的插值。

$margin-big: 40px;
$margin-medium: 20px;
$margin-small: 12px;
@mixin set-value($size) {
margin-top: $margin-#{$size};
}
.login-box {
@include set-value(big);
}

上面的 Sass 代码编译出来,你会得到下面的信息:

error style.scss (Line 5: Undefined variable: “$margin-".)

所以,#{}语法并不是随处可用,你也不能在 mixin 中调用:

@mixin updated-status {
margin-top: 20px;
background: #F00;
}
$flag: "status";
.navigation {
@include updated-#{$flag};
}

上面的代码编译成css时同样会报错:

error style.scss (Line 7: Invalid CSS after "...nclude updated-": expected "}", was "#{$flag};")
幸运的是,可以使用 @extend 中使用插值。例如:

%updated-status {
margin-top: 20px;
background: #F00;
}
.selected-status {
font-weight: bold;
}
$flag: "status";
.navigation {
@extend %updated-#{$flag};
@extend .selected-#{$flag};
}

上面的 Sass 代码是可以运行的,因为他给了我们力量,可以动态的插入 .class 和 %placeholder。当然他们不能接受像 mixin 这样的参数,上面的代码编译出来的 CSS:

.navigation {
margin-top: 20px;
background: #F00;
}
.selected-status, .navigation {
font-weight: bold;
}

这里总结一下:

1.插值不能用在属性的值中,也就是不能出现在冒号后边,否则会报错,无法识别。

2.不能用来调用混合宏,如@include updated-#{$flag}   ,这里的插值同样不会被识别。(@extend后边使用插值是可以的)。

最新文章

  1. SpringMVC学习记录4
  2. 51nod 1515 明辨是非 并查集 + set + 启发式合并
  3. Bootstrap 开关(switch)控件需要注意的问题
  4. JMeter对Selenium自动化代码进行压测
  5. wifi密码破解方法总结(含破解软件下载链接)
  6. OFFICE 文档转换为html在线预览
  7. IIS 500错误或无法显示此网页解决方法
  8. maven 聚合
  9. ubuntu yolov2 训练自己的数据集
  10. 第十七章 java8特性
  11. python 带正则的search 模块
  12. 关于getProperties的一点记录
  13. Facebook内部报告:争取青少年用户的鸡贼小技巧
  14. 解决 winform 界面对不齐
  15. PDB、PD、PMP、RTB哪个更好?为品牌主解锁程序化购买的选择技巧
  16. Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh > /dev/null; fi'
  17. hihocoder 1509 异或排序
  18. checkbox attr 和 prop ,onclick 事件,
  19. Spring整合JPA时,为实体类添加@Entity注解时提示The type MultipartEntity is deprecated
  20. github不能访问,可能原因是host里有太多过期的对应

热门文章

  1. AppBar中自定义顶部导航
  2. 【转】Django 模板语法
  3. [CSP-S模拟测试]:天才绅士少女助手克里斯蒂娜(数学+树状数组)
  4. 三层for循环求解组成三角形边的组合
  5. Socket错误详解及处理方法
  6. Nginx 模块 - ngx_http_rewrite_module
  7. canvas绘制验证码
  8. css设计丝带
  9. HDU 1269 迷宫城堡 (Kosaraju)
  10. SEC8 - MySQL 查询语句--------------进阶4:常见的函数