狠狠撸

狠狠撸Share a Scribd company logo
Sass/Compass よくあるトラブルと 解決方法?回避方法
良くあるトラブルと?
解決方法?回避方法
木村哲朗?西畑一馬
Sass / Compass
木村 哲朗
フロントエンドエンジニア
西畑 一馬
フロントエンドエンジニア
こちらもどうぞ
http://www.slideshare.net/
maboroshi_inc/css-nite-lp26-
codekitweb
スライド: 動画:
http://vimeo.com/57782498
本日の内容
? 导入の障害を乗り越える方法
? Sass/Compass の御法度
? かゆいところに手を届ける罢颈辫蝉
?「次」へのステップ
前置き
フロントエンドの?
受託制作やってます。
导入の障害を乗り越える方法
受託で使ってもいいの?
いいんです!
クライアントが?
Sassを使えない
いくつかの方法
A. 調整用のCSSファイルを?
別途用意する
B. コンパイル後のCSSファイルを?
直接さわってもらう
C. 顽张って使ってもらう!
いくつかの方法
A. 調整用のCSSファイルを?
別途用意する
B. コンパイル後のCSSファイルを?
直接さわってもらう
C. 顽张って使ってもらう!
調整用CSSを用意する
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Document</title>
?
<link rel="stylesheet" href="main.css"><!-- コンパイル後のCSSは編集禁止 -->
<link rel="stylesheet" href="temp.css"><!-- スタイル調整はこちらを編集 -->
?
</head>
<body>
<!-- 中略 -->
</body>
</html>
コンパイル後のCSSファイルとは別に
調整用のCSSファイルを用意する
メリット
? コンパイル後のCSSファイルが?
汚染されない
?差分の吸収がし易い
デメリット
? HTTPリクエストが増える
? スタイルの上書きが大変
いくつかの方法
A. 調整用のCSSファイルを?
別途用意する
B. コンパイル後のCSSファイルを?
直接さわってもらう
C. 顽张って使ってもらう!
直接さわってもらう
コンパイル後のCSSファイルを
直接編集してもらう
$ sass foo.scss:foo.css --style expanded
sass コマンドでオプションを指定
/* 人間が読みやすい形式に出力される */
body {
color: #333;
}
?
h1 {
font-size: 2.0rem;
}
?
.red {
color: #f00;
}
コンパイル後のCSSファイル
# コメントのスタイルを"expanded"に指定
output_style = expanded
Compass を使う場合は con?g.rb で
メリット
? スタイルを上書きし易い
デメリット
? コンパイル後のCSSファイルが?
汚染される
いずれにせよ?
ディレクションのお話
SCSSファイルって?
納品するの?
原则として纳品する
文字コードが 非UTF-8
文字コードを宣言する
@charset "Shift_JIS";
?
/* 日本語で何かしらコメント */
?
@import "compass";
// …以下略
?@charset で文字コードを宣言
?日本語でコメントを残す
? 指定の文字コードで保存してコンパイル
SCSSファイル
Sass/Compass の御法度
導入できた! 万歳…?!
ネストの多用
ネストが深すぎると…
#foo {
width: 200px;
ul {
padding: 10px;
li {
list-style-type: none;
a {
color: #009;
.bar {
font-weight: bold;
}
}
}
}
}
SCSSファイル
#foo {
width: 200px;
}
#foo ul {
padding: 10px;
}
#foo ul li {
list-style-type: none;
}
#foo ul li a {
color: #009;
}
#foo ul li a .bar {
font-weight: bold;
}
コンパイル後のCSSファイル
これはひどい。
ネストは3阶层まで
extend の多用
extend しすぎると…
%clearfix {
&:after {
content: "";
clear: both;
display: block;
}
}
.extended1 {
@extend %clearfix;
font-size: 120%;
}
.extended2 {
@extend %clearfix;
font-weight: bold;
}
.extended3 {
@extend %clearfix;
text-decoration: underline;
}
// 以下大量にextend
SCSSファイル
.extended1:after, .extended2:after, .e
xtended3:after, .extended4:after, .ext
ended5:after, .extended6:after, .exten
ded7:after, .extended8:after, .extende
d9:after, .extended10:after, .extended
11:after, .extended12:after, .extended
13:after, .extended14:after, .extended
15:after, .extended16:after, .extended
17:after, .extended18:after, .extended
19:after, .extended20:after {
content: "";
clear: both;
display: block;
}
?
.extended1 {
font-size: 120%;
}
/* 以下略 */
コンパイル後のCSSファイル
これはひどい。
クラス や mixin にする
.clearfix:after {
content: "";
clear: both;
display: block;
}
汎用的なクラスにして
@mixin clearfix {
&:after {
content: "";
clear: both;
display: block;
}
}
!
.foo {
@include clearfix;
}
mixin にして使い回す
<div class="clearfix">
<p class="main">Floated left.</p>
<p class="sub">Floated right.</p>
</div>
html 側で使い回す
ちなみに
?@media の中では?
@extend が使えない
http://terkel.jp/archives/2012/07/at-media-and-at-extend/
IEの 4,095 問題
? IE9 以下では 4,095個までしか?
セレクターを認識しない
http://support.microsoft.com/kb/262161
? ネストや extend を多用すると?
セレクターが容易に増えていく
?Bless というツールで?
CSSファイルを分割できる
http://blesscss.com/
そもそも设计がまずい
複雑な mixin の多用
他人が理解できない
? メンバーを思いやる
? 使用方法をコメントに記す
?関数についても同じ
スプライト画像の?
肥大化
?画像を使いすぎると?
スプライト画像が肥大化する
? iPhone では 500万画素以上の?
GIF/PNG/TIFF は表示できない
? Android は機種による
? スプライト画像を分割するなど?
一枚に集めすぎない
? できるだけ画像を使わない
? アイコンはフォント化する手も
かゆいところに手を届ける罢颈辫蝉
CompassでCSSを?
複数のディレクトリに?
分けて書き出したい
出力前
ディレクトリ構造
# css_dir と sass_dir を同じパスにする
css_dir = "/"
sass_dir = "/"
con?g.rb
CSS の配置場所に?
SCSS を配置する
root
┃┃
┃
┃
foo┣
foobar┣┃
style.scss┃┃ ┗
┃ style.scss┗
bar┣
style.scss┗┃
index.html┣
config.rb┗
出力後
ディレクトリ構造
# css_dir と sass_dir を同じパスにする
css_dir = "/"
sass_dir = "/"
con?g.rb
root
foo┣
foobar┣┃
style.scss┃┃ ┣
┃┃ style.css┗
┃ style.scss┣
┃ style.css┗
bar┣
style.scss┣┃
style.css┗┃
index.html┣
config.rb┗
SCSS と同じ所に?
CSS が出力される
スプライト画像の?
ファイル名を綺麗に?
したい
? Compassでは?
スプライト画像のファイル名末尾に?
ランダムな英数字が付与される
? スプライト画像が更新されたときに?
古い画像の読み込みを防ぐための?
キャッシュバスター
おまじない
# キャッシュバスター文字列をトリミング
on_sprite_saved do |filename|
if File.exists?(filename)
FileUtils.cp filename, filename.gsub(%r{-s[a-z0-9]{10}.png$}, '.png')
end
end
?
on_stylesheet_saved do |filename|
if File.exists?(filename)
css = File.read filename
File.open(filename, 'w+') do |f|
f << css.gsub(%r{-s[a-z0-9]{10}.png}, '.png')
end
end
end
con?g.rb に以下を追記
出典: http://stackover?ow.com/questions/9183133/how-to-turn-off-compass-sass-cache-busting/9332472
Compassの?
コンパイルを早くしたい
? 最も重いのは?
スプライト画像の生成
? スプライト画像の生成には?
chunky_png が使われている
chunky_png を使わない
$ gem install oily_png
ターミナルでインストール
出典: http://compass-style.org/help/tutorials/spriting/
?oily_png を使う
? chunky_png よりも高速
? インストールするだけで自動認識
※Mac は先頭に sudo が必要
「次」へのステップ
レスポンシブな?
フレームワーク
Bootstrap
http://getbootstrap.com/ Sass版: https://github.com/twbs/bootstrap-sass
Foundation
http://foundation.zurb.com/
Sass で?
BEM
BEM とは
? Yandex が開発した設計の方法論
? CSS用に落とし込んだ?
MindBEMding が使いやすい
?Block, Element, Modi?er?
の略
詳しくはこちら
http://bem.info/method/
http://journal.sooey.com/220
http://csswizardry.com/2013/01/mindbemding-getting-your-head-
round-bem-syntax/
https://gist.github.com/juno/6182957
http://blog.ruedap.com/2013/10/29/block-element-modi?er
http://hail2u.net/blog/webdesign/sass-and-bem.html
http://www.adventar.org/calendars/61
CSSだとつらい
.block {
width: 100%;
}
?
.block__element {
float: left;
width: 50%;
}
?
.block__element--modifier {
float: right;
}
?
.block--modifier {
padding: 20px;
}
?
.block--modifier__element {
color: #f00;
}
CSS
BEMのルールに従うと?
クラス名が長く?
繰り返しも多くなる
Sass を使えば…
.block {
width: 100%;
?
@at-root {
?
#{&}__element {
float: left;
width: 50%;
}
#{&}__element--modifier {
float: right;
}
#{&}--modifier {
padding: 20px;
}
#{&}--modifier__element {
color: #f00;
}
?
}
}
SCSS
@at-root と?
#{&} で?
サクサク書ける
まだ使えない?
次期バージョン 3.3 から
Sass や Compass の?
バージョン管理
例えばこんなとき
?次期バージョンの?
Sass/Compass を使いたい
? 使用する Sass/Compass の?
バージョンを厳格に指定したい
Bundler
http://bundler.io/
Bundler のインストール
$ gem install bundler
ターミナルでインストール
※Mac は先頭に sudo が必要
プロジェクトごとの初期設定
$ bundle init
ターミナルで作業ディレクトリを開いて
※作業ディレクトリまでのパスにスペースが含まれていると正常に動作しない場合があるので要注意
$ vi Gemfile
作業ディレクトリに Gem?le が生成されるので編集する
※一般的なテキストエディタでも編集可能
source "https://rubygems.org"
!
gem 'sass', '3.3.0.rc.2'
gem 'compass', '0.13.alpha.12'
Gem?le 記述例
※“Sass Ver.3.3.0.rc.2” と “Compass Ver.0.13.alpha.12” を使用したい場合は上記のように記述
パッケージのインストール
$ bundle install --path vendor/bundle
ターミナルでインストール
※パスを指定せずに実行するとグローバルにインストールされてしまうので要注意
? Gem?le をプロジェクトメンバー間で?
共有すれば、全員が同じバージョンの?
Sass や Compass を使用できる
各コマンドの使用方法
$ bundle exec compass w
bundle コマンドを通じて呼び出す
? あとはいつも通り
Grunt でもっと便利に
Grunt
http://gruntjs.com/
Grunt とは
?タスクランナー?
さまざまな処理を順番に自動実行
?Node.js で動作する
Node.js
http://nodejs.org/
Node.js のインストール
? 公式サイトから?
インストーラーをダウンロード
? Macなら?
Homebrew か nodebrew での
インストールがおすすめ
? Homebrew: http://brew.sh/
? nodebrew: https://github.com/hokaccha/nodebrew
Grunt でできること
? ファイル更新の監視
? ブラウザのライブリロード
? Sass/Compass のコンパイル
?ベンダープレフィックスの付与
?CSSスプライトの生成
? CSSのミニファイ
? 画像の最適化?
Compass より柔軟
プラグインを组み合わせる
ファイル更新の監視
? grunt-contrib-watch
https://github.com/gruntjs/grunt-contrib-watch
? 骋谤耻苍迟公式プラグイン
? grunt-este-watch
https://github.com/steida/grunt-este-watch
? grunt-contrib-watch よりも高速
ブラウザのライブリロード
? grunt-contrib-connect
https://github.com/gruntjs/grunt-contrib-
connect
? 骋谤耻苍迟公式プラグイン
? 前のページのプラグインと組み合わせることで?
ファイル更新時にブラウザをリロードしてくれる
Sass のコンパイル
? grunt-contrib-sass
https://github.com/gruntjs/grunt-contrib-sass
? 骋谤耻苍迟公式プラグイン
? grunt-sass
https://github.com/sindresorhus/grunt-sass
? grunt-contrib-sass よりも高速
Compass のコンパイル
? grunt-contrib-compass
https://github.com/gruntjs/grunt-contrib-
compass
? 骋谤耻苍迟公式プラグイン
ベンダープレフィックスの付与
? grunt-autopre?xer
https://github.com/nDmitry/grunt-autopre?xer
? 標準のCSSプロパティさえ書けば?
自動的にベンダープレフィックスを付与してくれる
? 付与するベンダープレフィックスを?
ブラウザバージョンで指定することができる
? Compass の CSS3 ヘルパーが不要になる
CSSスプライトの生成
? grunt-spritesmith
https://github.com/Ensighten/grunt-spritesmith
? 画像処理エンジンが別途必要
? 出力フォーマットを SCSS にすると?
スプライト用の Mixin を生成してくれる
? Compass のスプライトヘルパーが不要になる
CSS のミニファイ
? grunt-contrib-cssmin
https://github.com/gruntjs/grunt-contrib-cssmin
? 骋谤耻苍迟公式プラグイン
? grunt-csso
https://github.com/t32k/grunt-csso
? grunt-contrib-cssmin よりも圧縮率が高い
画像の最適化
? grunt-contrib-imagemin
https://github.com/gruntjs/grunt-contrib-
imagemin
? 骋谤耻苍迟公式プラグイン
? PNG, JPEG, GIF に対応
Grunt の始め方
http://blog.webcreativepark.net/2013/08/28-010250.html
Gulp ってのもあります
http://gulpjs.com/
まとめ
ご利用は计画的に
身の丈に?
合わせて
黒い画面、今度こそ
赤い?画面
ターミナルが?
好きになりました?
大丈夫、まぼろし监修だよ!
大丈夫、まぼろし监修だよ!
お申し込みは→ http://peatix.com/event/29230
Photo credits
? Philippe Moreau Chevrolet
? Eric_Dorsey
? niXerKG
? leigh wolf
? Corey Templeton
? asenat29
? Nicu Buculei
? Lachlan Fearnley
? marsmettn tallahassee
? Becky Stern
? myrrh ahn
? <p&p>
? Will Scullin
? Van Corey
? Kate Sumbler
? Li Jen Jian
? Andy Ciordia
? Mrs TeePot
? Judy Baxter
? Yamanaka Tamaki
? Joseph Kesisoglou
? Emyan
? ecatoncheires
? clogette
? KIMURA Tetsuro
ありがとうございます
木村哲朗?西畑一馬

More Related Content

Sass/Compass よくあるトラブルと 解決方法?回避方法