国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

css預編譯--sass基礎篇

keithyau / 2755人閱讀

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

sass起源和簡介

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

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

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

想好什么時候我們可以使用css預處理
css預處理讓我們對樣式的處理更加編程化,但是我們仍需要考慮好在怎樣的環(huán)境中使用它,因為我們知道,無論你的sass代碼多么炫酷,邏輯多么縝密,到最后都是生成了一個css文件。

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

sass基礎 安裝

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

編譯 學習使用

推薦使用koala, koala是一個前端預處理器語言圖形編譯工具,支持Less、Sass、Compass、CoffeeScript,幫助web開發(fā)者更高效地使用它們進行開發(fā)。跨平臺運行,完美兼容windows、linux、mac。

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

sass和scss

先來看看區(qū)別吧

$color : red;

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

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

其實 sass 語法是 sass 最開始的語法結構,是通過 tab 縮進來進行的一個規(guī)則,有點類似 jade模板的那種縮進,而且這種語法規(guī)則十分嚴格,有啥不對勁,編譯的時候就報錯。

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

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

變量聲明和調用

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

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

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

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

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

$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;
字符串:有引號字符串或無引號字符串,如,"foo"、 "bar"、 baz;
顏色:如,blue、 #04a3f9、 rgba(255,0,0,0.5);
布爾型:如,true、 false;
空值:如,null;
值列表:用空格或者逗號分開,如,1.5em 1em 0 2em 、 Helvetica, Arial, sans-serif。
混合宏

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

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

button {
    @include border-radius;
}

這里是一個簡單的混合宏的使用,先是用 @mixin 定義了一個名叫 border-radius 的混合宏,然后在代碼中利用 @include 進行調用,其實這樣的話并不能太大體現(xiàn)出混合宏的特色。看下面的

@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ù)擴展一樣添加參數(shù)默認值,如果在調用的時候不傳參數(shù),那么就會使用默認的值,這樣極大的增加了代碼的靈活性,省卻很多開發(fā)時間。

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

@mixin size($width,$height){    //兩個參數(shù)或者多個參數(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));
}

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

但是混合宏也有不足之處:那就是調用一個混合宏生成的css代碼并不會進行合并,這也是因為他能夠傳參所設置的,所以對于復用性很強的代碼塊不推薦使用混合宏。

繼承和占位符

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

.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是預先定義好的類,然后我們在.btn-primary1中繼承他的所有代碼塊,而%btn2就是在標題里所提到的占位符,占位符的代碼塊如果不被繼承在生成的css中是不會顯示出來的,所以如果你是用sass編譯css的話,公共類使用占位符來定義是一個很不錯的選擇。為了加深理解我們看下上面的代碼所生成的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進行了合并,而我們使用占位符定義的%btn2 %btn3在生成代碼里沒有顯示,因為btn-primary2繼承了%btn2,所以他繼承的公共部分被多帶帶拿出來,如果有多個代碼塊繼承%btn2,他們會進行合并。

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

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

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

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

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

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

運算

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

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

字符串運算:

字符串可以通過+來進行鏈接,需要注意的是因為sass的字符串有兩種類型,帶引號和不帶引號,相同相加當然出來的是一致的。如果有引號的字符串被添加了一個沒有引號的字符串 (也就是,帶引號的字符串在 + 符號左側), 結果會是一個有引號的字符串。 同樣的,如果一個沒有引號的字符串被添加了一個有引號的字符串 (沒有引號的字符串在 + 符號左側), 結果將是一個沒有引號的字符串,其實就是誰在左邊就跟著誰。

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

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

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

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/113288.html

相關文章

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

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

    Backache 評論0 收藏0
  • css編譯--sass進階

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

    周國輝 評論0 收藏0
  • 大話css編譯處理(二)安裝使用

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

    SwordFly 評論0 收藏0
  • CSS編譯

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

    genedna 評論0 收藏0
  • 大話css編譯處理(三):基礎語法

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

    劉東 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<