CSS樣式--SCSS(一)

一、SCSS簡介

??Sass是成熟炉旷、穩(wěn)定签孔、強大的CSS預處理器,而SCSS是Sass3版本當中引入的新語法特性窘行,完全兼容CSS3的同時繼承了Sass強大的動態(tài)功能饥追。
??CSS書寫代碼規(guī)模較大的Web應用時,容易造成選擇器罐盔、層疊的復雜度過高但绕,因此推薦通過SASS預處理器進行CSS的開發(fā),SASS提供的變量惶看、嵌套捏顺、混合、繼承等特性纬黎,讓CSS的書寫更加有趣與程式化幅骄。

??Sass 有兩種語法。 第一種被稱為 SCSS (Sassy CSS)本今,是一個 CSS3 語法的擴充版本拆座,這份參考資料使用的就是此語法主巍。 也就是說,所有符合 CSS3 語法的樣式表也都是具有相同語法意義的 SCSS 文件挪凑。 另外孕索,SCSS 理解大多數(shù) CSS hacks 以及瀏覽器專屬語法,例如IE 古老的 filter 語法躏碳。 這種語種語法的樣式表文件需要以 .scss 擴展名搞旭。
??第二種比較老的語法成為縮排語法(或者就稱為 "Sass"), 提供了一種更簡潔的 CSS 書寫方式菇绵。 它不使用花括號肄渗,而是通過縮排的方式來表達選擇符的嵌套層級,I 而且也不使用分號脸甘,而是用換行符來分隔屬性恳啥。 很多人認為這種格式比 SCSS 更容易閱讀,書寫也更快速丹诀。 縮排語法具有 Sass 的所有特色功能钝的, 雖然有些語法上稍有差異; 這些差異在{file:INDENTED_SYNTAX.md 所排語法參考手冊}中都有描述铆遭。 使用此種語法的樣式表文件需要以 .sass 作為擴展名硝桩。
??任一語法都可以導入另一種語法撰寫的文件中。 只要使用 sass-convert 命令行工具枚荣,就可以將一種語法轉換為另一種語法:

# 將 Sass 轉換為 SCSS
$ sass-convert style.sass style.scss

# 將 SCSS 轉換為 Sass
$ sass-convert style.scss style.sass

安裝:sass

npm install node-sass --save-dev
npm install sass-loader --save-dev
# 加載資源文件
npm install sass-resources-loader --save-dev

在build文件夾下的webpack.base.conf.js的module中的rules里面添加配置:

{
    test: /\.scss$/, 
    loaders: ["style", "css", "sass"] 
 }

在webpack中碗脊,所有預處理器都要匹配相應的loader,vue-loader允許其他的webpack-loader處理組件中的一部分嗎,然后它根據(jù)lang屬性自動判斷出要使用的loaders橄妆。所以衙伶,其實只要安裝處理sass/scss的loader。就能在vue中使用scss了害碾。
使用scss時候在所在的style樣式標簽上添加lang=”scss”即可應用對應的語法矢劲,否則報錯:
scss使用測試:如下測試修改字體顏色:

<style lang="scss">
$color:red;
div {color:$color;}
</style>

build/utils.js
全局引入:

  scss: generateLoaders('sass')
修改為:
    scss: generateLoaders('sass').concat(
      {
        loader: 'sass-resources-loader',
        options: {
          resources: path.resolve(__dirname, '../src/assets/scss/global.scss') // 需要全局引入的文件
        }
      }),

二、變量

變量用來存儲需要在CSS中復用的信息慌随,例如顏色和字體芬沉。SASS通過$符號去聲明一個變量。

$font-stack: Helvetica, sans-serif;
$primary-color: #333;

body {
  font: 100% $font-stack;
  color: $primary-color;
}

上面例子中變量font-stack和primary-color的值將會替換所有引用他們的位置阁猜。

body {
  font: 100% Helvetica, sans-serif;
  color: #333; 
}

二丸逸、嵌套

SASS允許開發(fā)人員以嵌套的方式使用CSS,但是過度的使用嵌套會讓產(chǎn)生的CSS難以維護剃袍,因此是一種不好的實踐黄刚,下面的例子表達了一個典型的網(wǎng)站導航樣式:

nav {
  ul {
    margin: 0;
    padding: 0;
    list-style: none;
  }

  li { display: inline-block; }

  a {
    display: block;
    padding: 6px 12px;
    text-decoration: none;
  }
}

代碼中的ul、li民效、a選擇器都被嵌套在nav選擇器當中使用憔维,這是一種書寫更高可讀性CSS的良好方式侍芝,編譯后產(chǎn)生的CSS代碼如下:

nav ul {
  margin: 0;
  padding: 0;
  list-style: none; 
}
nav li {
  display: inline-block; 
}
nav a {
  display: block;
  padding: 6px 12px;
  text-decoration: none; 
}

三、引入

SASS能夠?qū)⒋a分割為多個片段埋同,并以underscore風格的下劃線作為其命名前綴(_partial.scss),SASS會通過這些下劃線來辨別哪些文件是SASS片段棵红,并且不讓片段內(nèi)容直接生成為CSS文件凶赁,從而只是在使用@import指令的位置被導入。CSS原生的@import會通過額外的HTTP請求獲取引入的樣式片段逆甜,而SASS的@import則會直接將這些引入的片段合并至當前CSS文件虱肄,并且不會產(chǎn)生新的HTTP請求。下面例子中的代碼交煞,將會在base.scss文件當中引入_reset.scss片斷咏窿。

// _reset.scss
html, body, ul, ol {
  margin:  0;
  padding: 0;
}

// base.scss
@import 'reset';
body {
  font: 100% Helvetica, sans-serif;
  background-color: #efefef;
}

SASS中引入片斷時,可以缺省使用文件擴展名素征,因此上面代碼中直接通過@import 'reset'引入集嵌,編譯后生成的代碼如下:

html, body, ul, ol {
  margin: 0;
  padding: 0;
}

body {
  font: 100% Helvetica, sans-serif;
  background-color: #efefef; 
}

四、混合

混合(Mixin)用來分組那些需要在頁面中復用的CSS聲明御毅,開發(fā)人員可以通過向Mixin傳遞變量參數(shù)來讓代碼更加靈活根欧,該特性在添加瀏覽器兼容性前綴的時候非常有用,SASS目前使用@mixin name指令來進行混合操作端蛆。

@mixin border-radius($radius) {
          border-radius: $radius;
      -ms-border-radius: $radius;
     -moz-border-radius: $radius;
  -webkit-border-radius: $radius;
}

.box {
  @include border-radius(10px);
}

代碼建立了一個名為border-radius的Mixin凤粗,并傳遞了一個變量$radius作為參數(shù),然后在后續(xù)代碼中通過@include border-radius(10px)使用該Mixin今豆,最終編譯的結果如下:

.box {
  border-radius: 10px;
  -ms-border-radius: 10px;
  -moz-border-radius: 10px;
  -webkit-border-radius: 10px; }
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嫌拣,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子呆躲,更是在濱河造成了極大的恐慌异逐,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件歼秽,死亡現(xiàn)場離奇詭異应役,居然都是意外死亡,警方通過查閱死者的電腦和手機燥筷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門箩祥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人肆氓,你說我怎么就攤上這事袍祖。” “怎么了谢揪?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵蕉陋,是天一觀的道長捐凭。 經(jīng)常有香客問我,道長凳鬓,這世上最難降的妖魔是什么茁肠? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮缩举,結果婚禮上垦梆,老公的妹妹穿的比我還像新娘。我一直安慰自己仅孩,他們只是感情好托猩,可當我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著辽慕,像睡著了一般京腥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上溅蛉,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天公浪,我揣著相機與錄音,去河邊找鬼船侧。 笑死因悲,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的勺爱。 我是一名探鬼主播晃琳,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼琐鲁!你這毒婦竟也來了卫旱?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤围段,失蹤者是張志新(化名)和其女友劉穎顾翼,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奈泪,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡适贸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了涝桅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拜姿。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖冯遂,靈堂內(nèi)的尸體忽然破棺而出蕊肥,到底是詐尸還是另有隱情,我是刑警寧澤蛤肌,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布壁却,位于F島的核電站批狱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏展东。R本人自食惡果不足惜赔硫,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盐肃。 院中可真熱鬧卦停,春花似錦纽匙、人聲如沸瞳收。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽处硬。三九已至,卻和暖如春拇派,著一層夾襖步出監(jiān)牢的瞬間荷辕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工件豌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留疮方,地道東北人。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓茧彤,卻偏偏與公主長得像骡显,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子曾掂,可洞房花燭夜當晚...
    茶點故事閱讀 45,585評論 2 359

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