【Sass/SCSS】我花4小時整理了的Sass的函式
部落格說明
文章所涉及的資料來自網際網路整理和個人總結,意在於個人學習和經驗彙總,如有什麼地方侵權,請聯絡本人刪除,謝謝!
說明
Sass 定義了各種型別的函式,這些函式可以通過 CSS 語句直接呼叫。
可以看到Sass的函式功能已經相當豐富了。
整理了Sass的主要函式,重點在於後面的顏色函式,設計非常的銀杏!
String(字串) 函式
quote(string)
給字串新增引號
quote(hello) //"hello"
unquote(string)
移除字串的引號
unquote("hello") //hello
str-index(string, substring)
返回 substring 子字串第一次在 string 中出現的位置。如果沒有匹配到子字串,則返回 null。區分大小寫。
str-index(abcd, a) // 1
str-index(abcd, ab) // 1
str-index(abcd, X) // null
str-insert(string, insert, index)
在字串 string 中 index 位置插入 insert。
str-insert("Hello world!", " xiaoming", 6) //"Hello xiaoming world!"
str-length(string)
返回字串的長度。
str-length("hello") //5
str-slice(string, start, end)
從 string 中擷取子字串,通過 start-at 和 end-at 設定始末位置,未指定結束索引值則預設擷取到字串末尾。
是不是感覺合js的操作有些類似。
str-slice("abcd", 2, 3) => "bc"
str-slice("abcd", 2) => "bcd"
str-slice("abcd", -3, -2) => "bc"
str-slice("abcd", 2, -2) => "bc"
to-lower-case(string)
將字串轉成小寫
to-lower-case("HELLO") // "hello"
to-upper-case(string)
將字串轉成大寫
to-upper-case("hello") // "HELLO"
unique-id()
返回一個無引號的隨機字串作為 id。
不過也只能保證在單次的 Sass 編譯中確保這個 id 的唯一性。
unique-id() // 3a153b3ds
數字函式
abs(number)
返回一個數值的絕對值。
abs(13) // 13
abs(-13) // 13
comparable(num1, num2)
返回一個布林值,判斷 num1 與 num2 是否可以進行比較 ,注意是否可以比較,不是比較的結果。
comparable(15px, 10px) // true
comparable(20mm, 1cm) // true
comparable(35px, 2em) // false
ceil(number)
向上取整 。
ceil(13.24) //14
floor(number)
向下取整 。
floor(15.84) // 15
max(number...)
返回最大值 。
max(5, 7, 9, 0, -3, -7) // 9
min(number...)
返回最小值 。
min(7, 2, 0, -2, -7) // -7
percentage(number)
將數字轉化為百分比的表達形式。
percentage(1.2) // 120
random()
返回 0-1 區間內的小數。
random() // 0.2783
random(number)
返回 1 至 number 之間的整數,包括 1 和 limit。
random(10) // 4
round(number)
返回最接近該數的一個整數,四捨五入。
round(15.20) // 15
round(15.80) // 16
列表(List)函式
三大注意點:
1、Sass 列表(List)函式用於處理列表,可以訪問列表中的值,向列表新增元素,合併列表等。
2、Sass 列表是不可變的,因此在處理列表時,返回的是一個新的列表,而不是在原有的列表上進行修改。
3、列表的起始索引值為 1,記住不是 0。
append(list, value, [separator])
將單個值 value 新增到列表尾部。separator 是分隔符,預設會自動偵測,或者指定為逗號或空格。
append((a b c), d) // a b c d
append((a b c), (d), comma) // a, b, c, d
index(list, value)
返回元素 value 在列表中的索引位置。
index(a b c, b) // 2
index(a b c, f) // null
is-bracketed(list)
判斷列表中是否有中括號
is-bracketed([a b c]) // true
is-bracketed(a b c) // false
list-separator(list)
返回一列表的分隔符型別。可以是空格或逗號。
list-separator(a b c) // "space"
list-separator(a, b, c) // "comma"
join(list1, list2, [separator, bracketed])
合併兩列表,將列表 list2 新增到列表 list1 的末尾。
separator 是分隔符,預設會自動偵測,或者指定為逗號或空格。
bracketed 預設會自動偵測是否有中括號,可以設定為 true 或 false。
join(a b c, d e f) // a b c d e f
join((a b c), (d e f), comma) // a, b, c, d, e, f
join(a b c, d e f, $bracketed: true) // [a b c d e f]
length(list)
返回列表的長度
length(a b c) // 3
set-nth(list, n, value)
設定列表第 n 項的值為 value。
set-nth(a b c, 2, x) // a x c
nth(list, n)
獲取第 n 項的值。
nth(a b c, 3) // c
zip(lists)
將多個列表按照以相同索引值為一組,重新組成一個新的多維度列表。這個排列組合非常的人性,需要安排!
zip(1px 2px 3px, solid dashed dotted, red green blue)
// 1px solid red, 2px dashed green, 3px dotted blue
Map(對映)函式
Sass Map 是不可變的,因此在處理 Map 物件時,返回的是一個新的 Map 物件,而不是在原有的 Map 物件上進行修改。
Map(對映)物件是以一對或多對的 key/value 來表示。
瞧!key/value這不就來了嗎
map-get(map, key)
返回 Map 中 key 所對應的 value(值)。如沒有對應的 key,則返回 null 值。
$font-sizes: ("small": 12px, "normal": 18px, "large": 24px)
map-get($font-sizes, "small") // 12px
map-has-key(map, key)
判斷 map 是否有對應的 key,存在返回 true,否則返回 false。
$font-sizes: ("small": 12px, "normal": 18px, "large": 24px)
map-has-key($font-sizes, "big") // false
map-keys(map)
返回 map 中所有的 key 組成的佇列。
$font-sizes: ("small": 12px, "normal": 18px, "large": 24px)
map-keys($font-sizes) // "small", "normal, "large"
map-values(map)
返回 map 中所有的 value 並生成一個佇列。
$font-sizes: ("small": 12px, "normal": 18px, "large": 24px)
map-values($font-sizes) // 12px, 18px, 24px
map-merge(map1, map2)
合併兩個 map 形成一個新的 map 型別,即將 map2 新增到 map1的尾部
$font-sizes: ("small": 12px, "normal": 18px, "large": 24px)
$font-sizes2: ("x-large": 30px, "xx-large": 36px)
map-merge($font-sizes, $font-sizes2)
//"small": 12px, "normal": 18px, "large": 24px, "x-large": 30px, "xx-large": 36px
map-remove(map, keys...)
移除 map 中的 keys,多個 key 使用逗號隔開。
$font-sizes: ("small": 12px, "normal": 18px, "large": 24px)
map-remove($font-sizes, "small") // ("normal": 18px, "large": 24px)
map-remove($font-sizes, "small", "large") // ("normal": 18px)
選擇器函式
這個可算得上是高階操作了,沒有見過其他大神怎麼去使用。
is-superselector(super, sub)
比較兩個選擇器匹配的範圍,即判斷 super 選擇器是否包含了 sub 選擇器所匹配的範圍,是的話返回 true,否則返回 false。
is-superselector("div", "div.myInput") // true
is-superselector("div.myInput", "div") // false
is-superselector("div", "div") // true
selector-append(selectors)
將第二個 (也可以有多個) 新增到第一個選擇器的後面。 selector.
selector-append("div", ".myInput") // div.myInput
selector-append(".warning", "__a") 結果: .warning__a
selector-nest(selectors)
返回一個新的選擇器,該選擇器通過提供的列表選擇器生成一個巢狀的列表。
selector-nest("ul", "li") // ul li
selector-nest(".warning", "alert", "div") // .warning div, alert div
selector-parse(selector)
將字串的選擇符 selector 轉換成選擇器佇列。
selector-parse("h1 .myInput .warning") // ('h1' '.myInput' '.warning')
selector-replace(selector, original, replacement)
給定一個選擇器,用replacement 替換 original 後返回一個新的選擇器佇列。
selector-replace("p.warning", "p", "div") // div.warning
selector-unify(selector1, selector2)
將兩組選擇器合成一個複合選擇器。如兩個選擇器無法合成,則返回 null 值。
selector-unify("myInput", ".disabled") // myInput.disabled
selector-unify("p", "h1") // null
simple-selectors(selectors)
將合成選擇器拆為單個選擇器。
simple-selectors("div.myInput") // div, .myInput
simple-selectors("div.myInput:before") // div, .myInput, :before
顏色函式(一)顏色設定
對顏色的設定和編輯永遠是前端設計的首要一步。
rgb(red, green, blue)
建立一個 Red-Green-Blue (RGB) 色。其中 R 是 "red" 表示紅色,而 G 是 "green" 綠色,B 是 "blue" 藍色。
rgb(0, 255, 255);
rgba(red, green, blue, alpha)
根據紅、綠、藍和透明度值建立一個顏色。
rgba(0, 255, 255, 0.3);
hsl(hue, saturation, lightness)
通過色相(hue)、飽和度(saturation)和亮度(lightness)的值建立一個顏色。
hsl(120, 100%, 50%); // 綠色
hsl(120, 100%, 75%); // 淺綠色
hsl(120, 100%, 25%); // dark green
hsl(120, 60%, 70%); // 柔和的綠色
hsla(hue, saturation, lightness, alpha)
通過色相(hue)、飽和度(saturation)、亮度(lightness)和透明(alpha)的值建立一個顏色。
hsl(120, 100%, 50%, 0.3); // 綠色帶有透明度
hsl(120, 100%, 75%, 0.3); // 淺綠色帶有透明度
grayscale(color)
將一個顏色變成灰色,相當於 desaturate( color,100%)。
grayscale(#7fffd4); // #c6c6c6
complement(color)
返回一個補充色,相當於adjust-hue($color,180deg)。
complement(#7fffd4); // #ff7faa
invert(color, weight)
返回一個反相色,紅、綠、藍色值倒過來,而透明度不變。
invert(white); // black
顏色函式(二)顏色獲取
看到下面這些引數,你會發現,這不是我美顏的常用設定嗎,這我熟呀。
red(color)
從一個顏色中獲取其中紅色值(0-255),可用於取出某個hex顏色中的紅色值。
red(#7fffd4); // 127
red(red); // 255
green(color)
從一個顏色中獲取其中綠色值(0-255)。
green(#7fffd4); // 255
green(blue); // 0
blue(color)
從一個顏色中獲取其中藍色值(0-255)。
blue(#7fffd4); // 212
blue(blue); // 255
hue(color)
返回顏色在 HSL 色值中的角度值 (0deg - 255deg)。
hue(#7fffd4); // 160deg
saturation(color)
獲取一個顏色的飽和度值(0% - 100%)。
saturation(#7fffd4); // 100%
lightness(color)
獲取一個顏色的亮度值(0% - 100%)。
lightness(#7fffd4); // 74.9%
alpha(color)
返回顏色的alpha,返回值為0 或1。
alpha(#7fffd4); // 1
opacity(color)
獲取顏色透明度值(0-1)。
opacity(rgba(127, 255, 212, 0.5); // 0.5
顏色函式(三)顏色操作
mix(color1, color2, weight)
把兩種顏色混合起來。
weight 引數必須是 0% 到 100%。預設 weight 為 50%,表明新顏色各取 50% color1 和 color2 的色值相加。如果 weight 為 25%,那表明新顏色為 25% color1 和 75% color2 的色值相加。
adjust-hue(color, degrees)
通過改變一個顏色的色相值(-360deg - 360deg),建立一個新的顏色。
adjust-hue(#7fffd4, 80deg); // #8080ff
rgba(color, alpha)
根據紅、綠、藍和透明度值建立一個顏色。
rgba(#7fffd4, 30%); // rgba(127, 255, 212, 0.3)
lighten(color, amount)
通過改變顏色的亮度值(0% - 100%),讓顏色變亮,建立一個新的顏色。
darken(color, amount)
通過改變顏色的亮度值(0% - 100%),讓顏色變暗,建立一個新的顏色。
saturate(color, amount)
提高傳入顏色的色彩飽和度。等同於 adjust-color( color, saturation: amount)
desaturate(color, amount)
調低一個顏色的飽和度後產生一個新的色值。同樣,飽和度的取值區間在 0% ~ 100%。等同於 adjust-color(color, saturation: -amount)
opacify(color, amount)
降低顏色的透明度,取值在 0-1 之。等價於 adjust-color(color, alpha: amount)
fade-in(color, amount)
降低顏色的透明度,取值在 0-1 之。等價於 adjust-color(color, alpha: amount)
transparentize(color, amount)
提升顏色的透明度,取值在 0-1 之間。等價於 adjust-color(color, alpha: -amount)
fade-out(color, amount)
提升顏色的透明度,取值在 0-1 之間。等價於 adjust-color(color, alpha: -amount)
總結
函式那麼多,記肯定是記不住的,只有是實際開發過程中使用到,當然也可以儘可能的去使用,對scss的函式的熟悉感才會有比較明顯的進步。總結了一遍,有許多用過的,有部分看到別人用過的,有部分沒有看到過的,慢慢明白是怎樣一回事了,這可能就是這篇文章的收穫吧。
感謝
萬能的網路
公眾號-歸子莫,小程式-小歸部落格