CSS 預處理器-Sass高級

上一篇學完了Sass基礎部分,這次要學習的是Sass的高級部分砖瞧。

條件語句


在Sass中也有條件判斷的語句息堂,用法為@if boolean@else,可以配合混合宏傳進來的參數(shù)來進行選擇輸出,在if的后面可以跟判斷語句荣堰,不需要括號床未。

@mixin blockOrHidden($boolean:true) {
  @if $boolean {
      display: block;
    }
  @else {
      display: none;
    }
}

p {
  @if 2 + 3 == 5 { border: 1px solid; }
  @if 10 < 5 { border: 2px dotted; }
}

循環(huán)語句


在sass中支持for循環(huán),while循環(huán)振坚,each循環(huán)薇搁。

for循環(huán)
for循環(huán)有兩種形式,分別為:
@for $var from <start> through <end>
@for $var from <start> to <end>
$i表示變量渡八,start表示起始值啃洋,end表示結束值,這兩個的區(qū)別是關鍵字through表示包括end這個數(shù)屎鳍,而to(包含頭不包含尾)則不包括end這個數(shù)宏娄。

/* i的值為1-3 */
@for $i from 1 through 3 {
  .item-#{$i} { width: 2em * $i; }
}

/* i的值為1-2 */
@for $i from 1 to 3 {
  .item-#{$i} { width: 2em * $i; }
}

while循環(huán)
while循環(huán)和if相似,后面可以跟判斷語句逮壁。

$i: 6;
@while $i > 0 {
 .item-#{$i} { 
    width: 2em * $i; 
  }
 $i: $i - 2;
}

each循環(huán)
在sass中也有each循環(huán)孵坚,語法如下@each $var in <list>
list是一個列表貌踏,也可以理解為數(shù)組十饥。

$list: adam john wynn mason kuroir;

@mixin author-images {
    @each $author in $list {
        .photo-#{$author} {
            ...
        }
    }
}

函數(shù)


sass提供一些函數(shù)功能,如下祖乳。

  • 字符串函數(shù)
  • 數(shù)字函數(shù)
  • 列表函數(shù)
  • 顏色函數(shù)
  • Introspection 函數(shù)
  • 三元函數(shù)等

字符串函數(shù)
字符串函數(shù)顧名思意是用來處理字符串的函數(shù)逗堵。Sass 的字符串函數(shù)主要包括兩個函數(shù):

  1. quote($string):給字符串添加引號。
  2. unquote($string):刪除字符串中的引號眷昆。
  3. To-upper-case():函數(shù)將字符串小寫字母轉換成大寫字母蜒秤。
  4. To-lower-case():函數(shù)將字符串大寫字母轉換成小寫字母。

quote用法

/* scss文件 */
.test1 {
    content: quote('Hello Sass!');}
.test2 {
    content: quote("Hello Sass!");}
.test3 {
    content: quote(ImWebDesigner);}
.test4 {
    content: quote(' ');}

/* -------css文件------- */
.test1 {
  content: "Hello Sass!";
}
.test2 {
  content: "Hello Sass!";
}
.test3 {
  content: "ImWebDesigner";
}
.test4 {
  content: " ";
}

使用 quote() 函數(shù)只能給字符串增加雙引號亚斋,而且字符串中間有單引號或者空格時作媚,需要用單引號或雙引號括起,否則編譯的時候將會報錯帅刊。

同時 quote() 碰到特殊符號纸泡,比如: !、?赖瞒、> 等女揭,除中折號 - 和 下劃線_ 都需要使用雙引號括起,否則編譯器在進行編譯的時候同樣會報錯栏饮。

unquote用法:

/* scss文件 */
.test1 {
      content: unquote('Hello Sass!');}
.test2 {
      content: unquote("'Hello Sass!");}
.test3 {
      content: unquote("I'm Web Designer");}
.test4 {
      content: unquote("'Hello Sass!'");}
.test5 {
      content: unquote('"Hello Sass!"');}
.test6 {
      content: unquote(Hello Sass);}

/* -------css文件------- */
.test1 {
  content: Hello Sass!;
}
.test2 {
  content: 'Hello Sass!;
}
.test3 {
  content: I'm Web Designer;
}
.test4 {
  content: 'Hello Sass!';
}
.test5 {
  content: "Hello Sass!";
}
.test6 {
  content: Hello Sass;
}

從測試的效果中可以看出吧兔,unquote( ) 函數(shù)只能刪除字符串最前和最后的引號(雙引號或單引號),而無法刪除字符串中間的引號袍嬉。如果字符沒有帶引號境蔼,返回的將是字符串本身灶平。

To-upper-case用法:

/* scss文件 */
.test {
  text: to-upper-case(aaaaa);
  text: to-upper-case(aA-aAAA-aaa);
}
/* -------css文件------- */
.test {
  text: AAAAA;
  text: AA-AAAA-AAA;
}

To-lower-case用法:

/* scss文件 */
.test {
  text: to-lower-case(BBBBB);
  text: to-lower-case(bB-bBBB-bbb);
}
/* -------css文件------- */
.test {
  text: bbbbb;
  text: bb-bbbb-bbb;
}

數(shù)字函數(shù)

  1. percentage($value):將一個不帶單位的數(shù)轉換成百分比值。
  2. round($value):將數(shù)值四舍五入箍土,轉換成一個最接近的整數(shù)逢享。
  3. ceil($value):向上取整數(shù)(進一法)。
  4. floor($value):向下去整數(shù)涮帘。
  5. abs($value):返回一個數(shù)的絕對值拼苍。
  6. min($numbers…):找出幾個數(shù)值之間的最小值。
  7. max($numbers…):找出幾個數(shù)值之間的最大值调缨。
  8. random(): 獲取隨機數(shù)疮鲫。

percentage()用法:

/* scss文件 */
.footer {
    margin: percentage(.5);
}

/* -------css文件------- */
.footer {
    margin: 50%;
}

round() 用法:

/* scss文件 */
.nav{
   width:round(11.2px);
}

/* -------css文件------- */
.nav {
  width: 11px;
}

ceil() 用法:

/* scss文件 */
.error {
      width: ceil(-10.6)+px;
}
.success {
      width: ceil(10.6)+px;
}

/* -------css文件------- */
.error {
  width: -10px;  // 進一法,因為-10比-10.6大
}

.success {
  width: 11px;
}

floor()向下取整數(shù)弦叶,和ceil()相反:

/* scss文件 */
.error {
      width: floor(-10.6)+px;
}
.success {
      width: floor(10.6)+px;
}

/* -------css文件------- */
.error {
  width: -11px;  // 向下與取整俊犯,-11比-10.6小
}

.success {
  width: 10px;
}

abs( ) 函數(shù)會返回一個數(shù)的絕對值。

/* scss文件 */
.footer {
   width:abs(-12.3px);
}


/* -------css文件------- */
.footer {
  width: 12.3px;
}

min() 用法:

/* scss文件 */
.error {
      width: min(1em,2em,6em);
}

/* -------css文件------- */
.error {
  width: 1em;
}

max()用法:

/* scss文件 */
.error {
      width: max(1em,2em,6em);
}

/* -------css文件------- */
.error {
  width: 6em;
}

random()用法:

/* scss文件 */
.error {
      width: random();
}

/* -------css文件------- */
.error {
  width: 0.22617;
}

sass@規(guī)則


@import

Sass 擴展了 CSS 的 @import 規(guī)則伤哺,讓它能夠引入 SCSS 和 Sass 文件燕侠。所有引入的 SCSS 和 Sass 文件都會被合并并輸出一個單一的 CSS 文件。另外立莉,被導入的文件中所定義的變量或 mixins 都可以在主文件中使用绢彤。

@import 根據(jù)文件名引入。默認情況下蜓耻,它會尋找 Sass 文件并直接引入茫舶,但是,在少數(shù)幾種情況下刹淌,它會被編譯成 CSS 的 @import 規(guī)則:

  1. 如果文件的擴展名是 .css饶氏。
  2. 如果文件名以 http:// 開頭。
  3. 如果文件名是 url()有勾。
  4. 如果 @import 包含了任何媒體查詢(media queries)。

注意:在同一個目錄不能同時存在帶下劃線和不帶下劃線的同名文件蔼卡。 例如喊崖, _colors.scss 不能與 colors.scss 并存。

@media
在 sass 中的 @media 指令和 CSS 的使用規(guī)則一樣的簡單雇逞,但它有另外一個功能荤懂,可以嵌套在 CSS 規(guī)則中,但在編譯時會跳出嵌套喝峦,重新整合屬性势誊。

/* scss文件 */
.sidebar {
    width: 300px;
    @media screen and (orientation: landscape) {
        width: 500px;
    }
}

/* -------css文件------- */
.sidebar {
    width: 300px;
}
/* 跳出嵌套 */
@media screen and (orientation: landscape) {
    .sidebar {
        width: 500px;
    }
}

@at-root
@at-root 從字面上解釋就是跳出根元素呜达。當你選擇器嵌套多層之后谣蠢,想讓某個選擇器跳出,此時就可以使用 @at-root。

/* scss文件 */
.a {
    .b {
        .c {
            @at-root .d {
                color: green;
            }
        }
    }
}

/* -------css文件------- */
.d {
  color: green;
}
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末眉踱,一起剝皮案震驚了整個濱河市挤忙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谈喳,老刑警劉巖册烈,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異婿禽,居然都是意外死亡赏僧,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門扭倾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來淀零,“玉大人,你說我怎么就攤上這事膛壹〖葜校” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵模聋,是天一觀的道長肩民。 經(jīng)常有香客問我,道長链方,這世上最難降的妖魔是什么持痰? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮侄柔,結果婚禮上共啃,老公的妹妹穿的比我還像新娘。我一直安慰自己暂题,他們只是感情好移剪,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著薪者,像睡著了一般纵苛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上言津,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天攻人,我揣著相機與錄音,去河邊找鬼悬槽。 笑死怀吻,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的初婆。 我是一名探鬼主播蓬坡,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼猿棉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了屑咳?” 一聲冷哼從身側響起萨赁,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎兆龙,沒想到半個月后杖爽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡紫皇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年慰安,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片聪铺。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡泻帮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出计寇,到底是詐尸還是另有隱情锣杂,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布番宁,位于F島的核電站元莫,受9級特大地震影響,放射性物質發(fā)生泄漏蝶押。R本人自食惡果不足惜踱蠢,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望棋电。 院中可真熱鬧茎截,春花似錦、人聲如沸赶盔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽于未。三九已至撕攒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間烘浦,已是汗流浹背抖坪。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留闷叉,地道東北人擦俐。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像握侧,于是被迫代替她去往敵國和親蚯瞧。 傳聞我的和親對象是個殘疾皇子蹬叭,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

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