国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
複雜的映射語法
嵌套列表語法
複雜的映射循環(huán)
嵌套列表循環(huán)
缺失值
查詢特定列表
缺失映射函數(shù)
Sass映射和嵌套列表之間的主要區(qū)別是什麼?
如何使用Sass映射?
我可以像嵌套列表一樣嵌套Sass映射嗎?
如何迭代Sass映射?
使用Sass映射而不是嵌套列表的優(yōu)點是什麼?
我可以將嵌套列表轉(zhuǎn)換為Sass映射嗎?
如何在Sass中使用嵌套列表?
我可以同時使用Sass映射和嵌套列表嗎?
使用Sass映射或嵌套列表有什麼限制?
如何在使用Sass映射或嵌套列表之間進行選擇?
首頁 web前端 css教學 SASS地圖與嵌套列表

SASS地圖與嵌套列表

Feb 24, 2025 am 08:46 AM

Sass Maps vs. Nested Lists

核心要點

  • Sass映射和嵌套列表都是Sass中的數(shù)據(jù)結(jié)構(gòu),映射在Sass 3.3中引入。映射提供鍵值對,允許更複雜的數(shù)據(jù)存儲,而嵌套列表是更簡單的結(jié)構(gòu),可以保存複雜數(shù)據(jù),但缺少鍵值配對。
  • 儘管映射增加了複雜性,但由於它們能夠存儲各種數(shù)據(jù)(例如斷點寬度、顏色值、網(wǎng)格佈局、類型比例和其他響應(yīng)式排版細節(jié)),因此它們變得流行起來。另一方面,嵌套列表由於其簡單性和較少的輸入而更實用。
  • 使用Sass映射的主要優(yōu)點之一是能夠直接訪問特定值,這使得代碼更有效率且更易於閱讀。但是,嵌套列表編寫和維護起來可能更快,但它們?nèi)狈τ成涞腻e誤檢查和詳細查詢功能。
  • 雖然嵌套列表在輸入方面可能更高效,但它們需要絕對確定每個列表將包含的項目數(shù)量及其順序。嵌套列表中的缺失值可能導(dǎo)致Sass不報告的錯誤,而對於映射,即使缺少一個值,map-get()函數(shù)仍然可以提供所需的值。

本文標題可能會讓一些人感到意外。如果您是Sass老手,您可能還記得使用列表的列表來模擬嵌套數(shù)據(jù)數(shù)組的日子(在Ruby-Sass-3.3之前)。 (Ruby) Sass 3.3添加了一種名為映射的新數(shù)據(jù)類型。列表的列表可以以嵌套格式保存複雜數(shù)據(jù),但沒有鍵值配對。映射添加了鍵值對,並讓我們創(chuàng)建數(shù)據(jù)數(shù)組。

隨著映射的出現(xiàn),我們許多Sass用戶開始將所有內(nèi)容都放入映射中(並且有充分的理由?。?。所有斷點寬度、顏色值、網(wǎng)格佈局、類型比例和其他響應(yīng)式排版細節(jié)都可以放入映射中!

現(xiàn)在Sass有了鍵值對映射,還有使用列表的列表的好理由嗎?一個理論上的原因是向後兼容性:如果您的Sass可能由安裝了較舊版本的開發(fā)人員維護,列表將幫助他們。然而,在實踐中,Sass版本通常由package.json或其他項目配置控制,並且Ruby gem只需一個命令即可更新(gem update sass)。

您可能選擇使用嵌套列表而不是映射的一個更實際的原因是輸入較少。讓我們比較一下映射和嵌套列表,看看它們在各自語法和循環(huán)遍歷方式上的比較。

語法比較

在我們的示例中,讓我們創(chuàng)建一個控制響應(yīng)式排版的 數(shù)據(jù)結(jié)構(gòu)。它將存儲四個斷點(好吧,一個是最小的默認視圖)。對於每個斷點,我們將存儲最小寬度、最大寬度、基本字體大小和基本行高。

複雜的映射語法

以下是我們將數(shù)據(jù)存儲在映射中的方法。一個大型映射將包含四個鍵(斷點標籤),其值是我們需要存儲和使用的變量的映射。以這種可讀的格式,我們有超過450個字符和26行。

<code>$breakpoint-map: (
  small: (
    min-width: null,
    max-width: 479px,
    base-font: 16px,
    vertical-rhythm: 1.3
  ),
  medium: (
    min-width: 480px,
    max-width: 959px,
    base-font: 18px,
    vertical-rhythm: 1.414
  ),
  large: (
    min-width: 960px,
    max-width: 1099px,
    base-font: 18px,
    vertical-rhythm: 1.5
  ),
  xlarge: (
    min-width: 1100px,
    max-width: null,
    base-font: 21px,
    vertical-rhythm: 1.618
  )
);</code>

嵌套列表語法

存儲相同數(shù)據(jù)的嵌套列表要短得多。但是,我們不再將鍵附加到數(shù)據(jù),因此我們必須依賴於循環(huán)遍歷它或使用nth()函數(shù)調(diào)用它。也就是說,它比映射短得多:少於180個字符,只有6行。

<code>$breakpoint-list: (
  (small, null, 479px, 16px, 1.3),
  (medium, 480px, 959px, 18px, 1.414),
  (large, 960px, 1099px, 18px, 1.5),
  (xlarge, 1100px, null, 21px, 1.618)
);</code>

循環(huán)比較

在編寫數(shù)據(jù)結(jié)構(gòu)時,編寫列表大約只需要編寫映射時間的三分之一。但是,如果我們需要循環(huán)遍歷這些值,那又如何比較呢?

複雜的映射循環(huán)

我們可以使用以下代碼循環(huán)遍歷此映射中的頂級項目:

<code>@each $label, $map in $breakpoint-map {}</code>

此行開頭的兩個變量($label$map)在循環(huán)迭代映射中的數(shù)據(jù)時動態(tài)分配。每個頂級數(shù)據(jù)塊有兩個組成部分:鍵和值。我們將鍵分配給$label,並將值(這是一個嵌套映射)分配給$map。在這個循環(huán)中,我們可以使用變量$label$map,它們將自動表示當前條目的鍵和值。

該循環(huán)將迭代四次,每次迭代一個嵌套映射。但是,要從嵌套映射中獲取有用的數(shù)據(jù),我們需要使用map-get()函數(shù)。此函數(shù)採用兩個參數(shù)——映射的名稱和所需鍵的名稱——並返回與該鍵關(guān)聯(lián)的值。它是Sass中PHP的$array['key']$object->key或JavaScript的object.key語法的等效項。

要使用@each迭代所有子映射並將它們的值使用map-get()分配給有用的變量,我們最終得到一個6行、220個字符的循環(huán)。

<code>@each $label, $map in $breakpoint-map {
  $min-width: map-get($map, min-width);
  $max-width: map-get($map, max-width);
  $base-font: map-get($map, base-font);
  $vertical-rhythm: map-get($map, vertical-rhythm);
}</code>

嵌套列表循環(huán)

嵌套列表確實使循環(huán)效率更高。對於映射,我們必須將映射分配給動態(tài)循環(huán)變量,然後使用map-get()將所有值分配給變量,但是對於列表,我們可以快速地將所有值分配給變量。

由於頂級列表中的每個項目都按相同順序具有相同的五個值,因此我們可以立即將每個值分配給動態(tài)變量以在循環(huán)中使用。使用這些變量,我們不需要使用map-get()將子值分配給可用的變量。我們需要的嵌套列表循環(huán)只有兩行,少於100個字符。

<code>@each $label, $min-width, $max-width, $base-font, $vertical-rhythm in $breakpoint-list {
}</code>

嵌套列表警告

嵌套列表是主要的開發(fā)人員性能優(yōu)勢:總的來說,您輸入的內(nèi)容可能不到使用映射時的一半。但是,添加映射到Sass是有原因的:它們提供列表不具備的功能:鍵值映射。

缺失值

如果您要依賴嵌套列表,您必須絕對確定您知道每個列表將包含多少個項目以及它們的順序。讓我們看看如果我們在列表中遺漏了一個項目,上面的示例會發(fā)生什麼:

<code>$breakpoint-map: (
  small: (
    min-width: null,
    max-width: 479px,
    base-font: 16px,
    vertical-rhythm: 1.3
  ),
  medium: (
    min-width: 480px,
    max-width: 959px,
    base-font: 18px,
    vertical-rhythm: 1.414
  ),
  large: (
    min-width: 960px,
    max-width: 1099px,
    base-font: 18px,
    vertical-rhythm: 1.5
  ),
  xlarge: (
    min-width: 1100px,
    max-width: null,
    base-font: 21px,
    vertical-rhythm: 1.618
  )
);</code>

如果我們嘗試運行該代碼,最後一個列表將中斷。它將正確地將“xlarge”分配給$label並將“1100px”分配給$min-width,但隨後它將“21px”分配給$max-width並將“1.618”分配給$base-font,使$vertical-rhythm為空。結(jié)果,我們在最後一個斷點中得到一個無效的字體大小聲明和一個缺少的行高屬性。此外,Sass不會為此報告錯誤,因此我們不知道事情是否成功。如果我們嘗試將最大寬度用於媒體查詢,我們將最終得到字體大小值(只有21px)——我認為這將是一個非常無用的最大寬度!

如果我們改用映射,即使缺少一個值,map-get()函數(shù)也會給我們提供我們需要的東西。這就是我們的權(quán)衡:我們在列表中獲得的簡單性和速度,我們在映射中失去了特異性和防錯性。

查詢特定列表

使用嵌套列表的另一個相關(guān)問題是查詢特定列表。由於映射具有鍵,因此您可以使用map-get()快速訪問任何子映射:

<code>$breakpoint-list: (
  (small, null, 479px, 16px, 1.3),
  (medium, 480px, 959px, 18px, 1.414),
  (large, 960px, 1099px, 18px, 1.5),
  (xlarge, 1100px, null, 21px, 1.618)
);</code>

要從嵌套列表中獲取中等列表的數(shù)據(jù),我們需要一個更複雜的函數(shù):

<code>@each $label, $map in $breakpoint-map {}</code>

該函數(shù)循環(huán)遍歷$breakpoint-list中的所有列表,檢查我們想要標籤的第一個值,如果找到匹配項則返回列表。如果在沒有找到匹配項的情況下到達@each循環(huán)的末尾,它將返回null。它基本上是列表的map-get()的快速自製解釋,它使用第一個值作為偽鍵。

缺失映射函數(shù)

Sass有很多有用的函數(shù)可以處理映射:嵌套列表不存在相同的函數(shù)。例如,您可以使用map-merge()向映射添加其他鍵值對。使用具有共享鍵的map-merge()將更新共享鍵的值。您可以使用join()append()添加一個新列表,但是模擬map-merge()的更新功能將需要另一個自定義Sass函數(shù)。

另一個有用的映射函數(shù)是map-has-key()。此函數(shù)對於驗證依賴於map-get()的任何自定義函數(shù)非常有用。但是,列表沒有可比的函數(shù)。

您可以使用SassyLists模擬列表的映射函數(shù)。 (在Sass添加映射支持之前,此庫提供了這些函數(shù)。)

結(jié)論

由於映射使用鍵值對,因此它們比列表更強大。附加的Sass映射函數(shù)提供了查找數(shù)據(jù)和驗證映射值的實用方法。

嵌套Sass列表編寫和維護起來可能更快,但它們可能不如映射那樣適合錯誤檢查或詳細查詢。大多數(shù)情況下,我認為映射是更好的選擇,儘管冗長性有所增加。對於較小的代碼塊和單次使用循環(huán),我偶爾會使用嵌套列表,但映射更適合項目範圍的設(shè)置和數(shù)據(jù)存儲。

您是否在您的任何工作中比較了映射和嵌套列表,或者重構(gòu)了代碼以優(yōu)先使用一個而不是另一個?在評論中分享您的經(jīng)驗!

您可以在此Sassmeister gist中看到本教程中使用的代碼。

Sass映射與嵌套列表的常見問題解答 (FAQ)

Sass映射和嵌套列表之間的主要區(qū)別是什麼?

Sass映射和嵌套列表都是Sass預(yù)處理器中的強大工具,但它們有明顯的區(qū)別。 Sass映射類似於其他編程語言中的關(guān)聯(lián)數(shù)組,其中每個值都與一個唯一的鍵相關(guān)聯(lián)。這使得檢索、更新和操作數(shù)據(jù)變得容易。另一方面,嵌套列表是一系列值,類似於JavaScript中的數(shù)組。當您需要存儲和迭代一系列值時,它們最適合使用,但它們?nèi)狈τ成涮峁┑闹苯釉L問特定值的功能。

如何使用Sass映射?

要使用Sass映射,您首先需要使用一對括號定義一個映射,每個鍵值對用冒號分隔。例如,$map: (key1: value1, key2: value2)。然後,您可以使用map-get函數(shù)訪問映射中的值,如下所示:map-get($map, key1)。

我可以像嵌套列表一樣嵌套Sass映射嗎?

是的,您可以像嵌套列表一樣嵌套Sass映射。當您想要將相關(guān)數(shù)據(jù)組合在一起時,這尤其有用。要訪問嵌套映射中的值,您需要使用兩次map-get函數(shù):map-get(map-get($map, key1), key2)。

如何迭代Sass映射?

您可以使用@each指令迭代Sass映射。 @each指令採用兩個變量:鍵和值。這是一個示例:@each $key, $value in $map { … }

使用Sass映射而不是嵌套列表的優(yōu)點是什麼?

Sass映射比嵌套列表具有幾個優(yōu)點。它們允許直接訪問特定值,使您的代碼更高效且更易於閱讀。它們還提供用於操作映射的內(nèi)置函數(shù),例如添加、刪除和更新鍵值對。

我可以將嵌套列表轉(zhuǎn)換為Sass映射嗎?

是的,您可以使用map-from-list函數(shù)將嵌套列表轉(zhuǎn)換為Sass映射。此函數(shù)採用一對列表並返回一個映射,其中每一對都是映射中的鍵值對。

如何在Sass中使用嵌套列表?

要在Sass中使用嵌套列表,您首先需要使用一對括號定義一個列表,每個值用空格或逗號分隔。例如,$list: (value1, value2, value3)。然後,您可以使用nth函數(shù)訪問列表中的值,如下所示:nth($list, 1)

我可以同時使用Sass映射和嵌套列表嗎?

是的,您可以同時使用Sass映射和嵌套列表。例如,您可以使用映射來存儲一系列列表,反之亦然。這對於組織複雜的數(shù)據(jù)結(jié)構(gòu)很有用。

使用Sass映射或嵌套列表有什麼限制?

雖然Sass映射和嵌套列表是強大的工具,但它們確實有一些限制。例如,Sass映射不能有重複的鍵,並且映射中鍵的順序不能保證。同樣,如果嵌套列表變得太大或太複雜,則可能難以管理。

如何在使用Sass映射或嵌套列表之間進行選擇?

使用Sass映射或嵌套列表的選擇取決於您的具體需求。如果您需要直接訪問特定值並能夠操作數(shù)據(jù),則Sass映射可能是最佳選擇。如果您只需要存儲和迭代一系列值,則嵌套列表就足夠了。

以上是SASS地圖與嵌套列表的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔相應(yīng)的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

什麼是'渲染障礙CSS”? 什麼是'渲染障礙CSS”? Jun 24, 2025 am 12:42 AM

CSS會阻塞頁面渲染是因為瀏覽器默認將內(nèi)聯(lián)和外部CSS視為關(guān)鍵資源,尤其是使用引入的樣式表、頭部大量內(nèi)聯(lián)CSS以及未優(yōu)化的媒體查詢樣式。 1.提取關(guān)鍵CSS並內(nèi)嵌至HTML;2.延遲加載非關(guān)鍵CSS通過JavaScript;3.使用media屬性優(yōu)化加載如打印樣式;4.壓縮合併CSS減少請求。建議使用工具提取關(guān)鍵CSS,結(jié)合rel="preload"異步加載,合理使用media延遲加載,避免過度拆分與復(fù)雜腳本控制。

如何在無花果中使用Lotties 如何在無花果中使用Lotties Jun 14, 2025 am 10:17 AM

在接下來的教程中,我將向您展示如何在無花果中創(chuàng)建Lottie動畫。我們將使用兩種彩色設(shè)計來超越如何在無花果上進行動畫,然後向您展示如何從Figma到Lottie動畫。您只需要免費無花果

打破邊界:用(s)CSS構(gòu)建湯姆拼圖 打破邊界:用(s)CSS構(gòu)建湯姆拼圖 Jun 13, 2025 am 11:33 AM

我們對其進行了測試,事實證明,至少在低級邏輯和拼圖行為時,Sass可以替換JavaScript。除了地圖,混音,功能和大量數(shù)學外,我們都設(shè)法使我們的Tangram難題栩栩如生,沒有J

外部與內(nèi)部CSS:最好的方法是什麼? 外部與內(nèi)部CSS:最好的方法是什麼? Jun 20, 2025 am 12:45 AM

thebestapphachforcssdepprodsontheproject'sspefificneeds.forlargerprojects,externalcsSissBetterDuoSmaintoMaintainability andReusability; forsMallerProjectsorsingle-pageApplications,InternaltCsmightBemoresobleable.InternalCsmightBemorese.it.it'sclucialtobalancepopryseceneceenceprodrenceprodrenceNeed

我的CSS必須在較低的情況下嗎? 我的CSS必須在較低的情況下嗎? Jun 19, 2025 am 12:29 AM

否,CSSDOESNOTHAVETOBEINLOWERCASE.CHOMENDENS,使用flowercaseisrecommondendendending:1)一致性和可讀性,2)避免使用促進性技術(shù),3)潛在的Performent FormanceBenefits,以及4)RightCollaboraboraboraboraboraboraboraboraboraboraboraboraboraboraboraboraborationWithInteams。

CSS案例靈敏度:了解重要的 CSS案例靈敏度:了解重要的 Jun 20, 2025 am 12:09 AM

cssismostlycaseminemintiment,buturlsandfontfamilynamesarecase敏感。 1)屬性和valueslikeColor:紅色; prenotcase-sensive.2)urlsmustmustmatchtheserver'server'scase,例如

什麼是AutoPrefixer,它如何工作? 什麼是AutoPrefixer,它如何工作? Jul 02, 2025 am 01:15 AM

Autoprefixer是一個根據(jù)目標瀏覽器範圍自動為CSS屬性添加廠商前綴的工具。 1.它解決了手動維護前綴易出錯的問題;2.通過PostCSS插件形式工作,解析CSS、分析需加前綴的屬性、依配置生成代碼;3.使用步驟包括安裝插件、設(shè)置browserslist、在構(gòu)建流程中啟用;4.注意事項有不手動加前綴、保持配置更新、非所有屬性都加前綴、建議配合預(yù)處理器使用。

什麼是CSS計數(shù)器? 什麼是CSS計數(shù)器? Jun 19, 2025 am 12:34 AM

csscounterscanautomationallymentermentermentections和lists.1)usecounter-ensettoInitializize,反插入式發(fā)芽,andcounter()orcounters()

See all articles