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

9
@JohannCombrink 정말 중요한 당신은 이것을 언급했다. 키보드를 열면 디자인이 엉망이됩니다. 이 점을 지적하십시오.
lowtechsun

@JohannCombrink의 의견에 대한 참조 : stackoverflow.com/q/8883163/363448
ndequeker

4
보이는 영역이 일반적으로 가로 모드에 적용되는 스타일에 더 적합하기 때문에 키보드가 팝업 될 때 다른 스타일을 적용하는 것은 좋지 않습니다. 따라서 부머가 아닐 수도 있습니다.
Muhammad bin Yusrat

나는 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을보고합니다. 아이폰은 삼성 갤럭시와 다르게보고합니다.
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.

}

데스크탑

당신의 디자인 요구 사항에 따라 즐길 ... (:

고마워, 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.width및 을 사용하는 것이 좋습니다 screen.height. 이 두 값은 모든 최신 브라우저에서 사용할 수 있습니다. 앱이 실행될 때 브라우저가 축소 된 경우에도 화면의 실제 크기를 제공합니다. window.innerWidth브라우저가 축소되면 변경됩니다. 모바일 기기에서는 불가능하지만 PC와 랩톱에서는 발생할 수 있습니다.

모바일 장치가 세로 모드와 가로 모드 사이를 전환 할 때 의 값 screen.width과 값이 screen.height변경되므로 값을 비교하여 모드를 결정할 수 있습니다. 경우 screen.width보다 큰 1280px을 당신은 PC 또는 노트북을 취급하고 있습니다.

Javascript로 이벤트 리스너를 구성하여 두 값이 반전되는시기를 감지 할 수 있습니다. 집중해야 할 세로 화면 너비 값은 320px (주로 iPhone), 360px (대부분의 다른 전화), 768px (작은 태블릿) 및 800px (일반 태블릿)입니다.


iPhone이 회전 할 때 iOS는 screen.widthscreen.height값 을 뒤집지 않습니다 . 항상 같은 값을보고합니다. window.orientation장치가 회전했는지 여부를 확인 하려면이 속성을 사용해야합니다 ... (가로 모드의 경우 값은 90 또는 -90입니다.)
interDist
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.