1. 程式人生 > >sass學習(一):變數、巢狀與匯入

sass學習(一):變數、巢狀與匯入

一 使用變數

sass使用的一大好處就是可以使用變數,對於那些重複使用的屬性,可以通過變數名來引用。

1.變數宣告

sass中變數通過$來宣告,書寫方法與CSS相似,屬性值可以使用空格和逗號進行分割。與CSS屬性不同的是,其變數可以宣告在規則塊外,在規則塊內部宣告的變數只能在本規則塊內使用。舉例如下:

$nav-color: #F90;
nav {
  $width: 100px;
  width: $width;
  color: $nav-color;
}

//編譯後

nav {
  width: 100px;
  color: #F90;
}

2.變數引用

CSS標準值可以存在的地方變數就可以引用,CSS生成時,變數會被他們的值所替代。

3.變數名中的下劃線

變數名中的中劃線與下劃線是相互相容的,也就是說,當宣告變數為a-b時,使用a_b也可以進行引用,但是這個規則對於純CSS來說如id,class名是不適用的。

二 巢狀規則

1.普通巢狀

sass提供巢狀規則,在CSS中,對於某一塊的樣式設定常常需要寫很多遍,但是使用巢狀會使得要是設定更加清晰,避免了重複書寫,可讀性高,當被解析為CSS時,便會將巢狀恢復成CSS對應的樣式,舉例如下:

#content {
  article {
    h1 { color: #333 }
    p { margin-bottom: 1.4em }
  }
  aside { background-color: #EEE }
}
大多數情況下我們都可以使用巢狀,它在解析時將父選擇器加一個空格放在子選擇器的前面,但存在偽類如:hover時,則需要特殊處理。

2.父選擇器&

有時我們不希望後代選擇器生成這種連線,比如下面這種情況sass就無法工作:

article a {
  color: blue;
  :hover { color: red }
}
解決這種問題的辦法是使用一種特殊的sass選擇器,即父選擇器,他是用&符號,可以放在選擇器可放置的地方,可以解開巢狀規則的控制,他不會像後代選擇器進行拼接,而是直接使用父選擇器直接替換&。

3.群組選擇器的巢狀

當在同一個容器元素裡需要對群組進行樣式設定時,使用巢狀可以減少程式碼量,舉例如下:

.container {
  h1, h2, h3 {margin-bottom: .8em}
}
nav, aside {
  a {color: blue}
}

4.子組合選擇器和同層組合選擇器

使用>表示選擇子代,使用+選擇相鄰的同層元素,使用~選擇同層選擇器,在巢狀中可以自由的選擇使用以上選擇器,舉例如下:
article {
  ~ article { border-top: 1px dashed #ccc }
  > section { background: #eee }
  dl > {
    dt { color: #333 }
    dd { color: #555 }
  }
  nav + & { margin-top: 0 }
}

5.屬性巢狀

除了選擇器,屬性也可以巢狀編寫,對於border-width,border-color等屬性,在sass中只需要寫一次border,巢狀屬性的規則是這樣的:把屬性名從中劃線-的地方斷開,在根屬性後邊新增一個冒號:,緊跟一個{ }塊,把子屬性部分寫在這個{ }塊中。就像css選擇器巢狀一樣,sass會把你的子屬性一一解開,把根屬性和子屬性部分通過中劃線-連線起來,最後生成的效果與你手動一遍遍寫的css樣式一樣:

nav {
  border: {
  style: solid;
  width: 1px;
  color: #ccc;
  }
}

三匯入sass檔案

sass可以使結構更加清晰,減少程式碼重複編寫的同時增加了程式碼的可讀性,但當代碼的量比較大時,就會變得不那麼清晰,故而可以拆開成多個樣式檔案,css與sass都有@import規則,即從外部引入其他的樣式,差別是,css在執行到@import時,才會從外部載入css,這會使得網頁載入速度變慢,而sass會在當時直接載入外部檔案。

1.sass區域性檔案

有時我們並不需要把所有的sass檔案轉換為單獨的css檔案,對於不想轉換成為css檔案的,可將其檔名前加上下劃線,當@import一個檔案時,可以不寫其全名,直接寫下劃線後面的部分。

2.預設變數值

sass的同一變數若宣告多次,則後面的樣式會覆蓋前面的樣式,我們可以使用!default的方式,將某一樣式宣告為預設樣式,當匯入檔案對這一變數有賦值時,則其為所賦值,否則為預設值。

3.巢狀匯入

跟原生的css不同,sass允許@import命令寫在css規則內。這種匯入方式下,生成對應的css檔案時,區域性檔案會被直接插入到css規則內匯入它的地方。

4.原生匯入

sass通常會在@import處以sass格式匯入檔案,也可以相容css,當以下三種情況出現時,會以原生的方式匯入,這會造成瀏覽器的額外下載:

1)檔案字尾是.css;2)被匯入的檔案是一個url地址;3)被匯入的檔案是url()的值。

相關推薦

sass學習()變數匯入

一 使用變數 sass使用的一大好處就是可以使用變數,對於那些重複使用的屬性,可以通過變數名來引用。 1.變數宣告 sass中變數通過$來宣告,書寫方法與CSS相似,屬性值可以使用空格和逗號進行分割。與CSS屬性不同的是,其變數可以宣告在規則塊外,在規則塊內部宣告的變數只能

Electron學習ElectronNode.jsJavaScriptJQueryVue.jsAngular.js的不同

結論 這些技術,成就JavaScript大法,全面實現JavaScript語言在Web、桌面、移動、伺服器等領域應用。 JavaScript是一種指令碼程式語言,常用在瀏覽器前端頁面動態效

python實現opencv學習安裝環境配置工具

一:python的下載、安裝、配置以python2.7.9為例二:安裝pip進入Python安裝目錄下的Scripts路徑,執行 easy_install.exe pip 出現下圖,說明pip安裝成功。 pip 的作用:通用的 Python 包管理工具,提供了對 Python

C#程式設計基礎第四課2使用if語句if-else語句多重if語句if語句完成的C#控制檯小程式

知識點:基本算術運算、簡單if語句、if-else語句的練習。利用語句完成簡單C#控制檯程式。 1、運用if-else語句,判斷使用者輸入的年份是否是閏年 static void Main(string[] args) { /*

C#程式設計基礎第四課c#中的邏輯運算子多重if語句if語句的使用

知識點:邏輯運算子、多重if語句、巢狀if語句 1、邏輯運算子 練習1:邏輯或、邏輯與運算子的使用 本次計算機考試成績規定:筆試成績等於100分且機試成績大於等於60分,或筆試成績大於等於60分且機試成績等於100分,     輸出“成績優秀”,&

系統學習機器學習之特徵工程(二)--離散型特徵編碼方式LabelEncoderone-hot變數*

轉自:https://www.cnblogs.com/lianyingteng/p/7792693.html 在機器學習問題中,我們通過訓練資料集學習得到的其實就是一組模型的引數,然後通過學習得到的引數確定模型的表示,最後用這個模型再去進行我們後續的預測分類等工作。在模型訓練過程中,我們會對訓練

es6學習es6變數

宣告變數let: let與var宣告變數的差別: let宣告的變數不存在預解析: // let宣告的變數不存在預解析 console.log(flag1); console.log(flag2); var flag1 = 123; let flag2 = 456; let宣告的

VUE學習筆記(三)-子路由多路由路由動態路由都是什麼鬼?

最近學習到VUE路由這塊,發現這塊知識點有點多,好容易混亂,我的學習習慣就是先要建立框架,然後再去挨個學習搞懂,所以先來把概念搞搞清楚再說。 首先,我們要知道VUE路由建立的是單頁面路由。 子路由其實和單路由意思是一樣的,單路由應該很好理解,因為我們都知道路由是可以一層一層巢狀的,你可以

JavaScript學習筆記()——變數作用域問題

一、基本型別和引用型別的值 ECMAScript變數包含兩種不同資料型別的值:基本型別值和引用型別值。 基本型別值指儲存在棧記憶體中的簡單資料段,即完全儲存在內容中的一個位置。 引用型別值則指儲存在堆記憶體中的物件,實際上儲存的是一個指標,指向記憶體的另一個位置,該位置儲存物件。 1

JAVA NIO學習NIO簡介NIO&IO的主要區別

在前面學習了IO之後,今天我們開始進入NIO學習環節,首先我們會NIO做一個簡單的介紹,讓大家認識NIO,然後會和IO進行一個對比認識進行區分。好了,下面我們就開始學習: 一、NIO簡介 1.概述 從JDK1.4開始,Java提供了一系列改進的輸入/輸出處理的新特性,被統稱為NIO(即N

十二字典(下)字典的

(一)、字典列表 字典列表,顧名思義就是以字典為元素的列表 # 三個字典儲存三個學生的資訊 student_0 = {'name': 'zhangsan', 'age': '18'} student_

學習筆記】四變數作用域和記憶體問題

1.引用型別的值    引用型別的值是指儲存在記憶體中的物件,JavaScript不允許直接訪問記憶體中的位置,因此在操作物件時,實際上是操作的引用而不是實際的物件。(嚴密的說法是:當複製儲存著物件的某個變數時,操作的是物件的引用。但為物件新增屬性時,操作的是實際物件)。   1)引用型別可以動態新增屬性。

RabbitMQ的學習()Windows下安裝及配置RabbitMQ,erlang環境變數

前言:從本章開始,慢慢去了解並深化架構師成長路上所需要的基礎框架:訊息中介軟體; 從這裡開始,會一直往下學習,從what to do到how to do 到why to do。先學會如何使用中介軟體,到後面慢慢去體會中介軟體原理及精髓,然後到最後自己再搭建一個簡單的中介軟體框架。這是該分類的

“全棧2019”Java第六十七章內部類類詳解

難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文連結 “全棧2019”Java第六十七章:內部類、巢狀類詳解 下一章 “全棧2019”Java第六十八章:外部類訪問內部類

AgileEAS.NET SOA 中介軟體平臺5.2版本下載配置學習()下載平臺並基於直連環境執行

一、前言      AgileEAS.NET SOA 中介軟體平臺是一款基於基於敏捷並行開發思想和Microsoft .Net構件(元件)開發技術而構建的一個快速開發應用平臺。用於幫助中小型軟體企業建立一條適合市場快速變化的開發團隊,以達到節省開發成本、縮短開發時間,快速適應市場變化的目的。      A

Typescript 學習筆記介紹安裝編譯

前言 整理了一下 Typescript 的學習筆記,方便後期遺忘某個知識點的時候,快速回憶。 為了避免凌亂,用 gitbook 結合 marketdown 整理的。 若是有不對的地方,歡迎留言指出。 眾所周知,JavaScript 是弱型別的,而這對開發人員來說,在一定程度上算是一個“痛點”。解

Tensorflow學習筆記變數作用域模型的載入儲存執行緒佇列實現多執行緒讀取樣本

# tensorflow變數作用域     用上下文語句規定作用域     with tf.variable_scope("作用域_name")         ......

Shell程式設計學習筆記變數運算子)

1.Shell是什麼 Shell 是一個命令列直譯器,它為使用者提供了一個向 Linux 核心傳送請求以便執行程式的介面系統級程式,使用者可以用 Shell 來啟動、掛起、停止甚至是編寫一些程式。 Shell(殼)可操控 Core(核心) 2.Shell指令碼的執行方式 (1)

es的聚合分析下鑽分析案例學習之Elasticsearch 07

es的restful api在學習和理解es的所欲知識點和功能點: 1、es最重要的api,讓我們進行各種嘗試、學習甚至在某些環境下進行使用的api,就是restful api。如果你學習不用es restful api,比如我上來就用java api來學習es,也是可以的,但是你根本就漏掉了es知識的

Qt學習控制元件按鈕標籤單行文字多行文字

這是第一波控制元件 其中qtButton.h #ifndef QTBUTTON_H #define QTBUTTON_H #include <QtWidgets/QMainWindow>