如何使用CSS媒体查询检测设备方向?


159

在JavaScript中,可以使用以下方式检测方向模式:

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

但是,有没有办法仅使用CSS来检测方向?

例如。就像是:

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

Answers:


435

用于检测屏幕方向的CSS:

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

媒体查询的CSS定义位于http://www.w3.org/TR/css3-mediaqueries/#orientation


66
注意:此值与实际设备方向不符。在大多数设备上以纵向方向打开软键盘会导致视口变得比高度高,从而导致浏览器使用横向样式而不是纵向样式。
Johann Combrink

9
@JohannCombrink您提到这一点非常重要。打开键盘会弄乱设计。好,你指出这一点。
lowtechsun '17

@JohannCombrink的评论参考:stackoverflow.com/q/8883163/363448
ndequeker

4
弹出键盘时应用不同的样式可能不是一件坏事,因为可见区域通常更适合应用于横向模式的样式。所以可能不是一个无赖。
穆罕默德·本·尤斯拉特

我喜欢穆罕默德(Muhammad)的评论:如果软件键盘使视口短于宽视口,则视口将是横向放置(即使您正常握住物理设备)。我认为CSS可以正常工作。
Benny

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的报告与三星Galaxy的报告不同。
BlackMagic

21

我认为我们需要编写更具体的媒体查询。确保如果您编写一个媒体查询,则该查询不应对其他视图(Mob,Tab,Desk)有效,否则可能会造成麻烦。我想建议为各个设备编写一个基本的媒体查询,其中涵盖视图和一个方向媒体查询,为了更好的实践,您可以针对方向视图对其进行更多具体的编码。我们不需要同时编写两个媒体定向查询。您可以参考以下示例。如果我的英语写作不太好,我很抱歉。例如:

对于手机

@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.

}

桌面

根据您的设计要求享受...(:

谢谢智图



0

在Javascript中,最好使用screen.widthscreen.height。这两个值在所有现代浏览器中均可用。它们提供了屏幕的真实尺寸,即使应用启动时浏览器已缩小。window.innerWidth缩小浏览器时会发生变化,这不会在移动设备上发生,但会在PC和笔记本电脑上发生。

当移动设备在纵向和横向模式之间切换时,screen.width和的值会screen.height更改,因此可以通过比较这些值来确定模式。如果screen.width大于1280像素,则说明您正在使用PC或笔记本电脑。

您可以用Javascript构造一个事件侦听器,以检测两个值何时被翻转。纵向要集中的screen.width值为320px(主要是iPhone),360px(大多数其他手机),768px(小型平板电脑)和800px(常规平板电脑)。


请务必注意,iOS不会翻转 screen.widthscreen.height旋转iPhone时和值。它始终报告相同的值。您必须使用该window.orientation属性来确定设备是否已旋转...(对于横向模式,该值为90或-90。)
interDist
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.