スキップしてメイン コンテンツに移動

Sass/SCSS/Compass

Sass/SCSS


Sassって何?

  • CSSのメタ言語
  • 記法に従って記述し、コンパイルするとCSSファイルが生成される。
  • 変数の使用や条件分岐、共通部分の部品化、共通部分の継承等が特徴。


公式サイト

http://sass-lang.com/


ファイル

インデントによる記法がSass
拡張子:.sass
CSSベースの記法がSCSS(“Sassy CSS”)(こちらが主流)
拡張子:.scss


インストール

コンソールで

$ ruby -v(ルビーがインストールされていることを確認)
$ sudo gem update --system
(gem(rubyのパッケージマネージャー)を最新版に更新)
$ sudo gem install sass(sassのインストール)
$ cd (index.htmlのフォルダ)


使用例


フォルダ構成

/index.html
/css
/scss
main.scss
$blue: #3bbfce;
$margin: 16px;
.content-navigation {
    border-color: $blue;
    color: darken($blue, 9%);
    p {
        font-size: 14px;
    }
}
.border {
    padding: $margin / 2;
    margin: $margin / 2;
    border-color: $blue;
}

$ sass scss/main.scss:css/main.css

とやると

main.css
.content-navigation {
    border-color: #3bbfce;
    color: #2b9eab; 

}
.content-navigation p {
    font-size: 14px; 
}
.border {
    padding: 8px;
    margin: 8px;
    border-color: #3bbfce; 
}
が生成される。
実際は都度コマンド実行するのではなく、

$sass --watch scss:css
でフォルダ監視し、scssフォルダ内の.scssファイルが更新されたら自動でcssフォルダにファイルを生成(上書き)する。

SCSSの記法


入れ子構造

#main {
    width: 90%;
    p {
        font-size: 16px;
        a {
            text-decoration: none;
            &:hover { // &は親要素のセレクタをあらわす
                font-weight: bold;
            }
        }
    }
}


コメント

// (=>変換後のCSSに表示されない)
/* */


変数(数値)

$baseFontSize: 14px;
#main {
    font-size: $baseFontSize;
    .sub {
        font-size: $baseFontSize - 2px; // -2 でもOK
    }
}
// +, -, *, / の演算可能
文字列$imgDir: "/img/";
#main {
    background: url($imgDir + "bg.png");
    // 文字列の中で変数を展開したいときは #{$hoge}, #{12 + 12}みたいなことも可能
    // background: url("#{imgDir}bg.png");
}


変数(色)

$brandColor: rgba(255, 0, 0, 0.9);
// $brandColor: #ff0000; とかも可
// lighten, darkenとか使える => "sass built-in functions" でググる
// hsla($hue, $saturation, $lightness, $alpha)
// lighten($color, 20%)
// darken($color, 20%)
// saturate($color, 20%)
#main {
    color: $brandColor;
    p {
        color: lighten($brandColor, 30%);
    }
}


変数(分岐処理)

$debugMode: true;
$x: 10;
// ==, !=, <, >, <=, >=

#main {
    @if $debugMode == true {
        color: red;
    } @else {
        color: green;
    }
    p {
        @if $x > 20 {
            .....
        }
    }
}


変数(繰り返し処理)

// @forの場合
@for $i from 10 through 14 {
    .fs#{$i} {
        font-size: #{$i}px;
    }
}


// @whileの場合
$i: 10;
@while $i <= 14 {
    .fs#{$i} {
        font-size: #{$i}px;
    }
    $i: $i + 1;
}


変数(リスト)

$animals: cat, dog, tiger;
@each $animal in $animals {
    .#{$animal}-icon {
        background: url("#{animal}.png");
    }
}


変数(関数)

$totalWidth: 940px;
$columnCount: 5;
@function getColumnWidth($width, $count) {
    // $columnWidthを計算
    $padding: 10px;
    $columnWidth: floor(($width - ($padding * ($count - 1))) / $count);
    @debug $columnWidth;
    @return $columnWidth;
}

.grid {
    float: left;
    width: getColumnWidth($totalWidth, $columnCount);
}


ファイルを分離

上の例の場合で、設定ファイルと、関数ファイルに分ける

/scss/main.scss
/scss/_settings.scss // ファイルの先頭は_(パーシャルズ)
/scss/_functions.scss // 〃

_settings.scss
$totalWidth: 940px;
$columnCount: 5;


_functions.scss@function getColumnWidth($width, $count) {
    // $columnWidthを計算
    $padding: 10px;
    $columnWidth: floor(($width - ($padding * ($count - 1))) / $count);
    @debug $columnWidth;
    @return $columnWidth;
}


main.scss@import "settings"; // _は不要
@import "functions";
=>main.cssでは展開されている

@mixin

複数の設定をまとめて管理
例1
@mixin round {
    border-radius: 4px;
}

.label {
    font-size: 12px;
    @include round;
}


例2(引数:初期値)
@mixin round($radius: 4px) {
    border-radius: $radius;
}

.label {
    font-size: 12px;
    @include round(5px);
}


@extend

スタイルの継承

.msg {
    font-size: 12px;
    font-weight: bold;
    padding: 2px 4px;
    color: white;
}

.errorMsg {
    @extend .msg;
    background: red;
}

.warningMsg {
    @extend .msg;
    background: orange;
}
// @mixin, @includeでも同様に記述できるが、より経済的(CSS上で同一の記述が重複しない)かつ継承関係が明示的




出展
公式サイト
http://sass-lang.com/

ドットインストール
http://dotinstall.com/lessons/basic_sass/

コメント

このブログの人気の投稿

iframeに異なるドメイン(クロスドメイン)のコンテンツを読み込んで高さを自動調節する方法

趣旨 iframe(親)に異なるドメインのページ(子)を読み込んで、親フレームにスクロールが出ないよう、iframeの高さを子ページの高さに自動調節する 方法 普通にやると、 「Uncaught SecurityError: Blocked a frame with origin "http://hoge.com" from accessing a frame with origin "http://fuga.com".  Protocols, domains, and ports must match. 」 などと怒られてしまいますのでこちらを参考に http://stackoverflow.com/questions/18456498/how-can-i-change-the-size-of-an-iframe-from-inside http://i556tips.tumblr.com/post/15710917018/%E3%82%AF%E3%83%AD%E3%82%B9%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%81%A7iframe%E3%81%AE%E9%AB%98%E3%81%95%E3%82%92%E8%87%AA%E5%8B%95%E8%AA%BF%E7%AF%80%E3%81%99%E3%82%8Bjavascript コード hoge.com(親) <html> <head>     <title>親</title>     <script src="js/jquery.js"></script>     <script>         window.addEventListener('message', function(e) {         var iframe = $("#fugapage");         var eventName = e.data[0...

HTMLの要素を下揃えする方法

【実現したいこと】 上の図において、要素1と要素2の下面を揃えたい。 【よく見る方法は...】 ・親要素に「position:relative;」 ・子要素に「position:absolute;」、「bottom:0;」 とすると、左右のdivの高ささえ揃えておけば、下面を合わせられますが、BootstrapなどのCSSフレームワークを使用していたりして、既存のスタイルと干渉してしまう場合に、JavaScript(jQuery)で実現する方法を記載します。 【JavaScriptでの実現方法(考え方)】 上の図において、スクリプトを使用し、「A」、「B」、「C」を高さを取得し、計算により「D」の高さを取得します。 「D」=「A」-「B」-「C」 この「D」を要素2の「margin-top」に追加してあげます。 今回は、レスポンシブ(RWD)に対応するため、ウィンドウの幅を変えた時にも「margin-top」を設定し直す仕様とします。 【実装】 jQuery(document).ready(function() {   adjustPosition();     $(window).resize(function () {     adjustPosition();   });   function adjustPosition(){       var heightA = $("要素1").outerHeight();       var heightB = $("テキスト部").outerHeight();       var heightC = $("要素2").outerHeight();       var heightD = heightA - heightB - heightC;       if (heightD > 0) {         $("#要素2").css("margin-top", heightD + "px");...

第53回「否定的な意見を言われたら喜びましょう!?」カウンセラーの集客・仕事応援!顧客獲得型ホームページの作り方ラジオ

🔰【5ステップ無料動画講座】UCHP〜売れっ子カウンセラーホームページ構築【無料】動画講座→ https://adachiweb.support/howto-uchp-movies/ 🔸ノウハウは素晴らしくても廃業されるカウンセラーがいます。その理由を知っていますか? なぜ?カウンセラーこそホームページをやるべきなのか!? 実は他の業種より、カウンセラーがHPをやるべき、 たった1つの理由があります。  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 半年前、、、 全く集客が出来なかった ダブルワークのカウンセラーさんが  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 集客を仕組み化し、 専業カウンセラーになった方法を、  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 知りたくありませんか? ⭕カウンセラーで一生食べていくWeb集客が身につくセミナー 詳しくはこちら ↓↓↓ https://counselor-shuukyaku.com/ 各回先着4名様限定で50%OFF! ✨ストアカの早割ご利用で先着4名さらに30%OFF! ⭕ストアカからのお申し込みはこちら ↓↓↓ https://www.street-academy.com/myclass/62748 🔸 【動画の概要】  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ビジネスをする中で 発信をしていると、 様々な反響があります。 その中には 肯定的な意見 もあれば、  ̄ ̄ ̄ ̄ ̄ ̄ 否定的な意見 もあります。  ̄ ̄ ̄ ̄ ̄ ̄ 否定的な意見があると、 気持ちとしては 辛いものがありますが、 実は、 喜ぶべき側面 もあります。  ̄ ̄ ̄ ̄ ̄ ̄ 今回は、 そんな 否定的な意見の 喜ぶべき側面とは何か 、 鈴木智夫が解説します。 🔸音声で聴きたい人はこちら:Podcast(ポッドキャスト 無料インターネットラジオ)→ https://adachiweb.support/podcast-howto/ 🔸【今だけ無料でサクッと】集客はタイトルが8割!7ステップメール講座→ https://adachiweb.support/howto-title...