css design and programming

103
CSS Design and Programming CSS で何ができるの?天野 卓 @ ToI企画 2011.7.23

Upload: taku-amano

Post on 18-Dec-2014

5.082 views

Category:

Documents


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: CSS Design and Programming

CSS Designand

Programming〜CSS で何ができるの?〜

天野 卓 @ ToI企画

2011.7.23

Page 2: CSS Design and Programming

自己紹介

佐久市でWebアプリケーションを開発しています

フリーソフトウェアを配布しています

http://tec.toi-planning.net

GitHub

http://github.com/usualoma

jsdo.it

http://jsdo.it/usualoma

Page 3: CSS Design and Programming

概要

HTML5 とは

HTML5 に到るまでの歴史✓

HTML5 の範囲✓

HTML5 はもう使えるの?✓

CSS Design and Programming

CSS とは✓

CSS3 で出来るようになること✓

CSS Programming✓

Page 4: CSS Design and Programming

HTML5 とは

http://dev.w3.org/html5/spec/

Page 5: CSS Design and Programming

HTML5 とは

Page 6: CSS Design and Programming

http://platform.html5.org/

Page 7: CSS Design and Programming

http://platform.html5.org/

Page 8: CSS Design and Programming

HTML5に到るまでの

歴史

Page 9: CSS Design and Programming

前身である HTML4 / XHTML について

HTML4のW3C勧告

1997年にHTML4.0

1999年にHTML4.01

SGMLベースのHTMLからXMLベースのXHTMLへの移行を計画

パースが簡単になる (プログラム側の都合)

MathMLやSVGなどのXML関連技術と連携しやすい

XHTMLのW3C勧告

1999年にXHTML1.0

2001年にXHTML1.1

Page 10: CSS Design and Programming

HTML4 / XHTML の2004年頃の状況 - 1

マークアップとしては、XHTMLは受け入れられ始めていた

XHTML1.0 と宣言されているページは少なくない

正しくマークアップされている

Page 11: CSS Design and Programming

HTML4 / XHTML の2004年頃の状況 - 2

しかし

MIMEタイプについては application/xhtml+xml は使われておらず、ほとんどのページで text/html が使われていた

XHTML1.1 はほとんど使われていない

なぜ?

XMLは整形式(正しい書式)を要求するがWeb上のほとんどのページはXMLとしての誤りを含んでいる

XHTML1.1 では text/html を使うことはできず、application/xhtml+xml を使う必要がある

Page 12: CSS Design and Programming

HTML4 / XHTML の2004年頃の状況 - 3

大多数のページでは依然として HTML4.01が使われていた

各ブラウザに独自拡張が増えてきた

マルチメディア

embed / object

JavaScript

DOM

ブラウザベンダーは新しい標準化を求めていた

Page 13: CSS Design and Programming

WHATWG の発足 - 1

2004年、W3Cのワークショップで Mozilla とOpera が Web の将来に関する提案を行う

後方互換性と明確な移行手段

適切に定義されたエラー処理

ユーザーがオーサリングエラーに直面しないこと

実用性(実用的なユースケースが盛り込まれていること

など

XHTMLに対する新しいAPIではなく、HTMLやCSSまたDOMへの拡張を開発したい

非公式な投票が行われるが否決

Page 14: CSS Design and Programming

WHATWG の発足 - 2

同2004年、Apple、Mozilla、Opera によりHTMLをベースとした規格と関連技術の策定を目的とした団体、WHATWGが設立される。

Web Hypertext Application Technology Working Group

WHATWG の策定している仕様

HTML5

Web Applications 1.0

Page 15: CSS Design and Programming

HTML5 / Web Applications 1.0

WHATWG の策定した仕様はブラウザベンダーの支持を集めた

2006年にはW3Cでもワーキンググループが作られ、現在は共同で策定作業を進めている

一方 XHTML2.0 は支持を得られず

2009年にワーキンググループは終了した

Page 16: CSS Design and Programming

HTML5 の仕様書

WHATWG

http://www.whatwg.org/specs/web-apps/current-work/multipage/

W3C

http://dev.w3.org/html5/spec/✓

http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html

http://www.w3.org/TR/DOM-Level-3-Events/✓

...✓

Page 17: CSS Design and Programming

HTML5 の仕様の策定状況

WHATWG

生きている仕様✓

現存のドキュメントを最新のHTML規格とする✓

W3C

2011年7月の時点では最終草案の段階✓

2014年の勧告を目指している✓

Page 18: CSS Design and Programming

HTML5の範囲は?

Page 19: CSS Design and Programming

http://platform.html5.org/

Page 20: CSS Design and Programming

http://platform.html5.org/

Page 21: CSS Design and Programming

Web Applications

1.0は?

Page 22: CSS Design and Programming

http://platform.html5.org/

Page 23: CSS Design and Programming

HTML5 とは

仕様書の範囲として

WHATWG の HTML5 の仕様書✓

時には

WHATWG の Web Applications 1.0 の仕様書✓

バズワードとして

次世代のウェブ技術の総称✓

Page 24: CSS Design and Programming

HTML5 はもう使えるの?

マークアップ言語として

主要なモダンブラウザは対応済み

未対応のブラウザでも表示は可能

HTML では未知のタグは単に内容が表示されるため

未対応ブラウザのためのツールもある

HTML4 から HTML5 への移行は簡単

互換性が高いので、多くの場合はDOCTYPEを変更すればHTML5 のドキュメントになる

<!DOCTYPE html>

Page 25: CSS Design and Programming

HTML5 はもう使えるの?

関連API

使えるものと使えないものがる

Firefox / Google Chrome / Opera HTML5 の範囲はかなり使えるが、IE は 9 でも実装されていない API は多い

使いたい API を実装されているブラウザでのみ使うProgressive Enhancement

事例 - Web Storage

Twitter

Amazon

Page 26: CSS Design and Programming

HTML5 のまとめ

HTML5とは

「これから決まる仕様」ではなく「すでに動いている仕様」✓

どう使うか

価値を生むことの出来る機能を選んで使う✓

Page 27: CSS Design and Programming

CSS Designand

Programming

Page 28: CSS Design and Programming

CSS とは

カスケーディングスタイルシート(CSS)は、ウェブドキュメントにスタイル(フォント, カラー, 余白など)を追加するためのシンプルな仕組みです。

[cited from `http://www.a2ztutorial.com/Style/CSS/']

Page 29: CSS Design and Programming

つまり...

Page 30: CSS Design and Programming

http://shopdd.blog51.fc2.com/blog-entry-932.html

Page 31: CSS Design and Programming

これでいいの?

Page 32: CSS Design and Programming

CSS の役割

デザイン

ビジュアル的な綺麗さ、全体のイメージ

配色の調整や画像の配置

ユーザビリティ

テキストを読みやすくするタイポグラフィ

情報を探しやすいレイアウト

操作しやすい、迷わないフォーム

わくわくするユーザーインターフェイス

Page 33: CSS Design and Programming

例えば

Page 34: CSS Design and Programming

クリックしやすいダウンロードリンク

ボタンの CSS を切った場合

Page 35: CSS Design and Programming

クリックしやすいダウンロードリンク

http://mozilla.jp/firefox/

Page 36: CSS Design and Programming

読みやすい/選択しやすい表

Page 37: CSS Design and Programming

読みやすい/選択しやすい表

Page 38: CSS Design and Programming

HTML文書とCSSの役割分担

HTML文書

コンテンツ

CSS

デザイン

Page 39: CSS Design and Programming

http://shopdd.blog51.fc2.com/blog-entry-932.html

Page 40: CSS Design and Programming

お絵かきは?

サイトのコンテンツだとするとおそらく NG

デザインの要素であればおそらく OK

Page 41: CSS Design and Programming

CSS の現状

W3C勧告の出ている最新バージョンは 2.1

CSS3 は策定中

モダンブラウザでは対応は進んでいる

ベンダープレフィックスの必要なものも多い

-moz-linear-gradient

-webkit-linear-gradient

-o-linear-gradient

-ms-

Page 42: CSS Design and Programming

CSS3 の仕様書

CSS current work & how to participate

http://www.w3.org/Style/CSS/current-work

Selectors

http://www.w3.org/TR/css3-selectors/

CSS Color Module

http://www.w3.org/TR/2011/REC-css3-color-20110607/

Media Queries

http://www.w3.org/TR/2010/CR-css3-mediaqueries-20100727/

...

Page 43: CSS Design and Programming

CSS2 から CSS3 で変わる所

画像や配色の指定が強力になる

Web フォント

角丸・グラデーション・枠線に画像が使える

レイアウトを柔軟に、シンプルに指定できる

段組

display: flexbox

セレクタが追加され細かく要素を指定できる

複数環境への対応

メディアクエリー

Page 44: CSS Design and Programming

サブミットボタン

Page 45: CSS Design and Programming

サブミットボタン - HTML

<input type="submit" value="" class="submit-button" />

Page 46: CSS Design and Programming

サブミットボタン - HTML

<input type="submit" value="送信" class="submit-button" />

Page 47: CSS Design and Programming

サブミットボタン - CSS

.submit-button { background: -webkit-gradient(linear, left top, left bottom, color-stop(1.00, #0d5eb5), color-stop(0.20, #3690f0), color-stop(0.20, #3690f0), color-stop(0.00, #70b6f2)); background: -webkit-linear-gradient( top, #70b6f2 0%, #3690f0 20%, #3690f0 20%, #0d5eb5 100%); background: -moz-linear-gradient( top, #70b6f2 0%, #3690f0 20%, #3690f0 20%, #0d5eb5 100%); background: -o-linear-gradient( top, #70b6f2 0%, #3690f0 20%, #3690f0 20%, #0d5eb5 100%); background: linear-gradient( top, #70b6f2 0%, #3690f0 20%, #3690f0 20%, #0d5eb5 100%);

Page 48: CSS Design and Programming

サブミットボタン - CSS

border: 0; border-radius: 5px; box-shadow: inset 0 1px 1px rgba(255, 255, 255, 0.5), inset 0 -1px 1px rgba(0, 0, 0, 0.9); text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.4), 0 1px 1px rgba(255, 255, 255, 0.1); font-weight: bold; font-size: 20px; padding: 10px 40px; color: white;}

Page 49: CSS Design and Programming

角丸

Page 50: CSS Design and Programming

角丸 - HTML

<div class="container01"> <div class="container02"> <div class="content"> Firefox </div> </div></div>

Page 51: CSS Design and Programming

角丸 - HTML

<div class="content"> Firefox</div>

Page 52: CSS Design and Programming

角丸 - CSS - 例1

/* border-radius */div.content { border: 1px solid #D7D7D7; border-radius: 10px;}

Page 53: CSS Design and Programming

角丸 - CSS - 例2

/* background-image を複数指定する */div.content { background-image: url("content-header.png"), url("content-footer.png") background-repeat: no-repeat, no-repeat; background-position: top, bottom}

Page 54: CSS Design and Programming

角丸 - CSS - 例3

/* border-image */div.content { border-image: url("border.png") 60 60 60 60 / 60px 30px 10px 30px repeat;}

Page 55: CSS Design and Programming

CSS3 を使うと嬉しいこと

表現力が強力になる

少ない記述で要件を満たしたデザインを実現できる

複数のデバイスに対応できる

HTML でコンテンツの表現に集中できる

Page 56: CSS Design and Programming

ところで

Page 57: CSS Design and Programming

プログラマならプロフィールに書きたい

Page 58: CSS Design and Programming

そんなわけで

Page 59: CSS Design and Programming

CSS Programming

Page 60: CSS Design and Programming

CSS 8puzzle

http://jsdo.it/usualoma/1Tgw

Page 61: CSS Design and Programming

CSS Noughts and Crosses

http://jsdo.it/usualoma/qzfr

Page 62: CSS Design and Programming

CSS でプログラミングをするということ

CSS はプログラミングのための仕組みではない

利用者にとってのメリットはない

あえていえば JavaScript を切っていても動作する

工夫しないと動かせないので作成者の勉強になる

CSSでできること

CSSではできないこと

Page 63: CSS Design and Programming

CSS プログラミングの基本的な要素

DOM

CSS

Page 64: CSS Design and Programming

CSS プログラミングの基本的な要素 - DOM

DOM

input で状態を保存

<input type="checkbox" />

<input type="radio" />

scrollbar を利用する手法もある

Page 65: CSS Design and Programming

CSS プログラミングの基本的な要素 - CSS

CSS

セレクタで見た目を定義

:checked > .foo

:checked ~ :checked ~ .foo (CSS3)

クリック対象の input を調整する

z-index

pointer-events (CSS3)

状態の変更時にアニメーションさせる

transition (CSS3)

Page 66: CSS Design and Programming

有限オートマトン

Page 67: CSS Design and Programming

有限オートマトン

Page 68: CSS Design and Programming

有限オートマトン

Page 69: CSS Design and Programming

有限オートマトン

Page 70: CSS Design and Programming

ソースのイメージ - DOM

<div id="panel"> <input type="radio" id="r1-1_1-1" name="1-1" /> <input type="radio" id="r1-1_1-2" name="1-1" checked="checked" /> <input type="radio" id="r1-1_1-3" name="1-1" /> <input type="radio" id="r1-1_2-1" name="1-1" /> <input type="radio" id="r1-1_2-2" name="1-1" /> <input type="radio" id="r1-1_2-3" name="1-1" /> <input type="radio" id="r1-1_3-1" name="1-1" /> <input type="radio" id="r1-1_3-2" name="1-1" /> <input type="radio" id="r1-1_3-3" name="1-1" /> <input type="radio" id="r1-2_1-1" name="1-2" /> <input type="radio" id="r1-2_1-2" name="1-2" /> <input type="radio" id="r1-2_1-3" name="1-2" /> <input type="radio" id="r1-2_2-1" name="1-2" checked="checked" /> <input type="radio" id="r1-2_2-2" name="1-2" />

Page 71: CSS Design and Programming

ソースのイメージ - セレクタz-index

input { z-index: 0;}#r1-1_3-2:not(:checked) ~ #r1-2_3-2:not(:checked) ~#r1-3_3-2:not(:checked) ~ #r2-1_3-2:not(:checked) ~#r2-2_3-2:not(:checked) ~ #r2-3_3-2:not(:checked) ~#r3-1_3-2:not(:checked) ~ #r3-2_3-3:checked ~input[for="r3-2_3-2"] { z-index: 10;}

Page 72: CSS Design and Programming

ソースのイメージ - セレクタpointer-events

input { pointer-events: none;}#r1-1_3-2:not(:checked) ~ #r1-2_3-2:not(:checked) ~#r1-3_3-2:not(:checked) ~ #r2-1_3-2:not(:checked) ~#r2-2_3-2:not(:checked) ~ #r2-3_3-2:not(:checked) ~#r3-1_3-2:not(:checked) ~ #r3-2_3-3:checked ~input[for="r3-2_3-2"] { pointer-events: auto;}

Page 73: CSS Design and Programming

ソースのイメージ - transition

div#complete { left: 420px; -webkit-transition: left 200ms linear 800ms; -moz-transition: left 200ms linear 800ms; -o-transition: left 200ms linear 800ms;}#r1-1_1-1:checked ~ #r1-2_1-2:checked ~ #r1-3_1-3:checked ~#r2-1_2-1:checked ~ #r2-2_2-2:checked ~ #r2-3_2-3:checked ~#r3-1_3-1:checked ~ #r3-2_3-2:checked ~ div#complete { left: 0;}

Page 74: CSS Design and Programming

CSS プログラミングで突き当たる壁

いとこ要素を指定したいんだけど...

セレクタでフィルタしたいんだけど...

条件を満たすまでループしたいんだけど...

Page 75: CSS Design and Programming

いとこ要素を指定したいんだけど...

Page 76: CSS Design and Programming

いとこ要素を指定したいんだけど...

<div id="board"> <div id="panel_1"> <input type="radio" id="1-1" /> <input type="radio" id="1-2" /> </div> <div id="panel_2"> <input type="radio" id="2-1" /> <input type="radio" id="2-2" /> </div> ...

Page 77: CSS Design and Programming

このようにできると嬉しいのですが...

#1-1.checked :parent #panel_2 #2-2.checked { ...}

Page 78: CSS Design and Programming

要素の関連で指定するセレクタ

コンビネータ

E F E要素の子であるF要素

CSS2

E > F E要素のすぐ後ろの子であるF要素

CSS2

E + F E要素のすぐ後ろの弟であるF要素

CSS2

E ~ F E要素の弟であるE要素

CSS3

Page 79: CSS Design and Programming

いとこ要素を指定したいんだけど...

できません!

Page 80: CSS Design and Programming

input は全て兄弟要素として並べてください

<input type="radio" id="1-1" /><input type="radio" id="1-2" /><input type="radio" id="2-1" /><input type="radio" id="2-2" /><div id="board"> <div id="panel_1"> <label for="1-1"></label> <label for="1-2"></label> </div> <div id="panel_2"> <label for="2-1"></label> <label for="2-2"></label> </div> ...

Page 81: CSS Design and Programming

CSS3 を使うとこのように指定できます

#1-1.checked ~ #2-2.checked { ...}

Page 82: CSS Design and Programming

CSS2 でもこのように指定することは可能です

#1-1.checked + #1-2 + #2-1 + #2-2.checked { ...}

Page 83: CSS Design and Programming

セレクタでフィルタしたいんだけど...

Page 84: CSS Design and Programming

セレクタでフィルタしたいんだけど...

input:checked:nth-child(1) div { display: block;}

input:checked:nth-child(2) div { /* * 2つチェックされているときに適用される * :nth-child(1) のセレクタは上書きされる */ display: block;}

Page 85: CSS Design and Programming

DOMの構造や状態で指定するセレクタ

擬似クラス

E:root ルート要素 3

E:checked チェックされているE要素

2

E:nth-child(n) チェックされているE要素

3

Page 86: CSS Design and Programming

DOM に対して擬似的にクラスを設定する

<!-- イメージです --><html class=":root"> <input type="radio" checked class=":checked :nth-child(1)" /> <input type="radio" class=":nth-child(2)" /> <input type="radio" class=":nth-child(3)" /> <input type="radio" checked class=":checked :nth-child(4)" /> <input type="radio" checked class=":checked :nth-child(5)" />

Page 87: CSS Design and Programming

セレクタでフィルタしたいんだけど...

できません!

Page 88: CSS Design and Programming

セレクタでフィルタしたいんだけど...

input:checked ~ div { display: block;}

input:checked ~ input:checked div { /* * 2つチェックされているときに適用される */ display: block;}

Page 89: CSS Design and Programming

条件を満たすまでループしたいんだけど...

CSS から DOM を変更できればループできそうだけど...

Page 90: CSS Design and Programming

条件を満たすまでループしたいんだけど...

できません!

Page 91: CSS Design and Programming

DOMを変更することはできません

状態の変更はユーザーの入力に依存します

Page 92: CSS Design and Programming

CSS 8puzzle

http://jsdo.it/usualoma/1Tgw

Page 93: CSS Design and Programming

CSS 8puzzle の戦略

<input type="radio" /> を使用

1 ピースにつき 9 つの input を用意

トグルを簡単に表現できるため

移動可能なピースに対して、クリック可能な label を z-index で一番手前に表示する

初期状態もあらかじめ作成

終了状態になったら用意しておいた Complete! 画面を表示

Page 94: CSS Design and Programming

クリック可能な label を手前に表示

Page 95: CSS Design and Programming

クリック可能な label を手前に表示

Page 96: CSS Design and Programming

CSS 8puzzle のソースコード

JavaScript 0 行

HTML 167 行

CSS 2013 行

Page 97: CSS Design and Programming

CSS Noughts and Crosses

http://jsdo.it/usualoma/qzfr

Page 98: CSS Design and Programming

CSS Noughts and Crosses の戦略

<input type="checked" /> を使用

1 マスにつき 5 個の input を用意

最大で 5 手までなので

コンピューターの手順はあらかじめ全て用意

Page 99: CSS Design and Programming

CSS Noughts and Crosses のソースコード

JavaScript 0 行

HTML 150 行

CSS 12373 行

Page 100: CSS Design and Programming

CSS のまとめ

CSS3

少ない記述で要件を満たしたデザインを実現できる✓

CSS Programming

意外と役立つこともあります。✓

Enjoy!✓

Page 101: CSS Design and Programming

参考文献

2004年にW3Cのワークショップで出された提案

http://www.w3.org/2004/04/webapps-cdf-ws/papers/opera.html

入門 HTML5

Mark Pilgrim (著), 矢倉 眞隆 (監訳), 水原 文 (翻訳) オライリージャパン

Page 102: CSS Design and Programming

書き捨てのPHP

CSS 8puzzle

https://gist.github.com/376d7d0a2f3d7533a2e0

CSS Noughts and Crosses

https://gist.github.com/2d575af617934eb752ed

Page 103: CSS Design and Programming

Powered by Rabbit 0.9.3Powered by Rabbit 0.9.3

ご清聴ありがとうございました。