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;
.content-navigation p {
font-size: 14px;
}
.border {
padding: 8px;
margin: 8px;
border-color: #3bbfce;
.border {
padding: 8px;
margin: 8px;
border-color: #3bbfce;
}
が生成される。
実際は都度コマンド実行するのではなく、
$sass --watch scss:css
でフォルダ監視し、scssフォルダ内の.scssファイルが更新されたら自動でcssフォルダにファイルを生成(上書き)する。
width: 90%;
p {
font-size: 16px;
a {
text-decoration: none;
&:hover { // &は親要素のセレクタをあらわす
font-weight: bold;
}
}
}
}
が生成される。
実際は都度コマンド実行するのではなく、
$sass --watch scss:css
でフォルダ監視し、scssフォルダ内の.scssファイルが更新されたら自動でcssフォルダにファイルを生成(上書き)する。
SCSSの記法
入れ子構造
#main {width: 90%;
p {
font-size: 16px;
a {
text-decoration: none;
&:hover { // &は親要素のセレクタをあらわす
font-weight: bold;
}
}
}
}
コメント
// (=>変換後のCSSに表示されない)
/* */
#main {
font-size: $baseFontSize;
.sub {
font-size: $baseFontSize - 2px; // -2 でもOK
}
}// +, -, *, / の演算可能
/* */
変数(数値)
$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: #ff0000; とかも可
// lighten, darkenとか使える => "sass built-in functions" でググる
#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%);
}
}
$x: 10;
// ==, !=, <, >, <=, >=
#main {
@if $debugMode == true {
color: red;
} @else {
color: green;
}
p {
@if $x > 20 {
.....
}
}
}
@for $i from 10 through 14 {
.fs#{$i} {
font-size: #{$i}px;
}
}
// 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;
}
@each $animal in $animals {
.#{$animal}-icon {
background: url("#{animal}.png");
}
}
$columnCount: 5;
$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では展開されている
例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);
}
// $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/
出展
公式サイト
http://sass-lang.com/
ドットインストール
http://dotinstall.com/lessons/basic_sass/
コメント
コメントを投稿