55
Browser oh browser browser @teppeis Code HAIKU 2012/12/16

Browser oh browser browser

  • Upload
    teppeis

  • View
    1.897

  • Download
    9

Embed Size (px)

DESCRIPTION

Code HAIKU 2012の資料です。 http://atnd.org/events/33788

Citation preview

Page 1: Browser oh browser browser

Browser oh browser browser

@teppeisCode HAIKU 2012/12/16

Page 2: Browser oh browser browser

自己紹介•佐藤鉄平•@teppeis•サイボウズ株式会社 東京•出身は新潟(米と雪のみ)•サーバーからフロントまで

Page 3: Browser oh browser browser

WEB+DB PRESSでJS連載中!

Page 4: Browser oh browser browser

CSSの話

Page 5: Browser oh browser browser

普通のCSS

.color  {    color:  #F00;}

Page 6: Browser oh browser browser

第一句

:root  .color  {    color:  #F00\9;}

Page 7: Browser oh browser browser

答え: IE9だけで動作

:root  .color  {    color:  #F00\9;}

Page 8: Browser oh browser browser

CSS Hack!

Page 9: Browser oh browser browser

第二句: IE6以下で動作

//  Star  hack*  html  .target  {    color:  red;}

Page 10: Browser oh browser browser

第三句: FF3.5以上で動作

body:not(:-­‐moz-­‐handler-­‐blocked)  .target  {    color:  red;}

Page 11: Browser oh browser browser

ところで

Page 12: Browser oh browser browser

俳句は句会が一番楽しいらしい。

Page 13: Browser oh browser browser

句会での俳句の選び方

•特選: 一番いい俳句•正選: いい俳句•逆選: 文句をつけたい俳句!

Page 14: Browser oh browser browser

今までの句はす べ て逆選!

Page 15: Browser oh browser browser

Why should notwe use CSS Hack?

Page 16: Browser oh browser browser

Syntax InvalidReadabilityCompatibility

Page 17: Browser oh browser browser

Syntax Invalid•正しい文法ではない•Syntax Validatorが使えない

:root  .color  {    color:  #F00\9;}

Page 18: Browser oh browser browser

Readability•一目で読めない•それ、意図して書いてるの?

body:not(:-­‐moz-­‐handler-­‐blocked)  .target  {    color:  red;}

Page 19: Browser oh browser browser

Compatibility•未来のバージョンで使えるの?•他のブラウザではどうなるの?

Page 20: Browser oh browser browser

\9 hack

•かつてはIE8用のCSSハックだった。•IE9がリリースされたあと、IE9でも影響することが発覚。

•既存のハックは書き換えるハメに。

.color  {    color:  #F00\9;}

Page 21: Browser oh browser browser

未知のブラウザ•全てのブラウザを検証することは不可能•○×全部把握できますか?

http://www.atmarkit.co.jp/fwcr/design/benkyo/csshack02/01.html

Page 24: Browser oh browser browser

ではどうするのか?

Page 25: Browser oh browser browser

ConditionalComment (IE)

Page 26: Browser oh browser browser

正選: 条件付きコメント//  HTML<!DOCTYPE  html><!-­‐-­‐[if  lt  IE  7]>            <html  class="lt-­‐ie9  lt-­‐ie8  lt-­‐ie7">  <![endif]-­‐-­‐><!-­‐-­‐[if  IE  7]>                  <html  class="lt-­‐ie9  lt-­‐ie8">  <![endif]-­‐-­‐><!-­‐-­‐[if  IE  8]>                  <html  class="lt-­‐ie9">  <![endif]-­‐-­‐><!-­‐-­‐[if  gt  IE  8]><!-­‐-­‐>  <html>  <!-­‐-­‐<![endif]-­‐-­‐>        <head>        ...

//  in  CSS.lt-­‐ie8  .target  {    color:  red;}

Page 27: Browser oh browser browser

http://html5boilerplate.com/

HTML5 Boilerplate

Page 28: Browser oh browser browser

技術的にはOKだけど、そもそも、なぜブラウザごとの実装が必要なのか?

Page 29: Browser oh browser browser

http://www.flickr.com/photos/daniel_gies/4878159931

Pixel Perfect

Page 30: Browser oh browser browser

全てのブラウザで1pxのズレも無く同じ見え方を目指すという考え方

Page 31: Browser oh browser browser

全てってどこまで?製品の動作対象ブラウザ?対象外ならいいの?

Page 32: Browser oh browser browser

多様性の拡大

http://www.flickr.com/photos/clevercupcakes/2981399236

Page 33: Browser oh browser browser

違いを受け入れる

•Webの拡大によって、UserAgentの多様性も拡大。

•ユーザーは異なるブラウザの表示の違いを見比べたりはしない。

•「すべていっしょ」は制作側のエゴ

Page 34: Browser oh browser browser

UserAgentによって変わってはいけないものは何か?

Page 35: Browser oh browser browser

コンテンツファースト

•まずユーザーに提供するコンテンツの本質的な価値から考える

•本質的でない機能はあとで考える

Page 36: Browser oh browser browser

モバイルファースト

•PCよりも先にモバイルのUIを前提に設計する

•モバイルの制約を逆に利用してコンテンツファーストを推進する

Page 37: Browser oh browser browser

Progressive Enhancement

•まず本質的な価値を提供するコンテンツや機能を幅広い環境に提供。

•さらに、リッチな環境には、より便利、より美しい機能を提供。

Page 38: Browser oh browser browser

例) kintone

IE8IE8 IE9IE9

.target  {    border-­‐radius:  5px;}

Page 39: Browser oh browser browser

JavaScriptの話

Page 40: Browser oh browser browser

例) Geolocation位置情報を読み取ってみよう。

Page 41: Browser oh browser browser

逆選: ブラウザ検出

if ($.browser.mozilla) {  var location = navigator.geolocation.getCurrentPosition( success, error);}

Page 42: Browser oh browser browser

ブラウザ検出のダメなとこ

•IE8時代に書いた=> IEだって9からは動くよ!

•動作環境じゃない?=> Chromeだって動くのに!

if ($.browser.mozilla) {  navigator.geolocation.getCurrentPosition( success, error);}

Page 43: Browser oh browser browser

正規表現の失敗

Page 44: Browser oh browser browser

jQueryでもサポート終了

Page 45: Browser oh browser browser

ではどうするのか?

Page 46: Browser oh browser browser

正選: 機能検出// OK!: Feature Detectif (navigator.geolocation) {  var location = navigator.geolocation.getCurrentPosition( success, error);}

// NG! Browser Detectif ($.browser.mozilla) {  var location = navigator.geolocation.getCurrentPosition( success, error);}

Page 47: Browser oh browser browser

機能検出(Feature Detect)なら

•素直な実装「この機能が使えるなら使ってね」

•どのブラウザのどのバージョンがどの機能を使えるのかこちらが全て把握しないでも良い。

•未知のブラウザにも対応できる。

Page 48: Browser oh browser browser

Modernizr

http://modernizr.com/

Page 49: Browser oh browser browser

Modernizrの例

//  With  Modernizrif  (Modernizr.dragndrop){      //  Code  for  drag  &  drop.}

//  Without  Modernizrvar  div  =  document.createElement('div');var  dragndrop  =  ('draggable'  in  div)  ||  ('ondragstart'  in  div  &&  'ondrop'  in  div);if  (dragndrop)  {      //  Code  for  drag  &  drop.}

Page 50: Browser oh browser browser

ここまでの前提

Page 51: Browser oh browser browser

Webとブラウザの世界が標準に向かっていくこと

Page 52: Browser oh browser browser

http://www.netmagazine.com/news/opera-confirms-webkit-prefix-usage-121923

Web標準の失敗(?)事例

Page 53: Browser oh browser browser

私たち開発者にできることはWeb標準に準拠したキレイなコードを書くこと

Page 54: Browser oh browser browser

特選

Your  code            for  the  better  future.

Page 55: Browser oh browser browser

http://www.flickr.com/photos/busy-pochi/4080378483

Thanks!