CSS가있는 dp (밀도 독립 픽셀) 단위는 무엇입니까?


90

Android의 경우 사람들은 UI 요소에 dp (밀도 독립 픽셀) 측정을 사용하도록 권장 48dp하며 버튼 높이 등에 사용하는 것과 같은 규칙이 있습니다 .

저는 웹 애플리케이션을 작업하고 있는데 UI 디자인이 Android 디자인 표준을 따르지 않는다는 비판을 많이 받고 있습니다. 분명히 내 응용 프로그램은 Android Holo 테마 대신 CSS 및 HTML을 사용하기 때문에 다르게 보일 것입니다.하지만 여전히 가능한 한 많이 준수하도록 만들고 싶습니다. 그러나 CSS는 밀도 독립 측정을 허용하지 않습니다.

다른 해상도와 픽셀 밀도에서 내 응용 프로그램을 테스트 할 때보기가 좋지 않고 때로는 비율이 떨어져서 작동하지 않습니다. CSS에는 Android 네이티브 개발과 같은 dp 단위가 없지만 몇 가지 대안이 무엇인지 궁금합니다.

어떻게 든 Javascript를 사용하여 픽셀 밀도를 얻고 모든 것을 적절하게 수동으로 조정할 수 있습니까? 모든 해상도 / 밀도에서 멋지게 보이고 작동하는 웹 앱을 만드는 가장 좋은 방법은 무엇입니까?


2
CSS pxdpAndroid 와 동일 합니다. CSS3 사양에 따르면. 단위와 가치에 .
omninonsense

답변:


24

http://www.w3.org/TR/css3-values/#lengths

CSS에서 사용 가능한 가장 가까운 단위는 뷰포트 백분율 단위입니다.

  • vw-초기 컨테 이닝 블록 너비의 1 %와 같습니다.
  • vh-초기 컨테 이닝 블록 높이의 1 %와 같습니다.
  • vmin-vw 또는 vh 중 작은 값과 같습니다.
  • vmax-vw 또는 vh 중 큰 값과 같습니다.

이러한 장치를 지원하지 않는 유일한 모바일 브라우저는 Opera입니다. http://caniuse.com/#feat=viewport-units


iOS에서 배포 할 때 해당 단위가 제대로 표시됩니까?
jmhostalet 2014

@jmhostalet 아니요, 뷰포트 높이가 동적이기 때문에 브라우저가 일종의 무한 루프로 이동합니다.
rookie1024 2014

6
때문에 대답은, 잘못된 pxCSS의 단위는 (반 직관적으로) 실제로 이미 픽셀 밀도의 독립적 인 - "CSS를 픽셀은 픽셀하지 않은 것입니다", 기사의 많음이 이것에 대해이 있습니다
ChaseMoskal

178

현재 받아 들여진 답변에 동의하지 않습니다. uber5001에서 알 수 있듯이 a px는 고정 된 단위이며 Android-specifc의 노력과 유사한 정신 dp입니다.

재료의 사양 :

CSS를 작성할 때 dp 또는 sp가 명시된 모든 곳에 px를 사용하십시오. Dp는 Android 용 개발에만 사용하면됩니다.

추가로

웹용으로 디자인 할 때 dp를 px (픽셀 용)로 바꿉니다.


25
이것이 답입니다. 재료 사양을 인용하면 +1.
Qix-MONICA가 잘못되었습니다.

2
MDN에서 : "의 단위는 화면의 물리적 인치가 아니라 96px를 나타냅니다. 즉, 실제 화면 픽셀 밀도가 무엇이든지간에 96dpi로 간주됩니다. 픽셀 밀도가 더 높은 기기에서는 1 인치가 1 인치보다 작습니다. 마찬가지로 mm, cm 및 pt는 절대 길이가 아닙니다. " developer.mozilla.org/en/docs/Web/CSS/…
Maciej Krawczyk

1
CSS 인치와 물리적 인치는 서로 다른 두 가지입니다. 1 CSS 인치는 화면 밀도에 관계없이 항상 96px입니다. 따라서 96dpi 모니터에서만 CSS 인치와 물리적 인치가 동일한 것으로 간주 될 수 있습니다.
Maciej Krawczyk

1
@MaciejKrawczyk px의 규모 불일치에 대한 귀하의 주장의 근거를 이해합니다. 나는 px가 실제로 고정 된 단위인지에 대해 논쟁 할 수 있으며, 여러분이 포함하는 스케일은이 기본 진실을 바꾸지 않지만 그것은 붉은 청어입니다. 현실은 재료 사양이 dp가 제안되는 모든 곳에서 px를 사용하도록 직접 명시한 것입니다. Brad가 Android 디자인 표준에 대해 물었을 때 저는 표준적이고 정확한 답변을 제공했습니다.
Tohuw

2
머티리얼 디자인에 대한 최근 업데이트 (2018 년 5 월)는 더 깊이있는 픽셀 밀도를 설명합니다. material.io/design/layout/#pixel-density
Squiggle

17

사용 rem.

루트 요소의 글꼴 크기이며 다른 UI 요소의 크기에 매우 적합한 기본 단위입니다.

동일한 절대 크기 (센티미터)를 사용하면 텍스트 및 기타 요소가 모바일에서 너무 크거나 데스크톱에서 너무 작습니다.

동일한 양의 픽셀을 사용하면 텍스트 및 기타 요소가 모바일에서 너무 작거나 데스크톱에서 너무 큽니다.

rem그것이 말하는 때문에 유닛이 자리에있다 "이봐,이 일반 텍스트가 어떻게해야 큽니다." 여기에 다른 UI 요소의 크기를 기반으로하는 것은 매우 합리적인 선택입니다.


16

CSS3에서는 웹에 Android의 px. CSS3의 사양px 은 다음과 같습니다.

픽셀; 1px는 1in의 1/96과 같습니다.

px 나중에 원하는 측정이 될 수 있습니다.


2
이 전환이 모든 것을 깨지 않고 어떻게 일어날 지 알 수 없습니다. 예를 들어 모바일과 데스크톱의 텍스트에 동일한 절대 크기 (cm)를 사용하는 것은 좋은 패러다임이 아닙니다.
Konstantin Schubert 2015 년

그리고 1in은 96px로 정의됩니다. in, mm과 같은 CSS 단위는 픽셀 밀도에 따라 다릅니다.
Maciej Krawczyk

요 PX 엔 vez 드 DP Y 버지니아 비엔 사용 siempre
이반 파레 데스

OOOO : 불어 마음
dwjohnston

12

CSS3에서 진정한 장치 독립적 인 CSS 단위는 없습니다. 절대 길이에 대한 W3C 사양을 참조하십시오 . 특히 절대 단위는 물리적 측정과 일치하지 않을 수 있습니다.

물리적 단위가 목적에 맞다면 포인트와 같은 것을 사용할 수 있습니다. 포인트는 dps에 충분히 가깝습니다.

1 in = 72 pt
1 in = 160 dp

1 dp = 72 / 160 pt

SCSS를 사용하는 경우 pts로 반환하는 함수를 작성할 수 있습니다.

@function dp($_dp) {
  @return (72 / 160) * $_dp + pt;
}

그리고 그것을 사용하십시오 :

.shadow-2 {
  height: dp(2);
}

10

rem 단위를 기반으로 한 인터페이스는 어떻습니까?

확인해야 할 문제에 대한 경험이 충분하지 않지만 뷰포트 크기를 기반으로 몇 가지 수학을 만들어 루트 요소에 글꼴 크기를 적용하면 전체 인터페이스가 그에 따라 조정될 것이라고 생각합니다. 이 물건은 나에게 아직 약간의 요술입니다.


글꼴 크기를 설정할 필요가 없습니다. 루트 요소의 기본 글꼴 크기는 일반적으로 사용중인 장치에 대해 매우 합리적인 선택입니다.
Konstantin Schubert 2015 년

1

포인트를 사용하지 않는 이유는 여러 장치에서 일관된 크기입니다. 그리고 화면 크기에 상대적입니다. 대부분은 전통적인 출판에서 비롯 되었기 때문에 익숙하지 않습니다.


0

vw (모든 장치의 화면 너비)와 em을 혼합하여 사용하는 것은 어떻습니까? 여기서 글꼴 크기는 장치 화면 너비에 따라 동적으로 변경됩니다. 기본 CSS 파일에서 다음 규칙을 사용하십시오.

font-size: calc(100vw * 10 / 375);

(iPhone 6/7/8의 너비는 375px, 320px (iPhone5) 등으로 변경)

모든 경우에 완벽하게 작동합니다. 마이너스가 하나뿐입니다. 목표가 "픽셀 퍼펙트"라면 점 뒤에 큰 숫자를 사용해야합니다.

예 : 목표는 모든 화면에서 글꼴 크기 h5 : 18px입니다.

그러면 당신의 완벽한 "그들"은 :

h5 { 
 font-size: 1.79904em;
 }

완벽하게 사용하지 않고 18/10 :

h5 { 
 font-size: 1.8em;
 }

Google Chrome에 따르면 18.0096px를 얻습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.