Sass 基礎(六)

来源:http://www.cnblogs.com/nmxs/archive/2016/03/25/5320139.html
-Advertisement-
Play Games

join() 函數 join()函數是將兩個列表連接合併成一個列表。 >>join(10px 20px, 30px 40px) (10px 20px 20px 40px) >>join((blue,red),(#abc,#def)) (#0000ff,#ff0000,#aabbcc,#ddeeff) ...


join() 函數
   join()函數是將兩個列表連接合併成一個列表。
   >>join(10px 20px, 30px 40px)
      (10px 20px 20px 40px)
   >>join((blue,red),(#abc,#def))
      (#0000ff,#ff0000,#aabbcc,#ddeeff)
   不過join()只能將兩個列表連接成一個列表,如果直接連接兩個以上的列表將會報錯
   將多個join()函數合併在一起使用
   >>join((blue red),join((#abc #def),(#dee #eff)))
    (#0000ff #ff0000 #aabbb)
   在join()函數中還有一個特別的的參數$separator,這個參數主要是用來給列表函數連接列表值是,使用的
   分割符號,預設為auto.
   join()函數中$separator 除了預設值auto之外。還有comma 和space 兩個值,其中comma指定列表中的列表
        值之間使用空格(,)分割。space 值指定列表中的列表項之間使用空格() 分割。
   在join()函數中除非明確指定了$separator值,否則將會有多種情形發生
   如果列表中的第一個列表中每個值之間使用的是逗號(,)那麼join()函數合併的列表中每個列表項之間使用的逗號,分割:
   >> join((blue, red,#fff),(green orange))
    (#0000ff,#ff0000,#eeffff,#08000,#ffa500)
   但當第一個列表中只有一個列表項,那麼 join() 函數合併的列表項
   目中每個列表項目這間使用的分隔符號會根據第二個列表項中使用
   的,如果第二列表項中使用是,分隔,則使用逗號分隔;如果第二列
   項之間使用的空格符,則使用空格分隔:
     >>join(blue,(green,orang))
       (#0000ff,#008000,#ffa500)
   >>join((blue green),(red orange))
      (#0000ff #008000 #ff0000 #ffa500)
   如果當兩個列表中的列表項小於1時,將會以空格分隔:
  >>join(blue,red)
    (#0000ff #ff0000)

    append()函數
    ppend()函數是用來將某個值插入到列表中,並且處於最末位
  >>append(10px 20px ,30px)
    (10px 20px 30px)
  >>append((10px,20px),30px)
    (10px,20px,30px)
  >>append(green,red)
    (#008000 #ff0000)
  >>append(red,(greenblue))
    (#ff0000(#008000, #0000ff))
  如果沒有明確的指定$separator 參數值,其預設值是auto
  如果列表只有一個列表項時,那麼插入進來的值將和原來的值會以空格的方式分隔。
  如果列表中列表項是以空格分隔列表項,那麼插入進來的列表項也將以空格分隔;
  如果列表中列表項是以逗號分隔列表項,那麼插入進來的列表項也將以逗號分隔。
  當然,在append()函數中,可以顯示的設置$separator 參數,
  如果取值為comma 將會以逗號分隔列表項
  如果取值為space將會空格分隔列表項
  >>append((blue green),red,comma)
     (#0000fff,#008000,#ff0000)
  >>append((blue green),red,space)
    (#0000ff #008000 #ff0000)
  >>append((blue,green),red,comma)
    (#0000ff,#008000,#ff0000)
  >>append((blue,green),red,space)
    (#0000ff #008000 #ff0000)
  >>append(blue,red,space)
    (#0000ff #ff0000)
zip()函數
  zip()函數將多個列表值轉成一個多維的列表:
  >>zip(1px 2px 3px,solid dashed dotted,green blue red)
    ((1px "solid" #008000),(2px "dashed" #0000ff),(3px "dotted" #ff0000))
  在使用zip(1px 2px 3px,solid, green blue red)
    NoMethodError:undefined method 'options=' fornil:NilClass
  Use --trace for backtrace
    zip() 函數組合出來就成了
      1px solid green, 2px dashed blue, 3px dotted red
index()函數
    index()函數類似於索引一樣,主要讓你找到某個值在列表中所處的位置。在Sass 中,第一個值就是1
    第二個值就是2,以此類推:
    >> index(1px solid red,1px)
      1
    >>index(1px solid red, solid)
      2
    >>index(1px solid red, red)
      3
    在index() 函數中,如果指定的值不在列表中(沒有找到相應的值),那麼返回的值將是false, 相反就會返回對應的
    的值在列表中所處的位置。
    >> index(1px solid red,dotted) //列表中沒有找到 datted
      false
    >>index(1px solid red, solid) //列表中找到solid 值並且返回的他的位置是2
      2
Introspection 函數
  Introspection 函數的包括幾個判斷型函數。
  type-of($value):返回一個值的類型
  unit($number): 返回一個值的單位
  unitless($number)判斷一個值是否帶有單位
  comparable($number-1,$number-2); 判斷兩個值是否可以做加,減合併。
  Introspection 函數 -type-of()
    type-of()函數主要是用來判斷一個值是屬於什麼類型:
  返回值:
    number 為數值類型。
    string 為字元串類型
    bool為布爾類型
    color為顏色類型
    >> type-of(100)
      “number”
    >>type-of(100px)
      "number"
    >>type-of("asdf")
      "string"
    >>type-of(asdf)
      "string"
    >>type-of(true)
      "bool"
    >>type-of(false)
      "bool"
    >>type-of(#fff)
      "color"
    >>type-of(blue)
      "color"
    >>type-of(1/2 =1)
      "string"
unit() 函數
    unit()函數主要是用來獲取一個值所使用的的單位,碰到複雜的計算時,其能根據運算得到一個“多單位組合”
    的值,不過只許乘除運算
    >>unit(100)
      ""
    >>unit(100px)
      "px"
    >>unit(20%)
      "%"
    >>unit(1em)
      "em"
    >>unit(10px * 3em)
      "em * px"
    >>unit(10px * 2em /3cm /1rem)
      "em/rem"
    但加,減碰到不同單位時,unit() 函數將會報錯,除px 與cm ,mm 運算之外
    >>unit(1px + 1cm)
      "px"
    >>unit(1px -1cm)
      "px"
    >>unit(1px +1mm)
      "px"
   unit()函數對於單位運算相對來說也沒有規律,而且有些單位也無法合併成一個單位,對於我們在css 中不並不合適
    >> unit(10px * 3em)
      "em * px"
    >> unit(10px / 3em)
      "px/em"
    >>unit(10px * 2em / 3cm / 1rem)
      "em/rem"
unitless()函數
    unitless() 函數相對來說簡單明瞭些,只是用來判斷一個值時候帶有單位
    如果不帶單位返回的值為true,帶單位返回的值為flase;
  >>unitless(100)
    true
  >> unitless(100px)
    false
  >>unitless(100em)
    false
  >>unitless(100%)
    false
  >>unitless(1/2)
    true
  >>unitless(1/2 +2)
    true
  >>unitless(1px /2 +2)
    false
comparable() 函數
    comparable()函數主要是用來判斷兩個數是否可以進行 加 ,減 以及合併,如果可以返回值為true ,如果不
    可以返回的值為false;
    >>comparable(2px,1px)
      true
    >>comparable(2px,1%)
      false
    >>comparable(2px,1em)
      false
    >>comparable(2rem,1em)
      false
    >>comparable(2px,1cm)
      true
    >>comparable(2px,1mm)
      true
    >>comparable(2px,1rem)
      false
    >>comparable(2cm,1mm)
      true
Miscellaneous 函數
    在這裡吧Miscellaneous 函數稱為第三元條件函數,主要因為他和JavaScript
    中的三元判斷非常的相似,他有兩個值,當條件成立返回一種值,當條件不成立時返回另一種值。
    if($condition,$if-true,$if-false)
    上面表達式的意思是當 $condition 條件成立時,返回的值為 $if-true,否則返回的是 $if-false 值。
    >>if(true,1px,2px)
      1px
    >>if(false,1px,2px)
      2px
      Map
    Sass的map 常常被稱為數據地圖,也有人稱其為數組,因為他總是以key:value 成對的出現,單其更像是JSON數據
      {
        "employees":[
          {"firstName":"John","lastName":"Doe"},
          {"firstName":"Anna","lastName":"Smith"}
          {"firstName":"Peter","lastName":"Jones"}
        ]
    }
    那麼Sass 的map長得與JSON極其相似:
    $map:{
      $key1:value1,
      $key2:value2,
      $key3:value3,
    }

    首先由一個類似於Sass的變數一樣,用個¥加上命名空間來聲明map.後面緊接著是一個小括弧().
    將數據是一個小括弧(),將數據以key:value的形式賦予,其中key 和value是成對出現,並且每對之間使用
    逗號(,)分隔,其中最後一組後面沒有逗號。
    其中鍵 key 是用來查找相關聯的值 value。使用 map 可以很容易
    收集鍵的值和動態插入。我們來回憶一下,在 Sass 中常用下麵的方式定義變數:
    $default-color:#fff !default:
    $primary-color:#22ae39 !default;
    我們使用map可以更好的進行管理:
      $color:(
        default:#fff,
        primary:#22ae39,
      negative:#d9534f
    );
    對於Sass 的map,還可以讓map 嵌套map其實就是map 的某一個key當成map,裡面可以繼續
    放一對或者多對key:value;
    $map:(
      key1:value1,
      key2:(
        key-1:value-1,
        key-2:value-2,
      ),
      key3:value3
    );
  用此功能來管理顏色的變數就非常的有條理性。
  $them-color:(
      default:(
        bgcolor:#fff,
        text-color:#444,
        link-color:#39f
    ),
  primary:(
      bgcolor:#000,
      text-color:#fff,
      link-color:#93f
  ),
  negative:(
      bgcolor:#f36,
      text-color:#fefefe,
      link-color:#d4e
    )
  );
Sass Maps的函數
    前面介紹了使用map 來管理變數,但要在Sass 中獲取變數,或者對map做更多有意的操作,我們必須
    藉助 map的函數功能 在Sass 中map 自身帶了七個函數:
    map-get($map,$key) 根據給定的key值,返回map 中相關的值
    map-merge($map1,$map2):將兩個 map 合併成一個新的map
    map-remove($map,$key):從map 中所有的key
    map-keys($map):返回map 中所有的key
    map-values($map):返回map 中所有的value
    map-has-key($map, $key): 根據給定的key 值判斷,map 是否有對應的value值
    如果有返回true,否則返回false
    keywords($args):返回一個函數的參數,這個參數可以動態的設置key 和value.
    Sass Maps的函數-map-get($map,$key)
    map-get($map,$key) 函數的作用是根據$key參數,返回$key 在$map 中對應的value
    如果$key不存在的$map中,將返回null 此函數包括兩個參數:
    $map:定義好的map
    $key:需要遍歷的key.
    來看一個簡單的示例,假設定義了一個$social-colors 的map:
      $social-colors:(
          dribble:#ea4c89,
          facebook:#3b5998,
          github:#171515,
          google:#db4437,
          twitter:#55acee
        );
    假設要獲取facebook 鍵值對應的值#3b5998,我們就可以使用map-get() 函數來實現;
    .btn-dribble{
        color:map-get($social-colors,facebook);
    }
    編譯出來的CSS:
    .btn-dribble{
        color:#3b5998;
      }
    我們來看另一種情況,假設 $social-colors 這個 map 沒有 $weibo 這個 key:
    .btn-weibo{
        font-size:12px;
        color:map-get($soscial-colors,weibo);
    }
    此時編譯出來的是CSS:
    .btn-weibo{
        font-size:12px;
    }
Sass Maps 的函數-map-has-key($map,$key)
  map-has-key($map,$key) 函數將返回一個布爾值,當$map 中有這個$key,則函數返回true,否則返回false
  前面的示例,當 $key 不在 $map 中時,使用 map-get($map,$key) 函數將返回一個 null 值
  但對於開發人員,並看不到任何提示信息。如果使用 map-has-key($map,$key) 函數就可以改變這一狀態。
  @if map-has-key($social-colors,facebook){
    .btn-facebook{
        color:map-get($social-colors,facebook);
    }
      }@else{
        @warn "No color found for faceboo in $social-colors map. Property ommitted."
      }
    編譯出來:
    .btn-fackbook{
        color:#3b5998;
    }
  有了這個函數我們就可以這樣使用。
  .btn-dribble{
      color:colors(dribble);
    }
  .btn-facebook{
      color:colors(facebook)
  }
  .btn-github{
      color:colors(github);
  }
  .btn-google{
      color:color(google)
  }
  .btn-twitter{
      color:colors(twitter)
  }
  .btn-weibo{
    color:colors(weibo)
  }
  編譯出來的css
  .btn-dribble{
      color:#ea4c89;
  }
  .btn-facebook{
      color:#3b5998;
  }
  .btn-github{
      color:#171515;
  }
  .btn-google{
      color:#db4437;
  }
  .btn-twitter{
      color:#55acee;
  }
Sass Maps 的函數-map-keys($map)
    map-keys($map) 函數將會返回$map 中的所有的key. 這些值賦予一個變數,那麼他就是一個列表。
    map-keys($social-colors);
    其返回的值為:
      "dribble","facebook","github","goole","twitter"
    換句話說:
      $list:"dribble","facebook","github","twitter";
    這個時候,可以配合Sass 的list 做很多事情。
    @function colors($color){
        $names:map-keys($social-colors);
        @if not index($names,$color){
        @warn "Waring:" '#{$color} is not a valid color name.'";
      }
        @return map-get($social-color,$color);
    }
    上面代碼中最不同之處,我們使 用map-key s將 $social-colors
    這個 map 的所有 key 取出,並賦予給一個名 為 $names 的列表
    然後通過 index($names,$color) 返回 $color 在 $names 位置
    如果這個位置不存在,將返回提示信息,如果存在將返回正確的值。
    .btn-weibo{
      color: colors(weibo);
    }
Sass Maps的函數-map-values($map), map-merge($map1,$map2)
    map-values($map)
    map-values($map) 函數類似於 map-keys($map) 功能,不同的是map-values
    ($map) 獲取的是$map 的所有value 值,可以說也是一個列表,而且,map-values($map)
    中如果有相同的value 也將會全部獲取出來。
    如前面的示例 使用:
      map-values($social-colors)
    將會返回:
      #ea4c89, #3b5998,#171515,#db4437,#55acee
    值與值之前同樣用逗號分隔。
      map-merge($map1,$map2)

      map-merge($map1,$map2)
      map-merge($map1,$map2) 函數是將$map1和$map2 合併,然後等到一個新的$map. 如果你要快速將新的值導入到$map
    中的話,這種方法是最佳方法,假設我們有兩個$map:
      $color:(
          text:#f36,
          link:#f63,
          border:#ddd,
          backround:#fff;
      )
    $typo:(
      font-size:12px,
      lin-height:1.6
    );
    如果希望將這兩個$map 合併成一個map ,我們只要這樣做。
    $newmap: map-merge($color,$typo);
    將會生成一個新的map:
      $newmap:(
          text:#f36,
          link:#f63,
          border:#ddd,
          background:#fff,
          font-size:12px,
          line-height:1.6
    );
Sass Maps 的函數-map-remove($map,$key),keywords($args)
    map-remove($map,$key)
    map-remove($map,$key)函數是用來刪除當前$map中的某一個$key,從而得到一個新的
    map,其返回的值是一個map.他並不能直接從一個map 中刪除另一個map,僅能通過刪除
    map中的某個key 得到新的map
    $map:map-remove($social - colors,dribble);
    返回的是一個新map
      $map:(
        facebook:#3b5998,
        github:#171515,
        google:#db4437,
        twitter:#55acee
      );
     keywords($args)
     keywords($args)
    keywords($args) 函數可以通過混合巨集或函數的參數變創建map.
    參數也是成對出現,其中$args 變成key(會自動去掉$符號),而
    $args對應的的值是value.
    @mixin map($args...){
        @debug keywords($args);
      }
    @include map(
        $dribble: #ea4c89,
        $facebook:#3b5998,
        $github:#171515,
        $google:#db4437,
        $twitter:#55acee
);


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、現狀說明: 就在這金三銀四的求職黃金時期,我有幸作為公司的獨立技術面試官,擁有最終決定錄用權,在倍受上級領導的充分信任下,我也向上級保證,一定要為公司找到合適的人才,就在我滿懷信心的情況下麵試了一個又一個的求職者,發現了大多數求職者共同的問題,一是:眼高手低,即工作年限雖長,但受工作內容及個人原 ...
  • 多租戶(Multi Tenancy/Tenant)是一種軟體架構,其定義是:在一臺伺服器上運行單個應用實例,它為多個租戶提供服務。 本框架使用的是共用資料庫、共用 Schema、共用數據表的數據設計架構。 進入系統管理員界面,打開租戶管理界面,如下圖所示: 下麵是租戶管理界面: 這裡可以管理租戶成員 ...
  • 本章大部分內容摘自:《領域驅動設計:軟體核心複雜性應對之道》一書中的第四章,分離領域,純屬原創。如有錯誤請指正,相互學習。 在軟體中,專門用於解決問題的那部分通常之占整個軟體的系統的很小一部分,這與其重要性遠遠不成比例。要想實現最佳的設計構思,就得去研究模型中的元素並它們視為一個系統 模式:LAYE... ...
  • PS:關於自動外呼的功能我在總體結構篇已經大概說過了,類似資料庫設計、以及相關代碼實現都不難,我就不多贅述了。這裡主要介紹當時遇到的幾個經過仔細思考過的設計思路。這幾天整理的時候,發現當時還是缺乏很多的知識,考慮也沒有很全面。這裡僅僅寫出來,供大家思考。 排隊機制的處理 板卡上的電話通道是有限的(公 ...
  • 類圖分為三層,第一層是類的名稱,如果是抽象類或介面,就用斜體表示,其中介面名稱的上部會用<<interface>>修飾;第二層是類的成員變數,通常是欄位和屬性;第三層是類的成員方法。類的成員變數和成員方法的修飾符分為+、#、-,分別表示public、protected、private。 類之間的關係 ...
  • 簡介 web的優化就是一場阻止http請求最終訪問到資料庫的戰爭。 優化的方式就是 ,在各個節點加緩存。 web請求的流程及節點 熟悉流程及節點,才能定位性能的問題。而且優化的順序一般也是按請求的流程逐一優化。這裡的流程只是做個概要,並不代表全面。 整個流程是以最快的方式讓用戶看到結果 定位的方法 ...
  • 信號的多徑傳播對環境具有依賴性,呈現出非常強的特殊性。對於每個位置而言,該位置上通道的多徑結構是惟一的,終端發射的無線電渡經過反射和折射,產生與周圍環境密切相關的特定模式的多徑信號,這樣的多徑特征可以認為是該位置的“指紋”。基站天線陣列檢測信號的幅度和相位等特性,提取多徑干擾特征參數,將該參數與預先 ...
  • 原地址:http://www.cnblogs.com/BoyXiao/archive/2010/05/07/1729376.html 首先來明確一個問題,那就是在某些情況下,有些對象,我們只需要一個就可以了, 比如,一臺電腦上可以連好幾個印表機,但是這個電腦上的列印程式只能有一個, 這裡就可以通 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...