CSSメディアクエリを使用してデバイスの向きを検出する方法


159

JavaScriptでは、以下を使用して方向モードを検出できます。

if (window.innerHeight > window.innerWidth) {
    portrait = true;
} else {
    portrait = false;
}

ただし、CSSのみを使用して方向を検出する方法はありますか?

例えば。何かのようなもの:

@media only screen and (width > height) { ... }

回答:


435

画面の向きを検出するためのCSS:

 @media screen and (orientation:portrait) {  }
 @media screen and (orientation:landscape) {  }

メディアクエリのCSS定義は、http://www.w3.org/TR/css3-mediaqueries/#orientationにあります。


66
注:この値は、実際のデバイスの向きに対応していません。ほとんどのデバイスでソフトキーボードを縦向きで開くと、ビューポートが高さよりも広くなり、ブラウザで縦向きではなく横向きのスタイルが使用されます。
Johann Combrink 2017年

9
@JohannCombrinkこれは本当に重要なことです。キーボードを開くと、デザインがめちゃくちゃになります。これを指摘してください。
lowtechsun 2017

@JohannCombrinkのコメントの参照:stackoverflow.com/q/8883163/363448
ndequeker

4
キーボードがポップアップされたときに別のスタイルを適用することは悪いことではない可能性があります。通常、表示領域は、横長モードに適用されるスタイルにより適しています。だからつまらないことはありません。
ムハンマドビンユスラット

Muhammadのコメントが好きです。ソフトウェアキーボードによりビューポートが幅よりも短くなる場合、ビューポートは横向きになります(物理デバイスを通常保持している場合でも)。CSSは私の意見では意図したとおりに機能しています。
ベニー

36
@media all and (orientation:portrait) {
/* Style adjustments for portrait mode goes here */
}

@media all and (orientation:landscape) {
  /* Style adjustments for landscape mode goes here */
}

まだ実験する必要があるようです


1
向きはデバイスによって異なります。一部のタブレットは、横向きモードのときに方向= 0を報告します。iPhoneはSamsung Galaxiesとは異なるレポートを作成します。
BlackMagic 2015年

21

もっと具体的なメディアクエリを書く必要があると思います。1つのメディアクエリを作成する場合、それが他のビュー(Mob、Tab、Desk)に影響しないようにしてください。そうしないと、問題が発生する可能性があります。両方のビューをカバーするそれぞれのデバイスに対して1つの基本的なメディアクエリを記述することをお勧めします。1つのオリエンテーションメディアクエリを使用して、オリエンテーションビューについてより具体的なコードを作成し、優れたプラクティスにすることができます。両方のメディアオリエンテーションクエリを同時に記述する必要はありません。以下の例でMyを参照できます。私の英語の文章があまり良くない場合は、申し訳ありません。例:

モバイル向け

@media screen and (max-width:767px) {

..This is basic media query for respective device.In to this media query  CSS code cover the both view landscape and portrait view.

}


@media screen and (min-width:320px) and (max-width:767px) and (orientation:landscape) {


..This orientation media query. In to this orientation media query you can specify more about CSS code for landscape view.

}

タブレット用

@media screen and (max-width:1024px){
..This is basic media query for respective device.In to this media query  CSS code cover the both view landscape and portrait view.
}
@media screen and (min-width:768px) and (max-width:1024px) and (orientation:landscape){

..This orientation media query. In to this orientation media query you can specify more about CSS code for landscape view.

}

デスクトップ

あなたの設計要件に従って楽しんでください...(:

ありがとう、Jitu


4

私はアスペクト比に行くでしょう、それはより多くの可能性を提供します。

/* Exact aspect ratio */
@media (aspect-ratio: 2/1) {
    ...
}

/* Minimum aspect ratio */
@media (min-aspect-ratio: 16/9) {
    ...
}

/* Maximum aspect ratio */
@media (max-aspect-ratio: 8/5) {
    ...
}

向きとアスペクト比はどちらもビューポートの実際のサイズに依存し、デバイスの向き自体には関係ありません。

続きを読む:https : //dev.to/ananyaneogi/useful-css-media-query-features-o7f


0

JavaScriptではscreen.widthand を使用することをお勧めしますscreen.height。これらの2つの値は、すべての最新のブラウザーで使用できます。アプリの起動時にブラウザが縮小されていても、画面の実際のサイズがわかります。window.innerWidthブラウザが縮小されたときに変化します。これは、モバイルデバイスでは発生しませんが、PCおよびラップトップでは発生します。

モバイルデバイスのポートレートモードとランドスケープモードが切り替わるscreen.widthと、との値がscreen.height変化するため、値を比較することでモードを判別できます。screen.widthが1280pxより大きい場合は、PCまたはラップトップを扱っています。

JavaScriptでイベントリスナーを作成して、2つの値が反転するタイミングを検出できます。集中する縦向きのscreen.width値は、320px(主にiPhone)、360px(他のほとんどの電話)、768px(小さいタブレット)、800px(通常のタブレット)です。


iOSが反転しないことに注意することが重要であるscreen.widthscreen.heightiPhoneを回転させたときの値を。常に同じ値を報告します。window.orientationプロパティを使用して、デバイスが回転したかどうかを判断する必要があります...(横長モードの場合、値は90または-90になります。)
interDist
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.