CSS 디자인을하는 동안 한동안 궁금했던 점이 있습니다.
CSS 너비의 소수점 이하 자릿수가 존중됩니까? 아니면 반올림됩니까?
.percentage {
width: 49.5%;
}
또는
.pixel {
width: 122.5px;
}
CSS 디자인을하는 동안 한동안 궁금했던 점이 있습니다.
CSS 너비의 소수점 이하 자릿수가 존중됩니까? 아니면 반올림됩니까?
.percentage {
width: 49.5%;
}
또는
.pixel {
width: 122.5px;
}
답변:
너비가 백분율이면 그렇습니다 . Martin이 지적했듯이 분수 픽셀에 도달하면 문제가 발생하지만 백분율 값이 정수 픽셀 값 (예 : 200px의 50.5 %)을 산출하면 합리적이고 예상되는 동작을 얻습니다.
편집 : 나는 한 부분 픽셀 어떻게되는지 보여주는 예 업데이트 (크롬의 값이 너무 50, 50.5 및 50.6 모두 같은 폭을 보여립니다을).
페이지를 칠할 때 숫자가 반올림 되더라도 전체 값은 메모리에 유지되고 후속 자식 계산에 사용됩니다. 예를 들어 100.4999px의 상자가 100px로 페인트되는 경우 너비가 50 % 인 자식은 .5 * 100 대신 .5 * 100.4999로 계산됩니다. 그리고 더 깊은 수준으로.
부모 너비가 ems이고 자식이 백분율 인 깊게 중첩 된 그리드 레이아웃 시스템을 만들었으며 최대 4 개의 소수점을 포함하면 눈에 띄는 영향을 미쳤습니다.
가장자리 케이스는 확실하지만 명심해야 할 점이 있습니다.
@SkillDrick이 잘 설명 하는 것처럼 분수 픽셀이 개별 요소에서 반올림되는 것처럼 보일 수 있지만 분수 상자는 실제로 실제 상자 모델에서 존중됨을 알아야합니다 .
이것은 요소가 서로 옆에 (또는 위에) 쌓일 때 가장 잘 볼 수 있습니다. 즉, 400 0.5 픽셀 div를 나란히 배치하면 단일 200 픽셀 div와 동일한 너비를 갖습니다. 모든 요소가 실제로 1px로 반올림되면 (개별 요소를 볼 때 알 수 있듯이) 200px div의 길이는 절반이 될 것으로 예상됩니다.
이 실행 가능한 코드 스 니펫에서 볼 수 있습니다.
body {
color: white;
font-family: sans-serif;
font-weight: bold;
background-color: #334;
}
.div_house div {
height: 10px;
background-color: orange;
display: inline-block;
}
div#small_divs div {
width: 0.5px;
}
div#large_div div {
width: 200px;
}
<div class="div_house" id="small_divs">
<p>0.5px div x 400</p>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
</div>
<br>
<div class="div_house" id="large_div">
<p>200px div x 1</p>
<div></div>
</div>
:nth-child(even)
또는 :nth-child(odd)
당신은 모든 일 중 하나가 오렌지 또는 전부가 파란색 알 - 아니 혼합물 (일부 모호한 보라색 색조가 될 것이다) 블루와 오렌지.
너비는 정수 픽셀 수로 반올림됩니다 .
모든 브라우저가 같은 방식으로 반올림하는지 모르겠습니다. 서브 픽셀 비율을 반올림 할 때 모두 다른 전략을 가지고있는 것 같습니다. 다른 브라우저의 하위 픽셀 반올림에 대한 자세한 내용은 ElastiCSS에 대한 훌륭한 기사를 참조하십시오 .
편집 : 호기심을 위해 일부 브라우저에서 @Skilldrick의 데모를 테스트했습니다. 소수 픽셀 값 (백분율 아님)을 사용할 때 IE9p7 및 FF4b7은 가장 가까운 픽셀로 반올림되는 반면 Opera 11b, Chrome 9.0.587.0 및 Safari 5.0.3은 소수점 이하 자릿수를 자릅니다. 나는 그들이 결국 공통점이 있기를 바랐습니다 ...
그들은 값을 가장 가까운 정수로 반올림합니다. 그러나 크롬, 사파리 및 파이어 폭스에서 불일치를보고 있습니다.
예를 들어 33.3 %가 420.945px로 변환되는 경우
크롬과 파이어 폭스는 421px로 표시합니다. 사파리는 420px로 표시합니다.
이것은 사파리가하지 않는 동안 크롬과 파이어 폭스가 바닥을 따라 가며 논리를 쉰 것처럼 보입니다. 이 페이지는 같은 문제를 논의하는 것 같습니다
요소는 정수 수의 픽셀로 페인트해야하며 다른 답변이 다룰 때 백분율은 실제로 존중됩니다.
중요한 경우이 픽셀 은 화면 픽셀이 아닌 css 픽셀을 의미 하므로 50.7499 % 자식을 가진 200px 컨테이너는 101px css 픽셀 로 반올림되어 400 *가 아닌 202px로 렌더링됩니다 . 507499 ~ = 203 픽셀
이 계산에서 화면 밀도는 무시되며 특정 망막 서브 픽셀 크기로 요소를 페인트 * 할 방법이 없습니다. Sandy Gifford가 보여 주듯이 실제 요소의 크기가 1 CSS 픽셀보다 작을 수 있지만 요소의 배경 또는 테두리를 1 CSS 픽셀 크기 미만으로 렌더링 할 수는 없습니다 .
[*] 0.5 오프셋 상자 그림자와 같은 기술을 사용할 수 있지만 실제 상자 모델 속성은 전체 CSS 픽셀로 페인트됩니다.