Masataka Yakura (myakura)
HTML5 Conference 2012
September 8, 2012
2011年12月:HTML5とか勉強会 #24
「HTML&API総まくり」 by 白石さん
HTML5関連のAPIを紹介したセッションが大好評。
「2012年版やってくださいよ!」
→ いつのまにか担当に……
→ あてがわれたのが大ホール……
できる限り紹介します。
新しめのものを紹介します。
今後いろいろ変わる可能性が高いです。
あしからず。
できるだけフォローアップします。
2011年5月:Last Callに。
2012年3月:最新WD公開。
なおも更新は続く。
Ian HicksonがWHATWG HTMLに専念。W3C HTML5からは離れる。
W3Cは新しいEditorの募集へ。
HTML5はWHATWG HTMLから切り出されている。
スナップショットとLiving Standard。
ブランチを切った感じ。共存可能。
Microsoft, Adobe, Apple, Googleの人などが参加。
9月:もうひとり追加。
勧告候補を公開する → 来年あたり?
実装2つ → 突き詰めると終わらない
勧告を早めたいW3C vs. 長くかかっても互換性を重視したいメンバー
次のHTMLも検討すべく、HTML WGの組織改編中。
WHATWG HTMLはもちろん、他からも提案を募る。
<dialog>
様々な「ダイアログ」を定義。
(会話文の要素ではない)
ポップアップからオーバーレイ、モーダルダイアログまでカバー。
解像度/ピクセル密度ごとに画像を出し分ける仕組み。
<img srcset>
― WHATWG HTMLの案
<picture>
― Community Groupの提案
<input inputmode>
入力モード(仮想キーボードの種類など)を指定。モバイルでは便利。
<label for="zip">郵便番号</label>
<input inputmode="numeric" name="zip" id="zip">
Firefox 17でちょっと実装(値が仕様書のと違う)。
2011年:CSS 2.1, セレクタなど勧告。
CSS4 (セレクタ) の登場。
2012年:メディアクエリー勧告。他もいろいろ進む。
CSS3やCSS4の時代になってきた。
グラデーションなどを定義したモジュール。
4月:勧告候補に。
グラデーションはIE10, Firefox 16, Opera 12.50で接頭辞なし!
ただし……
接頭辞つき実装と互換性なし……
/* これまで */
-moz-linear-gradient(top, #fe0, #c00)
/* これから */
linear-gradient(to bottom, #fe0, #c00)
角度の解釈も変わった……
0deg
0deg
SassのMixinなどを使う場合は注意。
image()
― フォールバック
object-fit
― アスペクト比を保って拡大縮小
dppx
― デバイスピクセル比
image-set()
― Responsive Images系。Chrome, Safari 6で実装
element()
― 任意の要素を画像にして参照。-moz-element
の標準化。
cross-fade()
― 複数画像をクロスフェードで合成
そろそろ勧告候補に。
いろんなことができる:
元々Mozillaの拡張。WebKitで発展。
CSS WGに持ち込まれ構文が変わる。
IE9はPPで実装するも正式版ではサポートせず。
何度もプロパティ名や値が変わる……
Chrome ― おおよそCRに準拠
Firefox ― CR版を実装中
IE10 ― WD版をサポート
Safari ― Safari 6では無効に
.flex-container {
display: -webkit-flex; /* Chrome */
display: -ms-flexbox; /* IE10 */
display: -webkit-box; /* Safari, etc. */
display: -moz-box; /* Firefox */
}
CSS4のセレクタ。
CSS3セレクタの勧告と同時に発表。
「親セレクタ」など欲しかった機能が!
「親セレクタ」だけどさらに高機能。
/* <a> を子に持つ <li> を選択*/
ul > !li > a {
color: #c00;
}
:matches()
「このうちどれか」を選択
/* articleかsectionかどっちでもいい */
:matches(article, section) > h1 {
font-size: 220%;
}
FirefoxとWebKitで先行実装。
→ :-moz-any()
, :-webkit-any()
変数ライクな「カスタムプロパティ」
/* 色を定義 */
:root {
var-myBlue: #09c;
}
/* つかう */
:link {
color: var(myBlue);
}
WebKitで実装。Chromeではflag有効で利用可能。
Firefoxも検討中。接頭辞なしで実装したい意向。
CSSOMで値をどう扱うかが検討中。
$foo
は?$foo
は他の変数ライクな機能を見据えて利用せず。
Sassの@extend
的なものを提供する機能もアイデアとして提案済。
雑誌のようなレイアウトを実現。
テキストの流れる「領域」を定義。
column
の強化版みたいな感じ。
丸や矩形の中にテキストを流し込む。
もしくはある場所を「除外」してテキストを配置。
AdobeがCSS WGに提案し、WebKitで実装中。
Chromeでflag有効にすれば利用可能(今はRegionsのみ)。
MicrosoftもIE10でともに実装。
Microsoftが提案しIE10で実装。
かつてMetroとして知られていたレイアウトではかなり便利。
もう少し仕様を練る必要がありと判断され、構文が変わりそう。
サポートの有無、特定URL下などの条件で振り分け。
@supports
プロパティと値のサポートをチェック。
@supports (display: flex) or
(display: -webkit-flex) or
(display: -ms-flexbox) {
/* Flexboxつかうよ */
}
Firefox 17で実装(無効になるかも)
Operaでも実装予定ありとのこと。
拡張の多いWebKitやTridentにこそ欲しい……
@document
特定ドメイン下においてスタイルシートを適用。
Mozilla由来 (@-moz-document
)。
正規表現なども使えるように。
スクリプトやタッチデバイスの検出もできるように。
-webkit-device-pixel-ratio
が標準化されるかは怪しい。
resolution
と dppx
で。
@media (min-resolution: 2dppx) {
/* Retina */
}
matchMedia()
メディアクエリーの状態を検出。
var query = '(max-width: 800px)';
var mql = window.matchMedia(query);
mql.addListener(function(mql){
if (mql.matches) { doSomething(); }
});
SVG meets CSS
SVG WGとCSS WGの合同タスクフォース。
SVGとCSSの機能を連携させる。
Transforms, Animationsなどが再編され公開済。
SVGフィルタをCSSでも使えるように。
CSS Shadersがカスタムフィルタとして取り込まれた。
-webkit-mask
やMozillaのclip-path
を標準化。
強化された合成やブレンドモード。
元 (Web) DOM Core。
ECMAScriptとの親和性重視。
新しい機能もいくつか。
var eventDetail = { dom: 4 };
var ev = new CustomEvent('anevent',
{ detail: eventDetail }
);
obj.dispatchEvent(ev);
Mutation Eventsに変わって登場。
効率よくDOMの変化を監視。
Element.prepend()
, Element.append()
, Element.replace()
など追加。
DOMのパーズ・シリアライズ関連APIを定義。
innerHTML
, insertAdjacentHTML()
などHTML5で定義されていたものが移管。
9月6日にLast Call。
イベントによって実装状況に違いあり。
Firefox 17ではWheelEvent
が実装。
基本的なタッチイベントを定義。 (touchstart
, touchmove
, etc.)
勧告候補後にAppleが特許開示。7月に「影響しない」と判断。
ジェスチャーイベントなどはなし。
仕様いっぱい。
XMLHttpRequest
XHR2が「XHR」として一本化。
クロスオリジン通信(CORS)、フォーム・バイナリ送信などが可能に。
HTML, JSON, ArrayBuffer, Blobも取得可能に。
セレクタから要素を取得するAPI。
find()
, findAll()
メソッドが提案中。
メソッドチェーンで絞り込める。
Blob
.slice()
のprefixが外れた (Safari以外)。
Blob()
コンストラクタのサポート。BlobBuilder
がobsoleteに。
5月にLast Call。
Fx16, IE10でunprefix(なので多分だいたい実装)
WebKitの実装はまだちょっと仕様に沿ってないらしい。
任意の要素をフルスクリーン表示。
/* フルスクリーンに */
elem.requestFullscreen();
/* 解除 */
document.exitFullscreen();
/* スタイルシート */
elem:fullscreen { ... }
マウスポインタを固定する。
Element.requestPointerLock()
のほかMouseEvent.movementX
, movementY
を定義。
FPSのゲームなどによさそう。
デバイスの向き(縦か横か)を検知。
portrait-primary
, landscape-primary
など主にどちら向きかもわかる。
screen.lockOrientation()
でロックもできる。
Googleが提案しChromeに実装。
Notification WG設立。
2012年:Appleが参加。Mountain LionのSafariで実装。
Chrome拡張APIとはデザインが違うのでご注意を。
Webアプリ版Intents。Chrome拡張で利用可能。
Webアプリ間だけでなくデバイスとの連携も視野に。
HTMLのプロトコルハンドラとの統合が検討中。
パフォーマンス関連仕様。
グループはRecharter中。
ページ読み込みに関する様々な情報を取得するAPI。
結構前から実装あり(IE9も実装)。もうほぼ勧告。
linkNegotiationStart
など追加。
画像などリソースに関する情報を取得。
/* 画像をロード */
img.onload = measureTiming;
/* 取得 */
function measureTiming () {
var list =
performance.getEntriesByType('resource');
...
}
ユーザーの行動に応じた情報を取得。
/* マーク */
performance.mark('startTask1');
taskOne();
performance.mark('endTask1');
/* 集計 */
var marks =
performance.getEntriesByType('mark');
...
バックグラウンドにあるページではアニメーションを停止させたりできる。
document.hidden
, visibilitychange
など定義。
7月に勧告候補に。
PerformanceEntry
を定義。
Resource/User Timingの基盤。
Navigation Timing level 2でも採用。
window.performance.now()
を定義。
Date.now()
より高精度。monotonic。
パフォーマンス系APIで標準的に使われるようになる。
requestAnimationFrame()
のこと。
実装されている。2月にLast Call入り。
HighResTimeを使うように変更。
ハイレベルなAPI。
Chrome, Safari 6で対応。
Firefoxも計画中。
getUserMedia()
を定義。
Webカメラなどからデータを取得。
アプリのコンポーネント、ウィジェット開発に。
隠れたDOM。Googleが提案。
WebKitで実装。Chromeでflag有効で利用可能。
デートピッカーはじめUIの実装に使われている。
カスタム要素をAPIつきで定義。
x-foo
というかたちで定義。
テンプレートやShadow DOMと組み合わせるとより強力に。
げっそりもします…
でもわくわくもします!
気になったものは調べて共有しよう!