백분율 (%) 및 픽셀 (px) 또는 em의 테두리 반경


124

border-radius에 픽셀 또는 em 값 을 사용 하면 값이 요소의 가장 큰 면보다 크더라도 가장자리 반경은 항상 원호 또는 알약 모양 입니다.

백분율을 사용할 때 가장자리 반경은 타원이며 요소의 각 측면 중앙에서 시작하여 타원형 또는 타원 모양이됩니다 .

픽셀 (px) 테두리 반경백분율 (%) 테두리 반경

border-radius의 픽셀 값 :

border-radius의 백분율 값 :

백분율로 표시된 테두리 반경이 픽셀 또는 em 값으로 설정된 테두리 반경과 동일한 방식으로 작동하지 않는 이유는 무엇입니까?

답변:


181

테두리 반경 :

먼저 border-radius 속성이 2 개의 값을 취한다는 것을 이해해야합니다. 이러한 값은 모서리의 모양을 정의하는 1/4 타원의 X / Y 축에있는 반지름입니다.
값 중 하나만 설정된 경우 두 번째 값은 첫 번째 값과 같습니다. 그래서 border-radius: x동일합니다 border-radius:x/x;.

백분율 값

W3C 사양 참조 : CSS 배경 및 테두리 모듈 레벨 3 border-radius 속성 은 백분율 값과 관련하여 읽을 수있는 내용입니다.

백분율 : 테두리 상자의 해당 치수를 참조하십시오.

따라서 border-radius:50%;다음과 같이 타원의 raddi를 정의합니다.

  • X 축의 반경 은 컨테이너 너비 의 50 %입니다.
  • Y 축의 반경 은 컨테이너 높이 의 50 %입니다.

백분율 (%)의 테두리 반경은 줄임표를 만듭니다.

픽셀 및 기타 단위

테두리 반경 (em, in, 뷰포트 관련 단위, cm ...)에 백분율이 아닌 다른 값을 사용 하면 항상 X / Y 반경이 동일한 타원이 생성됩니다. 즉, 원 .

설정시 border-radius:999px;원의 반경은 999px이어야합니다. 그러나 곡선이 겹칠 때 다른 규칙이 적용 되어 원의 반지름이 가장 작은면의 절반 크기로 줄어 듭니다. 따라서 귀하의 예에서는 요소 높이의 절반 인 50px입니다.

픽셀 (px) 단위의 테두리 반경은 알약 모양을 만듭니다.


이 예제 (고정 크기 요소 사용)의 경우 px와 백분율을 모두 사용하여 동일한 결과를 얻을 수 있습니다. 소자이기 때문에 230px x 100px, border-radius: 50%;동일하다 border-radius:115px/50px;(양쪽 모두의 50 %) :

div {
  display: inline-block;
  background: teal;
  width: 230px;
  height: 100px;
  padding: 40px 10px;
  box-sizing: border-box;
  font-family: courier;
  font-size: 0.8em;
  color: #fff;
}
.percent {
  border-radius: 50%;
}
.pixels {
  border-radius: 115px/50px;
}
<div class="percent">border-radius:50%;</div>
<div class="pixels">border-radius:115px/50px;</div>


6
훌륭한 대답입니다. 비율 반경 값이 너비와 높이에 대해 별도로 계산되는 것은 유감입니다. 그것은 물체의 종횡비를 모르고는 물체의 크기에 따라 크기가 조정되는 원형 모서리를 얻을 수 없다는 것을 의미합니다. 더 큰 물체 치수에 백분율을 적용하면 좋지 않을까요?
Chris Dennis

4
@ChrisDennis 사실이 아닙니다. OP가 말했듯이 간단히 border-radius: 999px;. 이렇게하면 원형 모서리를 얻을 수 있고 요소에 따라 크기가 조정되는지 확인할 수 있습니다.
Gust van de Wal

9
그러나 나는 상자에 반원형 끝을 원하지 않을 수도 있습니다. x- 반경을 상자 너비의 10 %로 지정하고 y- 반경을 x- 반경과 동일하게 지정하고 싶습니다.
Chris Dennis

4
이봐 당신은 이와 같은 다른 자기 답변 게시물을 했습니까? 읽어 주셔서 감사합니다.
Ced

3
그러나 실제로 백분율로 작동하는 것은 다음과 같습니다. border-radius: 50%/100%(Chrome 60 + 61에서 테스트 됨)
denns

6

첫 번째 값을 원하는 %로 나누기 만하면됩니다. 테두리 반경을 50 %로하려면 다음과 같이 작성하십시오.

border-radius: 25%/50%; 

또는 다른 예 :

border-radius: 15%/30%;

js 또는 SASS로 쉽게 계산할 수 있습니다.


1
너비의 25 %, 높이의 50 %만이 아닌가? 그것은 X와 Y 방향에서 높이의 50 %와 같은 것이 아닙니다.
mpen

도대체이 구문이 뭐야! 효과가있다! 나는 그것이 존재한다는 것을 결코 몰랐습니다.
Uri Kutner

그것은 단지 수학 형제
CyberJ

1
당신이 어떤 종류의 수학을했는지는 모르겠지만 그것은 "그냥 수학"이 아닙니다. 산술 분할과는 전혀 관련이없는 border-radius에 대해 특별히 정의 된 속기입니다. w3.org/TR/css-backgrounds-3/#border-radius
MI Wright
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.