less構文の基礎

11193 ワード

導入less

  • 構文
    <link rel="stylesheet/less" type="text/css" href="styles.less">
    <script src="less.js" type="text/javascript"></script>
    
  • 説明:
  • less.jsファイルは、導入されたlessファイルの後
  • でなければなりません.
  • lessファイル事relを導入する値はstylesheet/less
  • でなければならない.


    変数#ヘンスウ#


    変数宣言
  • less変数は、@+変数名を介して、cssタイプの値または他の変数の値に続くことを宣言します. 
  • 変数の使用
  • 変数名をcss属性の後に書くだけで
  • 例:
    @width:100px;
    div{
        width:@widht;
    }
    
  • 変数の値が計算に関与
  • 変数は直接加算、減算、乗算、除算
  • とすることができる.
  • 例:
    @width:100px
    @width+100px ;   200px
    @width*2;    200px
    
  • スコープ
                ,LESS   。         root       ,              。  ,         ,  id  class ,         ,  ,              ——           。
    
    @color: #00c; /*    */
    
    #header {
      @color: #c00; /*    */
       border: 1px solid @color; /*      */
    }
    
    #footer {
      border: 1px solid @color; /*     */
    }
    
  • 宣言クラス(関数)

  • クラスの宣言は「.」+クラス名(パラメータリスト){css申明}
  • 説明:
  • “.”少なくしてはいけない
  • 少なくしてはいけない
  • クラス名とcssクラス名の命名規則は同じ
  • パラメータリストは、変数宣言と同様に、デフォルト値
  • を持つことができます.
  • cssは、パラメータでも定数値でも使用可能であることを示す
  • 例:
    .myClass(@color:red,@length){
        background-color:@color
        width:@length;
        height:@length;
        border:1px solid @color
    }
    
  • クラス(関数の呼び出し)
  • css宣言でクラス名を直接呼び出し、パラメータを入力すると
  • になります.
  • 説明:
  • “.”
  • を減らすことはできません
  • パラメータにデフォルト値がない場合はパラメータを入力する必要があり、デフォルト値がある場合はパラメータを入力せずにクラス名を直接書くことができる
  • .
  • 例:
    .myClass(@color:red ,@length:100px){
        background-color:@color;
        width:@length;
        height:@length;
        border:1px solid @color
    }
    
    .div1{
        .myClass(grenn,200px);
    }
    .div1{
        .myClass;
    }
    

  • クラス宣言の拡張

  • @argumentsを使用してすべての入力変数を参照
  • 例:
    .border(@a,@b,@color:blue){
    
        border:@arguments;
    
    }
    
  • パラメータの制御ビットを使用して、同じクラス出力の異なるスタイル
    .border(cool,@color){
    
      border:2px solid @color;
    
    }
    
    .border(hot,@color){
    
      border:1px solid @color
    
    }
    
    .border(@_,@ye){
    
      color:@ye;
    
    }
    
    
    
      :
    
    .con2{.border(hot,red)}
    
    .con1{.border(cool,blue)}
    
       :.con2(border:1px solid red;color:red)
    
          .con1{border:2px solid blue;color:blue}
    
  • を制御する.
  • パラメータ個数を使用してそのクラスの出力を制御する:
    .border(@a){….}
    
    .border(@a,@b){...}
    
                    ,  2         
    
  • @argumentsを使用して、すべての入力変数
    .border(@a,@b,@color:blue){
    
      border:@arguments;
    }
    
  • を参照します.
  • 条件文の判断:
  • クラス関数定義時に条件判定
    .border(@a) when (@a>10),(@a<3){
    
      border:@a solid blue;
    }
    .con1{.border(5px)}
    
            10    3,       
    
    .border(@a) when (@a>10) and (@a<15){
    
      border:@a solid blue;
    }
    
    .con1{.border(12px)}
    
            10    15 ,    ,       px        ,     
    
  • を用いることができる.
  • は、内蔵関数unitを用いる単位
    .border(@a) {
      border:unit(@a,px) solid red;
    }
    
     .con2{.border(5)}
    
       .con2{border:5px solid red;},    unit(5px)        5
    
  • を増加または取り出す.

    混合(Mixin)

  • では、スタイルでこれらのスタイルルールを繰り返し使用するために、いくつかのスタイルを作成することがあります.HTMLで何個のclassを使うかは誰も止めませんが、LESSを使ってスタイルシートで完成することができます.この点を説明するために、コードの例をいくつか貼り付けました.border { border-top: 1px dotted #333; }
    article.post {
      background: #eee;
      .border;
    }
    
    ul.menu {
      background: #ccc;
      .border;
    }
    

  • セレクタ継承

  • 以下はLESSでは提供されていません.この機能により、カンマで両者を別々に書く必要がなくなり、予め定義されたセレクタにセレクタを追加できます.
    .menu {
      border: 1px solid #ddd;
    }
    .footer {
      @extend .menu;
    }
    /*                   */
    .menu, .footer {
      border: 1px solid #ddd;
    }
    
  • ネスト規則(Nested rules)

  • CSSにclassおよびidを埋め込むことは、スタイル干渉または他のスタイル干渉を回避する唯一の方法である.でもめちゃくちゃになるかもしれません.セレクタを使用すると、「#site-body.post.post-header h 2」のように役に立たず、不要なスペースが大量に消費されます.LESSを使用すると、ID、class、要素ラベルをネストできます.前述の例では、
    #site-body { …
      .post { …
        .post-header { …
          h2 { … }
          a { …
            &:visited { … }
            &:hover { … }
          }
        }
      }
    }
                           ,             ,          。      &               ,       javascript  this。
    
  • と書くことができます.

    ネーミングスペース(namespaces)

  • ネーミングスペースは、CSSを整理して別の階層にアップグレードするために使用できます.いくつかの共通のスタイルをグループ化し、使用時に直接呼び出します.たとえば、「default」というスタイルグループを作成すると、使用したときにグループから直接呼び出すことができます.
    #defaults {
      .nav_list () {
        list-style: none;
        margin: 0; padding: 0;
       }
       .button () { … }
       .quote () { … }
    }
      ,       ,         nav      ul  ,          default  。             ,        。
    
    nav ul {
      #defaults > .nav_list;
    }
    

  • 注釈

  • この部分は基礎を比較している.LESSでは2種類の注釈表記が許可されています.標準的なCSS注釈、/*comment*/、有効であり、処理によって正しく出力することができる.行注記,//commentでは,同様に使用できるが処理できないし出力されないので,結果は,「無声」である.

  • インポート

  • 導入もかなり標準に合致しています.標準@import'classes.less’; うまく処理されています.ただし、他のLESSファイルをインポートしたい場合は、ファイルの拡張子はオプションなので@import'classes;可能です.LESS処理を必要としないコンテンツをインポートしたい場合は、使用できます.css拡張(@import‘reset.css’;).

  • 文字列の挿入

  • 文字列も変数に使用でき、@{name}で呼び出されます.
    @base_url = 'http://coding.smashingmagazine.com';
    background-image: url("@{base_url}/images/background.png");
    

  • エスケープ

  • では、無効なCSS構文またはLESSで認識できない値を導入する必要があります.通常はIEのHackです.異常を投げ出してLESSを破壊しないようにするには、それらを避ける必要があります.
    .class {
      filter: ~"progid:DXImageTransform.Microsoft.Alpha(opacity=20)";
    }
    
    /*            : */
    .class {
      filter: progid:DXImageTransform.Microsoft.Alpha(opacity=20);
    }
    

  • JAvascriptの式

  • これはLESSの中で私の最も気に入った部分です:スタイルシートの中でJavascriptを使う--かなりすばらしいです.式を使用するか、環境方向を参照して逆一重引用符を使用することができます.
    @string: `'howdy'.toUpperCase()`; /* @string becomes 'HOWDY' */
    
    /* You can also use the previously mentioned interpolation: */
    @string: 'howdy';
    @var: ~`'@{string}'.topUpperCase()`; /* becomes 'HOWDY' */
    
    /* Here we access part of the document */
    @height = `document.body.clientHeight`;
    

  • LESS内蔵関数:

    + ceil(@number);                               //     
    
    + floor(@number);                              //     
    
    + percentage(@number);                  //           ,   0.5 -> 50%
    
    + round(number, [places: 0]);                  //       
    
    + saturate(@color, 10%);                       //       10%
    
    + desaturate(@color, 10%);                     //       10%
    
    + lighten(@color, 10%);                        //      10%
    
    + darken(@color, 10%);                         //      10%
    
    + fadein(@color, 10%);                         //       10%
    
    + fadeout(@color, 10%);                        //       10%
    

    lessとsassの違い

  • LESSとSassの変数の唯一の違いは、LESSが@を使用し、Sassが$を使用することです.また、いくつかの役割ドメインの違いもあります.後で紹介します.
  • 条件文および制御
              ,  LESS      。  Sass,     if{}else{}       ,  for{}    ,      and、or not,  <、>、<=、>= ==    。
    
    /* Sass    if   */
    @if lightness($color) > 30% {
      background-color: #000;
    } @else {
      background-color: #fff;
    }
    
    /* Sass    for    */
    @for $i from 1px to 10px {
      .border-#{i} {
        border: $i solid blue;
      }
    }
    
  • ドメイン区分
        Sass     。       , @color       ,   ,          ,     (    )。
    
  • 出力フォーマット
  • しかし、LESSは設定を出力していません.Sassは4つの出力オプションを提供します.nested、compact、compressed、expandedです.

  • デフォルト変数sassのデフォルト変数は、値の後に追加する必要があります!defaultでいいです.
    //sass style
    //-------------------------------
    $baseLineHeight:        1.5 !default;
    body{
        line-height: $baseLineHeight; 
    }
    
    //css style
    //-------------------------------
    body{
        line-height:1.5;
    }
    sass               ,          ,         ,                   
    //sass style
    //-------------------------------
    $baseLineHeight:        2;
    $baseLineHeight:        1.5 !default;
    body{
        line-height: $baseLineHeight; 
    }
    
    //css style
    //-------------------------------
    body{
        line-height:2;
    }
    
  • 特殊変数
                  ,     ,                         #{$variables}    。
    //sass style
    //-------------------------------
    $borderDirection:       top !default; 
    $baseFontSize:          12px !default;
    $baseLineHeight:        1.5 !default;
    
    //   class   
    .border-#{$borderDirection}{
      border-#{$borderDirection}:1px solid #ccc;
    }
    //         
    body{
        font:#{$baseFontSize}/#{$baseLineHeight};
    }
    
    //css style
    //-------------------------------
    .border-top{
      border-top:1px solid #ccc;
    }
    body {
      font: 12px/1.5;
    }
    
  • 多値変数
          list   map  ,    list     js    , map     js    。
    list
    list       ,           ,  nth($var,$index)  。  list             length($list),join($list1,$list2,[$separator]),append($list,$value,[$separator]) ,     sass Functions(  List Functions  )
      
    //    
    $px: 5px 10px 20px 30px;
    
    //    ,   js      
    $px: 5px 10px, 20px 30px;
    $px: (5px 10px) (20px 30px);
      
    //sass style
    //-------------------------------
    $linkColor:         #08c #333 !default;//        ,        
    a{
      color:nth($linkColor,1);
    
      &:hover{
        color:nth($linkColor,2);
      }
    }
    
    //css style
    //-------------------------------
    a{
      color:#08c;
    }
    a:hover{
      color:#333;
    }
    map
    map   key value    ,  value    list。   :$map: (key1: value1, key2: value2, key3: value3);。   map-get($map,$key)  。  map           map-merge($map1,$map2),map-keys($map),map-values($map) ,     sass Functions(  Map Functions  )
      
    $heading: (h1: 2em, h2: 1.5em, h3: 1.2em);
      
    //sass style
    //-------------------------------
    $headings: (h1: 2em, h2: 1.5em, h3: 1.2em);
    @each $header, $size in $headings {
      #{$header} {
        font-size: $size;
      }
    }
    
    //css style
    //-------------------------------
    h1 {
      font-size: 2em; 
    }
    h2 {
      font-size: 1.5em; 
    }
    h3 {
      font-size: 1.2em; 
    }
    
  • 属性ネスト
                          , border-width,border-color   border  。         :
    //sass style
    //-------------------------------
    .fakeshadow {
      border: {
        style: solid;
        left: {
          width: 4px;
          color: #888;
        }
        right: {
          width: 2px;
          color: #ccc;
        }
      }
    }
    
    //css style
    //-------------------------------
    .fakeshadow {
      border-style: solid;
      border-left-width: 4px;
      border-left-color: #888;
      border-right-width: 2px;
      border-right-color: #ccc; 
    }
                 ,        ,      。
    
  • @at-root
    sass3.3.0      ,          。       ,         ,                 。
          
    //sass style
    //-------------------------------
    //    
    .parent-1 {
      color:#f00;
      .child {
        width:100px;
      }
    }
    
    //       
    .parent-2 {
      color:#f00;
      @at-root .child {
        width:200px;
      }
    }
    
    //       
    .parent-3 {
      background:#f00;
      @at-root {
        .child1 {
          width:300px;
        }
        .child2 {
          width:400px;
        }
      }
    }
    
    //css style
    //-------------------------------
    .parent-1 {
      color: #f00;
    }
    .parent-1 .child {
      width: 100px;
    }
    
    .parent-2 {
      color: #f00;
    }
    .child {
      width: 200px;
    }
    
    .parent-3 {
      background: #f00;
    }
    .child1 {
      width: 300px;
    }
    .child2 {
      width: 400px;
    }
    

  • 変数宣言
  • less変数は、@+変数名を介して、cssタイプの値または他の変数の値に続くことを宣言します.