前端之Sass/Scss實戰筆記

2021-03-02 SegmentFault

Introduction

Sass 有兩種語法規則(syntaxes),目前新的語法規則(從 Sass 3開始)被稱為 「SCSS」( 時髦的css(Sassy CSS)),它是css3語法的的拓展級,就是說每一個語法正確的CSS3文件也是合法的SCSS文件,SCSS文件使用.scss作為拓展名。第二種語法別成為縮進語法(或者 Sass),它受到了Haml的簡潔精煉的啟發,它是為了人們可以用和css相近的但是更精簡的方式來書寫css而誕生的。它沒有括號,分號,它使用 行縮進 的方式來指定css 塊,雖然sass不是最原始的語法,但是縮進語法將繼續被支持,在縮進語法的文件以 .sass 為拓展名。


注釋

有三種形式:

(1)//comment:該注釋只是在.scss源文件中有,編譯後的css文件中沒有。

(2)/! /:重要注釋,任何style的css文件中都會有,一般放置css文件版權說明等信息。

(3)/ /:該注釋在compressed的style的css中沒有,其他style的css文件都會含有。


Quick StartInstallationBuild

1.切換到.scss文件所在目錄

命令行下切換到代碼文件夾目錄(如Z:\),假設有文件test.scss文件,裡面內容如下:(SASS完全支持css語法)

h1{ font-size:17px; }h2{ font-size:18px;}

2.編譯scss文件為css文件

運行命令:sass --style compressed test.scss test.css,即可生成壓縮版的css文件,並且命名為test.css。幾點說明:

(1)--style 後面可以有四個參數可選,分別為expanded、nested、compact、compressed,分別選用不同參數的效果可以自己嘗試體驗。

(2)test.scss和test.css文件目錄可以自定義,例如把Z盤sass目錄下的test.scss文件編譯為壓縮版的文件,並放置在Z盤css目錄下,那麼命令即:sass --style compressed z:\sass\test.scss z:\css\test.css

(3)開發過程中,只需要修改scss文件,然後編譯;前端頁面只需要引用相應的css文件即可。

3.偵聽文件和文件夾

如果希望某一個scss文件或者相應的文件夾下面文件修改後,自動進行編譯,那麼可以使用偵聽命令。

(1)偵聽文件:

sass --watch --style compressed test.scss:test.css

當test.scss文件有修改後,會自動編譯為test.css,並且是compressed的。

(2)偵聽文件夾:

sass --watch --style compressed sass:css

當sass文件夾下.scss文件有修改的時候,會自動編譯為與sass中文件同名的css文件。

備註:

(1)注意源文件和目標文件之間是冒號,與編譯命令中為空格不同。

(2)生成的map文件可以查找source map文件的作用。

Webpack

Webpack中也內置了sass-loader,通過簡單的配置既可以使用。不過需要注意的是,Webpack的sass-loader還是依賴於node-sass以及sass(gem),所以如果安裝sass-loader報錯可以先嘗試安裝sass。


變量與選擇器變量定義

變量的定義一般以$開頭,某個變量的作用域僅限於他們定義的層級以及子層級。如果變量是定義在所有嵌套選擇器之外的,那麼他們可以在各處被調用。

$color1:#aeaeae;.div1{ background-color:$color1;}

編譯後:

.div1 { background-color: #aeaeae;}/*# sourceMappingURL=test.css.map */

如果希望某個在子選擇器中定義的變量能夠成為全局變量,可以使用!global關鍵字:

#main { $width: 5em !global; width: $width;}#sidebar { width: $width;}

嵌套引用

嵌套引用在其他程式語言中即是字符串插值,需要用#{}進行包裹:

$left:left;.div1{ border-#{$left}-width:5px;}

變量計算

Sass中也是支持對於變量進行簡單的計算:

$left:20px;.div1{ margin-left:$left+12px;}

變量可以支持計算的類型,還是比較多的:

p { font: 10px/8px; // Plain CSS, no division $width: 1000px; width: $width/2; // Uses a variable, does division width: round(1.5)/2; // Uses a function, does division height: (500px/2); // Uses parentheses, does division margin-left: 5px + 8px/2px; // Uses +, does division font: (italic bold 10px/8px); // In a list, parentheses don't count}


選擇器嵌套

.div1{ .span1{ height: 12px; } .div2{ width: 16px; }}

屬性也可以嵌套,比如border-color屬性,可以寫成:

  p {    border: {      color: red;    }  }

注意,border後面必須加上冒號。

父元素引用

在嵌套的子層級中,允許使用&引用父元素:

.div1{ &:hover{ cursor: hand; }}


代碼重用繼承

SASS允許一個選擇器,繼承另一個選擇器。比如,現有class1:

.class1{ font-size:19px;}.class2{ @extend .class1; color:black;}

注意:如果在class2後面有設置了class1的屬性,那麼也會影響class2,如下:

.class1{ font-size:19px;}.class2{ @extend .class1; color:black;}.class1{ font-weight:bold;}

由此可以看出Scss也是遞歸編譯的。

引用外部css文件(Partials)

有時網頁的不同部分會分成多個文件來寫樣式,或者引用通用的一些樣式,那麼可以使用@import。

@import "_test1.scss";@import "_test2.scss";@import "_test3.scss";


Mixin&Include

Mixin有點像C語言的宏(macro),是可以重用的代碼塊。

使用@mixin命令,定義一個代碼塊。

  @mixin left {    float: left;    margin-left: 10px;  }

使用@include命令,調用這個mixin。

  div {    @include left;  }

參數與預設值

@mixin common($value1,$value2,$defaultValue:12px){ display:block; margin-left:$value1; margin-right:$value2; padding:$defaultValue;}.class1{ font-size:16px; @include common(12px,13px,15px);}.class2{ font-size:16px; @include common(12px,13px);}

下面是一個mixin的實例,用來生成瀏覽器前綴。

  @mixin rounded($vert, $horz, $radius: 10px) {    border-#{$vert}-#{$horz}-radius: $radius;    -moz-border-radius-#{$vert}#{$horz}: $radius;    -webkit-border-#{$vert}-#{$horz}-radius: $radius;  }

使用的時候,可以像下面這樣調用:

  #navbar li { @include rounded(top, left); }  #footer { @include rounded(top, left, 5px); }


編程式方法流程控制條件語句

@if可以用來判斷:

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

配套的還有@else命令:

  @if lightness($color) > 30% {    background-color: #000;  } @else {    background-color: #fff;  }

循環語句

SASS支持for循環:

  @for $i from 1 to 10 {    .border-#{$i} {      border: #{$i}px solid blue;    }  }

也支持while循環:

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

each命令,作用與for類似:

  @each $member in a, b, c, d {    .#{$member} {      background-image: url("/image/#{$member}.jpg");    }  }

函數

Sass允許用戶自定義函數,原型如下所示:

  @function double($n) {    @return $n * 2;  }  #sidebar {    width: double(5px);  }

顏色函數

SASS提供了一些內置的顏色函數,以便生成系列顏色。

  lighten(#cc3, 10%) // #d6d65c  darken(#cc3, 10%) // #a3a329  grayscale(#cc3) // #808080  complement(#cc3) // #33c

相關焦點

  • 解讀bootstrap v4 sass設計
    其次本篇文章主要圍繞下面幾個目標展開:了解bootstrap 4整個sass的設計如何使用並修改bootstrap v4的樣式如何改進bootstrap的sass設計最後不深入具體代碼的實現細節,只從整體架構上分析一起走進bootstrap v4 sass1、bootstrap的sass文件都放在scss目錄,為什麼名字是
  • CSS 預編譯語言 Sass 快速入門教程
    Sass 與 Less 等其它預編譯語言不存在優劣之分,一般來說,Sass 的功能更加強大或者說 Sass 的語言層面更接近於一門完整的程式語言,而 Less 則更接近於 CSS 語法,所以我們在 Vue 中通常會使用 Sass 編寫樣式代碼,Laravel 默認提供的樣式代碼也是 scss 結尾的,也是使用的 Sass 語言。
  • SASS中文教程(上)
    1、關於sasssass是最早的css預處理語言,有比less更為強大的功能。sass是採用的Ruby語言編寫的一款css預處理語言,它誕生於2007年,是最早成熟css預處理語言。最初它是為了配合haml而設計的,因此有著和haml一樣的縮進式風格。sass從第三代開始,放棄了縮進式風格,並且完全向下兼容普通的css代碼,這一代的sass也被稱為scss。
  • 前端工程化(ES6模塊化和webpack打包css,less,scss,圖片,字體...
    // 當前文件模塊為m2.js// 在當前模塊中執行一個for循環操作for(let i=0;i<3;i++){ console.log(i)}Webpack概念當前Web開發面臨的困境/* 文件依賴關係錯綜複雜 靜態資源請求效率低 模塊化支持不友好 瀏覽器對高級JavaScript特性兼容程度較低*/webpack是一個流行的前端項目構建工具
  • CSS 外掛丨Sass 之規則和指令
    默認情況下,它會尋找 Sass 文件並直接引入, 但是,在少數幾種情況下,它會被編譯成 CSS 的 @import 規則:@import 幾種用法@import "icon.scss"; //帶.scss,.sass擴展名@import "icon"; //不帶擴展名,Sass會自動尋找帶有 .scss或 .sass 擴展名的同名文件並將其引入。
  • 如何在vue項目中使用sass並設置元素樣式
    如果直接使用sass,啟動項目會出現報錯。那麼,如何在vue項目中使用sass?定義變量並初始化,定義新增方法7、接著,在style標籤中,添加一個lang屬性,值為scss模塊由錯誤提示可知,缺少sass-loader模塊10、在Git命令窗口,輸入npm install sass-loader --save-dev,安裝sass-loader
  • WEB前端最全學習網
    W3school:http://www.w3school.com.cn/js/index.aspJavaScript中文網:https://www.javascriptcn.com/ECMAScript6入門:http://es6.ruanyifeng.com/最全最權威的官網:https://developer.mozilla.org/Svg學習筆記
  • 適合前端工程師的VSCode插件推薦
    提交真正令人感興趣的VS Code Extensions以幫助實現高效和簡單的前端開發(這也顯示了社區如何支持VS Code)。在本文中,我將簡要介紹2018年必備的VS Code Extensions,以便您可以對您的IDE進行操作。Live ServerRitwick Dey的這個很酷的擴展為您的靜態和動態頁面創建了一個開發本地伺服器。
  • 前端必備技能 webpack - 4. webpack處理CSS資源
    :用於處理 .sass/.scss 文件,將 .sass 文件編譯成 .css 文件;postcss-loader:通過 PostCSS 處理 .css/.sss 文件;stylus-loader:用於處理 Stylus 文件;PostCSS 和 Stylus:[1] PostCSS 官網地址:https
  • 009 | 快速入門Web前端開發的正確姿勢
    sass:CSS 的一款預處理器,簡單入門可以看看阮一峰的一篇文章《SASS用法指南》。預處理器另外還有 less 和 stylus,不過不少大牛最推薦的還是 sass。webpack:webpack 是打包構建工具,可以類比為 Java 的 Gradle。
  • 開課吧開啟雙十二教育節:以實戰驅動的Web前端課程
    隨著網際網路的快速發展,Web前端人員的需求量越來越大。前端開發也由此逐漸成為了一個不可缺少的專業角色。作為數位化人才在線教育平臺,開課吧帶領名師團隊研發了豐富的課程體系。
  • 重學webpack4之基礎篇
    @xfz,字節跳動高級前端開發,負責ToB業務的設計、研發與維護,夢想做一名幼師正文從這開始~~安裝基礎依賴入口// 單入口,SPAentry: 'xx/xx.js'// 多入口 MPAentry: { app: '.
  • 領域驅動設計在前端中的應用
    │ │ ├── Nav.js │ │ └── Nav.scss │ └── index.js ├── interest // 積分權益頁面目錄 │ ├── App.js │ ├── App.scss │ ├── apis //
  • 基於 Vue 的前端架構,我做了這 15 點
    因為公司團隊跟傾向於使用 scss 開發,less 是為了覆蓋 ant design vue 的樣式,stylus 只有我自己喜歡這種風格。</style>全局樣式全局樣式 目錄:@/stylesvariable.scss: 全局變量管理 mixins.scss: 全局 Mixins 管理 global.scss: 全局樣式其中 variable.scss