CSS的Sass框架中常用的操作符的使用教程

所属分类: 网页制作 / CSS 阅读数: 239
收藏 0 赞 0 分享

赋值操作符

Sass 使用冒号( : )来定义一个变量:

CSS Code复制内容到剪贴板
  1. $main-color: lightgray;  

算术操作符

算术操作符用于执行数学计算,下面是 Sass 所支持的算术操作符:

操作符 简介
+
-
*
/
% 取余

注意,上面的操作符只能用于单位相同的数值运算:

CSS Code复制内容到剪贴板
  1. h2 {   
  2.     font-size5px + 2em; // 单位不一致,编译报错   
  3.     font-size5px + 2; // 7px  
  4. }  

此外,两个单位相同的数值相乘无法生成有效的 CSS:

CSS Code复制内容到剪贴板
  1. h2 {   
  2.     font-size5px * 2px; // invalid CSS   
  3. }  

如你所知,/ 操作符本身就是 CSS 简写语法的一部分,比如:

CSS Code复制内容到剪贴板
  1. font16px / 24px Arial sans-serif;   
  2. backgroundurl("http://example.com"no-repeat fixed center / cover;  

但是,Sass 重载了该运算符,用于执行除法操作,下面让我们看看它是如何解析的:

CSS Code复制内容到剪贴板
  1. h2 {   
  2.     // 不执行除法操作,原样输出   
  3.     font-size16px / 24px;    
  4.   
  5.     // 使用插值语法之后,原样输出   
  6.     font-size: #{$base-size} / #{$line-height};    
  7.   
  8.     // 使用括号包裹之后,执行除法操作   
  9.     font-size: (16px / 24px);    
  10.   
  11.     // 使用变量,执行除法操作   
  12.     font-size: $base-size / $line-height;    
  13.   
  14.     // 调用函数,执行除法操作   
  15.     opacity: random(4) / 5;    
  16.   
  17.     // 使用算术操作符,执行除法操作   
  18.     padding-right2px / 4px + 3px;    
  19. }  

Sass 中的操作符也具有优先级的概念,规则如下:

括号中的操作具有最高优先级
乘法、除法的优先级高于加法和减法

CSS Code复制内容到剪贴板
  1. h2 {   
  2.     width3px * 5 + 5px; // 20px  
  3.   
  4.     width: 3 * (5px + 5px); // 30px  
  5.   
  6.     width3px + (6px / 2) * 3; // 12px  
  7.  }  

相等操作符

相等操作符常用于条件语句,用来比较左右运算子是否相等,最终返回布尔值:

操作符 简介
== 相等
!= 不等

相等操作符适用于所有类型,下面来看两个示例。在第一个示例中,我们使用 == 来测试 $font 的类型,并输出对应的信息:

CSS Code复制内容到剪贴板
  1. @mixin font-fl($font){   
  2.     &:after {   
  3.         @if(type-of($font) == string) {   
  4.             content'My font is: #{$font}.';   
  5.         } @else {   
  6.             content'Sorry, the argument #{$font} is a #{type-of($font)}.';   
  7.         }   
  8.     }   
  9. }   
  10.   
  11. h2{   
  12.     @include font-fl(sans-serif);   
  13. }  

编译结果:

CSS Code复制内容到剪贴板
  1. h2:after {   
  2.     content'My font is: sans-serif.';   
  3. }  

在第二个示例中,定义了一个列表并检查该列表的长度。通过使用 % 操作符,我们可以计算每个元素的长度,然后根据特定条件对 color 进行赋值:

CSS Code复制内容到剪贴板
  1. $list: "tomato""lime""lightblue";   
  2.   
  3. @mixin fg-color($property) {   
  4.     @each $item in $list {   
  5.         $color-length: str-length($item);   
  6.         @if( $color-length % 2 != 0 ) {   
  7.             #{$property}: unquote($item);   
  8.         }   
  9.     }   
  10. }   
  11.   
  12. h2 {   
  13.     @include fg-color(color);   
  14. }  

编译结果:

CSS Code复制内容到剪贴板
  1. h2 {   
  2.     color: lightblue;   
  3. }   
  4. 这里需要提醒的是,Sass 不支持严格相等操作符 ===,不过从下面的示例中你会发现,Sass 解析 == 的原则就是严格相等:   
  5.   
  6. // 在 javascript 中   
  7. ("5" == 5) // true   
  8.   
  9. ("5" === 5) // false   
  10.   
  11. // 在 Sass 中   
  12. ("5" == 5) // false   
  13.   
  14. (20px == 20) // true (Libsass 不支持)  

比较操作符

与相等操作符类似,比较操作符用来比较数值。在 Sass 中,支持以下比较操作符:

操作符 简介
> 大于
>= 大于或者等于
< 小于
<= 小于或者等于

下面是一个简单的示例:

CSS Code复制内容到剪贴板
  1. $padding50px;   
  2.   
  3. h2 {   
  4.     @if($padding <= 20px) {   
  5.         padding: $padding;   
  6.     } @else {   
  7.         padding: $padding / 2;   
  8.     }   
  9. }  

编译结果:

CSS Code复制内容到剪贴板
  1. h2 {   
  2.     padding25px;   
  3. }  

逻辑操作符

逻辑操作符常用于测试多个条件表达式,Sass 支持的逻辑操作符如下所示:

操作符 条件 简介
and x and y 与操作
or x or y 或操作
not not x 取反

下面通过一个示例来解释逻辑操作符的用法:定义一个 map,存储按钮的状态以及对应的颜色,然后创建一个条件语句,用来测试 map 内元素的多少。如果通过条件测试,那么就给 h2 添加 background-color 属性。代码如下所示:

CSS Code复制内容到剪贴板
  1. $list-map: (success: lightgreen, alert: tomato, info: lightblue);   
  2.   
  3. @mixin button-state($btn-state) {   
  4.     @if (length($list-map) > 2 or length($list-map) < 5) {   
  5.         background-color: map-get($list-map, $btn-state);   
  6.     }   
  7. }   
  8.   
  9. .btn {   
  10.     @include button-state(success);   
  11. }  

编译结果:

CSS Code复制内容到剪贴板
  1. .btn {   
  2.     background-color: lightgreen;   
  3. }  

如你所见,因为 map 的元素数量为 3,符合 length($list-map) > 2 – length($list-map) < 5 的条件,所以返回的结果是 true。

请注意以下两个条件的差异:

CSS Code复制内容到剪贴板
  1. @if (length($list-map) > 2 or not (length($list-map) == 3)) {...}    
  2. // true   
  3.   
  4. @if (length($list-map) > 2 and not (length($list-map) == 3)) {...}    
  5. // false  

字符串操作符

在第一节我们就讲过,+ 可以用来拼接字符串。下面是一个 + 拼接字符串的规则:

如果字符串被引号包裹,那么它拼接任何字符串的结果也会被引号包裹
如果字符串没有被引号包裹,那么它拼接任何字符串的结果也不会被引号包裹
下面是一个实际示例:

CSS Code复制内容到剪贴板
  1. @mixin string-concat {   
  2.     &:after {   
  3.         content"My favorite language is " + Sass;   
  4.         fontArial + " sans-serif";   
  5.     }   
  6. }   
  7.   
  8. h2 {   
  9.     @include string-concat;   
  10. }  

编译结果:

CSS Code复制内容到剪贴板
  1. h2:after {   
  2.     content"My favorite language is Sass";   
  3.     fontArial sans-serif;   
  4. }  

此外,我们可以使用差值语法动态改变字符串,如果插值的结果为 null,那么该值不会被输出,下面是一个示例:

CSS Code复制内容到剪贴板
  1. @mixin string-concat ($language) {   
  2.     &:after {   
  3.         content"My favorite language is #{$language}";   
  4.   
  5.         // second way without using interpolation   
  6.         //content"My favorite language is " + $language;   
  7.     }   
  8. }   
  9.   
  10. h2 {   
  11.     @include string-concat(Sass);   
  12. }  

编译结果:

CSS Code复制内容到剪贴板
  1. h2:after {   
  2.     content"My favorite language is Sass";   
  3. }  

颜色运算

在上面的第二节中,我们分析了算术操作符,在 Sass 中一个有趣的事情就是,我们可以使用算术运算符操作颜色。请看一个实例:

CSS Code复制内容到剪贴板
  1. h2 {   
  2.     color#468499 + #204479;   
  3. }  

编译结果:

CSS Code复制内容到剪贴板
  1. h2 {   
  2.     color#66c8ff;   
  3. }  

那么,其中的解析原则是什么呢?首先我们需要记住,十六进制颜色值是由红绿蓝三种值组合而成,然后在执行相加时,每两个十六进制数值分组相加:46+20=66 (红色), 84+44=c8 (绿色), 和 99+79=ff (蓝色)。

下面是我们的最后一个示例,和上面示例的差别在于它使用了 rgba():

CSS Code复制内容到剪贴板
  1. h2 {   
  2.     color: rgba(70, 132, 153, 1) + rgba(32, 68, 121, 1);   
  3.   
  4.     color: rgba(70, 132, 153, .9) + rgba(32, 68, 121, .7);   
  5.     // 报错,透明通道的值必须一致   
  6. }  

使用算术操作符处理 rgba() 和 hsla() 时,必须让透明通道的值保持一致。

更多精彩内容其他人还在看

CSS配合JavaScript做酷的动态页面效果

  利用CSS配合JavaScript的可以做很多更酷的动态页面效果,在本教程的最后给大家简单介绍一下CSS配合JS的应用。首先,要搞清楚事件和动作的概念。在客户端脚本中,JavaScript 通过对事件进行响应来获得与用户的交互。例如,当用户单击一个按钮或者在某段文字上移动鼠标
收藏 0 赞 0 分享

WEB标准,Web前端开发工程师必备技术列表

  想要打造并拥有一流的Web产品开发团队,在团队成员基础能力上一定要下功夫。对于Web前端产品开发来说,仅仅掌握Web1.0时代简单的"网页套接"是完全不够的。我结合自己的团队配备,特此罗列了Web前端产品工程师所涉及的技能列表如下:   通过许多实际项目,
收藏 0 赞 0 分享

用CSS制作Alpha滤镜测试板

alpha滤镜给制作网页特效提供了较大的创作空间,但由于它控制参数较多,在实际应用时,为了确定一组合适的参数值,不得不反复调整修改,在编辑窗口和预览窗口来回倒腾,甚是麻烦,本文介绍了一种简单的方法。制作一个“Alpha滤镜参数测试板”,在测试板上输入参数
收藏 0 赞 0 分享

非常流行的所谓的气泡窗口

普通的Alt无法自定义风格,而Sweet Titles通过JS脚本与CSS的集合.自定义了这种伪Alt风格. 前一段时间非常流行的,就所谓的气泡窗口(鼠标移到链接处出现的). 我们这里实现的用的是Sweet Titles的插件.显示效果完全由CSS控制.. 先下载Sweet Ti
收藏 0 赞 0 分享

CSS教程:li和ul标签用法举例

LI代码的格式化: A).运用CSS格式化列表符: ul li{ list-style-type:none; } B).如果你想将列表符换成图像,则: ul li{ list-style-type:none; list-style-image: url(/blog/images/
收藏 0 赞 0 分享

CSS教程:CSS中的定位(position)

  使用CSS来定位页面内层的位置,一直是比较难以掌握的事情,很多时候,往往被绝对定位的元素,总是以浏览器的左上角为坐标原点,此时,如果浏览器的大小改变,被定义的层就会偏离设计想要的位置,让人很挠头。   其实,要想控制好层的绝对定位,只要理解CSS中关于定位
收藏 0 赞 0 分享

CSS教程:盒模型(BOX Model)

  如果想熟练掌握DIV和CSS的布局方法,首先要对盒模型有足够的了解。每个HTML元素都可以看作一个装了东西的盒子,盒子里面的内容到盒子的边框之间的距离即填充(padding),盒子本身有边框(border),而盒子边框外和其他盒子之间,还有边界(margin),如图1所示。
收藏 0 赞 0 分享

无延迟翻滚的图形与CSS混合风格按钮

  在一个具有图形背景的按钮中添加CSS风格的文本,这种建立按钮的方法结合了具有CSS翻滚(CSS rollover)标记的开发速度和效率,从而有效地提高按钮外表图像的三维效果。   相比于常规的图形按钮,这些图形/CSS混合按钮可易于建立和载入,因为你只需要为空白按钮外面
收藏 0 赞 0 分享

css里expression实现界面对象的批量控制

用过css样式我们就知道, 可以定义一批对象的class属性来指定同一个样式来统一界面. 但如何统一同类型的对象的事件? 比如:界面有无数个 <img src="**.jpg"> 如何实现鼠标经过此图片, 图片的src变成是**_over.jpg?
收藏 0 赞 0 分享

CSS教程:水平对齐(text-align)

  水平对齐(text-align),用以设定元素内文本的水平对齐方式。   1.语法   text-align具体参数如下: 语法:text-align:left|right|center|justify 说明:设定元素内文本的水平对齐方式。 参数:left:左
收藏 0 赞 0 分享
查看更多