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

99

description

CSS Nite LP32 Sass で行なった「Sass/Compass よくあるトラブルと 解決方法・回避方法」のスライドです

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

Page 1: Sass/Compass よくあるトラブルと 解決方法・回避方法
Page 2: Sass/Compass よくあるトラブルと 解決方法・回避方法

良くあるトラブルと解決方法・回避方法

木村哲朗・西畑一馬

Sass / Compass

Page 3: Sass/Compass よくあるトラブルと 解決方法・回避方法

木村 哲朗 フロントエンドエンジニア

Page 4: Sass/Compass よくあるトラブルと 解決方法・回避方法

西畑 一馬 フロントエンドエンジニア

Page 5: Sass/Compass よくあるトラブルと 解決方法・回避方法

こちらもどうぞ

http://www.slideshare.net/maboroshi_inc/css-nite-lp26-codekitweb

スライド: 動画:http://vimeo.com/57782498

Page 6: Sass/Compass よくあるトラブルと 解決方法・回避方法

本日の内容

•導入の障害を乗り越える方法

•Sass/Compass の御法度

•かゆいところに手を届けるTips •「次」へのステップ

Page 7: Sass/Compass よくあるトラブルと 解決方法・回避方法

前置き

フロントエンドの受託制作やってます。

Page 8: Sass/Compass よくあるトラブルと 解決方法・回避方法

導入の障害を乗り越える方法

Page 9: Sass/Compass よくあるトラブルと 解決方法・回避方法

受託で使ってもいいの?

Page 10: Sass/Compass よくあるトラブルと 解決方法・回避方法

いいんです!

Page 11: Sass/Compass よくあるトラブルと 解決方法・回避方法

クライアントがSassを使えない

Page 12: Sass/Compass よくあるトラブルと 解決方法・回避方法

いくつかの方法

A. 調整用のCSSファイルを別途用意する

B. コンパイル後のCSSファイルを直接さわってもらう

C. 頑張って使ってもらう!

Page 13: Sass/Compass よくあるトラブルと 解決方法・回避方法

いくつかの方法

A. 調整用のCSSファイルを別途用意する

B. コンパイル後のCSSファイルを直接さわってもらう

C. 頑張って使ってもらう!

Page 14: Sass/Compass よくあるトラブルと 解決方法・回避方法

調整用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ファイルを用意する

Page 15: Sass/Compass よくあるトラブルと 解決方法・回避方法

メリット

•コンパイル後のCSSファイルが汚染されない

•差分の吸収がし易い

Page 16: Sass/Compass よくあるトラブルと 解決方法・回避方法

デメリット

•HTTPリクエストが増える

•スタイルの上書きが大変

Page 17: Sass/Compass よくあるトラブルと 解決方法・回避方法

いくつかの方法

A. 調整用のCSSファイルを別途用意する

B. コンパイル後のCSSファイルを直接さわってもらう

C. 頑張って使ってもらう!

Page 18: Sass/Compass よくあるトラブルと 解決方法・回避方法

直接さわってもらう

コンパイル後の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 を使う場合は config.rb で

Page 19: Sass/Compass よくあるトラブルと 解決方法・回避方法

メリット

•スタイルを上書きし易い

Page 20: Sass/Compass よくあるトラブルと 解決方法・回避方法

デメリット

•コンパイル後のCSSファイルが汚染される

Page 21: Sass/Compass よくあるトラブルと 解決方法・回避方法

いずれにせよディレクションのお話

Page 22: Sass/Compass よくあるトラブルと 解決方法・回避方法

SCSSファイルって納品するの?

Page 23: Sass/Compass よくあるトラブルと 解決方法・回避方法

原則として納品する

Page 24: Sass/Compass よくあるトラブルと 解決方法・回避方法

文字コードが 非UTF-8

Page 25: Sass/Compass よくあるトラブルと 解決方法・回避方法

文字コードを宣言する@charset "Shift_JIS";   /* 日本語で何かしらコメント */   @import "compass"; // …以下略

•@charset で文字コードを宣言 •日本語でコメントを残す

•指定の文字コードで保存してコンパイル

SCSSファイル

Page 26: Sass/Compass よくあるトラブルと 解決方法・回避方法

Sass/Compass の御法度

Page 27: Sass/Compass よくあるトラブルと 解決方法・回避方法

導入できた! 万歳…?!

Page 28: Sass/Compass よくあるトラブルと 解決方法・回避方法

ネストの多用

Page 29: 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ファイル

Page 30: Sass/Compass よくあるトラブルと 解決方法・回避方法

これはひどい。

Page 31: Sass/Compass よくあるトラブルと 解決方法・回避方法

ネストは3階層まで

Page 32: Sass/Compass よくあるトラブルと 解決方法・回避方法

extend の多用

Page 33: Sass/Compass よくあるトラブルと 解決方法・回避方法

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, .extended3:after, .extended4:after, .extended5:after, .extended6:after, .extended7:after, .extended8:after, .extended9:after, .extended10:after, .extended11:after, .extended12:after, .extended13:after, .extended14:after, .extended15:after, .extended16:after, .extended17:after, .extended18:after, .extended19:after, .extended20:after { content: ""; clear: both; display: block; }   .extended1 { font-size: 120%; } /* 以下略 */

コンパイル後のCSSファイル

Page 34: Sass/Compass よくあるトラブルと 解決方法・回避方法

これはひどい。

Page 35: Sass/Compass よくあるトラブルと 解決方法・回避方法

クラス や 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 側で使い回す

Page 36: Sass/Compass よくあるトラブルと 解決方法・回避方法

ちなみに

•@media の中では@extend が使えない

http://terkel.jp/archives/2012/07/at-media-and-at-extend/

Page 37: Sass/Compass よくあるトラブルと 解決方法・回避方法

IEの 4,095 問題

Page 38: Sass/Compass よくあるトラブルと 解決方法・回避方法

• IE9 以下では 4,095個までしかセレクターを認識しない http://support.microsoft.com/kb/262161

• ネストや extend を多用するとセレクターが容易に増えていく •Bless というツールでCSSファイルを分割できる http://blesscss.com/

Page 39: Sass/Compass よくあるトラブルと 解決方法・回避方法

そもそも設計がまずい

Page 40: Sass/Compass よくあるトラブルと 解決方法・回避方法

複雑な mixin の多用

Page 41: Sass/Compass よくあるトラブルと 解決方法・回避方法

他人が理解できない

Page 42: Sass/Compass よくあるトラブルと 解決方法・回避方法

• メンバーを思いやる •使用方法をコメントに記す •関数についても同じ

Page 43: Sass/Compass よくあるトラブルと 解決方法・回避方法

スプライト画像の肥大化

Page 44: Sass/Compass よくあるトラブルと 解決方法・回避方法

•画像を使いすぎるとスプライト画像が肥大化する

• iPhone では 500万画素以上のGIF/PNG/TIFF は表示できない

• Android は機種による

Page 45: Sass/Compass よくあるトラブルと 解決方法・回避方法

• スプライト画像を分割するなど一枚に集めすぎない

•できるだけ画像を使わない

•アイコンはフォント化する手も

Page 46: Sass/Compass よくあるトラブルと 解決方法・回避方法

かゆいところに手を届けるTips

Page 47: Sass/Compass よくあるトラブルと 解決方法・回避方法

CompassでCSSを 複数のディレクトリに分けて書き出したい

Page 48: Sass/Compass よくあるトラブルと 解決方法・回避方法

出力前ディレクトリ構造

# css_dir と sass_dir を同じパスにする css_dir = "/" sass_dir = "/"

config.rb

CSS の配置場所にSCSS を配置する

root

┃┃

foo┣foobar┣┃

style.scss┃┃ ┗

┃ style.scss┗

bar┣style.scss┗┃

index.html┣config.rb┗

Page 49: Sass/Compass よくあるトラブルと 解決方法・回避方法

出力後ディレクトリ構造

# css_dir と sass_dir を同じパスにする css_dir = "/" sass_dir = "/"

config.rb

rootfoo┣

foobar┣┃style.scss┃┃ ┣

┃┃ style.css┗┃ style.scss┣┃ style.css┗

bar┣style.scss┣┃style.css┗┃

index.html┣config.rb┗

SCSS と同じ所にCSS が出力される

Page 50: Sass/Compass よくあるトラブルと 解決方法・回避方法

スプライト画像のファイル名を綺麗にしたい

Page 51: Sass/Compass よくあるトラブルと 解決方法・回避方法

• Compassではスプライト画像のファイル名末尾に ランダムな英数字が付与される

•スプライト画像が更新されたときに古い画像の読み込みを防ぐためのキャッシュバスター

Page 52: Sass/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

config.rb に以下を追記

出典: http://stackoverflow.com/questions/9183133/how-to-turn-off-compass-sass-cache-busting/9332472

Page 53: Sass/Compass よくあるトラブルと 解決方法・回避方法

Compassの コンパイルを早くしたい

Page 54: Sass/Compass よくあるトラブルと 解決方法・回避方法

• 最も重いのはスプライト画像の生成

•スプライト画像の生成にはchunky_png が使われている

Page 55: Sass/Compass よくあるトラブルと 解決方法・回避方法

chunky_png を使わない$ gem install oily_png

ターミナルでインストール

出典: http://compass-style.org/help/tutorials/spriting/

•oily_png を使う • chunky_png よりも高速

•インストールするだけで自動認識

※Mac は先頭に sudo が必要

Page 56: Sass/Compass よくあるトラブルと 解決方法・回避方法

「次」へのステップ

Page 57: Sass/Compass よくあるトラブルと 解決方法・回避方法

レスポンシブなフレームワーク

Page 58: Sass/Compass よくあるトラブルと 解決方法・回避方法

Bootstrap

http://getbootstrap.com/ Sass版: https://github.com/twbs/bootstrap-sass

Page 59: Sass/Compass よくあるトラブルと 解決方法・回避方法

Foundation

http://foundation.zurb.com/

Page 60: Sass/Compass よくあるトラブルと 解決方法・回避方法

Sass でBEM

Page 61: Sass/Compass よくあるトラブルと 解決方法・回避方法

BEM とは

•Yandex が開発した設計の方法論

• CSS用に落とし込んだMindBEMding が使いやすい

•Block, Element, Modifierの略

Page 62: Sass/Compass よくあるトラブルと 解決方法・回避方法

詳しくはこちら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-modifier

http://hail2u.net/blog/webdesign/sass-and-bem.html

http://www.adventar.org/calendars/61

Page 63: Sass/Compass よくあるトラブルと 解決方法・回避方法

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のルールに従うとクラス名が長く

繰り返しも多くなる

Page 64: Sass/Compass よくあるトラブルと 解決方法・回避方法

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 と#{&} でサクサク書ける

Page 65: Sass/Compass よくあるトラブルと 解決方法・回避方法

まだ使えない次期バージョン 3.3 から

Page 66: Sass/Compass よくあるトラブルと 解決方法・回避方法

Sass や Compass のバージョン管理

Page 67: Sass/Compass よくあるトラブルと 解決方法・回避方法

例えばこんなとき

•次期バージョンのSass/Compass を使いたい

•使用する Sass/Compass の バージョンを厳格に指定したい

Page 68: Sass/Compass よくあるトラブルと 解決方法・回避方法

Bundler

http://bundler.io/

Page 69: Sass/Compass よくあるトラブルと 解決方法・回避方法

Bundler のインストール$ gem install bundler

ターミナルでインストール

※Mac は先頭に sudo が必要

Page 70: Sass/Compass よくあるトラブルと 解決方法・回避方法

プロジェクトごとの初期設定$ bundle init

ターミナルで作業ディレクトリを開いて

※作業ディレクトリまでのパスにスペースが含まれていると正常に動作しない場合があるので要注意

$ vi Gemfile

作業ディレクトリに Gemfile が生成されるので編集する

※一般的なテキストエディタでも編集可能

source "https://rubygems.org" !gem 'sass', '3.3.0.rc.2' gem 'compass', '0.13.alpha.12'

Gemfile 記述例

※“Sass Ver.3.3.0.rc.2” と “Compass Ver.0.13.alpha.12” を使用したい場合は上記のように記述

Page 71: Sass/Compass よくあるトラブルと 解決方法・回避方法

パッケージのインストール$ bundle install --path vendor/bundle

ターミナルでインストール

※パスを指定せずに実行するとグローバルにインストールされてしまうので要注意

• Gemfile をプロジェクトメンバー間で共有すれば、全員が同じバージョンのSass や Compass を使用できる

Page 72: Sass/Compass よくあるトラブルと 解決方法・回避方法

各コマンドの使用方法$ bundle exec compass w

bundle コマンドを通じて呼び出す

• あとはいつも通り

Page 73: Sass/Compass よくあるトラブルと 解決方法・回避方法

Grunt でもっと便利に

Page 74: Sass/Compass よくあるトラブルと 解決方法・回避方法

Grunt

http://gruntjs.com/

Page 75: Sass/Compass よくあるトラブルと 解決方法・回避方法

Grunt とは

•タスクランナーさまざまな処理を順番に自動実行

•Node.js で動作する

Page 76: Sass/Compass よくあるトラブルと 解決方法・回避方法

Node.js

http://nodejs.org/

Page 77: Sass/Compass よくあるトラブルと 解決方法・回避方法

Node.js のインストール•公式サイトからインストーラーをダウンロード

•Macなら Homebrew か nodebrew でのインストールがおすすめ • Homebrew: http://brew.sh/

• nodebrew: https://github.com/hokaccha/nodebrew

Page 78: Sass/Compass よくあるトラブルと 解決方法・回避方法

Grunt でできること•ファイル更新の監視 •ブラウザのライブリロード • Sass/Compass のコンパイル •ベンダープレフィックスの付与 •CSSスプライトの生成 • CSSのミニファイ •画像の最適化

Page 79: Sass/Compass よくあるトラブルと 解決方法・回避方法

Compass より柔軟

Page 80: Sass/Compass よくあるトラブルと 解決方法・回避方法

プラグインを組み合わせる

Page 81: Sass/Compass よくあるトラブルと 解決方法・回避方法

ファイル更新の監視•grunt-contrib-watch https://github.com/gruntjs/grunt-contrib-watch • Grunt公式プラグイン

• grunt-este-watch https://github.com/steida/grunt-este-watch • grunt-contrib-watch よりも高速

Page 82: Sass/Compass よくあるトラブルと 解決方法・回避方法

ブラウザのライブリロード•grunt-contrib-connect https://github.com/gruntjs/grunt-contrib-connect • Grunt公式プラグイン •前のページのプラグインと組み合わせることでファイル更新時にブラウザをリロードしてくれる

Page 83: Sass/Compass よくあるトラブルと 解決方法・回避方法

Sass のコンパイル•grunt-contrib-sass https://github.com/gruntjs/grunt-contrib-sass • Grunt公式プラグイン

• grunt-sass https://github.com/sindresorhus/grunt-sass • grunt-contrib-sass よりも高速

Page 84: Sass/Compass よくあるトラブルと 解決方法・回避方法

Compass のコンパイル•grunt-contrib-compass https://github.com/gruntjs/grunt-contrib-compass • Grunt公式プラグイン

Page 85: Sass/Compass よくあるトラブルと 解決方法・回避方法

ベンダープレフィックスの付与•grunt-autoprefixer https://github.com/nDmitry/grunt-autoprefixer • 標準のCSSプロパティさえ書けば自動的にベンダープレフィックスを付与してくれる

•付与するベンダープレフィックスをブラウザバージョンで指定することができる

• Compass の CSS3 ヘルパーが不要になる

Page 86: Sass/Compass よくあるトラブルと 解決方法・回避方法

CSSスプライトの生成•grunt-spritesmith https://github.com/Ensighten/grunt-spritesmith • 画像処理エンジンが別途必要 •出力フォーマットを SCSS にするとスプライト用の Mixin を生成してくれる

• Compass のスプライトヘルパーが不要になる

Page 87: Sass/Compass よくあるトラブルと 解決方法・回避方法

CSS のミニファイ•grunt-contrib-cssmin https://github.com/gruntjs/grunt-contrib-cssmin • Grunt公式プラグイン

• grunt-csso https://github.com/t32k/grunt-csso • grunt-contrib-cssmin よりも圧縮率が高い

Page 88: Sass/Compass よくあるトラブルと 解決方法・回避方法

画像の最適化•grunt-contrib-imagemin https://github.com/gruntjs/grunt-contrib-imagemin • Grunt公式プラグイン • PNG, JPEG, GIF に対応

Page 89: Sass/Compass よくあるトラブルと 解決方法・回避方法

Grunt の始め方

http://blog.webcreativepark.net/2013/08/28-010250.html

Page 90: Sass/Compass よくあるトラブルと 解決方法・回避方法

Gulp ってのもあります

http://gulpjs.com/

Page 91: Sass/Compass よくあるトラブルと 解決方法・回避方法

まとめ

Page 92: Sass/Compass よくあるトラブルと 解決方法・回避方法

ご利用は計画的に

Page 93: Sass/Compass よくあるトラブルと 解決方法・回避方法

身の丈に合わせて

Page 94: Sass/Compass よくあるトラブルと 解決方法・回避方法

黒い画面、今度こそ

Page 95: Sass/Compass よくあるトラブルと 解決方法・回避方法

赤い画面

ターミナルが好きになりました♥

Page 96: Sass/Compass よくあるトラブルと 解決方法・回避方法

大丈夫、まぼろし監修だよ!

Page 97: Sass/Compass よくあるトラブルと 解決方法・回避方法

大丈夫、まぼろし監修だよ!

お申し込みは→ http://peatix.com/event/29230

Page 98: Sass/Compass よくあるトラブルと 解決方法・回避方法

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

Page 99: Sass/Compass よくあるトラブルと 解決方法・回避方法

ありがとうございます木村哲朗・西畑一馬