• CSS之运算,Sass 之运算(加、减、乘、除)


    1. 加减法

    加减法不是重点,重点是在SassScript中用到的两种单位之间的转换;
    绝对单位:px, pt, pc, in, mm, cm...绝对单位都能运算;
    相对单位:ex, em, rem...相对当前字体的都不能运算;

    1.1 编译报错的栗子


    SCSS:

     1 $plus1: 100px + 20ex; //不能换算的编译都会报错;
     2 $plus2: 100px + 20em;
     3 $plus3: 100px + 20rem;
     4 .plus{
     5      $plus1 + 10px; //在变量或属性中均可做加减法运算;
     6 }
     7 编译报错:
     8 Incompatible units: 'ex' and 'px'.
     9 Incompatible units: 'em' and 'px'.
    10 Incompatible units: 'rem' and 'px'.

    1.2 正常编译的栗子


    SCSS:

     1 $minus1: 100px - 20; //第二个值可不带单位;
     2 $minus2: 100pt - 20px; //运算是从左到右,如第二个值的单位不同于第一个值的单位(pt),
     3 $minus3: 100px + 20cm; //将会对其进行转换(pt)后再运算;编译出来的值的单位也是(pt);
     4 $minus4: 100rem; //可以正常编译输出;
     5 $minus5: 100rem + 10em; //报错;--Incompatible units: 'em' and 'rem'.);
     6 .minus{
     7      $minus1;
     8     height: $minus1 + 30; //在属性还可以继续做运算;
     9     min- $minus2;
    10     min-height: $minus3;
    11     max- $minus4;
    12     max-height: $minus1 + $minus2;
    13 }
    
    //普遍情况下很少会搞两个单位在那加加减减,闲得蛋疼,反正我不会,在这只是举个栗子。

    被编译为:

    1 .minus {
    2    80px;
    3   height: 110px;
    4   min- 85pt;
    5   min-height: 855.90551px;
    6   max- 100rem;
    7   max-height: 193.33333px;
    8 }

    2. 乘法

    SassScript中的乘法运算和加减法运算还略有不同。虽然他也能够支持多种单位(比如 em ,px , %),但当一个单位同时声明两个值时会有问题。比如下面的示例:

    SCSS:
    1 .ride {  20px * 10px; }
     

    编译报错:

    1 20px*px isn't a valid CSS value.

    如果进行乘法运算时,两个值单位相同时,只需要为一个数值提供单位即可。改成:

    SCSS:
    1 .ride {  20px * 10; }
    
    
    编译输出:
    1 .ride {  200px; }
     

    在乘法运算中如有不同类型的单位时,也将会报错。

    SCSS:
    1 .ride {  20px * 10rem; }
     

    编译报错:

    1 200px*rem isn't a valid CSS value.

    2.1 结合#@for来个好玩的

    雪碧图一般都用compass@import "compass/utilities/sprites";来玩

    SCSS:

    1 $icon-list: down, up, file, hot;
    2 @for $c from 1 through length($icon-list){
    3   .icon-#{nth($icon-list,$c)}{
    4       background-position: 0 -30px * $c;
    5   }
    6 }

    被编译为:

     1 .icon-down {
     2   background-position: 0 -30px;
     3 }
     4 .icon-up {
     5   background-position: 0 -60px;
     6 }
     7 .icon-file {
     8   background-position: 0 -90px;
     9 }
    10 .icon-hot {
    11   background-position: 0 -120px;
    12 }

    3. 除法

    CSS 允许 / 出现在属性值里,作为分隔数字的一种方法。 既然 SassScript 是 CSS 属性语法的扩展, 他就必须支持这种语法,同时也允许 / 用在除法运算上。 也就是说,默认情况下,在 SassScript 里用 / 分隔的两个数字, 都会在 CSS 中原封不动的输出。

    SCSS:

     1 .main {
     2   font: 10px/8px;             // 纯 CSS,不是除法运算
     3   $ 100px;
     4    $width/2;            // 使用了变量,是除法运算
     5    round(1.5)/2;        // 使用了函数,是除法运算
     6   height: (500px/2);          // 使用了圆括号,是除法运算
     7   margin-left: 5px + 8px/2px; // 使用了加(+)号,是除法运算
     8 
     9   $font-size: 12px;
    10   $line-height: 30px;
    11   font: #{$font-size}/#{$line-height}; //纯CSS中使用变量和 /, 可以用 #{} 包住变量;
    12 }

    被编译为:

    1 .main {
    2   font: 10px/8px;
    3    50px;
    4    1;
    5   height: 250px;
    6   margin-left: 9px;
    7   font: 12px/30px;
    8 }

    4. 来个栗子试试——颜色运算

    所有算数运算都支持颜色值, 并且是分段运算的。 也就是说,红、绿、蓝各颜色分量会单独进行运算。例如:

    1 .main-col{ color: #106021 + #023212; }
    2 计算公式为 01 + 04 = 0502 + 05 = 0703 + 06 = 093 被编译为:
    4 
    5 .main-col { color: #129233; }

    算数运算也能将数字和颜色值一起运算,同样也是分段运算的。 例如:

    1 p { color: #010203 * 2; }
    2 计算公式为 01 * 2 = 0202 * 2 = 0403 * 2 = 063 被编译为:
    4 
    5 p { color: #020406; }

    IE 滤镜需要每个颜色都包含 alpha 层, 并且得用 #AABBCCDD 这样严格的格式。你可以轻松的利用 {Sass::Script::Functions#ie_hex_str ie_hex_str} 函数对其做转换。 例如:

     1 $translucent-red: rgba(255, 0, 0, 0.5);
     2 $green: #00ff00;
     3 div {
     4   filter: progid:DXImageTransform.Microsoft.gradient(
     5         enabled='false',
     6         startColorstr='#{ie-hex-str($green)}',
     7         endColorstr='#{ie-hex-str($translucent-red)}'
     8     );
     9 }
    10 被编译为:
    11 
    12 div {
    13   filter: progid:DXImageTransform.Microsoft.gradient(
    14     enabled='false',
    15     startColorstr=#FF00FF00,
    16     endColorstr=#80FF0000
    17     );
    18 }

    4. 最后一个栗子——字符运算

     1 + 运算符可以用来连接字符串:
     2 
     3 p { cursor: e + -resize; }
     4 被编译为:
     5 
     6 p { cursor: e-resize; }
     7 注意,如果有引号的字符串被添加了一个没有引号的字符串 (也就是,带引号的字符串在 + 符号左侧), 结果会是一个有引号的字符串。 同样的,如果一个没有引号的字符串被添加了一个有引号的字符串 (没有引号的字符串在 + 符号左侧), 结果将是一个没有引号的字符串。 例如:
     8 
     9 $c: "Hello" + " " + "Sass!";
    10 .box:before {
    11     content: " #{$c} ";
    12 }
    13 被编译为:
    14 
    15 .box:before {
    16   content: " Hello Sass! ";
    17 }
  • 相关阅读:
    字符编码及文件处理
    列表、元祖、字典及集合的内置方法
    数字类型、字符串及列表的内置方法
    流程控制(if while for)
    一些基本概念及数据类型
    编程语言的发展及变量
    python 入门基本知识
    叁拾贰(转)
    叁拾壹
    叁拾
  • 原文地址:https://www.cnblogs.com/ajaxlu/p/12009022.html
Copyright © 2020-2023  润新知