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

首頁 web前端 css教學 這個 SCSS 計畫如何從地圖開始保持組織性

這個 SCSS 計畫如何從地圖開始保持組織性

Jan 01, 2025 pm 01:54 PM

在為我的產品 LiveAPI 撰寫文件時,我開始使用 MkDocs,這是一個靜態(tài)網站產生器,可以產生乾淨且專業(yè)的文件。

但是,我發(fā)現它的設計有點單調,因此決定探索該項目進行一些自訂。

這趟旅程讓我發(fā)現了其架構中一個有趣的部分:Sass 地圖。

最初的隨意修改變成了對這個項目背後深思熟慮的設計的更深層次的欣賞。

在這篇部落格中,我將探討如何在 MkDocs 的 Material 主題中使用 Sass 映射(特別是在其 mixins 中),以及它們如何為設計系統的靈活性和可擴展性做出貢獻。讓我們開始吧!


什麼是 Sass 地圖?

Sass 映射是 Sass 中的鍵值資料結構,類似 Python 中的字典或 JavaScript 中的物件。

它們允許我們緊湊地儲存相關資料並動態(tài)檢索值。

在 MkDocs Material 主題中,Sass 映射用於定義響應式設計的特定於裝置的斷點。例如:

@use "sass:map";
@use "sass:list";
@use "sass:math";

$break-devices: (
  mobile: (
    portrait: 220px 479px,
    landscape: 480px 719px,
  ),
  tablet: (
    portrait: 720px 959px,
    landscape: 960px 1219px,
  ),
  screen: (
    small: 1220px 1599px,
    large: 1600px 1999px,
  ),
) !default;

How This SCSS Project Stays Organized Starting from a Map

此地圖將斷點組織為類別(行動裝置、平板電腦、螢幕)和子類別(肖像、風景、小、中、大)。

它不只是一個靜態(tài)定義-它是動態(tài)生成反應行為的支柱。


Sass 映射如何在 MkDocs Mixins 中運作

主題使用一系列函數和 mixin 來提取和利用 $break-devices 映射中的資料。詳細介紹如下:

1. 擷取斷點值

break-select-device函數遍歷map來尋找相關的裝置類別並檢索關聯的斷點。

如果指定了多個層級(例如,移動肖像),它會更深入地挖掘層次結構。

@function break-select-device($device) {
  $current: $break-devices;
  @for $n from 1 through length($device) {
    @if type-of($current) == map {
      $current: map.get($current, list.nth($device, $n));
    } @else {
      @error "Invalid device map: #{$devices}";
    }
  }
  @return $current;
}
  • @for Loop: 此循環(huán)從 $device 清單中的第一個項目運行到最後一個項目,確保檢查層次結構中的每個層級。
  • @if 條件: 這會檢查目前值是否仍為地圖,如果為真則繼續(xù)挖掘。如果沒有,它會停止並顯示錯誤訊息。
  • map.get: 內建 Sass 函數,使用鍵從地圖中檢索值。

2. 建立媒體查詢

在 SCSS 中,mixin 是一個可重複使用的程式碼區(qū)塊,您可以定義一次並在整個樣式表中使用。

它允許您多次包含樣式或邏輯而無需重複程式碼,從而有助於保持程式碼乾燥(不要重複自己)。

例如,如果您需要重複套用一組樣式,您可以建立一個 mixin 並在需要時重複使用它:

break-from-device 和break-to-device mixin 利用此函數動態(tài)產生媒體查詢。例如:

@use "sass:map";
@use "sass:list";
@use "sass:math";

$break-devices: (
  mobile: (
    portrait: 220px 479px,
    landscape: 480px 719px,
  ),
  tablet: (
    portrait: 720px 959px,
    landscape: 960px 1219px,
  ),
  screen: (
    small: 1220px 1599px,
    large: 1600px 1999px,
  ),
) !default;

此 mixin 套用地圖中指定的最小寬度的樣式。類似的方法用於中斷到設備混合,其目標是最大寬度。


應用 Mixin

要了解「從裝置中斷」和「到裝置中斷」混合的強大功能,讓我們來看看如何使用它們動態(tài)實現響應式樣式的實際範例。

範例 1:套用行動裝置的預設樣式

預設情況下,我們使用網格佈局為行動螢幕套用樣式,該佈局在小螢幕上運作良好,無需 mixin。例如:

@function break-select-device($device) {
  $current: $break-devices;
  @for $n from 1 through length($device) {
    @if type-of($current) == map {
      $current: map.get($current, list.nth($device, $n));
    } @else {
      @error "Invalid device map: #{$devices}";
    }
  }
  @return $current;
}

在這種情況下,佈局已經針對行動裝置進行了最佳化。預設情況下,基本樣式迎合行動用戶。

How This SCSS Project Stays Organized Starting from a Map

為了增強對大螢幕的反應能力,您可以使用 Break-from-device mixin 來定位特定斷點。


範例 2:定位平板電腦景觀

在較小的螢幕上,例如平板電腦到橫向斷點,由於螢幕空間有限,側邊欄等某些元素可能無法很好地適應。

在這種情況下,我們可以隱藏側邊欄並將其顯示為左側彈出窗口,以優(yōu)先顯示主要內容。例如:

@mixin break-from-device($device) {
  @if type-of($device) == string {
    $device: $device;
  }
  @if type-of($device) == list {
    $breakpoint: break-select-device($device);
    $min: list.nth($breakpoint, 1);

    @media screen and (min-width: $min) {
      @content;
    }
  } @else {
    @error "Invalid device: #{$device}";
  }
}

@mixin break-to-device($device) {
  @if type-of($device) == string {
    $device: $device;
  }
  @if type-of($device) == list {
    $breakpoint: break-select-device($device);
    $max: list.nth($breakpoint, 2);

    @media screen and (max-width: $max) {
      @content;
    }
  } @else {
    @error "Invalid device: #{$device}";
  }
}
  • 平板電腦橫向:指$break-devices 地圖中的平板電腦類別及其橫向子類別。
  • 產生的媒體查詢將是:
.grid {
  display: grid;
  gap: 16px;
  grid-template-columns: repeat(1, 1fr); /* 1 column for small screens */
}

對於大於平板電腦橫向斷點的設備,有更多的螢幕空間可用,我們可以引入兩列佈局以改善內容分佈。這可以使用 Break-from-device mixin 來實現:

@include break-to-device(tablet landscape) {
  .sidebar {
    display: none;
  }
}
  • 產生的媒體查詢將是:
  @media screen and (max-width: 1219px) {
    .sidebar {
      display: none;
    }
  }

How This SCSS Project Stays Organized Starting from a Map


範例 3:定位桌面

隨著螢幕尺寸的增加,可以有更多空間來展示內容。

對於桌面,我們可以根據螢幕尺寸,使用 Break-from-device mixin 調整網格佈局以建立三列或四列。

對於小型桌面:

當螢幕尺寸夠大以容納三列時,適用以下樣式:

@use "sass:map";
@use "sass:list";
@use "sass:math";

$break-devices: (
  mobile: (
    portrait: 220px 479px,
    landscape: 480px 719px,
  ),
  tablet: (
    portrait: 720px 959px,
    landscape: 960px 1219px,
  ),
  screen: (
    small: 1220px 1599px,
    large: 1600px 1999px,
  ),
) !default;
  • 桌面小:指$break-devices 地圖中的桌面類別及其小子類別。
  • 產生的媒體查詢將是:
@function break-select-device($device) {
  $current: $break-devices;
  @for $n from 1 through length($device) {
    @if type-of($current) == map {
      $current: map.get($current, list.nth($device, $n));
    } @else {
      @error "Invalid device map: #{$devices}";
    }
  }
  @return $current;
}
對於大型桌面:

對於更大的螢幕,我們可以創(chuàng)建四列以最大限度地利用螢幕空間:

@mixin break-from-device($device) {
  @if type-of($device) == string {
    $device: $device;
  }
  @if type-of($device) == list {
    $breakpoint: break-select-device($device);
    $min: list.nth($breakpoint, 1);

    @media screen and (min-width: $min) {
      @content;
    }
  } @else {
    @error "Invalid device: #{$device}";
  }
}

@mixin break-to-device($device) {
  @if type-of($device) == string {
    $device: $device;
  }
  @if type-of($device) == list {
    $breakpoint: break-select-device($device);
    $max: list.nth($breakpoint, 2);

    @media screen and (max-width: $max) {
      @content;
    }
  } @else {
    @error "Invalid device: #{$device}";
  }
}
  • desktop large:指 $break-devices 映射中的桌面類別及其大型子類別。
  • 產生的媒體查詢將是:
.grid {
  display: grid;
  gap: 16px;
  grid-template-columns: repeat(1, 1fr); /* 1 column for small screens */
}

How This SCSS Project Stays Organized Starting from a Map


建築優(yōu)雅

這個設計體現了作者優(yōu)先考慮可擴展性和可維護性的意圖。

透過將斷點抽象化為單一事實來源並使用混合進行媒體查詢,他們創(chuàng)建了一個系統:

  • 易於維護:更新斷點或新增斷點不需要搜尋程式碼庫。
  • 增強可讀性:媒體查詢被抽象化為邏輯的、可重複使用的元件。
  • 促進可擴充性:可以將新裝置或類別新增至地圖中,而不會破壞現有功能。

最後的想法

探索 MkDocs Material 加深了我對前端架構中深思熟慮的設計的欣賞。

Sass 映射、mixin 和分層資料結構的使用是可維護和可擴展設計系統的大師班。

如果您希望建立或改進自己的響應式樣式,請考慮採用類似的技術。

您在專案中遇到或使用過 Sass 地圖嗎?我很想聽聽您的經驗和見解!

想更深入了解設計世界嗎?請參閱我們的其他部落格文章:

  • 非設計師的設計基本法則
  • 強大的UI設計與實作原則
  • 製作很棒的小部件

訂閱每週有關開發(fā)、IT、營運、設計、領導等方面的見解。

以上是這個 SCSS 計畫如何從地圖開始保持組織性的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發(fā)現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創(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

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

SublimeText3 Mac版

SublimeText3 Mac版

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

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

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

外部與內部CSS:最好的方法是什麼? 外部與內部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)避免使用促進性技術,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是一個根據目標瀏覽器範圍自動為CSS屬性添加廠商前綴的工具。 1.它解決了手動維護前綴易出錯的問題;2.通過PostCSS插件形式工作,解析CSS、分析需加前綴的屬性、依配置生成代碼;3.使用步驟包括安裝插件、設置browserslist、在構建流程中啟用;4.注意事項有不手動加前綴、保持配置更新、非所有屬性都加前綴、建議配合預處理器使用。

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

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

CSS:何時重要(何時不)? CSS:何時重要(何時不)? Jun 19, 2025 am 12:27 AM

在CSS中,選擇器和屬性名不區(qū)分大小寫,而值、命名顏色、URL和自定義屬性則區(qū)分大小寫。 1.選擇器和屬性名不區(qū)分大小寫,例如background-color和Background-Color相同。 2.值中的十六進制顏色不區(qū)分大小寫,但命名顏色區(qū)分大小寫,如red有效而Red無效。 3.URL區(qū)分大小寫,可能導致文件加載問題。 4.自定義屬性(變量)區(qū)分大小寫,使用時需注意大小寫一致。

什麼是圓錐級函數? 什麼是圓錐級函數? Jul 01, 2025 am 01:16 AM

theconic-Gradient()functionIncsscreatesCircularGradientsThatRotateColorStopSaroundAcentralPoint.1.IsidealForPieCharts,ProgressIndicators,colordichers,colorwheels和decorativeBackgrounds.2.itworksbysbysbysbydefindefingincolordefingincolorstopsatspecificains off.

See all articles