スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

59
1 スマホサイト制作を中心にした コーディングあれこれ 2014 - 12 - 12

Upload: miyuki-tsumagari

Post on 19-Jul-2015

970 views

Category:

Internet


5 download

TRANSCRIPT

Page 1: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

1

スマホサイト制作を中心にしたコーディングあれこれ

2014 - 12 - 12

Page 2: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

津曲みゆきUIデザイナー、フロントエンドエンジニア。Web制作会社で車メーカー・ラグジュアリーブランドなどのWebディレクター・Webデザイナー経験を経て独立。

サービス設計・デザイン全般を担当した「オンライン寄せ書きyosetti」で2013年度グッドデザイン賞を受賞。

現在は主にスマホ向けサイトの受託業務と、自社サービスの運営業務を行っています。

2

Page 3: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

3年前くらいまでは…主にケータイ向けFlash Liteを使ったインタラクティブコンテンツを作ってました。その流れで、今もモバイルブラウザ向けリッチコンテンツの制作が多いです。

3

Page 4: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

事例紹介※Web公開版ではカットいたしますm(_ _)m※

Page 5: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

本日の目次1 : 弊社で使っている開発ツール2 : スマホサイトコーディング時に積極的に使っていきたい技術やコード(15min)

3 : HTMLガイドラインの目的と作り方(15min)

4 : 端末やOSごとのバグやクセなどなど(15min)

5 : 便利なツールのご紹介(5min)

5

Page 6: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

1 : 弊社で使ってる開発ツール

6

Page 7: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

こんな感じです。

など

Macintosh, Apache, MySQL, PHP

ローカーにサーバー構築プロキシ

デバッギング

プロトタイプ作成や、アニメーションだけを制作する場合

1 2 3

4 5 6

Page 8: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

タスクランナー系は使ってません。

理由:弊社の場合、最終納品が開発会社さんなので、圧縮がNGの場合が多い為…

8

Page 9: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

2 : スマホサイトコーディング時に積極的に使っていきたい技術やコード

9

Page 10: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

Ⅰ:CSS3の新単位REM

Ⅱ:SVGを積極的に使おう!Ⅲ:よく使うアイコンはフォントファイル化

10

Page 11: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

Ⅰ:CSS3の新単位REM

Page 12: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

Ⅰ:CSS3の新単位REM

・Root + em

・「rem」はemとは違い親要素の値を継承せずルート(html)で設定された値だけを継承します。

/*

10px(16 * 0.625 = 10) なので、こうすると、「1rem」 = 「10px」87.5% = 1rem = 14px、120% = 1rem = 20px

*/

html{

font-size: 62.5%;

}

body{

font-size: 1.4rem;

}

階層構造が複雑なページだと便利

Page 13: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

気をつけるポイント

・ルートは「body」じゃなくて「html」

・font-sizeの指定に、emを混在させるとコードが読みづらくなるので、どちらを使うかをちゃんと取り決める

・Chromeで残念なバグがあります(後述)

1:CSS3の新単位REM

13

Page 14: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

スマホのブラウザは全てREMに対応してるのでREMの指定だけでOK。PCでも同じページを見せたい場合はpx

指定も必要。

1:CSS3の新単位REM

p{

font-size:14px;

font-size:1.4rem;

}

Page 15: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

スマホのブラウザは全てREMに対応してるのでREMの指定だけでOK。PCでも同じページを見せたい場合はpx

指定も必要。

@mixin setFontSize($size: 1.4) {

font-size: ($size*10) + px;

font-size: $size + rem;

}

p{

@include setFontSize(1.4);

}

mixinを書いておくと記述忘れが減るのでGood!

1:CSS3の新単位REM

Page 16: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

Ⅱ:SVGを積極的に使おう!

Page 17: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

Ⅱ:SVGを積極的に使おう!

ベクターデータなので、拡大・縮小しても綺麗。どんな解像度の端末でみても綺麗。

ベジェ!

17

Page 18: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

Ⅱ:SVGを積極的に使おう!

最近、SVGを見かけることが増えてきました!

Page 19: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

Ⅱ:SVGを積極的に使おう!

イラストレーターや、Flashを使ってSVGを書き出すことができます。

書き出したSVGをHTML上で表示させるにはimgタグでOK!

<img src=“test.svg” width=“100” height=“50”>

imgタグ

19

他には、ObjectタグやSVGタグで表示させることもできます。

Page 20: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

Ⅱ:SVGを積極的に使おう!

<object data="image.svg" type="image/svg+xml" width="100" height="50">

<img src=“test.png" width="100" height="50" />

</object>

Objectタグ

<svg width="150px" height=“50px">

〜〜〜〜〜〜<foreignObject display="none"><img src=“test.png” /></foreignObject>

</svg>

SVGタグ

元サイズと描画サイズが異なる場合は使わないほうが良い

20

Page 21: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

Ⅱ:SVGを積極的に使おう!

気をつけるポイント

・サイトのロゴや、アイコンなど画像が荒れて欲しくない部分で使うのがおすすめ。ページ全部をSVGにしてしまうと重たい…。

・容量削減のために、複雑なパスは簡略化する

・線は線のままだと、太さが変わってしまったりするためアウトラインする。

21

Page 22: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

Ⅱ:SVGを積極的に使おう!

IE8とAndroid2.3はSVGに対応していません。代わりにJPGやPNGを表示するなどの対応が必要です。

//例えばjQueryでやるなら//Android2.xの時にのみpngに変更するif(navigator.userAgent.indexOf('Android 2') > 0){

$("img").each(function(){

var src = $(this).attr("src");

$(this).attr("src",src.replace('.svg','.png'))

});

}

22

Page 23: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

Ⅲ:よく使うアイコンはフォントファイル化

Page 24: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

Ⅲ:よく使うアイコンはフォントファイル化

yosetti

yosetticon.ttf

Webフォントにするメリット・スマホの主要OS・バージョンでサポートされている・従来のスプライトシートで実装するより手間が省けて嬉しい・「フォント」なので手軽に色やサイズを変えられる・サイズを変えても画像が荒れない

24

Page 25: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

Ⅲ:よく使うアイコンはフォントファイル化

Amebaさん

25

Page 26: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

Ⅲ:よく使うアイコンはフォントファイル化

実際に作ってみます!

Page 27: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

Ⅲ:よく使うアイコンはフォントファイル化

<i class="icon-yosetti"></i>

HTML

@font-face {

font-family: "iconvault";

src:url("iconvault_e6ce4e527696e77601afaec2ed8e0be6.ttf") format(“truetype");

}

.icon-yosetti:before {

font-family: "iconvault";line-height: 1;

-webkit-font-smoothing: antialiased;display: inline-block;

content: "\f101";

}

CSS

27

Page 28: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

3 : HTMLガイドラインの目的と作り方

28

Page 29: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

HTMLガイドライン作成の目的・納品物の1つとして・自分ではない別のコーダーさんが更新作業をしやすいように。・自分ではない別のコーダーさんが後から要素を足した時にコードがぐちゃぐちゃにならないように

29

Page 30: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

ガイドラインに書くべきこと・HTMLの基本事項(文字コード、対象ブラウザ、)・カラーパレット・命名規則・CSSやJSの参照方法・CSSやJSの汎用モジュールの使い方・その他注意事項

30

Page 31: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

社内向けの場合

31

Page 32: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

32

外部に提出する場合のHTMLガイドラインサンプル※Web公開版ではカットいたしますm(_ _)m※

Page 33: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

ガイドラインに書くべきこと・HTMLの基本事項(文字コード、対象ブラウザ、)・カラーパレット・命名規則・CSSやJSの参照方法・CSSやJSの汎用モジュールの使い方・その他注意事項

33

Page 34: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

4 : 端末やOSごとのバグやクセなどなど

34

Page 35: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

オススメの実機検証セット

・各バージョンのiOS(iOS8、7はマスト。)

・AndroidのNexusシリーズ・問題児Xperia&Galaxy端末・Android4.0端末・Android2.3端末(GalaxySがおすすめ)

動作確認は、標準搭載のブラウザとChromeで行います。

35

Page 36: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

バグやクセなどなど

36

Page 37: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

Android Chrome

REM指定しているとたまに無視される

html{

font-size: 62.5%;

}

htmlに指定したフォントのパーセントが無視されて、100%してレンダリングする場合がある(数回リロードしてたまに発生するのが曲者なんです…)

37

Page 38: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

Android Chrome

REM指定しているとたまに無視される

対策法

body{

font-size: 1.4em;

}

<script>

document.body.style.webkitTransform =

"scale(1)";

</script>

38

Page 39: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

iOS8.1

「window.close」が効かない

ウインドウを閉じる場合はJSで、window.closeですが、

iOS8は全く動作しません。

39

Page 40: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

対策法

ありませんorzApple早く直してくれないかなぁ…

苦肉の策:「閉じない場合はブラウザの機能で閉じてください」と書く。

iOS8.1

「window.close()」が効かない

40

Page 41: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

Android4.0、4.1

SVG画像のアスペクト比がずれる

AQUOS PAD SHT21(Android4.1

Chrome)

アスペクト比率がおかしい

41

Page 42: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

対策法SVGファイルをテキストエディタ等で開き、名前空間(<svg></svg>)の宣言のところに「preserveAspectRatio=”none”」を追記します。

<svg version="1.1" id="レイヤー_1" xmlns="http://www.w3.org/2000/svg"

xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="none"

x="0px" y="0px" viewBox="0 0 200 150" enable-background="new 0 0

200 150" xml:space="preserve"></svg>

Android4.0、4.1

SVG画像のアスペクト比がずれる

42

Page 43: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

Android4.0、4.1

SVG画像のアスペクト比がずれる

preserveAspectRatio=”none”

svgから外部の画像を読み込む場合,image要素を用います.この時image要素

が定める描画領域のサイズと読み込む画像のサイズとの間に差があった場合,何らかの方法で画像の引き伸ばし処理が必要となります.この引き伸ばし方法を指定するものがpreserveAspectRatio属性です.

引き伸ばし方には概ね3つの方法があり,これらと画像を拡大するための基準を表す値「xMinYMin〜xMaxYMax」とを組み合わせることで引き伸ばし処理を定義します.

引用:http://defghi1977-onblog.blogspot.jp/2012/12/svgpreserveaspectratio.html

43

Page 44: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

Android2系CSSアニメとフォーム要素がページに

あるとフォームがバグる

セレクトボックスがタップできなくなる!

入力フォームが2重に重なる!

入力フォームが消える!

44

Page 45: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

対策法

・CSSアニメーションを使わない。・jQueryのanimateとかで対処する。・工数かかるけど、OSごとでアニメーションの分岐を入れたほうが良い

Android2系CSSアニメとフォーム要素がページに

あるとフォームがバグる

45

Page 46: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

Android4.0、4.1

position:fixed;指定した画像がボヤける

<div style="position:fixed;">

<img src="./icon.png" width="150">

</div>

46

Page 47: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

対策法

・fixed指定した要素の中に画像しか無い場合に発生する。

・中の画像に「position:relative」を設定する。・スペース(&nbsp;)を入れる

Android4.0、4.1

position:fixed;指定した画像がボヤける

47

Page 48: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

Android全体動画ファイルがBasic認証配下に

あると再生できない

対策法 テスト環境であっても動画ファイルだけは認証から外す

<Files ~ "\.(mov|mp4|m4v|flv|f4v)$">

Satisfy any

Allow from all

</Files>

48

Page 49: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

特定の端末だけで動かない場合の対応方法

1:その端末を対応端末から外す2:動作不良が起きている部分を、出し分けで対処する。

49

Page 50: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

バグの見極めかた

・CSSアニメーションが動作に影響している場合が多いので、一度アニメ演出を切って、ページを見てみる

・positionが「fixed」や「absolute」になっているとレンダリングに失敗することがある。(特にAndroid4系)

50

Page 51: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

バグの見極めかた

51

端末/OSごとに苦手な描画があるので把握しておく

Android2.3,4.0,4.1

CSSアニメーションが苦手

Android4.0,4.1

position指定するとバグが

起こりやすい

Galaxy/Xperia系CSS3のdisplay:tableとか苦手。position指定もrelative

にしてると予期せぬ表示ずれとか起こりやすい

Android4.2

より前バージョンCanvas描画が苦手、遅い

iOS

SVGアニメーションの描画が苦手、

遅い

※弊社調べ

Page 52: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

バグの見極めかた

バグ報告者のクオリティを上げる

うごきません!見れません!

どういう手順で?どの端末・OSで?どの環境で?(モック?本番?テスト?)

だいたいバグを見つけてくれた人って、その時焦ってる傾向にあるので、

そのペースに巻き込まれないの大事。

実機検証シート

Page 53: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

おまじない

<script>

document.body.style.webkitTransform = "scale(1)";

</script>

この方法解決する場合も多いです。ただオススメではない。

Webkitのレンダリングを再描画するおまじない

53

Page 54: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

5 : 便利なツールのご紹介

54

Page 55: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

プロキシデバッグが出来る「Charles」

55

Page 56: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

「納品されたJavascript、うちのサーバーで動かないんだけど(`Д´) 」

確認したくても、納品したHTMLがローカルでは再現できない場合ってありますよね…

プロキシデバッグが出来る「Charles」

56

Page 57: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

JS/CSS/画像などをローカルのものを参照することができます

57

実際にやってみます

Page 58: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

TinyPngのPhotoshopプラグイン版/Developer版

58

command + P

Page 59: スマホサイト制作を中心にしたコーディングあれこれ(2014/12/12)

おわり

59