Sass 筆記

来源:https://www.cnblogs.com/risejl/archive/2022/09/27/16733638.html
-Advertisement-
Play Games

模塊 HTML 網頁中,瀏覽器通過<script>標簽載入 JavaScript 腳本。 <!-- 頁面內嵌的腳本 --> <script type="application/javascript"> // module code </script> <!-- 外部腳本 --> <script ty ...


Sass

Sass 全稱 "Syntactically Awesome StyleSheets", 是 CSS 的一種擴展語言。

變數 Variable

Sass 允許使用變數(最新的 CSS 也支持了變數)。 可以在 Sass 中聲明變數,併為它賦值。

在 Sass 中,變數以 $ 開頭的,後跟變數名。

 $text-color: red;

使用

color: $text-color;

嵌套 CSS Nest

Sass 允許 CSS 規則的嵌套,這在組織樣式表結構的時候會很有用。

在 CSS 里,每個元素的樣式都需要寫在獨立的代碼塊中,如下所示:

nav {
  background-color: red;
}

nav ul {
  list-style: none;
}

nav ul li {
  display: inline-block;
}

對於一個大型項目,CSS 規則會很複雜。 這時,引入嵌套功能(即在對應的父元素中寫子元素的樣式)可以有效地簡化代碼:

nav {
  background-color: red;

  ul {
    list-style: none;

    li {
      display: inline-block;
    }
  }
}

Mixins 可重用 CSS Reusable

在 Sass 中,mixin 是一組 CSS 聲明,可以在整個樣式表中重覆使用。

CSS 的新功能需要一段時間適配後,所有瀏覽器後才能完全使用。 隨著瀏覽器的不斷升級,使用這些 CSS 規則時可能需要添加瀏覽器首碼。 考慮 box-shadow

div {
  -webkit-box-shadow: 0px 0px 4px #fff;
  -moz-box-shadow: 0px 0px 4px #fff;
  -ms-box-shadow: 0px 0px 4px #fff;
  box-shadow: 0px 0px 4px #fff;
}

對於所有具有 box-shadow 屬性的元素重寫此規則,或者更改每個值以測試不同的效果,需要花費大量的精力。 Mixins 就像 CSS 的函數。 以下是一個例子:

@mixin box-shadow($x, $y, $blur, $c){ 
  -webkit-box-shadow: $x $y $blur $c;
  -moz-box-shadow: $x $y $blur $c;
  -ms-box-shadow: $x $y $blur $c;
  box-shadow: $x $y $blur $c;
}

定義以 @mixin 開頭,後跟自定義名稱。 參數($x$y$blur,以及上例中的 $c )是可選的。 現在在需要 box-shadow 規則的地方,只需一行 mixin 調用而無需添加所有的瀏覽器首碼。 mixin 可以通過 @include 指令調用。

div {
  @include box-shadow(0px, 0px, 4px, #fff);
}

@if @else 邏輯

Sass 中的 @if 指令對於測試特定情況非常有用——它的工作方式與 JavaScript 中的 if 語句類似。

@mixin make-bold($bool) {
  @if $bool == true {
    font-weight: bold;
  }
}

類似 JavaScript,可以在 Sass 中使用 @else if@else 測試更多條件:

@mixin text-effect($val) {
  @if $val == danger {
    color: red;
  }
  @else if $val == alert {
    color: yellow;
  }
  @else if $val == success {
    color: green;
  }
  @else {
    color: black;
  }
}

@for 迴圈

在 Sass 中使用 @for 迴圈添加樣式,它的用法和 JavaScript 中的 for 迴圈類似。

@for 以兩種方式使用:“開始 through 結束” 或 “開始 to 結束”。 主要區別在於“開始 to 結束”不包括 結束數字,而“開始 through 結束”包括 結束數字。

@for $i from 1 through 12 {
  .col-#{$i} { width: 100%/12 * $i;  }
}

@for $i from 1 to 6{
  .text-#{$i} {
    font-size: 15px * $i;
  }
}

#{$i} 部分是將變數(i)與文本組合成字元串的語法。 當 Sass 文件轉換為 CSS 時,它看起來像這樣:

.col-1 {
  width: 8.33333%;
}

.col-2 {
  width: 16.66667%;
}

...

.col-12 {
  width: 100%;
}

這是創建網格佈局的有效方法。

@each 遍歷列表

Sass 還提供 @each 指令,該指令迴圈遍歷列表或映射中的每個項目。 在每次迭代時,變數將從列表或映射分配給當前值。

@each $color in blue, red, green {
  .#{$color}-text {
    color: $color;
}
}

map 的語法略有不同。 這是一個示例:

$colors: (color1:blue, color2:red, color3:green);
@each $key, $color in $colors {
  .#{$color}-text {
    color: $color;
    }
}

請註意,需要用 $key 變數來引用 map 中的鍵。 否則,編譯後的 CSS 將包含 color1color2...... 以上兩個代碼示例都轉換為以下 CSS:

.blue-text {
  color: blue;
}

.red-text {
  color: red;
}

.green-text {
  color: green;
}

@while 迴圈

Sass 中的 @while 指令與 JavaScript 中的 while 類似。 只要滿足條件,它就會一直創建 CSS 代碼。

$x : 1;
@while $x < 13 {
  .col-#{$x} {
    width: 100%/12 * $x;
  }
  $x: $x + 1;
}

Partials

Sass 中的 Partials 是包含 CSS 代碼段的單獨的文件。 這些片段可以導入其它 Sass 文件使用。 可以把類似代碼放到模塊中,以保持代碼結構規整且易於管理。

partials 的名稱以下劃線(_)字元開頭,這樣 Sass 就知道它是 CSS 的一小部分,而不會將其轉換為 CSS 文件。 此外,Sass 文件以 .scss 文件擴展名結尾。 要將 partial 中的代碼放入另一個 Sass 文件中,使用 @import 指令。

例如,如果所有 mixins 都保存在名為 “_mixins.scss” 的 partial 中,並且在 “main.scss” 文件中需要它們,下麵是使用方法:

@import 'mixins'

請註意,import 語句中不需要下劃線——Sass 知道它是 partial。 將 partial 導入文件後,可以使用所有變數、mixins 和其它代碼。

extend

Sass 有一個名為 extend 的功能,可以很容易地從一個元素中借用 CSS 規則併在另一個元素上重用它們。

.panel{
  background-color: red;
  height: 70px;
  border: 2px solid green;
}

現在需要另一個名為 .big-panel 的面板。 它具有與 .panel 相同的基本屬性,但還需要 widthfont-size。 可以從 .panel 複製並粘貼初始 CSS 規則,但是當添加更多類型的面板時,代碼會變得重覆。 extend 指令是一種重用為一個元素編寫的規則的簡單方法,可以為另一個元素重用並添加更多規則:

.big-panel{
  @extend .panel;
  width: 150px;
  font-size: 2em;
}

除了新樣式之外,.big-panel 將具有與 .panel 相同的屬性。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • HTML標簽 1、標題和段落 <h1>一級標題</h1> ~ <h6>六級標題</h6>是標題標簽,獨占一行,均有加粗效果,且字體逐漸變小 <h1>一級標題</h1> ​ 一級標題 ​ <h6>六級標題</h6> ​ 六級標題 ​ <p>p是段落標簽,獨占一行</p> ​ p標簽是段落標簽,獨占一行 ...
  • html插入圖片有兩種方式:一種是通過<img>標簽插入的正常的圖片,另一種是通過css樣式插入的背景圖片 1、首先你是通過第二種方式插入的是背景圖片,直接用width和height只能控制div的寬度和高度。 2、如果你插入的圖片是通過<img>標簽的方式來插入的話,可以通過<img>自身的屬性控 ...
  • 場景描述: 場景描述:一個介面(IPerson)有很多個的欄位,可能有幾百。而且這些欄位都是必須的。 我們需要使用這個介面,但是我又不可能使用它的全部。可能只會使用幾個。 我還必須要使用這介面。這個時候,我們怎麼解決這個問題呢? TS給了我們一個工具類Partial,可以解決這隔辦法 Partial ...
  • <div class="fuzhiWarp"> <div class="copydiv">這裡是DIV中的文本</div> <button type="button" class="fuzhibtn btn-default" data-clipboard-action="copy" data-cli ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 一.typescript 高階類型 Exclude 和 Extract Exclude<T, U> TypeScript 2.8 中增加了 Exclude 類型,該如何理解這個高級類型的定義呢? type Exclude<T, U> = ...
  • 剛完成一些前端項目的開發,騰出精力來總結一些前端開發的技術點,以及繼續完善基於SqlSugar的開發框架循序漸進介紹的系列文章,本篇隨筆主要介紹一下基於Vue3+TypeScript的全局對象的註入和使用。我們知道在Vue2中全局註入一個全局變數使用protoType的方式,很方便的就註入了,而Vu... ...
  • 1 CMD 規範介紹 CMD: Common Module Definition, 通用模塊定義。與 AMD 規範類似,也是用於瀏覽器端,非同步載入模塊,一個文件就是一個模塊,當模塊使用時才會載入執行。其語法與 AMD 規範很類似。 1.1 定義模塊 定義模塊使用 define 函數: define( ...
  • uniapp webview h5 通信 window.postMessage 方式 父頁面 <template> <view> <!-- <web-view :webview-styles="webviewStyles" src="https://uniapp.dcloud.io/static/w ...
一周排行
    -Advertisement-
    Play Games
  • 1、預覽地址:http://139.155.137.144:9012 2、qq群:801913255 一、前言 隨著網路的發展,企業對於信息系統數據的保密工作愈發重視,不同身份、角色對於數據的訪問許可權都應該大相徑庭。 列如 1、不同登錄人員對一個數據列表的可見度是不一樣的,如數據列、數據行、數據按鈕 ...
  • 前言 上一篇文章寫瞭如何使用RabbitMQ做個簡單的發送郵件項目,然後評論也是比較多,也是準備去學習一下如何確保RabbitMQ的消息可靠性,但是由於時間原因,先來說說設計模式中的簡單工廠模式吧! 在瞭解簡單工廠模式之前,我們要知道C#是一款面向對象的高級程式語言。它有3大特性,封裝、繼承、多態。 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 介紹 Nodify是一個WPF基於節點的編輯器控制項,其中包含一系列節點、連接和連接器組件,旨在簡化構建基於節點的工具的過程 ...
  • 創建一個webapi項目做測試使用。 創建新控制器,搭建一個基礎框架,包括獲取當天日期、wiki的請求地址等 創建一個Http請求幫助類以及方法,用於獲取指定URL的信息 使用http請求訪問指定url,先運行一下,看看返回的內容。內容如圖右邊所示,實際上是一個Json數據。我們主要解析 大事記 部 ...
  • 最近在不少自媒體上看到有關.NET與C#的資訊與評價,感覺大家對.NET與C#還是不太瞭解,尤其是對2016年6月發佈的跨平臺.NET Core 1.0,更是知之甚少。在考慮一番之後,還是決定寫點東西總結一下,也回顧一下.NET的發展歷史。 首先,你沒看錯,.NET是跨平臺的,可以在Windows、 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 添加節點(nodes) 通過上一篇我們已經創建好了編輯器實例現在我們為編輯器添加一個節點 添加model和viewmode ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...
  • 類型檢查和轉換:當你需要檢查對象是否為特定類型,並且希望在同一時間內將其轉換為那個類型時,模式匹配提供了一種更簡潔的方式來完成這一任務,避免了使用傳統的as和is操作符後還需要進行額外的null檢查。 複雜條件邏輯:在處理複雜的條件邏輯時,特別是涉及到多個條件和類型的情況下,使用模式匹配可以使代碼更 ...
  • 在日常開發中,我們經常需要和文件打交道,特別是桌面開發,有時候就會需要載入大批量的文件,而且可能還會存在部分文件缺失的情況,那麼如何才能快速的判斷文件是否存在呢?如果處理不當的,且文件數量比較多的時候,可能會造成卡頓等情況,進而影響程式的使用體驗。今天就以一個簡單的小例子,簡述兩種不同的判斷文件是否... ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...