Copyright © 2025 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
The 画面の向き 仕様は、デバイスの画面の向きの種類と角度を標準化し、それをロックおよびロック解除する手段を提供します。 この仕様で定義された API は、デバイスの画面の向きの現在の種類と角度を公開し、変更時にイベントを発行します。これにより、Web アプリケーションは CSS と連携して複数の画面の向きに合わせてユーザー体験をプログラム的に適応させることができます。API はまた、特定の前提条件の下で画面の向きをロックすることも可能にします。これは、ユーザーが物理的にデバイスを回転させても画面の向き自体は変えたくないコンピュータゲームのようなアプリケーションで特に有用です。
このセクションは、本書が公開された時点でのステータスを説明します。現在の W3C の出版物一覧や、この技術レポートの最新版は、 W3C 標準および草案一覧 で確認できます。
本書は作業中の文書です。
本書は Web Applications Working Group によって、 勧告プロセス を用いて ワーキングドラフトとして公開されました。
ワーキングドラフトとしての公開は、W3C およびその会員による支持を意味するものではありません。
本書はドラフト文書であり、今後いつでも他の文書によって更新、差し替え、または廃止される可能性があります。進行中の作業以外のものとして本書を引用することは適切ではありません。
本書は W3C 特許ポリシーのもとで活動するグループによって作成されました。 W3C は、 グループの成果物に関連して提出された特許開示の公開リスト を管理しています。そのページには特許の開示方法も記載されています。ある者が必須特許請求項を含むと信じる特許を実際に知っている場合、 必須請求項 を含むと信じる場合は、 W3C特許ポリシー第6節 に従ってその情報を開示しなければなりません。
本書は 2025年8月18日 W3C プロセス文書 に従って管理されています。
このセクションは規範的ではありません。
この例では、「ロック」ボタンをクリックするとフルスクリーンになり、画面が反対の向きにロックされます。 「アンロック」ボタンをクリックすると画面のロックが解除されます。
<script>
function updateLockButton() {
const lockButton = document.getElementById("button");
const newOrientation = getOppositeOrientation();
lockButton.textContent = `Lock to ${newOrientation}`;
}
function getOppositeOrientation() {
return screen
.orientation
.type
.startsWith("portrait") ? "landscape" : "portrait";
}
async function rotate(lockButton) {
if (!document.fullscreenElement) {
await document.documentElement.requestFullscreen();
}
const newOrientation = getOppositeOrientation();
await screen.orientation.lock(newOrientation);
updateLockButton(lockButton);
}
screen.orientation.addEventListener("change", updateLockButton);
window.addEventListener("load", updateLockButton);
</script>
<button onclick="rotate(this)" id="button">
ロックする...
</button>
<button onclick="screen.orientation.unlock()">
アンロック
</button>
画面の向きをロックするとは、OrientationLockType
orientation
に対して、ユーザーが画面を特定の
画面の向き
にしか回転できないようにすることを意味します。他の向きへの回転が制限される場合もあります。画面を回転できる向きは、ユーザーエージェント、ユーザーの設定、オペレーティングシステムの慣例、または画面自体によって決まります。例えば、
横向き にロックすると、ユーザーは画面を
横向き(主) やシステムが許せば
横向き(副) に回転できますが、
縦向き(副) には向きません。
画面の向きをアンロックするとは、エンドユーザーが、システムが許す任意の 画面の向き に自由に画面を回転できるようにすることを意味します。
画面は、以下のいずれかの 画面の向き であるか、ロック されることがあります。
null
である場合)のデバイスのデフォルト挙動です。この向きは、デバイスのオペレーティングシステムやユーザーエージェント、エンドユーザー、あるいは
インストールされたウェブアプリケーション
によって決定されることがあります。例えば、画面の向きがアンロックされていてユーザーがデバイスを回転させた場合、一部のデバイスでは向きの変更が
portrait-primary、
landscape-primary、
landscape-secondary
のみ許可され、portrait-secondary にはならない場合があります。
出力デバイスの画面には、次の概念が関連付けられています:
OrientationLockType
として表される)、またはアンロック時はnull
。
OrientationType
として表される)。
下記の画面の向き値リストは、異なる自然な向きを持つ画面における各画面の向きタイプに関連付けられる角度を標準化します:
Document
インターフェイスは、次の内部スロットで拡張されます:
内部スロット | 説明 |
---|---|
[[orientationPendingPromise]] |
null または Promise のいずれかです。 Promise
が割り当てられている場合、そのプロミスは画面の向きをロックするリクエストを表します。
|
WebIDLpartial interface Screen {
[SameObject] readonly attribute ScreenOrientation
orientation
;
};
Window
オブジェクトには、関連付けられた
ScreenOrientation
があり、これは Screen
の orientation
オブジェクト(すなわち
ScreenOrientation
インスタンス、window.screen.orientation
)です。
WebIDL[Exposed=Window]
interface ScreenOrientation
: EventTarget {
Promise<undefined> lock
(OrientationLockType
orientation);
undefined unlock
();
readonly attribute OrientationType
type
;
readonly attribute unsigned short angle
;
attribute EventHandler onchange
;
};
内部スロット | 説明 |
---|---|
[[angle]] |
画面の最後に認識された現在の向きの角度(度単位)を、
unsigned short として
画面の向き値リストから導出して表します。
|
[[initialType]] | 現在の向きタイプを、閲覧コンテキストが作成された時点での値として表します。 |
[[type]] |
画面の最後に認識された現在の向きタイプを
OrientationType
列挙値として表します。
|
lock
()
メソッドが OrientationLockType
orientation を伴って呼び出されたとき、ユーザーエージェントは
MUST 以下の手順を実行しなければなりません。
ユーザーエージェントは、MAY document およびそれに関連付けられた 閲覧コンテキストが、一つまたは複数の ロック前条件 を満たすことを要求してもよいです。詳細は、 10. Webアプリケーションマニフェストとの相互作用 および 9. フルスクリーンAPIとの相互作用 を参照してください。
Document
を代入します。
NotSupportedError
" の DOMException
)。これらの手順を中止します。
[[orientationPendingPromise]]
が
null
でない場合、現在のロックプロミスを却下しnullにする を
document で "AbortError
" で実行します。
[[orientationPendingPromise]]
に
新しいプロミス を設定します。
[[orientationPendingPromise]]
を返します。
unlock
()
メソッドが呼び出されたとき、ユーザーエージェントは MUST
次の手順を実行しなければなりません:
Document
を代入します。
null
の場合、
undefined
を返します。
[[orientationPendingPromise]]
が
null
でない場合、現在のロックプロミスを却下しnullにする を
document で "AbortError
" で実行します。
null
と document で実行します。
unlock
()
は Promise
を返しません。なぜなら、これは
デフォルトの画面の向き にロックすることと同義ですが、
ユーザーエージェント がその向きを知っている場合と知らない場合があるためです。そのため、ユーザーエージェント は新たな向きがどうなるか、あるいは実際に変化するかどうかすら予測できません。
共通安全性チェックは、Document
document に対して次の手順を実行します。
InvalidStateError
" DOMException
を投げます。
SecurityError
" DOMException
を投げます。
SecurityError
" DOMException
を投げます。
取得時、angle
属性は
this の
[[angle]]
を返します。
onchange
属性は、イベントハンドラIDL属性です。
onchange
イベントハンドラに対応し、
そのイベントハンドラのイベント型は
change です。
WebIDLenum OrientationLockType
{
"any
",
"natural
",
"landscape
",
"portrait
",
"portrait-primary
",
"portrait-secondary
",
"landscape-primary
",
"landscape-secondary
"
};
OrientationLockType
列挙型は、画面が潜在的に ロック され得る画面の向きを表します。
any
」は any を表します。
natural
」は natural を表します。
landscape
」は landscape を表します。
portrait
」は portrait を表します。
portrait-primary
」は portrait-primary を表します。
portrait-secondary
」は portrait-secondary を表します。
landscape-primary
」は landscape-primary を表します。
landscape-secondary
」は
landscape-secondary を表します。
WebIDLenum OrientationType
{
"portrait-primary
",
"portrait-secondary
",
"landscape-primary
",
"landscape-secondary
"
};
OrientationType
列挙値は、画面の現在の向きの種類を表すために使用されます。
portrait-primary
" は portrait-primary を表します。
portrait-secondary
" は portrait-secondary
を表します。
landscape-primary
" は landscape-primary を表します。
landscape-secondary
" は
landscape-secondary を表します。
閲覧コンテキスト context が作成されるとき、ユーザーエージェントは MUST 以下を実行しなければなりません:
ScreenOrientation
にします。
[[initialType]]
内部スロットを、画面の 現在の向きの種類 に初期化します。
[[type]]
内部スロットを、画面の 現在の向きの種類 に初期化します。
[[angle]]
内部スロットを、画面の 現在の向きの角度 に初期化します。
手順で、現在のロックプロミスを却下しnullにすることが Document
document と DOMString
exceptionName で要求された場合、ユーザーエージェントは MUST 以下を実行しなければなりません:
[[orientationPendingPromise]]
は
null
でないこと。
[[orientationPendingPromise]]
を代入します。
DOMException
で拒否します。
[[orientationPendingPromise]]
を
null
に設定します。
手順で 向きロックを適用することが
OrientationLockType?
orientation と Document
document
に対して要求された場合、
ユーザーエージェントは MUST
以下の手順を実行しなければなりません:
[[orientationPendingPromise]]
が
null
でない場合、現在のロックプロミスを却下しnullにする を
document に対して "AbortError
" で実行します。
[[orientationPendingPromise]]
が null
であれば、続行。
AbortError
" で実行します。
[[orientationPendingPromise]]
が
null
でない場合、現在のロックプロミスを却下しnullにする
を
document に対して "AbortError
"
で実行し、これらの手順を中止します。
null
であれば、画面の向きをアンロックする を実行します。
null
に設定します。
[[orientationPendingPromise]]
が null
でなければ、
現在のロックプロミスを却下しnullにする
を
document に対して "NotSupportedError
"
で実行します。
これは、ユーザーがウェブアプリケーションによる画面の向き変更を禁止する設定にしている場合や、ユーザーエージェントではなく基盤となるプラットフォームが指定の orientation へのロックを許可していない場合などに発生することがあります。
[[orientationPendingPromise]]
を代入します。
[[orientationPendingPromise]]
を
null
に設定します。
null
でなければ、resolve を使い promise を
undefined
で解決します。
ユーザーエージェントが 最上位の閲覧コンテキスト の画面の向きが変化したと判断した場合、またはユーザーが 最上位の閲覧コンテキスト を別の画面に移動した場合、画面の向き変更手順 を、その 最上位の閲覧コンテキスト の アクティブドキュメント で実行します。
画面の向き変更手順は、
Document
document に対して次の通りです:
ScreenOrientation
を代入します。
[[type]]
と等しく、かつ angle が
screenOrientation の [[angle]]
と等しい場合、これらの手順を中止します。
[HTML] の「可視状態を更新する」アルゴリズムは、画面の向き変更手順を実行します。
アンロードドキュメントクリーンアップ手順 が document で実行されるとき、ユーザーエージェントは MUST 次の手順を実行しなければなりません:
画面の向きを完全にアンロックする手順
は、Document
document に対して次の通りです:
[[orientationPendingPromise]]
が
null
でない場合、現在のロックプロミスを却下しnullにする を document
に対して "AbortError
" で実行します。
null
と
topDocument で実行します。
ユーザーエージェントは、SHOULD、lock
()
の使用を
単純なフルスクリーンドキュメントに制限するべきです。これはロック前条件の一つです。[fullscreen]
document がフルスクリーンを終了するとき、画面の向きを完全にアンロックする手順 も実行されます。[fullscreen]
Web Application Manifest 仕様は、ウェブアプリケーションが デフォルトの画面の向き を orientation メンバーで設定できるようにします。
ユーザーエージェントは SHOULD、インストール済みウェブアプリケーション が「fullscreen」display mode で表示されることをロック前条件として要求するべきです。
車椅子のアーム等にデバイスが固定された向きで設置されているユーザーがいる可能性があるため、画面の向きをロックする際にユーザーがデバイスを回転させることを前提とする開発者は、Web コンテンツアクセシビリティ ガイドライン (WCAG) 2.1 の Orientation 成功基準 を認識しておく必要があります。該当の基準は、コンテンツと機能が 画面の向き にかかわらず利用可能であることを 必須 としています。特定の向きが 重要 である場合、ウェブアプリケーションはユーザーに向きの要件を通知しなければなりません。
画面のtypeおよび angleは、フィンガープリンティングのベクトルとなり得ます。以下の緩和策は、デバイスがどのように保持されているかを開示しないことでユーザーのプライバシーを保護し、またsecondaryな向きタイプやそれに関連する角度がフィンガープリンティング目的で利用されることを防ぎます。
フィンガープリンティングへの耐性(例: プライベートブラウジング)として、ユーザーエージェントはMAY(してもよい):
[[initialType]]
であるかのように振る舞う。
type
ゲッターの返り値を
「portrait-primary
」または
「landscape-primary
」に制限する。どちらを返すかは画面のアスペクト比で決定する。
[[initialType]]
と一致する場合、angle
ゲッターで0
を返す。それ以外の場合は90
を返す。
非規範と明記されたセクションに加えて、この仕様書中のすべての著作ガイドライン、図、例、および注記は非規範です。それ以外の内容はすべて規範となります。
この文書中のキーワード MAY、MUST、および SHOULD は、 BCP 14 [RFC2119] [RFC8174] に記載されている通り、ここに示すようにすべて大文字で出現した場合に限り、その意味で解釈されます。
WebIDLpartial interface Screen {
[SameObject] readonly attribute ScreenOrientation
orientation
;
};
[Exposed=Window]
interface ScreenOrientation
: EventTarget {
Promise<undefined> lock
(OrientationLockType
orientation);
undefined unlock
();
readonly attribute OrientationType
type
;
readonly attribute unsigned short angle
;
attribute EventHandler onchange
;
};
enum OrientationLockType
{
"any
",
"natural
",
"landscape
",
"portrait
",
"portrait-primary
",
"portrait-secondary
",
"landscape-primary
",
"landscape-secondary
"
};
enum OrientationType
{
"portrait-primary
",
"portrait-secondary
",
"landscape-primary
",
"landscape-secondary
"
};
angle
属性(ScreenOrientation
用)
§5.
[[angle]]
内部スロット(ScreenOrientation
用)
§5.1
"any"
(OrientationLockType
の列挙値)
§6.
ScreenOrientation
§4.
[[initialType]]
内部スロット(ScreenOrientation
用)
§5.1
"landscape"
(OrientationLockType
の列挙値)
§6.
lock
メソッド(ScreenOrientation
用)
§5.
"natural"
(OrientationLockType
の列挙値)
§6.
onchange
属性(ScreenOrientation
用)
§5.
orientation
属性(Screen
用)
§4.
OrientationLockType
列挙型
§6.
[[orientationPendingPromise]]
内部スロット(Document
用)
§3.1
OrientationType
列挙型
§7.
"portrait"
(OrientationLockType
の列挙値)
§6.
ScreenOrientation
インターフェース
§5.
type
属性(ScreenOrientation
用)
§5.
[[type]]
内部スロット(ScreenOrientation
用)
§5.1
unlock
メソッド(ScreenOrientation
用)
§5.
Screen
インターフェース
Document
インターフェース
EventTarget
インターフェース
EventHandler
Document
)
Document
)
Window
インターフェース
list
))
AbortError
例外
DOMException
インターフェース
DOMString
インターフェース
[Exposed]
拡張属性
InvalidStateError
例外
NotSupportedError
例外
Promise
インターフェース
[SameObject]
拡張属性
SecurityError
例外
undefined
型
unsigned short
型
Christophe Dumez、Anne van Kesteren、Chundong Wang、Fuqiao Xue、 および Chaals McCathie Nevile に有益なコメントをいただいたことに感謝します。
本 API の初期設計への貢献に対し、Chris Jones および Jonas Sicking に特に感謝します。
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: