CSS(層疊樣式表)是一門非程序式語言,入門學習使用非常直觀方便,但是對于一些比較復雜或者重用性比較強的項目來說,因為CSS沒有變量、函數、SCOPE(作用域),需要書寫大量看似沒有邏輯的代碼,不方便維護及擴展,不利于復用,尤其對于非前端開發工程師來講,往往會因為缺少 CSS 編寫經驗而很難寫出組織良好且易于維護的 CSS 代碼。
為了方便前端開發的工作量,出現了sass和less。
SASS(英文全稱:Syntactically Awesome Stylesheets)Sass 誕生于 2007 年,使用Ruby 編寫,是一種對css的一種擴展提升,增加了規則、變量、混入、選擇器、繼承等等特性。
可以理解為用js的方式去書寫,然后編譯成css。比如說,sass中可以把反復使用的css屬性值定義成變量,然后通過變量名來引用它們,而無需重復書寫這一屬性值。
LESS(2009年開源的一個項目,受Sass的影響較大,但又使用CSS的語法,讓大部分開發者和設計師更容易上手。
LESS保留了css的任何功能,同時提供了多種方式能平滑的將寫好的代碼轉化成標準的CSS代碼,可以在任何使用隨時切換到css的語法進行書寫。
傳統的css可以直接被html引用,但是sass和less由于使用了類似JavaScript的方式去書寫,所以必須要經過編譯生成css,而html引用只能引用編譯之后的css文件,雖然過程多了一層,但是畢竟sass/less在書寫的時候就方便很多,所以在我們使用sass/less之前,只要我們提前設置好,就可以直接生成對應的css文件,而我們只需要關心我們的sass/less文件即可。
Sass的語法規則,可以參考下SASS中文網:https://www.sass.hk/。
SASS技術的文件的后綴名有兩種形式:.sass和.scss。其實兩者都是同一種東西,兩種均可以可以通過編譯生成瀏覽器能識別的css文件。這兩種的區別:
Sass 語法
$font-stack: Helvetica, sans-serif //定義變量
$primary-color: #333 //定義變量
body
font: 100% $font-stack
color: $primary-color
SCSS 語法
$font-stack: Helvetica, sans-serif;
$primary-color: #333;
body {
font: 100% $font-stack;
color: $primary-color;
}
編譯出來的 CSS
body {
font: 100% Helvetica, sans-serif;
color: #333;
}
LESS技術的后綴名只有一種,就是.less,語法規則和sass大同小異,詳細可以參考less中文網http://lesscss.cn/。
LESS使用分為兩種:
/* Less */
@color: #999;
@bgColor: skyblue;//不要添加引號
@width: 50%;
#wrap {
color: @color;
width: @width;
}
CSS 是開發人員用于網頁開發的樣式語言。它用于設置網頁樣式并使其具有吸引力。它是 Web 開發的三個基本部分之一,另外兩個是 JavaScript 和 HTML。
CSS 旨在實現表示和內容的分離,包括布局、顏色和字體。這種分離可以提高內容的可訪問性,提供更多的靈活性和對表示特性規范的控制,通過在單獨的 .css 文件中指定相關的 CSS 使多個網頁能夠共享格式,并減少結構上下文中的復雜性和重復性。
網頁上的每個項目或元素都是以標記語言編寫的文檔的一部分。在大多數情況下,使用 HTML(超文本標記語言),但也使用其他語言,例如 XML 和 XHTML。
CSS 的語法非常簡單,包含大量用于各種樣式屬性的英文關鍵字。它包括選擇器、屬性、值、聲明、聲明塊、規則集、at 規則和語句。
CSS的優點
1.一致性——CSS 有助于構建一個一致的框架,設計師可以使用它來構建其他網站。因此,網頁設計師的效率也會提高。
2.易于使用——CSS 非常容易學習并簡化了網站開發。所有代碼都放在一頁上,這意味著對行的改進或編輯不會涉及到幾頁。
3.網站速度——通常,用于網站的代碼最多可以達到 2 頁或更多。但是對于 CSS,這不是問題。它只需要 2-3 行代碼,因此網站數據庫保持整潔,消除了任何網站加載問題。
4.設備兼容性——CSS 更改對設備友好。由于人們使用不同類型的智能設備來訪問互聯網,因此需要或響應式網頁設計。CSS 通過使網頁更具響應性來達到這里的目的,以便它們最終在所有設備中以相同的方式顯示。
5.多瀏覽器支持——CSS 享有多瀏覽器的支持。它與所有主要的互聯網瀏覽器兼容。
6.重新定位 – CSS 允許你定義頁面上存在的 Web 元素位置的變化。通過它的實現,開發人員可以將 HTML 元素放置在他們喜歡的位置,以便與頁面的美感或其他考慮因素保持一致。
7.網頁抓取 – CSS 有助于為你的網站啟用 SEO。通過將 CSS 合并到你的網頁中,搜索引擎可以更輕松地在搜索結果中找到你的頁面。
8.傳輸大小 - 它減少了文件傳輸大小。這導致更快的文件傳輸。
SCSS 是一種被中斷或編譯成 CSS 的預處理器語言。它是一種特殊類型的 SASS(Syntactically Awesome Style Sheets)。SCSS 的腳本是在 Saasscript 中完成的。SCSS 包含 CSS 的所有功能,還添加了一些額外的特殊功能。
使用 SCSS,我們可以向 CSS 添加許多附加功能,例如變量、嵌套等。與編寫傳統 CSS 相比,所有這些附加功能可以使編寫 CSS 變得更加容易和快捷。
SCSS 生成瀏覽器可以通過在運行 Web 應用程序的服務器上運行 SCSS 文件來理解的傳統 CSS。在 SASS 或 SCSS 中閱讀代碼比在 CSS 中閱讀要快。
SASS 和 SCSS 在語法方面的唯一區別是縮進 { } 的使用。換句話說,SCSS 只不過是帶有縮進的 SASS。
SCSS的優勢
1.它有助于你在程序結構中編寫干凈、簡單且更少的 CSS。
2.它包含的代碼更少,因此你可以更快地編寫 CSS。
3.它有很好的文檔,這意味著你可以在線獲取所有必需的信息。
4.它提供嵌套,因此你可以使用嵌套語法和有用的函數,如顏色操作、數學函數和其他值。
5.它與所有版本的 CSS 兼容。因此,你可以使用任何可用的 CSS 庫。
6.它由變量組成,這些變量有助于在整個 CSS 中根據需要多次重用這些值。
7.語法高亮是一種廣泛使用的 CSS 工具,在 SCSS 中得到支持。SCSS 允許你使用現有代碼,并在不改變代碼的外部行為的情況下幫助改進其內部結構。
CSS和SCSS的比較
1.SCSS 更具表現力——SCSS 在其代碼中使用的行數比 CSS 少,這使得代碼加載速度更快。
2.它鼓勵規則的正確嵌套——標準 CSS 不支持嵌套。我們不能在另一個類中編寫一個類。隨著項目變得越來越大,這帶來了可讀性問題,并且結構看起來不太好。
3.語法 – SCSS 的語法包含 CSS 中缺少的縮進。
4.SCSS 允許用戶編寫更好的內聯文檔——SASS 可以靈活地添加注釋,但任何優秀的開發人員都會更喜歡 SCSS 中提供的內聯文檔。內聯文檔使代碼行不言自明。
5.更好的功能——在 SCSS 的幫助下,我們可以以 CSS 中不存在的變量、選擇器和嵌套的形式向代碼添加更多功能。
6.自定義 Bootstrap – 了解 SCSS 有助于自定義 Bootstrap 4。
7.數學運算——SCSS 允許我們使用運算符進行數學運算。我們可以在代碼中執行簡單的計算以獲得更好的輸出。
盡管CSS提供了所有的工具,但有時很難掌握您控制的內容。
scss是sass的另一種語法,Sass是一種CSS預處理器,允許開發者編寫更具結構性、可維護性和動態性的樣式表
scss保持了css的語法結構,同時具備sass的強大功能,可以簡單理解為一種增強版的css,除css含有功能外,還包含但不限于更優的變量、嵌套規則、混合、函數、動態運算等,文件后綴名為scss
在瀏覽器前端中,正常是不能直接使用scss的,其是一種CSS預處理器,即需要通過編譯,生成對應的css文件,再進行使用
SCSS整體語法與CSS基本類似,其是CSS的一個超集,在SCSS內寫CSS也是完全可以的
SCSS的注釋主要有兩種形式,一種為//,另一種為/**/,與Js類似
SCSS的變量用$來聲明,使用時直接通過$ + 名稱調用即可,變量數據可以是數字、字符串、顏色、布爾值、null,甚至還可以是List和Map
變量可以使用在幾乎任何需要的地方,如屬性值,屬性名合成、復雜運算、函數調用等
與CSS變量相比:
聲明規則:$name: value;
形式與樣式屬性類似,$后接名稱即為變量名,冒號后面跟變量值
變量聲明后,在其之后的位置依舊可以重新聲明賦值
舉個栗子
編譯后的CSS如下:
了解一下即可,我們在定義值為字符串的變量時,有兩種寫法,帶引號和不帶引號,兩者都能正常使用
帶引號的可用于表達式計算
不帶引號的一般不用于表達式計算(容易報錯),而是直接使用
除了自己定義的變量外,SCSS還包含一些內置變量,其分布在不同模塊內,使用時需另行導入
示例如下
需注意的是,內置變量是不支持重新自定義賦值的
在使用CSS寫一些子元素樣式時,很多時候都需要帶上其父元素,以使選擇器更精準或提高其優先級,但當大量書寫類似屬性時,每次都需要帶上其父元素選擇器,這其實的重復的工作
SCSS則可以規避這種情況,其支持嵌套使用
選擇器嵌套
編譯后的CSS如下:
屬性嵌套
嵌套除了用在選擇器外,其還可以用在樣式屬性中,如下:
編譯后如下:
SCSS支持對變量或值進行運算,支持 +、-、*、/、%、==、!=、>、< 等運算符,對于不同單位之間的運算,運算結果取第一個值的單位,如果值之間只有一個有單位,則運算結果就取該單位
在介紹運算前,先介紹一個新的規則@debug,其用于幫助在開發過程中查看一些變量值或表達式值,SCSS運行后會將@debug后面的內容輸出到控制臺,類似Js的輸出語句
需要注意的是,除法/比較特殊,其只在以下三種情況會進行除法運算:
但是,如果你的SCSS版本較高,可能會收到一個warning警告,官方團隊不推薦直接使用/的形式進行除法運算,這是由于在CSS在/也作為分隔符使用
官方更推薦使用sass:math模塊的math.div函數或calc函數來執行除法運算,如下:
除了普通值運算外,SCSS還支持顏色值之間的運算
需注意的是,這在高版本的SCSS中已經棄用,高版本如需計算顏色,推薦使用sass:color模塊內的顏色函數
插值,即將SCSS表達式用#{}包圍,作用是將SCSS表達式結果嵌入到CSS中
插值幾乎可以使用在SCSS樣式表的所有位置,如:選擇器名、屬性名、屬性值、變量值、動畫名等
編譯后的CSS為:
在插值內使用帶引號的字符串時,解析時會將引號去掉
編譯后為:
使用時需思考是否要帶引號,否則可能導致超乎預期的結果
一個項目的樣式往往是很多的,而我們一般不會將其完全放在一個文件內,一般會按某種規則區分,存放于多個文件內,不同文件需共享時就導入
SCSS與CSS具有類似的導入語法@import,其允許多個導入用逗號分隔,導入文件后綴sass/scss可省略,如下:
但是,官方團隊不鼓勵繼續使用該規則,其將在未來幾年內逐步淘汰它,并最終從語言中刪除
原因是:
官方更推薦使用@use來導入模塊,以這種方式加載的任何樣式都將在編譯的 CSS 輸出中只包含一次,無論這些樣式被加載了多少次
@use具有和@import同樣的功能,并且它還具有命名空間,以避免命名沖突,默認其命名空間即為文件名,也可以用as設置
對于自己編寫的文件,如果不在意命名沖突,也可完全導入,此時即可直接使用
除了一些常見功能外,SCSS還具備一些高級功能,如:控制語句、函數等
條件語句主要使用@if和@else、@else if,效果于常見編程語言類似,如下:
以上SCSS會根據$pos變量值動態選擇生成的justify-content
編譯后CSS為:
循環語句主要有三個:@each、@for和@while
與Js類似,函數用于封裝、定義一些復雜操作
一些示例如下:
有趣的事實
與所有Scss標識符一樣,函數名稱將連字符和下劃線視為相同,這意味著is-center和is_center兩者都引用相同的函數,這是早期的歷史遺留物,當時它只允許在標識符名稱中使用下劃線
使用@mixin定義,使用@include引用,用于定義一些可以在整個樣式表中重復使用的樣式,其與函數類似,也可執行復雜操作、傳入參數等,主要用于定義一些復雜的、規則的通用樣式
語法如下:
引用如下:
一些示例
@content用于表示自定義內容,使用時會將{}內的內容注入到@content所占位置
繼承是基于選擇器的,其實現一個選擇器可以繼承另一個選擇器的所有樣式,包括組合樣式(如偽類選擇器樣式)
默認瀏覽器樣式不可繼承,因為其不屬于樣式表樣式
示例
編譯后的CSS如下:
SCSS是一款CSS預處理器,其具備部分高級編程語言的特性,因此其需要經過編譯使用,其也可以進行調試
SCSS是需要經過編譯,變成CSS才可以正常使用的,這在上面已經提到
編譯單個文件比較簡單,在命令行輸入sass空格后接文件名即可,如需生成對應CSS文件,則在原有命令后再接空格加生成文件名即可
不想每次都運行命令重新編譯,也可以通過添加命令參數--watch以監聽編譯,此時不必關閉控制臺,系統會監聽所編譯SCSS文件的變化,但內容改變則重新編譯,具體如下
如需停止監聽,只需在控制臺按Ctrl + C即可
SCSS提供了幾個命令用于開發調試
參考資料
SCSS模塊文檔:https://sass.bootcss.com/documentation/modules.html
SCSS官網:https://sass.bootcss.com
*請認真填寫需求信息,我們會在24小時內與您取得聯系。