在React中使用Sass實現Css樣式管理-10

0. 什么是Sass

Sass(Syntactically Awesome Stylesheets)是一個 CSS 預處理器,是 CSS 擴展語言,可以幫助我們減少 CSS 重復的代碼,節省開發時間:

  • Sass 引入合理的樣式復用機制,可以節約很多時間來重復。
  • 支持變量和函數,利用代碼簡潔。

有兩種文件后綴名,.sass和.sccs區別在于前者用縮進代替了后者的{}和分號,建議用sccs后續來書寫sass代碼

  • sass,不使用大括號和分號。
  • scss,與css文件格式差不多,使用大括號和分號(推薦)。

在這里插入圖片描述

1. 在React中使用

  • 正常使用
# 安裝cnpm install --save-dev sass# 新建文件
App.scss
.button{color:red
}# js中使用
import "./Index.scss";
<div className={color}></div>
  • 模塊使用
# 安裝
npm install --save-dev css-loader style-loader# 新建文件
App.scss
.button{color:red
}# js中使用
import styles from './App.scss'
<div className={styles.button></div>

還需要配置webpack.config.js

{test: /\.css$/,use: ['style-loader',{loader: 'css-loader',options: {importLoaders: 1,modules: {localIdentName: '[name]__[local]__[hash:base64:5]', // 修改CSS類名的生成格式},},},'postcss-loader', // 如果有其他的CSS預處理器,比如autoprefixer,可以在此添加],
}

這東西語法并不難,基本2小時就學會了。

2. 基本語法

基本數據

  • 數字,1, 2, 13, 10px
  • 字符串,有引號字符串與無引號字符串,“foo”, ‘bar’, baz
  • 顏色,blue, #04a3f9, rgba(255,0,0,0.5)
  • 布爾型,true, false
  • 空值,null
  • 數組 (list),用空格或逗號作分隔符,1.5em 1em 0 2em, Helvetica, Arial, sans-serif
  • maps, 相當于 JavaScript 的 object,(key1: value1, key2: value2)
.item{width:100%;background:#ffffff;line-height:40px;
}

注釋

  1. 單行注釋: / / css文件里不會顯示 壓縮方式的css不會顯示
  2. 多行注釋: /**/ css文件里會顯示 壓縮方式的css不會顯示
  3. 強制注釋:/* ! */ css文件里會顯示 壓縮方式的css會顯示
/*
多行注釋
*///單行注釋

運算

所有數據類型均支持相等運算 == 或 !=,此外,每種數據類型也有其各自支持的運算方式。

  • 數字:數字的加減乘除、取整等運算 (+, -, *, /, %),如果必要會在不同單位間轉換值。 關系運算 <, >, <=, >= 也可用于數字運算;
.box {width: 50px + 50px;height: 100px - 50px;margin-top: 10px * 10; // 這里不能兩個都帶單位,否則是100px*px這種不合法的值padding-top: (100px / 2) ;// css會將/認為是合法的,所以需要加括號
}
  • 顏色:顏色值的運算是分段計算進行的,也就是分別計算紅色,綠色,以及藍色的值。例如 #010203 + #040506,則計算 01 + 04 = 05、02 + 05 = 07、03 + 06 = 09,結果為#050709;
.color1{color: #010120 + #234234;
}
.color2{color: #010120 * 2;
}
.color3{color: rgba(250, 0, 0, 0.75) + rgba(5, 255, 0, 0.75);
}
  • 字符:有引號字符串(位于 + 左側)連接無引號字符串,運算結果是有引號的,相反,無引號字符串(位于 + 左側)連接有引號字符串,運算結果則沒有引號。
.string1:before{font-family: icon + font ;content: "帶引號字符串" + 不帶引號字符串;
}
.string2:before{font-family: icon + font ;content: 不帶引號字符串 + "帶引號字符串";
}
// -------------生成的css代碼-------------
.string1:before {font-family: iconfont;content: "帶引號字符串不帶引號字符串"; 
}
.string2:before {font-family: iconfont;content: 不帶引號字符串帶引號字符串; 
}
  • 布爾: 支持布爾型的 and or 以及 not 運算。
.bool1:before{content: $bool and false;
}
.bool2:before{content: $bool or false;
}
.bool3:before{content: not $bool;
}// -------------生成的css代碼-------------
.bool1:before {content: false; }
.bool2:before {content: true; }
.bool3:before {content: false; }

嵌套.和&

  • 選擇器嵌套
.grandpa {width: 200px;height: 200px;.father {width: 100px;height: 100px;}
}// -------------生成的css代碼-------------
.grandpa {width: 200px;height: 200px;
}
  • 父級選擇器 &
.grandpa .father {width: 100px;height: 100px;
}.box {a {&:hover {color: red;}}
}
// -------------生成的css代碼-------------
.box a:hover {color: red;
}

上述這些用法和原生的.css文件基本沒啥區別

3. 復用相關

$和#變量定義

  • 變量
$dark: #000;
$side: left;
.box {color: $dark;
}.box2 {background: $dark;border-#{$side}-radius: 5px;
}
  • 插值
$selectName:'.foo';
$attrName:'width';
$content: "content內容";#{$selectName}:before {#{$attrName}:12px;content: "#{$content}";
}
// -------------生成的css代碼-------------
.foo:before {width: 12px;content: "content內容"; }

@function自定義函數

$width : 400;
$multiple: 2;
@function app_width($width,$multiple){@return $width * $multiple px;
}
#app{width: app_width($width,$multiple);
}// -------------生成的css代碼-------------
#app { width: 800 px; }

@mixin和@include復用

// 定義一個mixin
@mixin box-style {width: 200px;height: 200px;background: #000;
}
// 使用
.box {@include box-style;// 當然也可以繼續在這里添加樣式border-radius: 5px;
}// -------------生成的css代碼-------------
.box {width: 200px;height: 200px;background: #000;border-radius: 5px;
}
  • 帶參數
$box-width: 200px;
$box-height: 200px;
// 定義一個mixin
@mixin box ($width, $height) {width: $width;height: $height;
}
// 使用
.box {// 1. 第一種用法, 直接將css樣式寫入@include box(200px, 200px);// 2. 第二種, 將定義好的變量寫入@include box($box-width, $box-height);
}// -------------生成的css代碼-------------
.box {width: 200px;height: 200px;
}

@extend繼承

支持多重繼承,同名則覆蓋

.error{color:red;
}
.success{color:green;
}
.msg{@extend .error;@extend .success;color: #555555;
}// -------------生成的css代碼-------------
.error, .msg {color: red; }.success, .msg {color: green; }.msg {color: #555555; }

@import引入文件

如果一個頁面需要使用其他頁面的樣式,sass可以導入其他的scss文件,scss會把他們編譯成一個css文件。這樣在開發中可以把一個頁面的樣式分割成多個scss文件,然后在頁面的scss文件中導入其他scss,可以實現css的模塊化開發。注意不能導入其它類型的文件或遠程文件。

//@import 語法
@import "test2.scss";
// 導入多文件
@import "test2.scss", "test3.scss";

4. 編程相關

@if @else條件語句

.box {@if 1+1 == 2 {color: red;} @else if 1+1 == 3 {color: blud;} @else {color: pink;}
}
// -------------生成的css代碼-------------
.box {color: red;
}

@for循環

@for $i from 1 through 3 {.item-#{$i} {width: 2em * $i;}
}// -------------生成的css代碼-------------
.item-1 { width: 2em; }
.item-2 { width: 4em; }
.item-3 {  width: 6em; }

@each迭代

$list : ['one','two'];
@each $i in $list {.item-#{$i}:before {content: $i;}
}// -------------生成的css代碼-------------
.item-one:before {content: "one"; 
}.item-two:before {content: "two"; 
}

@debug、@warn、@error調試

打印到標準錯誤輸出流。

  • debug
@debug 10em + 12em;
  • warn
@mixin adjust-location($x, $y) {@if unitless($x) {@warn "Assuming #{$x} to be in pixels";$x: 1px * $x;}@if unitless($y) {@warn "Assuming #{$y} to be in pixels";$y: 1px * $y;}position: relative; left: $x; top: $y;
}
  • error
@mixin adjust-location($x, $y) {@if unitless($x) {@error "$x may not be unitless, was #{$x}.";}@if unitless($y) {@error "$y may not be unitless, was #{$y}.";}position: relative; left: $x; top: $y;
}

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

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

相關文章

【HM】簡單說明白:裝飾器@State、@Prop、@Link、@Provide、@Consume修飾變量,@Watch監聽變量狀態發生變化

首先要明白什么是“狀態變量”&#xff1f;即被狀態裝飾器&#xff08;State、Prop、Link、Provide、Consume&#xff09;修飾的變量&#xff0c;比如 State str : string; str就是狀態變量。狀態變量值的改變會引起UI界面重新渲染。 State State裝飾的變量&#xff0c;是私…

C++之“流”-第2課-C++和C標準輸入輸出同步

為什么C和C的標準輸入輸出不同步時&#xff0c;數據會混亂&#xff1f;同步會帶來多大性能損失&#xff1f;為什么說這個損失通常不用太在乎&#xff1f; 0. 課堂視頻 C之“流”-第2課&#xff1a;和C輸入輸出的同步 1. 理解cin和cout的類型與創建過程 std::cout 是std::ostre…

Ubuntu系統Discover軟件中心簡介

Discover軟件中心是Ubuntu操作系統中默認的軟件管理工具&#xff0c;它提供了一個圖形用戶界面(GUI)來幫助用戶瀏覽、搜索、安裝和卸載軟件包。Discover軟件中心是Ubuntu軟件中心(Ubuntu Software Center)的繼承者&#xff0c;它在Ubuntu 16.04 LTS版本中首次被引入&#xff0c…

添加、修改和刪除字典元素

自學python如何成為大佬(目錄):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 由于字典是可變序列&#xff0c;所以可以隨時在字典中添加“鍵-值對”。向字典中添加元素的語法格式如下&#xff1a; dictionary[key] value 參數…

You don‘t have enough free space或者no space left on device異常

1.磁盤空間不足 Linux安裝軟件顯示 You dont have enough free space 或者docker拉鏡像時&#xff0c;出現磁盤空間不足的情況 no space left on device 如果你是ubuntu系統。查看磁盤空間 df -h 多半是這個目錄滿了/dev/mapper/ubuntu--vg-ubuntu--lv 大多情況我們只希望擴…

學習編程對英語要求高嗎?

學習編程并不一定需要高深的英語水平。我這里有一套編程入門教程&#xff0c;不僅包含了詳細的視頻講解&#xff0c;項目實戰。如果你渴望學習編程&#xff0c;不妨點個關注&#xff0c;給個評論222&#xff0c;私信22&#xff0c;我在后臺發給你。 雖然一些編程資源和文檔可能…

typora自動生成標題序號(修改V1.0)

目錄 帶序號效果圖 解決方法 帶序號效果圖 解決方法 1.進入文件夾&#xff1a;文件–>偏好設置–>外觀–>主題–>打開主題文件夾 2.如果沒有base.user.css文件&#xff0c;新建一個。如果有直接用記事本打開&#xff0c;把下面代碼拷貝進去保存。 /** initiali…

【JUC編程】-多線程和CompletableFuture的使用

多線程編程 文章目錄 多線程編程[toc]引言創建多線程的方式繼承Thread類實現Runnable接口實現Callable接口Callable和Runnable的區別 Lambda表達式 線程的實現原理Future&FutureTask具體使用submit方法Future到FutureTask類Future注意事項局限性 CompletionService引言使用…

第八大奇跡

目錄 題目描述 輸入描述 輸出描述 輸入輸出樣例 示例 輸入 輸出 運行限制 原題鏈接 代碼思路 題目描述 在一條 R 河流域&#xff0c;繁衍著一個古老的名族 Z。他們世代沿河而居&#xff0c;也在河邊發展出了璀璨的文明。 Z 族在 R 河沿岸修建了很多建筑&#xff0c…

java如何向數組中插入元素

java的數組是不可改變的&#xff0c;因此如果要向數組中插入新的元素&#xff0c;需要新建一個數組&#xff0c;新的數組元素個數減去老數組元素個數的差大于等于要插入新的元素數量。 假如說要插入一個數組元素&#xff0c;需要把新元素插入到中間&#xff0c;把新的數組分為…

Vue組件通訊?組件中通過 provide 來提供變量,然后在?組件中通過 inject 來注?變量例子

在Vue中&#xff0c;provide 和 inject 主要用于依賴注入&#xff0c;允許祖先組件向其所有子孫組件提供一個依賴&#xff0c;而不論組件層次有多深。這在開發高階插件/組件庫時特別有用。 以下是一個簡單的例子&#xff0c;演示了如何在父組件中使用 provide 提供變量&#x…

軟件測試面試題(八)

一&#xff1a;TestDirector有哪些功能&#xff0c;如何對軟件測試過程進行管理&#xff1f; 需求管理 定義測試范圍 定義需求樹 描述需求樹的功能點 測試計劃 定義測試目標和測試策略 分解應用程序&#xff0c;建立測試計劃樹 確定每個功能點的測試方法 將每個功能點連接…

Ps 濾鏡:消失點

Ps菜單&#xff1a;濾鏡/消失點 Filter/Vanishing Point 快捷鍵&#xff1a;Ctrl Alt V 兩條平行的鐵軌或兩排樹木連線相交于很遠很遠的某一點&#xff0c;這點在透視圖中叫做“消失點”&#xff0c;也稱為“滅點”。 消失點 Vanishing Point濾鏡主要用于在圖像中處理具有透視…

C++入門3——類與對象(2)

1.類的6個默認成員函數 如果一個類中什么成員都沒有&#xff0c;簡稱為空類。可是空類中真的什么都沒有嗎&#xff1f; 其實并不是的&#xff0c;任何類在什么都不寫時&#xff0c;編譯器會自動生成以下6個默認成員函數。 默認成員函數&#xff1a;用戶沒有顯式實現&#xf…

libmodbus開發庫介紹

目錄 功能概要源碼獲取源碼內容結構源碼與移植 功能概要 libmodbus是一個免費的跨平臺支持RTU和TCP的Modbus庫&#xff0c;遵循LGPL V2.1協議。libmodbus支持Linux、Mac Os X、FreeBSD、QNX和Windows等操作系統。libmodbus可以向符合Modbus協議的設備發送和接收數據&#xff0…

vector的reverse和resize區別

一 代碼 #include "stdafx.h" #include <iostream> #include <vector> using namespace std;class TEST{ public:TEST(){std::cout << "construct t" << std::endl;} };int main() {std::cout << "hello,world" …

《Python偵探手冊:用正則表達式破譯文本密碼》

在這個信息爆炸的時代&#xff0c;每個人都需要一本偵探手冊。阿佑今天將帶你深入Python的正則表達式世界&#xff0c;教你如何像偵探一樣&#xff0c;用代碼破解文本中的每一個謎題。從基礎的字符匹配到復雜的數據清洗&#xff0c;每一個技巧都足以讓你在文本處理的領域中成為…

【一站式學會Kotlin】第十三節:kotlin語言中的解構

作者介紹: 百度資深Android工程師T6,在百度任職7年半。 目前:成立趙小灰代碼工作室,歡迎大家找我交流Android、微信小程序、鴻蒙項目。= 一:通俗易懂的人工智能教程:https://www.captainbed.cn/nefu/ 點一下,打開新世界的大門。 二:【一站式學會Kotlin】免費領取:作者…

SQLSyntaxErrorException: FUNCTION dbname.to_timestamp does not exist

由于MySQL數據庫高版本&#xff08;如8.x&#xff09;中有to_timestamp(&#xff09;函數&#xff0c;低版本中&#xff08;如5.7.x&#xff09;沒有這個函數&#xff0c;服務運行報錯。 自己創建函數實現功能&#xff0c;創建語句如下&#xff1b; DELIMITER // CREATE FUN…

如何使用ChatGPT撰寫短視頻爆款文案

在這個快速發展的數字時代&#xff0c;短視頻已經成為最受歡迎的娛樂和信息獲取方式之一。對于內容創作者來說&#xff0c;如何制作出爆款短視頻&#xff0c;吸引更多觀眾的注意力&#xff0c;是他們面臨的一大挑戰。文案&#xff0c;作為視頻內容的靈魂&#xff0c;起著至關重…