【SASS/SCSS(二)】模塊化語法

目錄

一、@use

1、命名空間

2、私有變量

3、用with改變模塊中的默認值

二、@forward

1、給forward模塊起別名,讓成員加前綴

2、利用hide or show手動控制成員的可訪問性?

三、@import

1、不存在命名空間,成員變量在import之后直接公開

2、可以在嵌套語法中使用import

3、@import不可以用with進行配置,如果需要可以在@import語句前對模塊變量重新賦值【此方法兼容性一般】


Sass中的模塊化主要是指外部的scss、sass文件可以作為模塊導入到其他文件中。?

如果一個自定義的sass、scss文件,僅作為庫模塊引入,那么我們的取名可以用短下劃線開頭 _,這樣該文件不會自動去編譯加載,而是僅會在被引用之后被編譯。這樣的文件我們稱為Partial(代碼片段)

如果在一個文件夾下(例如名為folder)定義?_index.scss 或者 _index.sass ,導入 folder(即直接導入文件夾名),其會自動解析文件夾中的index文件并導入

而模塊中被定義的variables、functions、mixins則被稱作member(成員)

模塊的導入和使用主要由@use、@forward、@import三種語法來實現

*注意:三者導入的都是URL,而非file_path,可以自動解析相對定位。一些內置模塊可以直接導入使用。

一、@use

1、命名空間

  • @use導入模塊后,若在本文件調用模塊中的成員,需要在以 模塊名.成員??的形式訪問
// src/_corners.scss
$radius: 3px;@mixin rounded {border-radius: $radius;
}// style.scss
@use "src/corners";.button {@include corners.rounded;padding: 5px + corners.$radius;
}
  • 可以用as給模塊取別名,而 as * 代表無需訪問模塊名,可直接調用內部成員
// src/_corners.scss
$radius: 3px;@mixin rounded {border-radius: $radius;
}// style.scss
@use "src/corners" as c;.button {@include c.rounded;padding: 5px + c.$radius;
}

// src/_corners.scss
$radius: 3px;@mixin rounded {border-radius: $radius;
}// style.scss
@use "src/corners" as *;.button {@include rounded;padding: 5px + $radius;
}

2、私有變量

模塊里可以定義私有變量 , 形如? $-*? 或者? $_*,導入后,外部無法訪問模塊內該私有變量。

// src/_corners.scss
$-radius: 3px;@mixin rounded {border-radius: $-radius;
}// style.scss
@use "src/corners";.button {@include corners.rounded;// This is an error! $-radius isn't visible outside of `_corners.scss`.padding: 5px + corners.$-radius;
}

對于非私有變量,模塊被調用后,不僅可以訪問,還可以重新賦值

如果再次調用模塊中的成員,將會是重新賦值后的值

3、用with改變模塊中的默認值

// _library.scss
$black: #000 !default;
$border-radius: 0.25rem !default;
$box-shadow: 0 0.5rem 1rem rgba($black, 0.15) !default;code {border-radius: $border-radius;box-shadow: $box-shadow;
}// style.scss
@use 'library' with ($black: #222,$border-radius: 0.1rem
);

但是,如果 A @use B , B? @use C,A是無法訪問C模塊中的成員的!如果要使得 C在A和B模塊間通用,就需要使用下面的 @forward?

二、@forward

@forward本質是轉發模塊資源,是用于組織各文件中模塊資源的方法。

但它本身的調用并不直接加載、編譯scss文件,只是讓模塊中的資源經過導入后可公開訪問

1、給forward模塊起別名,讓成員加前綴

給各模塊的成員加上前綴,可以明確成員變量的來源,解決沖突

// src/_list.scss
@mixin reset {margin: 0;padding: 0;list-style: none;
}// bootstrap.scss
@forward "src/list" as list-*;// styles.scss
@use "bootstrap";li {@include bootstrap.list-reset;
}

2、利用hide or show手動控制成員的可訪問性?

hide代表模塊中被hide的成員不可公開訪問;show代表模塊中僅僅只有被show的成員可公開訪問

形如:

// src/_list.scss
$horizontal-list-gap: 2em;@mixin list-reset {margin: 0;padding: 0;list-style: none;
}@mixin list-horizontal {@include reset;li {display: inline-block;margin: {left: -2px;right: $horizontal-list-gap;}}
}// bootstrap.scss
@forward "src/list" hide list-reset, $horizontal-list-gap;

3、可以修改模塊中的默認值,之后也能為@use...with再度修改

@use...with不可以加 !default字段,是因為這已經處于要將模塊編譯的階段。

但@forward在配置時,則可以加該字段:

// _library.scss
$black: #000 !default;
$border-radius: 0.25rem !default;
$box-shadow: 0 0.5rem 1rem rgba($black, 0.15) !default;code {border-radius: $border-radius;box-shadow: $box-shadow;
}// _opinionated.scss
@forward 'library' with ($black: #222 !default,$border-radius: 0.1rem !default
)

三、@import

@import作為css也支持的語法,已經在被慢慢淘汰,現在最推薦的還是用@use對模塊進行導入。

但一些scss才支持的@import特性,還是值得我們了解~

1、不存在命名空間,成員變量在import之后直接公開

這也是最危險的一點,一旦import之后,成員均可直接訪問而不存在模塊化的命名空間,容易導致沖突。

2、可以在嵌套語法中使用import

在選擇器嵌套中導入import,可以使得樣式僅在當前選擇器作用域下生效

// _theme.scss
pre, code {font-family: 'Source Code Pro', Helvetica, Arial;border-radius: 4px;
}//_library.scss
p {color: red;
}//boot.scss
div {@import "theme","library";width: 20px;
}

*可以用逗號分隔導入文件,一次性導入多個!

3、@import不可以用with進行配置,如果需要可以在@import語句前對模塊變量重新賦值【此方法兼容性一般】

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/46100.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/46100.shtml
英文地址,請注明出處:http://en.pswp.cn/web/46100.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

springboot防止重復提交的方案有哪些

在Spring Boot中,防止接口或表單重復提交有多種策略,以下是幾種常見且有效的方案: 前端控制: 禁用提交按鈕:在表單提交后,使用JavaScript立即禁用提交按鈕,防止用戶再次點擊。響應式提示&#x…

十、Java集合 ★ ?(模塊18-20)【泛型、通配符、List、Set、TreeSet、自然排序和比較器排序、Collections、可變參數、Map】

day05 泛型,數據結構,List,Set 今日目標 泛型使用 數據結構 List Set 1 泛型 1.1 泛型的介紹 ★ 泛型是一種類型參數,專門用來保存類型用的 最早接觸泛型是在ArrayList,這個E就是所謂的泛型了。使用ArrayList時,只要給E指定某一個類型…

講真,現在留給2024年下半年軟考的時間還夠嗎?

常識是個好東西,但是有時候卻容易蒙蔽咱們的雙眼,就拿下半年軟考而言,看起來現在才7月份,剛剛入伏,考試要到11月份,是冬天呢,中間還隔了一個完整的秋季,常識感覺還很遙遠&#xff0c…

【Vue3】4個比較重要的設計模式!!

大家好,我是CodeQi! 一位熱衷于技術分享的碼仔。 在我投身于前端開發的職業生涯期間,曾有一次承接了一個大型項目的維護工作。此項目運用的是 Vue 框架,然而其代碼結構紊亂不堪,可維護性極度糟糕??。 這使我深刻領會到,理解并運用 Vue 中的重要設計模式是何等關鍵! …

對LinkedList ,單鏈表和雙鏈表的理解

一.ArrayList的缺陷 二.鏈表 三.鏈表部分相關oj面試題 四.LinkedList的模擬實現 五.LinkedList的使用 六.ArrayList和LinkedList的區別 一.ArrayList的缺陷: 1. ArrayList底層使用 數組 來存儲元素,如果不熟悉可以來再看看: ArrayList與順序表-CSDN…

一些常見的網絡故障

📑打牌 : da pai ge的個人主頁 🌤?個人專欄 : da pai ge的博客專欄 ??寶劍鋒從磨礪出,梅花香自苦寒來 ??運維工程師的職責:監…

【數據分析】Python數據分析實戰:從零開始構建數據管道

Python數據分析實戰:從零開始構建數據管道 引言一、數據獲取二、數據清洗三、數據分析四、數據可視化五、案例研究:預測股票價格結論 我嘗試訪問您所提供的鏈接,但似乎該鏈接指向的內容已失效或被移除,因此無法直接獲取并閱讀該文…

【iOS】——ARC源碼探究

一、ARC介紹 ARC的全稱Auto Reference Counting. 也就是自動引用計數。使用MRC時開發者不得不花大量的時間在內存管理上,并且容易出現內存泄漏或者release一個已被釋放的對象,導致crash。后來,Apple引入了ARC。使用ARC,開發者不再…

BUUCTF逆向wp [HDCTF2019]Maze

第一步 查殼,本題是32位,有殼,進行脫殼。 第二步 這里的 jnz 指令會實現一個跳轉,并且下面的0EC85D78Bh被標紅了,應該是一個不存在的地址,這些東西就會導致IDA無法正常反匯編出原始代碼,也稱…

中文科技核心論文發表

中文科技核心論文題目如下: 1.混凝土結構用纖維增強塑料筋的耐久性評述:適合建筑、結構、材料等專業 2.建筑工程用阻燃塑料的研究進展:適合建筑、材料專業 3.纖維增強熱塑性塑料在面部護具中的應用研究:適合化工、醫學、材料等專…

springcloud2021.x使用nacos做配置中心

spirngcloud2021.0.5使用nacos做配置中心遇到的問題 環境 jdk1.8,spring-boot 2.6.13,spring-cloud-alibaba 2021.0.5.0 ,spring-cloud 2021.0.5 方案一 application.properties # Nacos幫助文檔: https://nacos.io/zh-cn/docs/concepts…

C++中的condition_variable:條件變量

理解 C 中的條件變量(Condition Variable) 在多線程編程中,我們常常需要一個線程等待某個條件的變化,比如等待數據的生成或某個標志位的設置。如果沒有條件變量(condition_variable),線程可能會…

啟智暢想火車類集裝箱號碼識別技術,軟硬件解決方案

集裝箱號碼識別需求: 實時檢測車皮號、火車底盤號碼、集裝箱號碼,根據火車類型分為以下三種情況: 1、純車皮,只檢測車皮號; 2、火車拉貨箱(半車皮),檢測車皮號集裝箱號碼&#xff1b…

如何從0搭建一個Ai智體day01

📚《AI破局行動|AI智能體(coze)實戰手冊》: https://d16rg8unadx.feishu.cn/wiki/XQESwHW5HiPFlrkZbkqc0Xp7nEb 說明 這個是授權訪問的,想學習加我 微信/ Github:** watchpoints 📺Day1-大圣直播…

玩轉HarmonyOS NEXT之常用布局三

輪播(Swiper) Swiper組件提供滑動輪播顯示的能力。Swiper本身是一個容器組件,當設置了多個子組件后,可以對這些子組件進行輪播顯示。通常,在一些應用首頁顯示推薦的內容時,需要用到輪播顯示的能力。 針對…

git開發流程

分支介紹 master - 主分支 所有提供給用戶使用的正式版本,都在這個主分支上發布 開發者在此分支 不可進行 push 操作 dev - 開發分支 日常開發所使用的分支,開發者完成的階段性功能模塊將首先被合并到此分支 此分支亦是團隊內部測試、階段性工作驗證…

Xcode 16 beta3 真機調試找不到 Apple Watch 的嘗試解決

很多小伙伴們想用 Xcode 在 Apple Watch 真機上調試運行 App 時卻發現:在 Xcode 設備管理器中壓根找不到對應的 Apple Watch 設備。 大家是否已將 Apple Watch 和 Mac 都重啟一萬多遍了,還是束手無策。 Apple Watch not showing in XCodeApple Watch wo…

C++基礎語法:STL之容器(1)--容器概述和序列概述

前言 "打牢基礎,萬事不愁" .C的基礎語法的學習 引入 STL是標準模板庫,類模板主要是用來做容器的,所以個人理解:標準模板庫是"標準容器庫".容器是STL的核心 .以<C Prime Plus> 6th Edition(以下稱"本書")內容理解容器. 類模板內容回顧 類…

NineData全面支持PostgreSQL可視化表結構設計

“PostgreSQL 是最像 Oracle 的開源關系型數據庫“&#xff0c;也正因為如此&#xff0c;很多企業都青睞 PostgreSQL&#xff0c;拿它當成 Oracle 的替代品。所以毫無疑問&#xff0c;目前 PostgreSQL 在企業中非常常見。 對于直接接觸 PostgreSQL 的開發人員而言&#xff0c;…

echarts多柱堆疊的X軸順序

在一些圖表場景中&#xff0c;需要顯示多柱堆疊的數據&#xff0c;那么X軸上每一段單位區域內會有多根柱子&#xff0c;每一根柱子標識不同的數量項含義&#xff0c;那么怎樣控制這幾根柱的左右順序呢&#xff1f; 其實這跟echarts的option里的series由關&#xff0c;開始我以為…