第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;
	}
}