成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

css預(yù)編譯--sass基礎(chǔ)篇

keithyau / 2794人閱讀

摘要:變量聲明和調(diào)用這是的編程元素基礎(chǔ)之一。如下在最外層聲明的是全局變量,全局范圍內(nèi)可以調(diào)用,在中聲明的是的局部變量,只在內(nèi)部內(nèi)進(jìn)行調(diào)用。生成的如下上面的內(nèi)容就是的基礎(chǔ)篇,進(jìn)階篇的話會(huì)整理一下函數(shù)和方法規(guī)則相關(guān)的東西。

sass起源和簡介

css 其實(shí)不是一門編程語言, css 全稱 Cascading Style Sheets (層疊樣式表)是一種用來表現(xiàn)HTML(標(biāo)準(zhǔn)通用標(biāo)記語言的一個(gè)應(yīng)用)或 XML(標(biāo)準(zhǔn)通用標(biāo)記語言的一個(gè)子集)等文件樣式的計(jì)算機(jī)語言。我們用它來實(shí)現(xiàn)表現(xiàn)層和結(jié)構(gòu)層的分離,也就是 html 和樣式的分離。你可以用它為網(wǎng)頁制定樣式,但是他無法像 JavaScript 一樣聲明變量,調(diào)用函數(shù),使用條件語句,可以說 JavaScript 是靈活的,動(dòng)態(tài)的,而 css 是死板的,一成不變的。

所以,有人想要為其加入編程的思想,讓他擁有遍歷,擁有方法,甚至擁有繼承,能夠告訴你語法上的錯(cuò)誤,所以有了css預(yù)處理,它的思想是先用一門新的專門編程的語言來設(shè)計(jì)網(wǎng)頁樣式,再編譯成css,其實(shí)最后引用的仍舊是編譯出來的css。

說到css預(yù)處理,可能大部分人首先想到的是Less?,F(xiàn)在做css預(yù)處理的語言比較優(yōu)秀的Less是其一:它快速方便入門簡單,sass是其二:相對(duì)來說說它更加靈活,語法更多(尤其是if else for),當(dāng)然好多人不使用的原因是嫌棄它安裝不方便(還好有淘寶鏡像),其三是Stylus:他與sass比較類似都是更加靈活強(qiáng)大。

想好什么時(shí)候我們可以使用css預(yù)處理
css預(yù)處理讓我們對(duì)樣式的處理更加編程化,但是我們?nèi)孕枰紤]好在怎樣的環(huán)境中使用它,因?yàn)槲覀冎?,無論你的sass代碼多么炫酷,邏輯多么縝密,到最后都是生成了一個(gè)css文件。

所以我們需要根據(jù)項(xiàng)目的大小以及開發(fā)時(shí)間團(tuán)隊(duì)成本來確定,如果項(xiàng)目比較小需要的css并不是太多并且開發(fā)時(shí)間緊迫團(tuán)隊(duì)里很多人還不會(huì)使用,那么可能使用原生的css可能會(huì)更好一些。

sass基礎(chǔ) 安裝

很多開發(fā)者原本是想使用sass的,但是因?yàn)?b>sass是基于ruby的,墻在上,ruby裝半天裝不上,于是放棄,這里推薦使用淘寶的鏡像來進(jìn)行安裝。

編譯 學(xué)習(xí)使用

推薦使用koala, koala是一個(gè)前端預(yù)處理器語言圖形編譯工具,支持Less、Sass、Compass、CoffeeScript,幫助web開發(fā)者更高效地使用它們進(jìn)行開發(fā)??缙脚_(tái)運(yùn)行,完美兼容windows、linux、mac。

如果是學(xué)習(xí)的話可以先使用koala來進(jìn)行調(diào)試,如果使用到現(xiàn)代工程化項(xiàng)目中,推薦使用webpack安裝配置sass-loader

sass和scss

先來看看區(qū)別吧

$color : red;

//sass語法
.box
    color:$color;

//scss語法
.box{
  color:$color;
}

其實(shí) sass 語法是 sass 最開始的語法結(jié)構(gòu),是通過 tab 縮進(jìn)來進(jìn)行的一個(gè)規(guī)則,有點(diǎn)類似 jade模板的那種縮進(jìn),而且這種語法規(guī)則十分嚴(yán)格,有啥不對(duì)勁,編譯的時(shí)候就報(bào)錯(cuò)。

scss 呢,是 sass 的新語法格式,不要認(rèn)為他是另外一種預(yù)處理語言,其實(shí)它是 sass 在發(fā)現(xiàn)之前的語法結(jié)構(gòu)太過于嚴(yán)格,并且和 css 有點(diǎn)不像后重新定制的語法結(jié)構(gòu),它在外觀上是與css基本一致的,并且它十分寬松,你可以直接將之前的 css 代碼復(fù)制過來。

我在這里寫在了一個(gè)代碼塊中只是示例,其實(shí)他們文件名是分別以 .sass.scss 來結(jié)尾的。

變量聲明和調(diào)用

這是 sass 的編程元素基礎(chǔ)之一。在 JS 中我們使用 var 來聲明變量,當(dāng)然 ES6 中新加了 let const。而在sass聲明和調(diào)用變量的規(guī)則如下

$height: 15px !default;  //聲明默認(rèn)變量
$height: 50px;  //聲明普通變量
body{
    height: $height; 
}

變量有默認(rèn)變量和普通變量之分,默認(rèn)變量只需像 !important 一樣在值后面加上 !default 即可。其實(shí)一般情況下我們只需要聲明普通變量,默認(rèn)變量在開發(fā)組件時(shí)使用比較方便。

嵌套和局部變量,全局變量

JS類似,sass語法中也有局部變量和全局變量。如下在最外層聲明的是全局變量,全局范圍內(nèi)可以調(diào)用,在em{}中聲明的是em的局部變量,只在em{}內(nèi)部內(nèi)進(jìn)行調(diào)用。

$color:#000;  //全局變量
.block {
  color: $color;
}
em {
  $color: #fff;  //局部變量
  a {    //選擇器嵌套
    color: $color;
    font: {    //屬性嵌套
    size: 12px;
    weight: bold;
   }
    &:hover { //偽類嵌套
     color: $color;
    }   
  }
}
數(shù)據(jù)類型

JS類似,sass也擁有自己的數(shù)據(jù)類型分別是

數(shù)字: 如,1、 2、 13、 10px;
字符串:有引號(hào)字符串或無引號(hào)字符串,如,"foo"、 "bar"、 baz;
顏色:如,blue、 #04a3f9、 rgba(255,0,0,0.5);
布爾型:如,true、 false;
空值:如,null;
值列表:用空格或者逗號(hào)分開,如,1.5em 1em 0 2em 、 Helvetica, Arial, sans-serif。
混合宏

編程的思想,混合宏是一個(gè)類似于函數(shù)的存在,當(dāng)然,他并不是函數(shù),簡單來說就是增加參數(shù)功能的使得靈活度提升的可重用的代碼塊。

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

button {
    @include border-radius;
}

這里是一個(gè)簡單的混合宏的使用,先是用 @mixin 定義了一個(gè)名叫 border-radius 的混合宏,然后在代碼中利用 @include 進(jìn)行調(diào)用,其實(shí)這樣的話并不能太大體現(xiàn)出混合宏的特色??聪旅娴?/p>

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


.box1 {
  @include border-radius(5px);
}
.box2 {
  @include border-radius;
}
.box2 {
  @include border-radius(5px);
}

從代碼里可以看出,混合宏可以像函數(shù)一樣傳入?yún)?shù),并且可以像 ES6 的函數(shù)擴(kuò)展一樣添加參數(shù)默認(rèn)值,如果在調(diào)用的時(shí)候不傳參數(shù),那么就會(huì)使用默認(rèn)的值,這樣極大的增加了代碼的靈活性,省卻很多開發(fā)時(shí)間。

其實(shí),mixin 的靈活還不僅僅如此,它可以傳入多個(gè)參數(shù),這樣我們想到了函數(shù)可以根據(jù)參數(shù)數(shù)量的不同來執(zhí)行不同的代碼,是的,sass也可以做到。

@mixin size($width,$height){    //兩個(gè)參數(shù)或者多個(gè)參數(shù)可以這樣這樣定義
  width: $width;
  height: $height;
}

.box-center {
  @include size(100px,200px);
}
@mixin box-shadow($shadows...){    //參數(shù)過多可以使用...來代替
  @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;
  }
}
.box {
  @include box-shadow(0 0 1px rgba(#000,.5),0 0 2px rgba(#000,.2));
}

上面兩個(gè)代碼塊第一個(gè)比較簡單,就是增加參數(shù)數(shù)目。下面的代碼塊我們利用sassif else方法來實(shí)現(xiàn)了判斷,如果參數(shù)數(shù)目大于等于1,也就是傳了參數(shù),那么我們執(zhí)行上面的代碼,如果沒有傳參我們執(zhí)行下面的代碼,設(shè)置默認(rèn)的$shadows值生成代碼塊。

但是混合宏也有不足之處:那就是調(diào)用一個(gè)混合宏生成的css代碼并不會(huì)進(jìn)行合并,這也是因?yàn)樗軌騻鲄⑺O(shè)置的,所以對(duì)于復(fù)用性很強(qiáng)的代碼塊不推薦使用混合宏。

繼承和占位符

sass允許你使用@extend繼承別的代碼塊,并且通過@extend所繼承的代碼塊會(huì)在生成css的時(shí)候進(jìn)行合并~完美解決了上面的問題。

.btn1 {
  border: 1px solid #ccc;
  padding: 6px 10px;
  font-size: 14px;
}

%btn2 {
  border: 1px solid #ccc;
  padding: 6px 10px;
  font-size: 14px;
}

%btn3 {
  border: 1px solid #ccc;
  padding: 6px 10px;
  font-size: 14px;
}

.btn-primary1 {
  background-color: #f36;
  color: #fff;
  @extend .btn1;
}

.btn-primary2 {
  background-color: #f36;
  color: #fff;
  @extend %btn2;
}

上面的代碼中.btn1是預(yù)先定義好的類,然后我們?cè)?b>.btn-primary1中繼承他的所有代碼塊,而%btn2就是在標(biāo)題里所提到的占位符,占位符的代碼塊如果不被繼承在生成的css中是不會(huì)顯示出來的,所以如果你是用sass編譯css的話,公共類使用占位符來定義是一個(gè)很不錯(cuò)的選擇。為了加深理解我們看下上面的代碼所生成的css代碼。

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

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

.btn-primary1 {
  background-color: #f36;
  color: #fff; }

.btn-primary2 {
  background-color: #f36;
  color: #fff; }

繼承btn1btn-primary1他和btn1進(jìn)行了合并,而我們使用占位符定義的%btn2 %btn3在生成代碼里沒有顯示,因?yàn)?b>btn-primary2繼承了%btn2,所以他繼承的公共部分被多帶帶拿出來,如果有多個(gè)代碼塊繼承%btn2,他們會(huì)進(jìn)行合并。

占位符還是混合宏,主要還是看你的代碼怎么使用,如果只是靜態(tài)的代碼公共塊,那么占位符會(huì)比較適合,而如果是可變的代碼例如寫一個(gè)復(fù)雜的css3動(dòng)畫之類的,可能混合宏比較適合了。
插值#{}

如果接觸過jade模板的朋友會(huì)比較熟悉,這里的插值和它用法是基本一致的。讓我們來看一個(gè)復(fù)雜的代碼塊。

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

首先我們聲明了一個(gè)$properties的變量,里面是一個(gè)值列表里面兩個(gè)字符串,@mixin方法里我們通過@each方法循環(huán)出值列表里面的字符串然后利用插值的方法將字符串插入進(jìn)去,我們看下生成的css代碼

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

這里只是做一個(gè)示例,正常情況下我們不會(huì)用這么復(fù)雜的方法來生成這么短的css代碼。

運(yùn)算

sass允許我們做一些基本的運(yùn)算:加減乘除,但是我要說的是:注意單位!注意單位!注意單位!當(dāng)然如果你異想天開em+px,px*px,px/rem.................

需要知道的是sass里允許進(jìn)行顏色運(yùn)算,也就是說 #222222 * 2你將會(huì)得到 #444444,其實(shí)顏色的運(yùn)算機(jī)制是分段運(yùn)算也就是說如果22*2 22*2 22*2然后在進(jìn)行合并的。

字符串運(yùn)算:

字符串可以通過+來進(jìn)行鏈接,需要注意的是因?yàn)?b>sass的字符串有兩種類型,帶引號(hào)和不帶引號(hào),相同相加當(dāng)然出來的是一致的。如果有引號(hào)的字符串被添加了一個(gè)沒有引號(hào)的字符串 (也就是,帶引號(hào)的字符串在 + 符號(hào)左側(cè)), 結(jié)果會(huì)是一個(gè)有引號(hào)的字符串。 同樣的,如果一個(gè)沒有引號(hào)的字符串被添加了一個(gè)有引號(hào)的字符串 (沒有引號(hào)的字符串在 + 符號(hào)左側(cè)), 結(jié)果將是一個(gè)沒有引號(hào)的字符串,其實(shí)就是誰在左邊就跟著誰。

p:before {
  content: "Foo " + Bar;
  font-family: sans- + "serif";
}
//生成的css如下
p:before {
  content: "Foo Bar";
  font-family: sans-serif; }

上面的內(nèi)容就是sass的基礎(chǔ)篇,進(jìn)階篇的話會(huì)整理一下函數(shù)和方法規(guī)則相關(guān)的東西。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/113288.html

相關(guān)文章

  • 大話css預(yù)編譯處理(一)通讀介紹

    摘要:使用預(yù)編譯處理的優(yōu)勢使用預(yù)處理器,可以提供缺失的樣式層復(fù)用機(jī)制減少冗余代碼,提高樣式代碼的可維護(hù)性。所以我們?cè)趯?shí)際項(xiàng)目中衡量預(yù)編譯方案時(shí),還是得想想,比起帶來的額外維護(hù)開銷,預(yù)處理器有沒有解決更大的麻煩。 一、什么是css預(yù)編譯處理? CSS 預(yù)編譯處理,從字面上理解,就是預(yù)先編譯處理CSS。它擴(kuò)展了 CSS 語言,增加了變量、Mixin、函數(shù)等編程的特性,使 CSS 更易維護(hù)和擴(kuò)展。...

    Backache 評(píng)論0 收藏0
  • css預(yù)編譯--sass進(jìn)階

    摘要:字符串函數(shù)函數(shù)主要是用來刪除一個(gè)字符串中的引號(hào),如果這個(gè)字符串沒有帶有引號(hào),將返回原始的字符串。顏色函數(shù)顏色函數(shù)在的官方文檔中,列出了的顏色函數(shù)清單,從大的方面主要分為和三大函數(shù),當(dāng)然其還包括一些其他的顏色函數(shù),比如說和等。 基礎(chǔ)篇中主要介紹了一些sass的基本特性,進(jìn)階篇中,主要是寫一些我們常用的sass控制命令,函數(shù)和規(guī)則。 控制命令 可能看過基礎(chǔ)篇的朋友會(huì)發(fā)現(xiàn)在有些代碼中出現(xiàn)@i...

    周國輝 評(píng)論0 收藏0
  • 大話css預(yù)編譯處理(二)安裝使用

    摘要:上面的命令會(huì)將編譯的傳遞給,你可以將它保存到一個(gè)文件中除了上面的命令轉(zhuǎn)譯源文件之外,現(xiàn)在還有很多第三方開發(fā)的工具,例如是一個(gè)前端預(yù)處理器語言圖形編譯工具,支持,幫助開發(fā)者更高效地使用它們進(jìn)行開發(fā)。 一、Sass、LESS和Stylus的安裝 1.Sass的安裝 Sass是Ruby語言寫的,但是兩者的語法沒有關(guān)系。不懂Ruby,照樣可以正常使用Sass。只是必須先安裝Ruby,然后再安裝...

    SwordFly 評(píng)論0 收藏0
  • CSS預(yù)編譯

    摘要:安裝必須先安裝再安裝先安裝簡單使用先安裝插件嵌套縮進(jìn)的代碼,它是默認(rèn)值沒有縮進(jìn)的擴(kuò)展的代碼簡潔格式的代碼壓縮后的代碼轉(zhuǎn)官方文檔安裝設(shè)置,這里設(shè)置成參考使用教程阮一峰高級(jí)用法實(shí)例中文官網(wǎng)語言特性布局教程語法篇布局教程實(shí)例篇 安裝 sass 必須先安裝ruby,再安裝sass gem install sassless 先安裝npm npm install -g less 簡單使用 less...

    genedna 評(píng)論0 收藏0
  • 大話css預(yù)編譯處理(三):基礎(chǔ)語法

    摘要:值得慶幸的是,這三款預(yù)處理器語言的語法和語法都差不多。在這一節(jié)中,我們依次來對(duì)比一下這三款預(yù)處理器語言各種特性的異同之處,以及使用方法。預(yù)處理器語言支持任何變量例如顏色數(shù)值文本。 一、Sass、LESS和Stylus的語法 每一種語言都有自己一定的語法規(guī)則,CSS預(yù)處理器語言也不例外,在真正使用CSS預(yù)處器語言之前還有一個(gè)不可缺少的知識(shí)點(diǎn),就是對(duì)語法的理解。值得慶幸的是,這三款CSS預(yù)...

    劉東 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<