第5章 現場で使える実践Sassコーディング
5-1 管理 / 運用・設計で使える
ネストが深すぎると生じる問題を把握して、バランスを見ながら利用する
#wrap { #wrapInner { #page { #contents { #contentsInner { #main { section { margin-bottom: 50px; .item { .image { float: left; } .text { overflow: hidden; p { margin: 0 0 1em; } } } } } } } } } }
#wrap #wrapInner #page #contents #contentsInner #main section { margin-bottom: 50px; } #wrap #wrapInner #page #contents #contentsInner #main section .item .image { float: left; } #wrap #wrapInner #page #contents #contentsInner #main section .item .text { overflow: hidden; } #wrap #wrapInner #page #contents #contentsInner #main section .item .text p { margin: 0 0 1em; }
CSSとは違うパーシャルによるSassファイルの分割
@charset "utf-8"; // =================================================================== // 設定 // =================================================================== // 使うリセットCSS $resetCSS: HTML5; // 幅 $base_width: auto; $max_width: 960px; $min_width: 300px; $main_width: 640px; $side_width: 280px; // フォントカラー $font_color: #555; $title_color: #232323; // リンクカラー $link_color: #4775f5; $link_color_visited: #333; $link_color_hover: #4775f5 + #222; $link_color_active: #000; $base_color: #c69; $sub_color: #7e9dd0; // 章カラー $chapter_color: #c69, #7e9dd0, #c69, #7e9dd0, #c69, #7e9dd0, #c69, #7e9dd0; // 付与するベンダープレフィックス $set_prefix: -webkit-, -moz-, -ms-, -o-, ''; // ベースフォント $base_font: "Source Code Pro", "メイリオ", "Meiryo", "ヒラギノ明朝 Pro W6", "Hiragino Mincho Pro", "HGS明朝E", "MS P明朝", serif, verdana, "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", Osaka, "MS Pゴシック", "MS PGothic", Sans-Serif;
// 角丸 @mixin border_radius($value: 3px) { @each $prefix in $setPrefix { #{$prefix}border-radius: $value; } } // 余白調整用 @if $use_spaceClass > 0 { @for $i from 0 through $space_endValue { .mt#{$i * 5} { margin-top: 5px * $i !important; } .mb#{$i * 5} { margin-bottom: 5px * $i !important; } @if $use_spacePadding > 0 { .pt#{$i * 5} { padding-top: 5px * $i !important; } .pb#{$i * 5} { padding-bottom: 5px * $i !important; } } } } // clearfix %clearfix { @if $support_IE > 0 { *zoom: 1; } &:after { content: ""; display: table; clear: both; } } ...(略)...
// =================================================================== // 各Sassファイルのインポート // =================================================================== // 設定用 @import "setting"; // リセットCSS、フォントサイズ @import "reset"; // ミックスイン、@extend、CSS3など @import "mixin"; // 共通モジュールやパーツ @import "module"; // メインスタイル @import "main";
sass --style expanded --watch sass:www/css
さまざまなリセットCSSを一つのファイルにまとめて使いまわす
$resetCSS: 1 !default; @if $resetCSS == 1 or $resetCSS == HTML5 { /*! html5doctor.com Reset Stylesheet */ } @else if $resetCSS == 2 or $resetCSS == Eric { /*! Eric Meyer's Reset CSS */ } @else if $resetCSS == 3 or $resetCSS == YUI { /*! YUI 3 - reset.css */ } @else if $resetCSS == 4 or $resetCSS == Normalize { /*! normalize.css */ } @else if $resetCSS == 0 or $resetCSS == My { /*! My Reset CSS */ } @else { /*! Universal Selector '*' Reset */ }
$resetCSS: YUI;
// 設定用 @import "setting"; // リセットCSS @import "reset";
複数のリセットCSSをパーシャルファイルにして使いまわす
// リセットCSS @import "reset/html5doctor";
CSSで制作したサイトをSassに切り替える
sass-convert --to scss style.css style.scss
#main { width: 600px; } #main p { margin: 0 0 10em; } #main p em { color: #f00; } #main small { font-size: small; }
#main { width: 600px; p { margin: 0 0 10em; em { color: red; } } small { font-size: small; } }
sass-convert -R --from css --to scss css
sass-convert -R --from css --to scss .
コメントを活用してソースを分かりやすくする
@charset "utf-8"; /*! ======================================== ※※※※※※※※※※※※※※※※※※※※※※※※※※※ このCSSファイルはSassから生成されていますので、 編集しないようご注意ください。 by name ※※※※※※※※※※※※※※※※※※※※※※※※※※※ ========================================= */ body { margin: 0 }
/*! ======================================== ※※※※※※※※※※※※※※※※※※※※※※※※※※※ このCSSファイルはSassから生成されていますので、 編集しないようご注意ください。 by name ※※※※※※※※※※※※※※※※※※※※※※※※※※※ ========================================= */ body { margin: 0; }
常に同じ場所からモジュール用のSassファイルをインポートする
sass --watch sass:css --load-path パス
【Win】sass --watch sass:css --load-path C:¥sass¥mylibrary 【Mac】sass --watch sass:css --load-path /sass/mylibrary
Sassはオブジェクト指向設計と相性が良い
<ul class="fruitList"> <li><a href="" class="orange">みかん</a></li> <li><a href="" class="apple">りんご</a></li> <li><a href="" class="banana">バナナ</a></li> <li><a href="" class="melon">メロン</a></li> </ul>
ul.fruitList { list-style: none; li { margin: 0 0 10px; a { display: inline-block; padding: 10px 25px; border-radius: 5px; text-decoration: none; color: white; &.orange { background: orange; } &.apple { background: red; } &.banana { background: yellow; color: #333; } &.melon { background: green; } } } }
<header> <ul> <li>2013/08/01</li> <li><a href="" class="banana">バナナ</a></li> </ul> </header> <p class="category"><a href="" class="orange">みかん</a></p>
<ul class="fruitList"> <li><a href="" class="cateLabel orange">みかん</a></li> <li><a href="" class="cateLabel apple">りんご</a></li> <li><a href="" class="cateLabel banana">バナナ</a></li> <li><a href="" class="cateLabel melon">メロン</a></li> </ul> <header> <ul> <li>2013/08/01</li> <li><a href="" class="cateLabel banana">バナナ</a></li> </ul> </header> <p class="category"><a href="" class="cateLabel orange">みかん</a></p>
ul.fruitList { list-style: none; li { margin: 0 0 10px; } } .cateLabel { display: inline-block; padding: 10px 25px; background: gray; border-radius: 5px; text-decoration: none; color: white; &.orange { background: orange; } &.apple { background: red; } &.banana { background: yellow; color: #333; } &.melon { background: green; } }
%cateLabel { display: inline-block; padding: 10px 25px; background: gray; border-radius: 5px; text-decoration: none; color: white; &.orange { background: orange; } &.apple { background: red; } &.banana { background: yellow; color: #333; } &.melon { background: green; } }
header ul, ul.fruitList { list-style: none; li { margin: 0 0 10px; a { @extend %cateLabel; } } } p.category { margin-bottom: 1.5em; a{ @extend %cateLabel; } }