Copyright © 2026 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
この文書は、ウェブアプリケーションがデバイスのポスチャ(姿勢)をリクエストし、その変化通知を受け取ることができるAPIを規定します。
この節は、この文書の公開時点における状態を説明する。現在の W3C 公開文書の一覧およびこの技術報告書の最新版は、 W3C 標準および草案 索引で確認できる。
この仕様は Chromium ベースのブラウザーで実装されている。WebKit および Mozilla は、この仕様についてまだ正式な見解を公開していない。
この仕様が最終的に勧告候補段階に達する前に実装することに関心のあるベンダーは、 GitHub 上のリポジトリを購読し、 議論に参加するべきである。
この文書は、Devices and Sensors Working Group により、 勧告 トラックを用いて勧告候補草案として公開された。
勧告候補としての公開は、W3C およびそのメンバーによる承認を意味しない。勧告候補草案は、 Working Group が後続の勧告候補スナップショットに含めることを意図している、 前回の勧告候補からの変更を統合する。
これは草案文書であり、いつでも他の文書により更新、置換、または廃止される可能性がある。 この文書を作業中のもの以外として引用することは不適切である。
この文書は、 W3C 特許 ポリシーの下で運営されるグループによって作成された。 W3C は、 そのグループの成果物に関連して行われた 特許開示の公開一覧を維持しており、 そのページには特許を開示するための手順も含まれる。ある個人が、 必須クレーム を含むとその個人が信じる特許について実際の知識を有する場合、 W3C 特許ポリシー第6節に従って その情報を開示しなければならない。
この文書は、 2025年8月18日版 W3C プロセス文書に準拠する。
デバイスポスチャとは、デバイスが保持する物理的な姿勢であり、角度に加えてセンサーなどから得られる情報に基づく場合もあります。近年、ポスチャを変化できる機能を持つ新しいタイプのモバイルデバイスが登場しています。最も一般的なのは、画面自体や画面周囲を折り畳めるデバイスであり、物理的な形状を変更できます。デバイスのポスチャを知る主な目的は、レスポンシブデザインによる新しいユーザー体験を可能にすることです。
「折り畳み」デバイスには主に2つの物理的なフォームファクターがあります。1つは1枚の柔軟な画面(シームレス)を持つもの、もう1つは2枚の画面(シームあり)を持つものです。どちらもヒンジ周辺で折り畳みでき、現行仕様は両方のタイプに適用されます。また、シームレス・シームありの両方とも、モバイルやタブレットからラップトップサイズまで様々な寸法があります。さらに、デバイスによってデフォルトの向き(縦向き・横向き)が異なり、折り畳みも縦方向・横方向のいずれかの場合があります。
ウェブサイトの使い勝手を折り目部分を避けて向上させたり、Webで新しいユースケースを実現したりするために、デバイスポスチャを知ることで開発者は各種デバイスに合わせたコンテンツを調整できます。
デバイスが完全に平らでない状態でも、コンテンツは利用・閲覧できます。この場合、開発者はデバイスポスチャの状態に応じて異なるレイアウトを提供したいと考えるかもしれません。
以下の内部スロットが Document インターフェイスに追加される。
| 内部スロット | 説明 |
|---|---|
| [[CurrentPosture]] | デバイスの 現在のポスチャ。 |
WebIDL[SecureContext, Exposed=(Window)]
interface DevicePosture : EventTarget {
readonly attribute DevicePostureType type;
attribute EventHandler onchange;
};
enum DevicePostureType {
"continuous",
"folded"
};
type 属性を取得する場合、ユーザーエージェントは MUST、this の 関連する
グローバルオブジェクトの 関連付けられた
Document の
内部スロット [[CurrentPosture]]
の値を返さなければならない。
onchange 属性は、onchange イベントハンドラーのためのイベント
ハンドラー IDL 属性であり、
その イベントハンドラー
イベント型は「change」である。
この仕様では以下のポスチャ値を定義します:
Continuous ポスチャ:Continuousポスチャは 「平らな」状態を指します。これは、異なるポスチャを持たないほとんどのデバイスのデフォルトの状態です。
折り目やヒンジ、類似の機能を持たないデバイスも含まれます。
ハードウェア革新の性質上、デュアル、折りたたみ可能、巻き取り可能、または湾曲した画面を持つデバイスも含まれる。ただし、
Document が平面的なレイアウトで
表示されることが期待される姿勢にある場合に限る。
例:
デバイスによっては、物理的には平らでない姿勢で複数アプリが動作していても、ブラウザが複数画面・セクションにまたがっていなければ、そのポスチャはcontinuousとなります。
例:
API上、ポスチャ値は
DevicePostureType 列挙値で表されます。
メディア特性は、CSS
メディアクエリ [MEDIAQ] を介して、デバイスの 姿勢を表す。すべての
ナビゲーブルは、
それらの
トップレベル
traversable の 姿勢を反映する。
device-posture
continuous | folded
ユーザーエージェントはMUST、Webアプリケーションで適用された ポスチャ をCSSメディアクエリ [MEDIAQ] を通じて反映しなければなりません。
Document の各インスタンスは内部スロット
[[CurrentPosture]] を持ち、これは
Document
が作成されるときに初期化されるべきであり、そうでない場合、それらは最初に
アクセスされるとき、かつその値が読み取られる前に初期化されなければならない(MUST)。ユーザー
エージェント は、それを初期化するために、document を Document に設定し、disallowRecursion を true に設定して、デバイス姿勢
変更手順を実行しなければならない(MUST)。
与えられた Document について、現在の姿勢は、
現在のヒンジ角および 画面の向き、
ならびに潜在的にはその他の実装固有のシグナルから導出される。
以下の表は規範的ではありません。
値は近似であり、デバイスごとに異なる場合があります。例えば、平らに置いたときに必ずしも180°にはならず、175°〜185°の値になることもあります。デバイスメーカーはSHOULD、物理的なデバイスポスチャが本仕様で定義されたポスチャに正しくマッピングされるようにしてください。また、ヒンジ角度以外にも複数のセンサーでポスチャを判断することが許されています。例として、画面下部にキーボードがドッキングされているかどうか、キックスタンドが展開されているかどうかなども検出できます。
デバイスの物理的な制約や設計によっては、1つ以上のポスチャが存在しないこともあります。その場合、デバイスはSHOULD、あらゆる角度やデバイスの向き([SCREEN-ORIENTATION]やホストOSでロック可能)、およびデバイス固有のシグナルが定義されたいずれかのポスチャにマッピングされるようにしてください。
| ポスチャ | 角度値 |
|---|---|
| continuous | < ~180° |
| folded | ~180° |
Document document の
デバイス姿勢情報を計算する手順は、次のとおりである:
DevicePostureType
値を
実装定義の方法で決定して返す。
ユーザーエージェントが、トップレベル traversable について、画面の折りたたみ角、 向き、またはデバイス固有のシグナルが変化したと判断した場合、それは MUST、 デバイス姿勢変更手順を、その トップレベル traversable の アクティブ document で実行しなければならない。
Document
document および
任意のブール値 disallowRecursion(既定値は false)に対する
デバイス姿勢変更手順は、次のとおりである:
[[CurrentPosture]] と等しい場合、これらの手順を中止する。
[[CurrentPosture]] を
posture に設定する。
Navigator
に関連付けられた
DevicePosture
オブジェクトで、"change" という名前の
イベントを発火する。
この仕様は、visibility state および document が与えられたときの、次の ページ 可視性変更手順を定義する:
https://html.spec.whatwg.org/#update-the-visibility-state より
仕様作成者は、明確に定義された仕様横断的な呼び出し順序を確保するために、ページ 可視性変更手順フックを使用するのではなく、ここから自分たちの仕様へ直接呼び出しを追加するプルリクエストを送る方がよい。この執筆時点で、次の仕様が ページ 可視性変更手順を持つことが知られており、それらは未指定の順序で実行される: Device Posture API および Web NFC。[DEVICEPOSTURE] [WEBNFC]
本仕様に関して新たなセキュリティ考慮事項は報告されていません。ただし、文書内で示されている 10. プライバシーに関する考慮事項 を確認することが推奨されます。
このセクションは非規範的です。
このAPIが同じデバイス上の異なる閲覧コンテキストで同時に使用される場合、ユーザーをそれら二つのコンテキスト間で相関させ、予期しないトラッキング手法が生まれる可能性があります。しかし、ポスチャ値は通常長時間安定しているため、二つのユーザーが同一人物でないことの確認には利用できますが、折り畳みデバイスにも様々な種類やモデルがあるため、特定ユーザーの識別には役立ちません。
追加されるエントロピーは、ユーザーの主要入力がタッチかどうかを判別する pointer API と同程度です。主要入力は、キーボードの着脱やタブレットモードの切り替えによって変化することがあります。
この理論的な攻撃は、10.2.1 データ最小化、 10.2.2 ユーザーの注意喚起、10.2.3 ユーザー操作によるアクションによって軽減されます。
クロスオリジンiframeはこのAPIを通じてポスチャ情報にアクセスできるため、10.1.1 複数コンテキストでのユーザー識別に記載の通り、ユーザー識別に利用される可能性があります。同様の緩和策が適用されます。
iframe経由で、悪意のあるアクターが自身のコードを注入し、ポスチャ情報へアクセスしてユーザーを追跡する用途に利用される可能性があります。
この理論的な攻撃は、10.2.1 データ最小化や、ポスチャ値自体が有用な情報をほとんどもたず長期間安定するという事実によって軽減されます。
このAPIは、高レベルの抽象化として ポスチャ を公開します。値は
"continuous" または
"folded"
のいずれかです。異なるポスチャをサポートしないデバイスは
"continuous" がデフォルトとなります。
つまり、指紋情報への追加は最大1ビット分です。
この1ビットの公開には、ユーザーが物理的にデバイスのポスチャを変更するという明確な行動が必要となります。
実装は最適な高レベルポスチャを判断するために様々な低レベル情報を利用できますが、それら低レベル情報はAPIを通じて公開されません。さらに、どの詳細なセンサー値も高レベルポスチャ状態と一対一で対応しません。ヒンジ角度センサーや他のセンサー、キーボードがドッキングされているか、キックスタンドが展開されているかなどの情報や、それらの組み合わせを使って最適なポスチャを判断できます。この抽象化により、意図された機能実装に必要最小限の情報のみ公開され、データ最小化原則に従います。
姿勢値変更イベントは、 アクティブ document のうち、その 可視性 状態 が "visible" であるものについてのみ発火される。これは デバイス姿勢変更手順で説明されている。 そうでない間に値をポーリングすると、古い値が返される。 値は可視性状態が "visible" である間、または "visible" に変わった直後にのみ 更新されるためである。
デバイスポスチャの変更には、ユーザーによる明確かつ物理的な操作が必要です。「明確」とは、ポスチャ値の表にある実装定義の閾値を超える操作であり、「物理的」とは、OSがポスチャ変更に応じてユーザーの期待通りに動作することを意味します。
Window
の幅
および高さまで拡張する。
デバイスが折りたたまれている場合、その
要素は折り目をまたいでレイアウトされ、劣ったユーザー
体験につながる。別の方法として、その要素を折り目領域の
上または下のいずれかに表示することができる。
posture だけを前提に設計すべきではない: 折りたたみ可能デバイスの考え方は、
その
汎用性と、ユーザーが望むように姿勢を変更できる能力にある。
向きと同様に、
ユーザーには別のニーズがある可能性があるため、常にユーザーのために
選択するのではなく、ユーザーが自分のニーズにより適した UI を
選択できるようにすることが重要である。
理想的には、UI を構成可能にすることが望ましい。
Device Posture API は、インターフェイスを完全に実行するには 物理的なハードウェアデバイスが必要となるため、テスト作成者に課題をもたらす。 この課題に対処するため、この文書は [WEBDRIVER2] の 拡張コマンドを定義し、ユーザーが 報告されるデバイス姿勢を制御し、 実際のデバイスをシミュレートできるようにする。
以下の 拡張コマンドおよびそれらの 8. アルゴリズムとの統合をサポートするため、トップレベル traversables は、次の 内部スロットを持たなければならない:
| 内部スロット | 説明 |
|---|---|
| [[PostureOverride]] |
ハードウェアが提供する 現在のポスチャ を上書きします。
許可される値:
|
| HTTP メソッド | URI テンプレート |
|---|---|
| POST | /session/{session id}/deviceposture |
この 拡張コマンドは、
デバイス姿勢を特定の
DevicePostureType
に変更する。
| パラメーター名 | 値の型 | 必須 |
|---|---|---|
| posture | String | yes |
リモートエンド 手順は次のとおりである:
continuous" でも
"folded" でもない場合、invalid
argument の WebDriver エラーコードを伴う エラーを返す。
null を伴う 成功を返す。
| HTTP メソッド | URI テンプレート |
|---|---|
| DELETE | /session/{session id}/deviceposture |
この 拡張コマンドは、 デバイス姿勢オーバーライドを削除し、デバイス姿勢の制御を ハードウェアに戻す。
リモートエンド 手順は次のとおりである:
null である場合、データ
null を伴う 成功を返す。
null に設定する。
null を伴う 成功を返す。
このセクションは非規範的です。
ポスチャをコンソールに出力するシンプルなユースケースです。
navigator.devicePosture.addEventListener("change", () => {
console.log(`The current posture is: ${navigator.devicePosture.type}!`);
})
デバイスがビデオ通話Webサービスに使われています。ラップトップポスチャに折り畳むことで、机上でハンズフリー体験が可能になります。UAがポスチャを検知し、UIが強化されます。どのポスチャにも適応するコンテンツ例を作成できます。他のユースケースは explainer を参照してください。
@media (device-posture: folded) and (vertical-viewport-segments: 2) {
body {
display: flex;
flex-flow: column nowrap;
}
.videocall-area, .videocall-controls {
flex: 1 1 env(viewport-segment-bottom 0 0);
}
}
有効なdevice-posture値が必ず1つtrueになるため、以下のコードでユーザーエージェントがこのメディア機能をサポートするかどうか検出できます:
@media (device-posture) {
/*The browser supports device-posture feature*/
}
非規範的と記載されたセクションのほか、著者ガイドライン・図・例・注記はすべて非規範的です。それ以外は規範的です。
この文書におけるキーワード MUST および SHOULD は、 ここに示すようにすべて大文字で現れる場合に限り、 BCP 14 [RFC2119] [RFC8174] に記述されているとおりに解釈される。
本仕様は、含まれているインターフェースを実装する ユーザーエージェントという単一の製品に対する適合基準を定義します。
WebIDL[SecureContext, Exposed=(Window)]
partial interface Navigator {
[SameObject] readonly attribute DevicePosture devicePosture;
};
[SecureContext, Exposed=(Window)]
interface DevicePosture : EventTarget {
readonly attribute DevicePostureType type;
attribute EventHandler onchange;
};
enum DevicePostureType {
"continuous",
"folded"
};
このセクションは非規範的です。
創設時の編集者として本仕様に多大な貢献をし、また本仕様と Devices and Sensors Working Group の双方にビジュアルアイデンティティを作成してくれた Diego González に感謝する。
Daniel Appelquist、Jo Balletti、Michael Blix、Paul Grenier、Laura Morinigo の皆様に本作業へのご貢献に心より感謝申し上げます。
このセクションは非規範的です。
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: