Scss入門篇

慕課網(wǎng)學(xué)習(xí)筆記

什么是 CSS 預(yù)處理器憋槐?

CSS 預(yù)處理器定義了一種新的語言秕衙,其基本思想是吝沫,用一種專門的編程語言爬坑,為 CSS 增加了一些編程的特性纠屋,將 CSS 作為目標(biāo)生成文件,然后開發(fā)者就只要使用這種語言進(jìn)行編碼工作盾计。
通俗的說售担,“CSS 預(yù)處理器用一種專門的編程語言,進(jìn)行 Web 頁面樣式設(shè)計(jì)署辉,然后再編譯成正常的 CSS 文件族铆,以供項(xiàng)目使用。CSS 預(yù)處理器為 CSS 增加一些編程的特性哭尝,無需考慮瀏覽器的兼容性問題”哥攘,例如你可以在 CSS 中使用變量、簡單的邏輯程序材鹦、函數(shù)(如右側(cè)代碼編輯器中就使用了變量$color)等等在編程語言中的一些基本特性逝淹,可以讓你的 CSS 更加簡潔、適應(yīng)性更強(qiáng)桶唐、可讀性更佳创橄,更易于代碼的維護(hù)等諸多好處。


什么是Sass

Sass 是一門高于 CSS 的元語言莽红,它能用來清晰地、結(jié)構(gòu)化地描述文件樣式,有著比普通 CSS 更加強(qiáng)大的功能安吁。
Sass 能夠提供更簡潔醉蚁、更優(yōu)雅的語法,同時提供多種功能來創(chuàng)建可維護(hù)和管理的樣式表鬼店。


Sass 和 SCSS 有什么區(qū)別网棍?

Sass 和 SCSS 其實(shí)是同一種東西,我們平時都稱之為 Sass妇智,兩者之間不同之處有以下兩點(diǎn):
1.文件擴(kuò)展名不同滥玷,Sass 是以“.sass”后綴為擴(kuò)展名,而 SCSS 是以“.scss”后綴為擴(kuò)展名
2.語法書寫方式不同巍棱,Sass 是以嚴(yán)格的縮進(jìn)式語法規(guī)則來書寫惑畴,不帶大括號({})和分號(;),而 SCSS 的語法書寫和我們的 CSS 語法書寫方式非常類似航徙。


SCSS 和純 CSS 寫法差很多嗎如贷?

SCSS 和 CSS 寫法無差別:
SCSS 和 CSS 寫法無差別,這也是 Sass 后來越來越受大眾喜歡原因之一到踏。簡單點(diǎn)說杠袱,把你現(xiàn)有的“.css”文件直接修改成“.scss”即可使用。


Mac下安裝SASS

  • 首先你需要在終端中檢查有沒有安裝ruby窝稿,命令行如下:

    ruby -v
    

如果出現(xiàn)類似代碼楣富,就說明已經(jīng)安裝了。

  ruby 2.0.0p645 (2015-04-13 revision 50299) [universal.x86_64-darwin15]

從上面可以知道伴榔,我的ruby的版本纹蝴。

沒有安裝ruby,先安裝ruby

  • 接下來安裝sass

    sudo gem install sass
    
  • 安裝成功后,查看sass版本號

    sass -v
    
  • 當(dāng)sass版本滯后時潮梯,如何更新sass骗灶?

    gem update sass
    
  • 在常期使用的時候難免會碰到無法解決的問題,有時候可能需要卸載 Sass秉馏,然后再重新安裝 Sass耙旦。如何卸載?

    gem uninstall sass
    

Sass編譯

Sass 的編譯有多種方法:

  • 命令編譯
  • GUI工具編譯
  • 自動化編輯

命令編譯

命令編譯是指使用你電腦中的命令終端萝究,通過輸入 Sass 指令來編譯 Sass免都。這種編譯方式是最直接也是最簡單的一種方式。因?yàn)橹恍枰谀愕拿罱K端輸入:

sass <要編譯的Sass文件路徑>/style.scss:<要輸出CSS文件路徑>/style.css

這是對一個單文件進(jìn)行編譯帆竹,如果想對整個項(xiàng)目所有 Sass 文件編譯成 CSS 文件绕娘,可以這樣操作:

sass sass/:css/

缺點(diǎn)及解決方法:

在實(shí)際編譯過程中,你會發(fā)現(xiàn)上面的命令栽连,只能一次性編譯险领。每次個性保存“.scss”文件之后侨舆,都得重新執(zhí)行一次這樣的命令。如此操作太麻煩绢陌,其實(shí)還有一種方法挨下,就是在編譯 Sass 時,開啟“watch”功能脐湾,這樣只要你的代碼進(jìn)行任保修改臭笆,都能自動監(jiān)測到代碼的變化,并且給你直接編譯出來:

 sass --watch <要編譯的Sass文件路徑>/style.scss:<要輸出CSS文件路徑>/style.css

SASS基本特性


  • 聲明變量

sass變量包含三個部分:
1.聲明變量的符號‘$’
2.變量名稱
3.賦予變量的值
下面看個例子:

   $color:red;
   body {
      color:$color;
   }

編譯結(jié)果:

  body {
      color: red;
   }

如果值后面加上!default則表示默認(rèn)值秤掌。!default用于變量愁铺,含義是:如果這個變量被聲明賦值了,那就用它聲明的值闻鉴,否則就用這個默認(rèn)值茵乱。sass 的默認(rèn)變量一般是用來設(shè)置默認(rèn)值,然后根據(jù)需求來覆蓋的椒拗,覆蓋的方式也很簡單似将,只需要在默認(rèn)變量之前重新聲明下變量即可。下面看個例子:

  $color:red;
  $color:blue;
    body {
        color:$color;
  }

color聲明了兩次蚀苛,第二個color的值后面沒有加!default,那么前一個$color會被覆蓋在验。編譯結(jié)果為:

body {
  color: blue; 
}

加了!default,前一個$color不會被覆蓋,代碼如下

$color:red;
$color:blue !default;
body {
    color:$color;
}

編譯結(jié)果如下:

body {
  color: red;
 }

  • [Sass]局部變量和全局變量

先看個例子:

 //SCSS   $color: orange !default;//定義全局變量(在選擇器、函數(shù)堵未、
混合宏...的外面定義的變量為全局變量)
  
  $color:red !default;
  body {
    color:$color;
     $color:blue;
  div {
   color:$color;
      }
  }

編譯結(jié)果:

body {
    color: red;
 }
body div {
    color: blue; 
}

上面的示例演示可以得知腋舌,在元素內(nèi)部定義的變量不會影響其他元素。如此可以簡單的理解成渗蟹,全局變量就是定義在元素外面的變量块饺,如下代碼:第一個$color 就是一個全局變量,而定義在元素內(nèi)部的變量雌芽,是一個局部變量授艰。
當(dāng)在局部范圍(選擇器內(nèi)、函數(shù)內(nèi)世落、混合宏內(nèi)...)聲明一個已經(jīng)存在于全局范圍內(nèi)的變量時淮腾,局部變量就成為了全局變量的影子√爰眩基本上谷朝,局部變量只會在局部范圍內(nèi)覆蓋全局變量。

<strong>什么時候聲明變量武花?</strong>

我的建議圆凰,創(chuàng)建變量只適用于感覺確有必要的情況下。不要為了某些駭客行為而聲明新變量体箕,這絲毫沒有作用专钉。只有滿足所有下述標(biāo)準(zhǔn)時方可創(chuàng)建新變量:

1.該值至少重復(fù)出現(xiàn)了兩次挑童;
2.該值至少可能會被更新一次;
3.該值所有的表現(xiàn)都與變量有關(guān)(非巧合)跃须。
基本上炮沐,沒有理由聲明一個永遠(yuǎn)不需要更新或者只在單一地方使用變量。


  • [SASS]嵌套

1.[Sass]嵌套-選擇器嵌套

nav {
   a {
      color: red;
      header & {
      color:green;
      }
    }  
 }

編譯結(jié)果:

nav a {
  color:red;
}
header nav a {
  color:green;
}

2.[Sass]嵌套-屬性嵌套

Sass 中還提供屬性嵌套回怜,CSS 有一些屬性前綴相同,只是后綴不一樣换薄,比如:border-top/border-right玉雾,與這個類似的還有 margin、padding轻要、font 等屬性复旬。假設(shè)你的樣式中用到了:

 .box {
     font: {
     size: 12px;
     weight: bold;
    }  
}

編譯結(jié)果:

.box {
  font-size: 12px;
  font-weight: bold; 
}

3.[Sass]嵌套-偽類嵌套

其實(shí)偽類嵌套和屬性嵌套非常類似,只不過他需要借助&符號一起配合使用冲泥。

.box{
  &:before {
  content:"偽元素嵌套";
  }
}

編譯結(jié)果:

.box:before {
   content: "偽元素嵌套"; 
}

  • [Sass]混合宏-聲明混合宏

如果你的整個網(wǎng)站中有幾處小樣式類似驹碍,比如顏色,字體等凡恍,在 Sass 可以使用變量來統(tǒng)一處理志秃,那么這種選擇還是不錯的。但當(dāng)你的樣式變得越來越復(fù)雜嚼酝,需要重復(fù)使用大段的樣式時浮还,使用變量就無法達(dá)到我們目了。這個時候 Sass 中的混合宏就會變得非常有意義闽巩。

1钧舌、聲明混合宏

<strong>不帶參數(shù)混合宏:
在 Sass 中,使用“@mixin”來聲明一個混合宏</strong>

@mixin border-radius{
    -webkit-border-radius: 5px;
    border-radius: 5px;
}

其中 @mixin 是用來聲明混合宏的關(guān)鍵詞涎跨,有點(diǎn)類似 CSS 中的 @media洼冻、@font-face 一樣。border-radius 是混合宏的名稱隅很。大括號里面是復(fù)用的樣式代碼撞牢。

<strong>帶參數(shù)混合宏:</strong>
除了聲明一個不帶參數(shù)的混合宏之外,還可以在定義混合宏時帶有參數(shù)外构,如:

@mixin border-radius($radius:5px){
    -webkit-border-radius: $radius;
    border-radius: $radius;
}

<strong>復(fù)雜的混合宏:</strong>
Sass 中的混合宏還提供更為復(fù)雜的普泡,你可以在大括號里面寫上帶有邏輯關(guān)系,幫助更好的做你想做的事情,如:

@mixin box-shadow($shadow...) {
    @if length($shadow) >= 1 {
    @include prefixer(box-shadow, $shadow);
  } @else{
    $shadow:0 0 4px rgba(0,0,0,.3);
    @include prefixer(box-shadow, $shadow);
  }
}

這個 box-shadow 的混合宏审编,帶有多個參數(shù)撼班,這個時候可以使用“ … ”來替代。簡單的解釋一下垒酬,當(dāng) $shadow 的參數(shù)數(shù)量值大于或等于“ 1 ”時砰嘁,表示有多個陰影值件炉,反之調(diào)用默認(rèn)的參數(shù)值“ 0 0 4px rgba(0,0,0,.3) ”。


  • [Sass]混合宏-調(diào)用混合宏

在 Sass 中通過 @mixin 關(guān)鍵詞聲明了一個混合宏矮湘,那么在實(shí)際調(diào)用中斟冕,其匹配了一個關(guān)鍵詞“@include”來調(diào)用聲明好的混合宏。例如在你的樣式中定義了一個圓角的混合宏“border-radius”:

@mixin border-radius{
  -webkit-border-radius: 3px;
  border-radius: 3px;
}

調(diào)用宏

button {
  @include border-radius;

}

編譯結(jié)果:

button {
  -webkit-border-radius: 3px;
  border-radius: 3px;
}

  • [Sass]混合宏的參數(shù)--傳一個不帶值的參數(shù)

在 Sass 的混合宏中缅阳,還可以給混合宏的參數(shù)傳一個默認(rèn)值磕蛇,例如:

  @mixin border-radius($radius:3px){
    -webkit-border-radius: $radius;
    border-radius: $radius;
  }

在混合宏“border-radius”傳了一個參數(shù)“$radius”,而且給這個參數(shù)賦予了一個默認(rèn)值“3px”十办。
在調(diào)用類似這樣的混合宏時秀撇,會多有一個機(jī)會,假設(shè)你的頁面中的圓角很多地方都是“3px”的圓角向族,那么這個時候只需要調(diào)用默認(rèn)的混合宏“border-radius”:

.btn {
    @include border-radius;
 }

編譯出來的 CSS:

.btn {
  -webkit-border-radius: 3px;
  border-radius: 3px;
}

但有的時候呵燕,頁面中有些元素的圓角值不一樣,那么可以隨機(jī)給混合宏傳值件相,如:

 .box {
    @include border-radius(50%);
}

編譯出來的 CSS:

.box {
  -webkit-border-radius: 50%;
  border-radius: 50%;
}

  • [Sass]混合宏的參數(shù)--傳多個參數(shù)

Sass 混合宏除了能傳一個參數(shù)之外再扭,還可以傳多個參數(shù),如:

  @mixin center($width,$height){
    width: $width;
    height: $height;
    position: absolute;
    top: 50%;
    left: 50%;
    margin-top: -($height) / 2;
    margin-left: -($width) / 2;
  }

在混合宏“center”就傳了多個參數(shù)夜矗。在實(shí)際調(diào)用和其調(diào)用其他混合宏是一樣的:

  .box-center {
    @include center(500px,300px);
  }

編譯出來 CSS:

  .box-center {
    width: 500px;
    height: 300px;
    position: absolute;
    top: 50%;
    left: 50%;
    margin-top: -150px;
    margin-left: -250px;
  }

有一個特別的參數(shù)“…”泛范。當(dāng)混合宏傳的參數(shù)過多之時,可以使用參數(shù)來替代侯养,如:

@mixin box-shadow($shadows...){
  @if length($shadows) >= 1 {
  -webkit-box-shadow: $shadows;
  box-shadow: $shadows;
} @else {
  $shadows: 0 0 2px rgba(#000,.25);
  -webkit-box-shadow: $shadow;
  box-shadow: $shadow;
  }
}

在實(shí)際調(diào)用中:

.box {
@include box-shadow(0 0 1px rgba(#000,.5),0 0 2px   rgba(#000,.2));
}

編譯出來的CSS:

.box {
  -webkit-box-shadow: 0 0 1px rgba(0, 0, 0, 0.5), 0 0 2px rgba(0, 0,     0, 0.2);
  box-shadow: 0 0 1px rgba(0, 0, 0, 0.5), 0 0 2px rgba(0, 0, 0, 0.2);
}

  • [Sass]擴(kuò)展/繼承

在 Sass 中也具有繼承一說敦跌,也是繼承類中的樣式代碼塊。在 Sass 中是通過關(guān)鍵詞 “@extend”來繼承已存在的類樣式塊逛揩,從而實(shí)現(xiàn)代碼的繼承柠傍。如下所示:

//SCSS
.btn {
  border: 1px solid #ccc;
  padding: 6px 10px;
  font-size: 14px;
}
.btn-primary {
  background-color: #f36;
  color: #fff;
  @extend .btn;
}
.btn-second {
  background-color: orange;
  color: #fff;
  @extend .btn;
}

編譯出來之后:

//CSS
.btn, .btn-primary, .btn-second {
  border: 1px solid #ccc;
  padding: 6px 10px;
  font-size: 14px;
}
 .btn-primary {
   background-color: #f36;
   color: #fff;
}
.btn-second {
  background-clor: orange;
  color: #fff;
}

從示例代碼可以看出,在 Sass 中的繼承辩稽,可以繼承類樣式塊中所有樣式代碼惧笛,而且編譯出來的 CSS 會將選擇器合并在一起,形成組合選擇器:

.btn, .btn-primary, .btn-second {
   border: 1px solid #ccc;
  padding: 6px 10px;
  font-size: 14px;
}

  • [Sass]占位符 %placeholder

Sass 中的占位符 %placeholder 功能是一個很強(qiáng)大逞泄,很實(shí)用的一個功能患整,這也是我非常喜歡的功能。他可以取代以前 CSS 中的基類造成的代碼冗余的情形喷众。因?yàn)?%placeholder 聲明的代碼各谚,如果不被 @extend 調(diào)用的話,不會產(chǎn)生任何代碼到千。來看一個演示:

%mt5 {
  margin-top: 5px;
}
%pt5{
  padding-top: 5px;
}

這段代碼沒有被 @extend 調(diào)用昌渤,他并沒有產(chǎn)生任何代碼塊,只是靜靜的躺在你的某個 SCSS 文件中憔四。只有通過 @extend 調(diào)用才會產(chǎn)生代碼:

//SCSS
%mt5 {
  margin-top: 5px;
}
%pt5{
  padding-top: 5px;
}
.btn {
  @extend %mt5;
  @extend %pt5;
}
.block {
   @extend %mt5;
  span {
    @extend %pt5;
  }
}

編譯出來的CSS:

//CSS
.btn, .block {
  margin-top: 5px;
}

.btn, .block span {
  padding-top: 5px;
}

從編譯出來的 CSS 代碼可以看出膀息,通過 @extend 調(diào)用的占位符般眉,編譯出來的代碼會將相同的代碼合并在一起。這也是我們希望看到的效果潜支,也讓你的代碼變得更為干凈甸赃。

sass.jpg

  • [Sass]插值#{}

使用 CSS 預(yù)處理器語言的一個主要原因是想使用 Sass 獲得一個更好的結(jié)構(gòu)體系。比如說你想寫更干凈的冗酿、高效的和面向?qū)ο蟮?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 插值中一個簡單的實(shí)例鸠窗。當(dāng)你想設(shè)置屬性值的時候你可以使用字符串插入進(jìn)來。另一個有用的用法是構(gòu)建一個選擇器胯究。可以這樣使用:

@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; }

個人總結(jié):插值可以能用在屬性名中躁绸,即:的左邊裕循。還可以用在@extend 中。例如:

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

上面的 Sass 代碼是可以運(yùn)行的净刮,因?yàn)樗o了我們力量剥哑,可以動態(tài)的插入 .class 和 %placeholder。當(dāng)然他們不能接受像 mixin 這樣的參數(shù)淹父,上面的代碼編譯出來的 CSS:

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

  • [Sass]注釋

在 Sass 中注釋有兩種方式:
1株婴、類似 CSS 的注釋方式,使用 ”/* ”開頭暑认,結(jié)屬使用 ”*/ ”
2困介、類似 JavaScript 的注釋方式,使用“//”

兩者區(qū)別蘸际,前者會在編譯出來的 CSS 顯示座哩,后者在編譯出來的 CSS 中不會顯示,來看一個示例:

//定義一個占位符
%mt5 {
  margin-top: 5px;
}
/*調(diào)用一個占位符*/
.box {
 @extend %mt5;
}

編譯出來的CSS

.box {
  margin-top: 5px;
}
/*調(diào)用一個占位符*/

  • [Sass]數(shù)據(jù)類型

Sass 和 JavaScript 語言類似粮彤,也具有自己的數(shù)據(jù)類型根穷,在 Sass 中包含以下幾種數(shù)據(jù)類型:

  • 數(shù)字: 如,1导坟、 2屿良、 13、 10px惫周;
  • 字符串:有引號字符串或無引號字符串尘惧,如,"foo"闯两、 'bar'褥伴、 baz谅将;
  • 顏色:如,blue重慢、 #04a3f9饥臂、 rgba(255,0,0,0.5);
  • 布爾型:如似踱,true隅熙、 false;
  • 空值:如核芽,null囚戚;
  • 值列表:用空格或者逗號分開,如轧简,1.5em 1em 0 2em 驰坊、 Helvetica, Arial, sans-serif。

SassScript 也支持其他 CSS 屬性值(property value)哮独,比如 Unicode 范圍拳芙,或 !important 聲明。然而皮璧,Sass 不會特殊對待這些屬性值舟扎,一律視為無引號字符串 (unquoted strings)。


  • [Sass]字符串

SassScript 支持 CSS 的兩種字符串類型:

  • 有引號字符串 (quoted strings)悴务,如 "Lucida Grande" 睹限、'http://sass-lang.com'
  • 無引號字符串 (unquoted strings)讯檐,如 sans-serifbold羡疗。

在編譯 CSS 文件時不會改變其類型。只有一種情況例外别洪,使用 #{ }插值語句 (interpolation) 時顺囊,有引號字符串將被編譯為無引號字符串,這樣方便了在混合指令 (mixin) 中引用選擇器名蕉拢。

@mixin firefox-message($selector) {
  body.firefox #{$selector}:before {
    content: "Hi, Firefox users!";
  }
}
@include firefox-message(".header");

編譯為:

body.firefox .header:before {
  content: "Hi, Firefox users!";
 }

  • [Sass]值列表

所謂值列表 (lists) 是指 Sass 如何處理 CSS 中:

margin: 10px 15px 0 0

或者:

font-face: Helvetica, Arial, sans-serif

像上面這樣通過空格或者逗號分隔的一系列的值特碳。
事實(shí)上,獨(dú)立的值也被視為值列表——只包含一個值的值列表晕换。
Sass列表函數(shù)(Sass list functions)賦予了值列表更多功能(Sass進(jìn)級會有講解):

1.nth函數(shù)(nth function) 可以直接訪問值列表中的某一項(xiàng)午乓;
2.join函數(shù)(join function) 可以將多個值列表連結(jié)在一起;
3.append函數(shù)(append function) 可以在值列表中添加值闸准;
4.@each規(guī)則(@each rule) 則能夠給值列表中的每個項(xiàng)目添加樣式益愈。

值列表中可以再包含值列表,比如 1px 2px, 5px 6px 是包含 1px 2px 與 5px 6px 兩個值列表的值列表。如果內(nèi)外兩層值列表使用相同的分隔方式蒸其,要用圓括號包裹內(nèi)層敏释,所以也可以寫成 (1px 2px) (5px 6px)。當(dāng)值列表被編譯為 CSS 時摸袁,Sass 不會添加任何圓括號钥顽,因?yàn)?CSS 不允許這樣做。(1px 2px) (5px 6px)與 1px 2px 5px 6px 在編譯后的 CSS 文件中是一樣的靠汁,但是它們在 Sass 文件中卻有不同的意義蜂大,前者是包含兩個值列表的值列表,而后者是包含四個值的值列表蝶怔。

可以用 () 表示空的列表奶浦,這樣不可以直接編譯成 CSS,比如編譯 font-family: ()時踢星,Sass 將會報(bào)錯澳叉。如果值列表中包含空的值列表或空值,編譯時將清除空值沐悦,比如 1px 2px () 3px 或 1px 2px null 3px耳高。


[Sass運(yùn)算]加法

加法運(yùn)算是 Sass 中運(yùn)算中的一種,在變量或?qū)傩灾卸伎梢宰黾臃ㄟ\(yùn)算所踊。如:

.box {
  width: 20px + 8in;
}

編譯出來的 CSS:

.box {
  width: 788px;
}

但對于攜帶不同類型的單位時,在 Sass 中計(jì)算會報(bào)錯概荷,如下例所示:

.box {
    width: 20px + 1em;
}

編譯的時候秕岛,編譯器會報(bào)錯:“Incompatible units: 'em' and ‘px'.”


[Sass運(yùn)算]減法

Sass 的減法運(yùn)算和加法運(yùn)算類似,我們通過一個簡單的示例來做闡述:

$full-width: 960px;
$sidebar-width: 200px;
.content {
  width: $full-width -  $sidebar-width;
}

編譯出來的 CSS 如下:

.content {
      width: 760px;
}

同樣的误证,運(yùn)算時碰到不同類型的單位時继薛,編譯也會報(bào)錯。


[Sass運(yùn)算]乘法

Sass 中的乘法運(yùn)算和前面介紹的加法與減法運(yùn)算還略有不同愈捅。雖然他也能夠支持多種單位(比如 em ,px , %)遏考,但當(dāng)一個單位同時聲明兩個值時會有問題。比如下面的示例:

.box {
      width:10px * 2px;  
}

編譯的時候報(bào)“20px*px isn't a valid CSS value.”錯誤信息蓝谨。

如果進(jìn)行乘法運(yùn)算時灌具,兩個值單位相同時,只需要為一個數(shù)值提供單位即可譬巫。上面的示例可以修改成:

box {
  width: 10px * 2;
}

編譯出來的 CSS:

.box {
  width: 20px;
}

Sass 的乘法運(yùn)算和加法咖楣、減法運(yùn)算一樣,在運(yùn)算中有不同類型的單位時芦昔,也將會報(bào)錯诱贿。


[Sass運(yùn)算]除法

Sass 的乘法運(yùn)算規(guī)則也適用于除法運(yùn)算。不過除法運(yùn)算還有一個特殊之處。眾所周知“/”符號在 CSS 中已做為一種符號使用珠十。因此在 Sass 中做除法運(yùn)算時料扰,直接使用“/”符號做為除號時,將不會生效焙蹭,編譯時既得不到我們需要的效果晒杈,也不會報(bào)錯。一起先來看一個簡單的示例:

.box {
  width: 100px / 2;  
}

編譯出來的 CSS 如下:

.box {
  width: 100px / 2;
}

這樣的結(jié)果對于大家來說沒有任何意義壳嚎。要修正這個問題桐智,只需要給運(yùn)算的外面添加一個小括號( )即可:

.box {
  width: (100px / 2);  
}

編譯出來的 CSS 如下:

.box {
  width: 50px;
}

”/ ”符號被當(dāng)作除法運(yùn)算符時有以下幾種情況:
? 如果數(shù)值或它的任意部分是存儲在一個變量中或是函數(shù)的返回值。
? 如果數(shù)值被圓括號包圍烟馅。
? 如果數(shù)值是另一個數(shù)學(xué)表達(dá)式的一部分说庭。

Sass 的除法運(yùn)算還有一個情況。我們先回憶一下郑趁,在乘法運(yùn)算時刊驴,如果兩個值帶有相同單位時,做乘法運(yùn)算時寡润,出來的結(jié)果并不是我們需要的結(jié)果捆憎。但在除法運(yùn)算時,如果兩個值帶有相同的單位值時梭纹,除法運(yùn)算之后會得到一個不帶單位的數(shù)值躲惰。


[Sass運(yùn)算]數(shù)字運(yùn)算

在 Sass 運(yùn)算中數(shù)字運(yùn)算是較為常見的,數(shù)字運(yùn)算包括前面介紹的:加法变抽、減法础拨、乘法和除法等運(yùn)算。而且還可以通過括號來修改他們的運(yùn)算先后順序绍载。和我們數(shù)學(xué)運(yùn)算是一樣的诡宗,一起來看個示例。

.box {
    width: ((220px + 720px) - 11 * 20 ) / 12 ;  
}

編譯出來的 CSS:

.box {
  width: 60px;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末击儡,一起剝皮案震驚了整個濱河市塔沃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌阳谍,老刑警劉巖蛀柴,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異矫夯,居然都是意外死亡名扛,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門茧痒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肮韧,“玉大人,你說我怎么就攤上這事∨螅” “怎么了超燃?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拘领。 經(jīng)常有香客問我意乓,道長,這世上最難降的妖魔是什么约素? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任届良,我火速辦了婚禮,結(jié)果婚禮上圣猎,老公的妹妹穿的比我還像新娘士葫。我一直安慰自己,他們只是感情好送悔,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布慢显。 她就那樣靜靜地躺著,像睡著了一般欠啤。 火紅的嫁衣襯著肌膚如雪荚藻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天洁段,我揣著相機(jī)與錄音应狱,去河邊找鬼。 笑死祠丝,一個胖子當(dāng)著我的面吹牛疾呻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播纽疟,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼憾赁!你這毒婦竟也來了污朽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤龙考,失蹤者是張志新(化名)和其女友劉穎蟆肆,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晦款,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡炎功,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了缓溅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛇损。...
    茶點(diǎn)故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出淤齐,到底是詐尸還是另有隱情股囊,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布更啄,位于F島的核電站稚疹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏祭务。R本人自食惡果不足惜内狗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望义锥。 院中可真熱鬧柳沙,春花似錦、人聲如沸缨该。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贰拿。三九已至蛤袒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間膨更,已是汗流浹背妙真。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留荚守,地道東北人珍德。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像矗漾,于是被迫代替她去往敵國和親锈候。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 一敞贡、Sass的語法格式及編譯調(diào)試 1. Sass和scss的區(qū)別 本質(zhì)上來說是同一個東西泵琳,只是語法上有細(xì)微的差異:...
    沒汁帥閱讀 1,344評論 0 5
  • 前言 什么是CSS預(yù)處理器 定義:CSS預(yù)處理器定義了一種新的語言,其基本思想是誊役,用一種專門的編程語言获列,為CSS增...
    SA_Arthur閱讀 3,128評論 0 18
  • 聲明變量 定義變量的語法: 在有些編程語言中(如,JavaScript)聲明變量都是使用關(guān)鍵詞“var”開頭蛔垢,但是...
    Junting閱讀 1,471評論 0 6
  • 1击孩、SCSS 是 Sass 的新語法格式,從外形上來判斷他和 CSS 長得幾乎是一模一樣鹏漆,代碼都包裹在一對大括號里...
    夜幕小草閱讀 1,716評論 2 10
  • 基礎(chǔ) 聲明變量 普通變量 默認(rèn)變量 變量覆蓋:只需要在默認(rèn)變量之前重新聲明下變量即可 變量的調(diào)用 局部變量和全局變...
    Jill1231閱讀 1,284評論 0 1