CSS 테두리 및 박스 장식 모듈 레벨 4

W3C 최초 공개 워킹 드래프트,

이 문서에 대한 자세한 정보
이 버전:
https://www.w3.org/TR/2025/WD-css-borders-4-20250722/
최신 공식 버전:
https://www.w3.org/TR/css-borders-4/
에디터스 드래프트:
https://drafts.csswg.org/css-borders-4/
히스토리:
https://www.w3.org/standards/history/css-borders-4/
피드백:
CSSWG 이슈 저장소
사양 내 인라인
에디터:
Elika J. Etemad / fantasai (Apple)
Lea Verou (초청 전문가)
(초청 전문가)
Noam Rosenthal (Google)
전 에디터:
(W3C)
이 사양에 대한 수정 제안:
GitHub 에디터

요약

이 모듈은 페이지에서 박스의 테두리와 장식에 관련된 CSS 기능을 포함합니다.

CSS는 구조화된 문서(예: HTML 및 XML)의 렌더링을 화면, 인쇄물 등에서 설명하는 언어입니다.

이 문서의 상태

이 섹션은 이 문서가 발행될 당시의 상태를 설명합니다. 현재 W3C의 발행 문서 목록과 이 기술 보고서의 최신 개정본은 W3C 표준 및 초안 색인에서 확인할 수 있습니다.

이 문서는 CSS 작업 그룹에서 최초 공개 워킹 드래프트권고 프로세스를 따라 발행되었습니다. 최초 공개 워킹 드래프트로서의 발행은 W3C 및 그 회원의 승인을 의미하지 않습니다.

이 문서는 초안 문서로, 언제든지 업데이트되거나 대체되거나 폐기될 수 있습니다. 이 문서를 진행 중인 작업 이외의 자료로 인용하는 것은 적절하지 않습니다.

피드백은 GitHub에 이슈 등록(권장) 방식으로 보내주시고, 제목에 사양 코드 "css-borders"를 포함해 주십시오 (예시: “[css-borders] …의견 요약…”). 모든 이슈와 의견은 아카이브됩니다. 또는 (아카이브 있음) 공개 메일링 리스트 www-style@w3.org로 보내실 수도 있습니다.

이 문서는 2023년 11월 3일 W3C 프로세스 문서의 적용을 받습니다.

이 문서는 W3C 특허 정책에 따라 운영되는 그룹에서 작성하였습니다. W3C는 해당 그룹의 산출물에 대해 공개 특허 공개 목록을 유지합니다. 해당 페이지에는 특허 공개 방법에 대한 안내도 포함되어 있습니다. 어떤 개인이 실제로 특허에 대해 알고 있고 그 특허가 필수 청구항을 포함한다고 생각할 때에는 W3C 특허 정책 6절에 따라 정보를 공개해야 합니다.

1. 소개

이 명세는 CSS 배경 및 테두리 모듈 3 레벨 [CSS3BG]의 테두리 및 박스 장식과 관련된 부분을 확장합니다. 현재는 변경점(diff) 명세이며, 테두리와 박스 장식 관련 나머지 기능은 [CSS3BG]를 참조하세요.

추가된 corner-*-shapeborder-shape 속성과, border-*-radius, box-shadow-* 롱핸드 속성의 논리적 축약형, 그리고 border-limitborder-*-clip 속성을 통한 부분 테두리를 명세합니다.

3레벨의 본문을 이 초안에 병합해야 합니다.

2. 테두리

테두리는 미리 정의된 스타일(실선, 이중선, 점선, 의사 3D 테두리 등)일 수도 있고 이미지일 수도 있습니다. 전자의 경우, 다양한 속성으로 스타일(border-style), 색상(border-color), 두께(border-width)를 정의합니다.

2.1. 선 색상: border-color 속성

이름: border-top-color, border-right-color, border-bottom-color, border-left-color, border-block-start-color, border-block-end-color, border-inline-start-color, border-inline-end-color
값: <color> | <image-1D>
초기값: currentcolor
적용 대상: 모든 요소(단, ruby base containerruby annotation container 제외)
상속: 아니오
퍼센트값: N/A
계산된 값: 계산된 색상 또는 1차원 이미지 함수
정식 순서: 문법에 따름
애니메이션 유형: 본문 참고
논리 속성 그룹: border-color
이름: border-color
값: [ <color> | <image-1D> ]{1,4}
초기값: 개별 속성 참조
적용 대상: 개별 속성 참조
상속: 개별 속성 참조
퍼센트값: 개별 속성 참조
계산된 값: 개별 속성 참조
애니메이션 유형: 개별 속성 참조
정식 순서: 문법에 따름

이 속성들은 border-style로 지정된 테두리의 전경색을 설정합니다.

<image-1D>로 정의된 줄무늬는 적용된 쪽의 테두리 모양을 따라가며, padding edge에서 시작해 바깥쪽으로 띠(band) 형태로 그려집니다. 각 지점의 테두리 두께는 해당 지점의 전체 줄무늬 두께를 정의합니다.

각 면마다 여러 색상을 사용하는 예시:
.foo {
  border: 30px solid;
  border-color: stripes(dodgerblue, skyblue) stripes(yellow, gold) stripes(lightgreen, limegreen) stripes(indianred, orange);
}

샘플 렌더링:

동일한 테두리 색상에 border-style: dotted 적용 시:

border-color는 네 개의 border-*-color 속성의 축약형입니다. 네 개의 값은 각각 위, 오른쪽, 아래, 왼쪽 테두리를 설정합니다. 왼쪽이 누락되면 오른쪽과 같으며, 아래가 누락되면 위와 같고, 오른쪽이 누락되면 역시 위와 같습니다. 이는 각 리스트 항목마다 개별적으로 처리됩니다.

flow-relative 속성인 border-block-start-color, border-block-end-color, border-inline-start-color, border-inline-end-colorphysical 속성인 border-top-color, border-bottom-color, border-left-color, border-right-color와 대응됩니다. 이 매핑은 요소의 writing-mode, direction, text-orientation에 따라 달라집니다.

이름: border-block-color, border-inline-color
값: <'border-top-color'>{1,2}
초기값: 개별 속성 참조
적용 대상: 개별 속성 참조
상속: 개별 속성 참조
퍼센트값: 개별 속성 참조
계산된 값: 개별 속성 참조
애니메이션 유형: 개별 속성 참조
정식 순서: 문법에 따름

이 두 개의 축약 속성은 각각 border-block-start-color & border-block-end-colorborder-inline-start-color & border-inline-end-color를 설정합니다. 첫 번째 값은 start 쪽 색상을, 두 번째 값은 end 쪽 색상을 나타냅니다. 값이 하나만 주어지면, startend 양쪽 모두에 적용됩니다.

2.2. 선 패턴: border-style 속성

이름: border-top-style, border-right-style, border-bottom-style, border-left-style, border-block-start-style, border-block-end-style, border-inline-start-style, border-inline-end-style
값: <line-style>
초기값: none
적용 대상: 모든 요소(단, ruby base containerruby annotation container 제외)
상속: 아니오
퍼센트값: N/A
계산된 값: 지정된 키워드
정식 순서: 문법에 따름
애니메이션 유형: 불연속(discrete)
논리 속성 그룹: border-style

flow-relative 속성인 border-block-start-style, border-block-end-style, border-inline-start-style, border-inline-end-stylephysical 속성인 border-top-style, border-bottom-style, border-left-style, border-right-style와 대응됩니다. 이 매핑은 요소의 writing-mode, direction, text-orientation에 따라 달라집니다.

이름: border-block-style, border-inline-style
값: <'border-top-style'>{1,2}
초기값: 개별 속성 참조
적용 대상: 개별 속성 참조
상속: 개별 속성 참조
퍼센트값: 개별 속성 참조
계산된 값: 개별 속성 참조
애니메이션 유형: 개별 속성 참조
정식 순서: 문법에 따름

이 두 개의 축약 속성은 각각 border-block-start-style & border-block-end-styleborder-inline-start-style & border-inline-end-style를 설정합니다. 첫 번째 값은 start 쪽 스타일을, 두 번째 값은 end 쪽 스타일을 나타냅니다. 값이 하나만 주어지면, startend 양쪽 모두에 적용됩니다.

2.3. 선 두께: border-width 속성

이름: border-top-width, border-right-width, border-bottom-width, border-left-width, border-block-start-width, border-block-end-width, border-inline-start-width, border-inline-end-width
값: <line-width>
초기값: medium
적용 대상: 모든 요소(단, ruby base containerruby annotation container 제외)
상속: 아니오
퍼센트값: N/A
계산된 값: 절대 길이, 테두리 너비로 스냅된 값; 테두리 스타일이 none 또는 hidden일 경우 0
정식 순서: 문법에 따름
애니메이션 유형: 계산된 값 기준
논리 속성 그룹: border-width

flow-relative 속성인 border-block-start-width, border-block-end-width, border-inline-start-width, border-inline-end-widthphysical 속성인 border-top-width, border-bottom-width, border-left-width, border-right-width와 대응됩니다. 이 매핑은 요소의 writing-mode, direction, text-orientation에 따라 달라집니다.

이름: border-block-width, border-inline-width
값: <'border-top-width'>{1,2}
초기값: 개별 속성 참조
적용 대상: 개별 속성 참조
상속: 개별 속성 참조
퍼센트값: 개별 속성 참조
계산된 값: 개별 속성 참조
애니메이션 유형: 개별 속성 참조
정식 순서: 문법에 따름

이 두 개의 축약 속성은 각각 border-block-start-width & border-block-end-width 그리고 border-inline-start-width & border-inline-end-width를 각각 설정합니다. 첫 번째 값은 start 쪽의 너비를, 두 번째 값은 end 쪽의 너비를 나타냅니다. 값이 하나만 주어지면, startend 양쪽 모두에 적용됩니다.

2.4. 테두리 축약 속성

이름: border-top, border-right, border-bottom, border-left, border-block-start, border-block-end, border-inline-start, border-inline-end
값: <line-width> || <line-style> || <color>
초기값: 개별 속성 참조
적용 대상: 모든 요소(단, ruby base containerruby annotation container 제외)
상속: 아니오
퍼센트값: N/A
계산된 값: 개별 속성 참조
애니메이션 유형: 개별 속성 참조
정식 순서: 문법에 따름

flow-relative 속성인 border-block-start, border-block-end, border-inline-start, border-inline-endphysical 속성인 border-top, border-bottom, border-left, border-right와 대응됩니다. 이 매핑은 요소의 writing-mode, direction, text-orientation에 따라 달라집니다.

이름: border-block, border-inline
값: <'border-block-start'>
초기값: 개별 속성 참조
적용 대상: 개별 속성 참조
상속: 개별 속성 참조
퍼센트값: 개별 속성 참조
계산된 값: 개별 속성 참조
애니메이션 유형: 개별 속성 참조
정식 순서: 문법에 따름

이 두 개의 축약 속성은 각각 border-block-start & border-block-end 또는 border-inline-start & border-inline-end를 모두 동일한 스타일로 설정합니다.

3. 모서리

3.1. 모서리 크기: border-*-*-radius 속성

이름: border-top-left-radius, border-top-right-radius, border-bottom-right-radius, border-bottom-left-radius, border-start-start-radius, border-start-end-radius, border-end-start-radius, border-end-end-radius
값: <length-percentage [0,∞]>{1,2}
초기값: 0
적용 대상: 모든 요소(본문 참조)
상속: 아니오
퍼센트값: border box의 해당 치수 참조
계산된 값: 쌍의 계산된 <length-percentage>
정식 순서: 문법에 따름
애니메이션 유형: 계산된 값 기준
논리 속성 그룹: border-radius

flow-relative 속성인 border-start-start-radius, border-start-end-radius, border-end-start-radius, border-end-end-radiusphysical 속성인 border-top-left-radius, border-bottom-left-radius, border-top-right-radius, border-bottom-right-radius와 대응됩니다. 이 매핑은 요소의 writing-mode, direction, text-orientation에 따라 달라지며, 첫 번째 start/end가 블록 축 쪽, 두 번째가 인라인 축 쪽(즉, 'border-block-inline-radius' 패턴)입니다.

3.2. 모서리 크기 축약형: border-radiusborder-*-radius 축약 속성

3.2.1. 한쪽 모서리 크기 지정: border-top-radius, border-right-radius, border-bottom-radius, border-left-radius, border-block-start-radius, border-block-end-radius, border-inline-start-radius, border-inline-end-radius 축약형

이름: border-top-radius, border-right-radius, border-bottom-radius, border-left-radius, border-block-start-radius, border-block-end-radius, border-inline-start-radius, border-inline-end-radius
값: <length-percentage [0,∞]>{1,2} [ / <length-percentage [0,∞]>{1,2} ]?
초기값: 0
적용 대상: 모든 요소(본문 참조)
상속: 아니오
퍼센트값: border box의 해당 치수 참조
계산된 값: 개별 속성 참조
정식 순서: 문법에 따름
애니메이션 유형: 개별 속성 참조

border-*-radius 축약형은 관련 면의 두 개 border-*-*-radius 롱핸드 속성을 설정합니다. 슬래시 앞뒤로 값이 주어지면, 앞의 값은 수평 반지름, 슬래시 뒤의 값은 수직 반지름을 지정합니다. 슬래시가 없으면 두 반지름 모두 동일하게 지정됩니다. 두 반지름 값은 각각 border-top-radius의 경우 왼쪽 위, 오른쪽 위, border-right-radius의 경우 오른쪽 위, 오른쪽 아래, border-bottom-radius의 경우 왼쪽 아래, 오른쪽 아래, border-left-radius의 경우 왼쪽 위, 왼쪽 아래, border-block-start-radius의 경우 start-start, start-end, border-block-end-radius의 경우 end-start, end-end, border-inline-start-radius의 경우 start-start, end-start, border-inline-end-radius의 경우 start-end, end-end 순서입니다. 두 번째 값이 생략되면 첫 번째 값을 복사합니다.

3.2.2. 모든 모서리 크기 한 번에 지정: border-radius 축약형

이름: border-radius
값: <length-percentage [0,∞]>{1,4} [ / <length-percentage [0,∞]>{1,4} ]?
초기값: 0
적용 대상: 모든 요소(단, border-collapsecollapse인 table 요소는 제외)
상속: 아니오
퍼센트값: n/a
계산된 값: 명시된 대로
정식 순서: 문법에 따름
애니메이션 유형: 개별 속성 참조

[CSS3BG] 참고.

3.3. 모서리 모양: corner-shape 속성

기본적으로, 0이 아닌 border-radius 값은 해당 모서리를 둥글게 만드는 사분원 타원 모서리 모양을 정의하며, 모서리 영역 안을 border-radius가 정의한 영역에 채웁니다. 하지만 경우에 따라 다른 모서리 모양이 필요할 수 있습니다. corner-shape 속성(및 그 롱핸드 속성들)은 박스가 해당 border-radius 값으로 정의된 영역에 사용할 모서리 모양을 정확히 지정합니다.

다양한 모서리 모양은 모두 superellipse의 다양한 매개변수로 표현할 수 있습니다. superellipse는 타원을 일반화한 형태로, k 매개변수에 따라 정사각형, 타원, 노치 등 다양한 모양을 표현할 수 있습니다.

superellipse는 어떻게 동작하나요?

단위원은 다음 방정식으로 정의됩니다:

x 2 + y 2 = 1

이 방정식을 만족하는 (x, y) 모든 점이 원을 만듭니다. 이 형태를 X축, Y축으로 스케일하면 타원이 됩니다.

superellipse는 단순히 2 지수를 변수로 바꾼 것입니다. 본 명세에서는 2K 형식으로 표기합니다:

x 2 K + y 2 K = 1

여기서 Ksuperellipse() 함수 인자입니다.

K는 어떤 값도 가질 수 있습니다; K가 1이면 일반 원/타원 방정식이 되고, 다른 값은 superellipse 곡선의 전체 계열을 정의합니다:

(참고: 대부분의 수학 문헌에서는 보다 단순한 x K 지수로 표기합니다. 여기서는 x 2 K 방식으로 표기하여 인자 범위 해석을 쉽게 했습니다: 모든 값이 유효하고, 대칭 모양은 양수/음수, "중간" 베벨은 0 등입니다.)

완전한 표현과 보간을 위해, corner-shape 속성들은 superellipse 매개변수를 직접 superellipse() 함수로 지정하거나, 자주 쓰이는 매개변수에 해당하는 키워드를 사용할 수 있습니다. 자세한 내용은 <corner-shape-value> 정의를 참고하세요.

3.3.1. corner-shape 축약형

이름: corner-shape
값: <corner-shape-value>{1,4}
초기값: round
적용 대상: border-radius 적용 가능한 모든 요소
상속: 아니오
퍼센트값: 개별 속성 참조
계산된 값: 개별 속성 참조
애니메이션 유형: 개별 속성 참조
정식 순서: 문법에 따름

corner-shape 속성은 border-radius로 지정된 영역 내에서 박스의 모서리 모양을 지정합니다.

<corner-shape-value> = round | scoop | bevel | notch | square | squircle |
                       <superellipse()>
superellipse() = superellipse(<number [-∞,∞]> | infinity | -infinity)
round
모서리 모양이 볼록 타원의 1/4입니다. superellipse(1)과 동일합니다.

참고: 이것이 corner-shape 속성의 초기값이며, corner-shape이 없던 border-radius의 기본 동작과 같습니다.

squircle
모서리 모양이 "squircle"의 1/4로, roundsquare 사이의 볼록 곡선입니다. superellipse(2)와 동일합니다.
square
모서리 모양이 볼록한 90도 각입니다. superellipse(infinity)과 동일합니다.

참고: 이것은 border-radius: 0에서 얻는 "일반" 사각 모서리와 시각적으로 동일하지만, 다른 corner-shape 값들과 부드럽게 애니메이션할 수 있습니다.

bevel
모서리 모양이 직선 대각선(볼록도 오목도 아님)입니다. superellipse(0)과 동일합니다.
scoop
모서리 모양이 오목한 1/4 타원입니다. superellipse(-1)과 동일합니다.
notch
모서리 모양이 오목한 90도 각입니다. superellipse(-infinity)과 동일합니다.
superellipse(K)
모서리 모양이 superellipse의 1/4입니다. 인자 Ksuperellipse 매개변수이며, 2K 지수로 superellipse를 정의합니다.

§ 3.3 모서리 모양: corner-shape 속성의 참고에서 superellipse의 수학적 정의와 K값이 의미하는 바를 볼 수 있습니다. § 3.3.3 모서리 모양 렌더링에서 superellipse 계산 및 렌더링의 정확한 내용을 참고하세요.

위쪽 오른쪽 모서리에 대한 서로 다른 superellipse() 값: infinity, 1, 0, -1, -infinity.

참고: border-radius가 지정되지 않았거나(혹은 0으로 설정되었을 때) 모서리 영역도 0 크기가 되며, corner-shape는 아무 영향도 주지 않습니다.

corner-shapeoverflow 규칙을 변경하지 않으며, 단지 모서리 모양만 다르게 할 뿐이고, 요소는 여전히 일반적으로 모양이 지정된 테두리로 클리핑됩니다.

corner-shape로 지정된 곡선은 테두리의 바깥쪽 경계를 정의합니다. 테두리의 안쪽 경계는 바깥쪽 경계를 따라가지만 (꼭 superellipse 곡선으로 표현된다고 할 수 없는 방식일 수도 있음), 전체적으로 거의 일정한 거리로 유지됩니다. (또는 만약 모서리에서 만나는 두 테두리의 border-width가 다르면 거리가 선형적으로 증가합니다.)

corner-shapebox-shadow의 렌더링과, overflow clip edge가 박스에서 확장될 때의 모양에도 영향을 줍니다. 하지만 이들은 corner-shape 경로를 직접 따르지 않고, 대신 축 정렬 방식으로 corner-shape 경로를 스케일합니다.

3.3.2. corner-*-shape 축약형 및 롱핸드

이름: corner-top-left-shape, corner-top-right-shape, corner-bottom-right-shape, corner-bottom-left-shape, corner-start-start-shape, corner-start-end-shape, corner-end-start-shape, corner-end-end-shape
값: <corner-shape-value>
초기값: round
적용 대상: border-radius 적용 가능한 모든 요소
상속: 아니오
퍼센트값: n/a
계산된 값: 해당 superellipse()
정식 순서: 문법에 따름
애니메이션 유형: superellipse interpolation 참고
논리 속성 그룹: corner-shape

corner-*-*-shape 롱핸드 속성은 지정된 모서리의 모양을 설정합니다.

flow-relative 롱핸드 (corner-start-start-shape 등) 는 physical 롱핸드 (corner-top-left-shape 등) 와 대응되며, 매핑은 요소의 writing-mode, direction, text-orientation에 따라 달라집니다. 첫 번째 start/end가 블록 축 쪽, 두 번째가 인라인 축 쪽입니다 (즉, corner-block-inline-shape 패턴).

이름: corner-top-shape, corner-right-shape, corner-bottom-shape, corner-left-shape, corner-block-start-shape, corner-block-end-shape, corner-inline-start-shape, corner-inline-end-shape
값: <corner-shape-value>{1,2}
초기값: 개별 속성 참조
적용 대상: 개별 속성 참조
상속: 개별 속성 참조
퍼센트값: 개별 속성 참조
계산된 값: 개별 속성 참조
애니메이션 유형: 개별 속성 참조
정식 순서: 문법에 따름

corner-*-shape 등 축약형은 관련 면의 두 corner-*-*-shape 속성을 설정합니다. 값이 하나만 주어지면 두 번째 값은 첫 번째 값을 기본값으로 사용합니다.

물리적 축약형(corner-top-shape 등)의 경우, 값은 왼쪽/오른쪽 또는 위/아래 순서로 지정되며, 해당 속성에 의미 있는 축에 따라 다릅니다. 즉, corner-top-shape: round squarecorner-top-left-shape: round; corner-top-right-shape: square;를 설정합니다.

논리 축약형(corner-block-start-shape 등)의 경우, 값은 항상 다른 축에서 start/end 순서입니다. 즉, corner-block-start-shape: round squarecorner-start-start-shape: round; corner-start-end-shape: square;를 설정합니다.

3.3.3. corner-shape 렌더링

모서리 모양이 지정된 요소를 렌더링할 때, 요소의 경로는 border, outline, box-shadow, overflow-clip-margin 등 다양한 요소에 따라 오프셋되어야 합니다.

테두리(border)나 외곽선(outline)을 렌더링할 때는 오프셋이 요소의 곡선에 맞춰 정렬되고, box-shadowoverflow-clip-margin으로 오프셋할 때는 축에 맞춰 정렬됩니다.

Adjusting corner shapes
테두리는 곡선에 정렬되고, 그림자와 클립은 축에 정렬됩니다.

element element외곽선(outer contour)elementelementborder edge로 결정되는 border contour path입니다.

element element내곽선(inner contour)elementelementpadding edge로 결정되는 border contour path입니다.

elementborder외곽선내곽선 사이 영역에 렌더링됩니다.

elementoutline외곽선을 따라 used outline-widthoutline-offset으로 렌더링됩니다. 실제 렌더링 방법은 구현체에 따라 다를 수 있습니다.

elementoverflow 영역은 내곽선에 의해 모양이 정해집니다. elementoverflow clip edgeelement, elementpadding edge, elementused overflow-clip-margin으로 결정되는 border contour path에 의해 결정됩니다.

element의 각 'box shadow' 그림자는, element, elementborder edge, 그리고 그림자의 used box-shadow-spread로 결정되는 border contour path에 의해 모양이 정해집니다.

element elementborder contour pathedge targetEdge와 선택적 숫자 spread(기본값 0)을 받아 계산하려면:
  1. outerLeft, outerTop, outerRight, outerBottomelementunshaped border edge로 둡니다.

  2. topLeftHorizontalRadius, topLeftVericalRadius, topRightHorizontalRadius, topRightVerticalRadius, bottomRightHorizontalRadius, bottomRightVerticalRadius, bottomLeftHorizontalRadius, bottomLeftVerticalRadiuselement border edge의 반지름(radii)으로, elementopposite corner scale factor로 스케일합니다.

  3. topLeftShape, topRightShape, bottomRightShape, bottomLeftShapeelementcomputed corner-*-shape 값으로 둡니다.

  4. targetLeft, targetTop, targetRight, targetBottomunshaped targetEdge로 둡니다.

  5. path를 새로운 경로로 두고 [SVG2] 참고.

  6. Add corner to pathpath, rectangle (outerRight - topRightHorizontalRadius, outerTop, topRightHorizontalRadius, topRightVerticalRadius), targetEdge, 0, targetTop - outerTop, outerRight - targetRight, topRightShape를 전달합니다.

  7. Add corner to pathpath, rectangle (outerRight - bottomRightHorizontalRadius, outerBottom - bottomRightVerticalRadius, bottomRightHorizontalRadius, bottomRightVerticalRadius), targetEdge, 1, outerRight - targetRight, outerBottom - targetBottom, bottomRightShape를 전달합니다.

  8. Add corner to pathpath, rectangle (outerLeft, outerBottom - bottomLeftVerticalRadius, bottomLeftHorizontalRadius, bottomLeftVerticalRadius), targetEdge, 2, outerBottom - targetBottom, targetLeft - outerLeft, bottomLeftShape를 전달합니다.

  9. Add corner to pathpath, rectangle (outerLeft, outerTop, topLeftHorizontalRadius, topLeftVericalRadius), targetEdge, 3, targetLeft - outerLeft, targetTop - outerTop, topLeftShape를 전달합니다.

  10. spread가 0이 아니면:

    1. path1 + (spread * 2) / (targetEdgewidth), 1 + (spread * 2) / (targetEdgeheight)로 스케일합니다.

    2. path-spread, -spread만큼 평행이동합니다.

    참고: 이렇게 하면 결과 경로가 원본과 동일한 형태로 주어진 spread에 맞게 스케일됩니다.

  11. path를 반환합니다.

경로 path, 사각형 cornerRect, 사각형 trimRect, 숫자 orientation, startThickness, endThickness, curvature가 주어졌을 때 add corner to path 절차:

  1. cornerRect가 비어있거나 curvature가 ∞이면:

    1. innerQuadtrimRectclockwise quad로 둡니다.

    2. pathinnerQuad[(orienation + 1) % 4]까지 선을 그려 확장합니다.

    3. 종료합니다.

  2. cornerQuadcornerRectclockwise quad로 둡니다.

  3. curvature가 -∞이면:

    1. cornerQuad[0]에서 cornerQuad[3]까지 trimRect로 잘라 선을 그려 path를 확장합니다.

    2. cornerQuad[3]에서 cornerQuad[2]까지 trimRect로 잘라 선을 그려 path를 확장합니다.

    3. 종료합니다.

  4. clampedNormalizedHalfCornernormalized superellipse half corner clamp(curvature, -1, 1)로 둡니다.

  5. equivalentQuadraticControlPointXclampedNormalizedHalfCorner * 2 - 0.5로 둡니다.

  6. curveStartPointaligned corner pointcornerQuad[orienation], 벡터 (equivalentQuadraticControlPointX, 1 - equivalentQuadraticControlPointX), startThickness, orientation + 1을 전달해 구함.

  7. curveEndPointaligned corner pointcornerQuad[(orientation + 2) % 4], 벡터 (equivalentQuadraticControlPointX - 1, -equivalentQuadraticControlPointX), endThickness, orientation + 3을 전달해 구함.

  8. alignedCornerRectrectangle으로, curveStartPointcurveEndPoint를 포함하는 사각형으로 둡니다.

  9. projectionToCornerRecttransformation matrix로, (alignedCornerRectx coordinate, alignedCornerRecty coordinate)만큼 평행이동, (alignedCornerRectwidth dimension, alignedCornerRectheight dimension)만큼 스케일, (0.5, 0.5)만큼 평행이동, 90deg * orientation만큼 회전, (-0.5, -0.5)만큼 평행이동합니다.

  10. K0.5abs(curvature)로 둡니다.

  11. 0에서 1까지 T에 대해:

    1. ATK로 둡니다.

    2. B1 - (1 - T)K로 둡니다.

    3. normalizedPointcurvature가 양수면 (A, B), 아니면 (B, A)로 둡니다.

    4. absolutePointprojectionToCornerRect로 변환한 normalizedPoint로 둡니다.

    5. absolutePointtrimRect 내에 있다면 pathabsolutePoint를 지나도록 확장합니다.

    참고: User agent는 성능과 렌더링 정확도 사이의 균형을 위해 이 알고리즘을 근사(예: 연결된 베지어 곡선 사용)할 수 있습니다.

originalPoint, 2차 벡터 offsetFromControlPoint, 숫자 thickness, 숫자 orientation이 주어졌을 때 aligned corner point를 구하려면:

  1. lengthhypot(offsetFromControlPoint.x, offsetFromControlPoint.y)로 둡니다.

  2. offsetFromControlPoint90deg * orientation만큼 회전시키고 thickness만큼 스케일합니다.

  3. originalPointoffsetFromControlPoint.x / length, offsetFromControlPoint.y / length만큼 평행이동하고 반환합니다.

rectangle rect에 대해 clockwise quadquadrilateral로, 꼭짓점이 (rectx 좌표, recty 좌표), (rectx 좌표 + rect너비, recty 좌표), (rectx 좌표 + rect너비, recty 좌표 + rect높이), (rectx 좌표, recty 좌표 + rect높이)입니다.

3.3.4. 대각선 반지름 제약

오목한 corner-shape 값(즉, superellipse parameter가 음수)일 경우, 대각선 방향의 모서리가 서로 겹칠 수 있습니다.

다음 예시는 제약이 없다면 모서리가 겹칠 수 있습니다.

div {
  corner-shape: scoop;
  border-top-left-radius: 80%;
  border-bottom-right-radius: 80%;
}

이를 방지하기 위해 네 개의 반지름(radii)은 서로 겹치지 않도록 제약됩니다. 이는 반대쪽 모서리마다 외곽 다각형(hull polygon)을 계산하고, 두 모서리에 동일하게 적용할 수 있는 최대 축소 비율을 찾아 이 다각형들이 교차하지 않도록 조정하여 구현합니다.

opposite corner scale factorelement element에 대해 계산하려면:
  1. rectelementborder box로 둡니다.

  2. topRightHullnormalized inner corner hull로, elementcomputed corner-top-right-shape 기반, 사각형 (rect너비 - elementcomputed 수평 border-top-right-radius, 0, rectcomputed border-top-right-radius)에 매핑하여 구함.

  3. bottomRightHullnormalized inner corner hull로, elementcomputed corner-bottom-right-shape 기반, (0.5, 0.5) 원점으로 90deg 회전, 사각형 (rect너비 - elementcomputed 수평 border-bottom-right-radius, rect높이 - elementcomputed 수직 border-bottom-right-radius, elementcomputed border-bottom-right-radius)에 매핑하여 구함.

  4. bottomLeftHullnormalized inner corner hull로, elementcomputed corner-bottom-right-shape 기반, (0.5, 0.5) 원점으로 180deg 회전, 사각형 (0, rect높이 - elementcomputed 수직 border-bottom-left-radius, elementcomputed border-bottom-left-radius)에 매핑하여 구함.

  5. topLeftHullnormalized inner corner hull로, elementcomputed corner-top-left-shape 기반, (0.5, 0.5) 원점으로 270deg 회전, (0, 0, elementcomputed border-top-left-radius)에 매핑하여 구함.

  6. scaleFactorAtopLeftHullbottomRightHull을 첫 번째 점을 원점으로 하여 같은 비율로 축소할 때 두 다각형이 교차하지 않게 하는 최대값으로 둡니다.

  7. scaleFactorBtopRightHullbottomLeftHull을 첫 번째 점을 원점으로 하여 같은 비율로 축소할 때 두 다각형이 교차하지 않게 하는 최대값으로 둡니다.

  8. min(1, scaleFactorA, scaleFactorB)를 반환합니다.

3.3.5. 모서리 모양 보간

<corner-shape-value>는 항상 superellipse()와 그 superellipse parameter 변수로 표현할 수 있으므로, 두 <corner-shape-value> 사이의 보간은 superellipse parameter 자체를 보간하여 수행합니다. 이때 log2를 사용하기 때문에, 선형 보간을 하면 오목한 모서리는 볼록한 모서리보다 훨씬 빠르게 변화하는 효과가 나타납니다. 이를 보정하기 위해 superellipse 보간 수식은 superellipse parameter를 0~1 사이 값으로 변환하거나 그 반대로 변환하는 방법을 설명합니다:

normalized superellipse half cornersuperellipse parameter s로 구하려면, s에 따라 다음 조건문 중 첫 번째로 일치하는 것을 반환:
-∞

0을 반환

1을 반환

기타
  1. k0.5abs(s)로 둡니다.

  2. convexHalfCorner0.5k로 둡니다.

  3. s가 0보다 작으면 1 - convexHalfCorner를 반환합니다.

  4. convexHalfCorner를 반환합니다.

normalized inner corner hullsuperellipse parameter curvature로 구하려면:
  1. curvature가 0 이상이면 « (1, 1), (1, 0), (0, 1) » 좌표로 삼각형을 반환합니다.

  2. axisLineA(1, 0)(1, 1)을 잇는 선분으로 둡니다.

  3. axisLineB(0, 1)(1, 1)을 잇는 선분으로 둡니다.

  4. normalizedHalfCornernormalized superellipse half cornercurvature를 인자로 구합니다.

  5. halfCornerPoint(normalizedHalfCorner, 1 - normalizedHalfCorner)로 둡니다.

  6. lineFromCenterToHalfCorner(0, 0)halfCornerPoint를 잇는 선분으로 둡니다.

  7. tangentLinehalfCornerPoint에서 lineFromCenterToHalfCorner에 수직인 선분으로 둡니다.

  8. intersectionAaxisLineAtangentLine의 교점으로 둡니다.

  9. intersectionBaxisLineBtangentLine의 교점으로 둡니다.

  10. « (1, 1), (1, 0), intersectionA, intersectionB, (0, 1), (1, 1) » 좌표로 오각형을 반환합니다.

superellipse parameter s를 0과 1 사이의 보간 값으로 변환하려면, normalized superellipse half corner에서 s를 사용해 구한 값을 반환합니다.

<number [0,1]> interpolationValuesuperellipse parameter로 변환하려면, interpolationValue에 따라:
0

-∞를 반환

0.5

0을 반환

1

∞를 반환

기타
  1. convexHalfCornerinterpolationValue로 둡니다.

  2. interpolationValue가 0.5보다 작으면 convexHalfCorner를 1 - interpolationValue로 설정합니다.

  3. kln(0.5) / ln(convexHalfCorner)로 둡니다.

  4. slog2(k)로 둡니다.

  5. interpolationValue가 0.5보다 작으면 -s를 반환합니다.

  6. s를 반환합니다.

3.4. 모서리 모양 축약형: corners 속성

이 속성의 정확한 이름과 문법을 결정해야 합니다. [Issue #11623]

4. 부분 테두리

구현 준비되지 않음

이 섹션은 아직 구현 준비가 되지 않았습니다. 아이디어를 기록하고 논의를 촉진하기 위해 존재합니다.

이 섹션의 어떤 것도 구현을 시도하기 전에, 반드시 CSSWG(www-style@w3.org)로 연락 바랍니다.

CSS 테두리는 전통적으로 전체 테두리 라인을 그리지만, 경우에 따라 테두리의 일부만 숨기는 것이 유용할 수 있습니다.

이를 위한 두 가지 제안이 있습니다: 두 번째는 GCPM에서, 첫 번째는 더 읽기 쉽게 재구성하려는 시도입니다. 명칭이 좋지 않은 것은 인지된 문제이며, 제안 환영합니다. 클리핑 개념으로 생각할 때 문제가 있습니다: 점선 테두리라면 점 전체가 항상 보여야 하며, 점 일부만 나타나면 안 됩니다. 따라서 클리핑이 아니라 드로잉 제한이어야 합니다.

4.1. 부분 테두리: border-limit 속성

이름: border-limit
값: all | [ sides | corners ] <length-percentage [0,∞]>? | [ top | right | bottom | left ] <length-percentage [0,∞]>
초기값: all
적용 대상: 모든 요소(단, border-collapsecollapse인 table 요소는 제외)
상속: 아니오
퍼센트값: border-box 기준
계산된 값: 명시된 대로
정식 순서: 문법에 따름
애니메이션 유형: 불연속(discrete)

기본적으로 전체 테두리가 그려집니다. 하지만 테두리 렌더링을 일부만 제한할 수도 있습니다. 키워드는 어느 부분을 제한할지, 길이나 백분율은 어느 정도까지 제한할지를 지정합니다.

all
전체 테두리가 그려집니다.
sides
각 면의 중앙에서부터 지정된 길이(또는 백분율)만큼만 표시되고, 코너(테두리 반지름으로 정의)는 포함하지 않습니다. 예를 들어 50%는 중앙 50%만 그립니다. 기본값은 전체 면을 그립니다.
corners
모서리와(필요시) 면의 일부만 그립니다. 길이는 모서리 영역 가장자리부터, 백분율은 border box의 절대 모서리부터 측정됩니다.
left
right
좌/우(수직) 면은 전체 면과 코너를 그립니다. 상/하(수평) 면은 좌/우 부분만(지정된 대로) 그립니다. 거리는 corners와 동일하게 측정합니다.
top
bottom
상/하(수평) 면은 전체 면과 코너를 그립니다. 좌/우(수직) 면은 상/하 부분만(지정된 대로) 그립니다. 거리는 corners와 동일하게 측정합니다.

다음 예시는 면의 중앙 50%만 그립니다.

div {
  border: solid;
  border-limit: sides 50%;
}

다음 예시는 곡선 모서리 부분만 그립니다.

div {
  border: solid;
  border-radius: 1em 2em;
  border-limit: corners;
}

다음 예시는 위쪽 테두리의 왼쪽 4em만 그립니다.

div {
  border-top: solid;
  border-limit: left 4em;
}

다음 예시는 각 모서리의 처음 10px만 그립니다:

div {
  border: solid;
  border-limit: corners 10px;
}

다음 예시는 모서리 곡선 부분과 면을 따라 5px만큼만 그립니다:

div {
  border: solid;
  border-radius: 5px;
  border-limit: corners 5px;
}

다음 예시는 모서리 곡선 부분과 면의 가운데 40%를 제외한 나머지를 그립니다.

div {
  border: solid;
  border-radius: 5px;
  border-limit: corners 30%;
}

4.2. border-clip 속성

이름: border-clip, border-clip-top, border-clip-right, border-clip-bottom, border-clip-left
값: normal | [ <length-percentage [0,∞]> | <flex> ]+
초기값: normal
적용 대상: 모든 요소
상속: 아니오
퍼센트값: border-edge 면의 길이 기준
계산된 값: normal 또는 명시된 대로 절대 길이/백분율의 목록
정식 순서: 문법에 따름
애니메이션 유형: 계산된 값 기준

이 속성들은 해당 테두리를 border edge를 따라 여러 부분으로 나눕니다. 첫 번째 구간은 표시되고, 두 번째는 숨겨지며, 세 번째는 표시되고, ... 이런 식으로 반복합니다. 각 부분은 길이, 백분율, 또는 fr 단위(즉, [CSS3GRID] 참고)로 지정할 수 있습니다. normal 값은 분할하지 않고 일반적으로 테두리를 표시합니다.

border-clip은 네 개의 개별 속성의 축약형입니다.

지정된 부분이 테두리보다 짧으면, 남은 테두리는 지정된 flexible 길이 비율로 나뉩니다. flexible 길이가 없다면 마지막에 1fr이 추가된 것처럼 동작합니다.

지정된 부분이 테두리보다 길면, 지정된 부분이 다 그려진 뒤 남은 테두리는 그려지지 않습니다. 이 경우 flexible 길이는 0이 됩니다.

수평 테두리는 왼쪽에서 오른쪽, 수직 테두리는 위에서 아래로 부분을 나열합니다.

정확한 border 부분은 지정된 border 부분을 flexible 길이 0으로 두고 레이아웃한 뒤, 남은 부분을 flexible 길이 비율로 나누어 결정합니다.

border-clip: 10px 1fr 10px;
border-clip-top: 10px 1fr 10px;
border-clip-bottom: 10px 1fr 10px;
border-clip-right: 5px 1fr 5px;
border-clip-left: 5px 1fr 5px;

첫 번째 부분의 길이를 0으로 하면, 이전 예시의 반대 border도 쉽게 만들 수 있습니다:

border-clip-top: 0 10px 1fr 10px;
border-clip-bottom: 0 10px 1fr 10px;
border-clip-right: 0 5px 1fr 5px;
border-clip-left: 0 5px 1fr 5px;
border: thin solid black;
border-clip: 0 1fr; /* 테두리 숨김 */
border-clip-top: 10px 1fr 10px; /* 특정 테두리만 보이게 */
border-clip-bottom: 10px 1fr 10px;
border-top: thin solid black;
border-bottom: thin solid black;
border-clip-top: 10px;
border-clip-bottom: 10px;
border-top: thin solid black;
border-clip: 10px;

이 렌더링:

A sentence consists of words¹.
¹ Most often.
다음 스타일 시트로 구현할 수 있습니다:
@footnote {
  border-top: thin solid black;
  border-clip: 4em;
}
border: 4px solid black;
border-clip-top: 40px 20px 0 1fr 20px 20px 0 1fr 40px;

이 예시에서는 위쪽 테두리 양 끝에 40px 길이의 테두리 부분이 보입니다. 40px 부분 안에는 최소 20px의 보이지 않는 부분이 들어갑니다. 이 보이지 않는 부분 안에는 20px씩 보이는 테두리 부분이 있고 그 사이에 20px씩 보이지 않는 부분이 있습니다.

예시에서는 빨간색으로 테두리 조각이 표시되지만, 실제 UA에서는 보이지 않아야 합니다.

border: 4px solid black;
border-clip-top: 3fr 10px 2fr 10px 1fr 10px 10px 10px 1fr 10px 2fr 10px 3fr;

이 예시에서는 보이는 테두리 부분 중 하나를 제외하고 모두 flexible 길이로 지정되었습니다. 요소의 너비가 달라지면 이 테두리 부분의 길이도 달라집니다. 아래는 1fr이 10px이 되는 렌더링 예시입니다:

아래는 1fr이 30px이 되는 또 다른 렌더링 예시입니다:

예시에서는 빨간색으로 테두리 조각이 표시되지만, 실제 UA에서는 검은색이어야 합니다.

5. 그림자 효과

5.1. 그림자 색상: box-shadow-color 속성

이름: box-shadow-color
값: <color>#
초기값: currentcolor
적용 대상: 모든 요소
상속: 아니오
퍼센트값: N/A
계산된 값: 리스트, 각 항목은 계산된 색상
정식 순서: 문법에 따름
애니메이션 유형: 계산된 값 기준

box-shadow-color 속성은 하나 이상의 그림자 색상을 정의합니다. 속성 값은 쉼표로 구분된 그림자 색상 목록을 허용합니다.

“계층, 레이아웃 및 기타 세부사항” 섹션을 참고하여, box-shadow-color가 쉼표로 구분된 다른 그림자 속성과 어떻게 상호작용하여 각 그림자 계층을 만드는지 확인할 수 있습니다.

5.2. 그림자 오프셋: box-shadow-offset 속성

이름: box-shadow-offset
값: [ none | <length>{2} ]#
초기값: none
적용 대상: 모든 요소
상속: 아니오
퍼센트값: N/A
계산된 값: 리스트, 각 항목은 none 또는 요소 박스 기준의 오프셋 쌍(수평, 수직)
정식 순서: 문법에 따름
애니메이션 유형: 계산된 값 기준, none을 non-none과 보간할 때는 0 0으로 처리

box-shadow-offset 속성은 하나 이상의 그림자 오프셋을 정의합니다. 속성 값은 쉼표로 구분된 리스트를 허용합니다. 각 항목은 none 값(즉, 그림자 없음) 또는 수평 및 수직 오프셋 쌍(<length>)으로 지정할 수 있습니다.

none
그림자가 렌더링되지 않습니다. 이 그림자에 대응하는 다른 box-shadow 속성 값은 무시됩니다.
1st <length>
그림자의 수평 오프셋을 지정합니다. 양수는 박스 오른쪽, 음수는 왼쪽으로 그림자를 그립니다.
2nd <length>
그림자의 수직 오프셋을 지정합니다. 양수는 아래쪽, 음수는 위쪽으로 그림자를 오프셋합니다.

“계층, 레이아웃 및 기타 세부사항” 섹션을 참고하여, box-shadow-offset가 쉼표로 구분된 다른 그림자 속성과 어떻게 상호작용하여 각 그림자 계층을 만드는지 확인할 수 있습니다.

5.3. 그림자 흐림 효과: box-shadow-blur 속성

이름: box-shadow-blur
값: <length [0,∞]>#
초기값: 0
적용 대상: 모든 요소
상속: 아니오
퍼센트값: N/A
계산된 값: 리스트, 각 항목은 <length>
정식 순서: 문법에 따름
애니메이션 유형: 계산된 값 기준

box-shadow-blur 속성은 하나 이상의 그림자 흐림 반지름을 정의합니다. 속성 값은 쉼표로 구분된 <length> 값 목록입니다.

음수 값은 허용되지 않습니다. 흐림 값이 0이면 그림자 가장자리가 날카롭습니다. 값이 클수록 그림자 가장자리가 더 흐릿해집니다. 아래 Shadow Blurring 참고.

“계층, 레이아웃 및 기타 세부사항” 섹션을 참고하여, box-shadow-blur가 쉼표로 구분된 다른 그림자 속성과 어떻게 상호작용하여 각 그림자 계층을 만드는지 확인할 수 있습니다.

5.4. 그림자 확장: box-shadow-spread 속성

이름: box-shadow-spread
값: <length>#
초기값: 0
적용 대상: 모든 요소
상속: 아니오
퍼센트값: N/A
계산된 값: 리스트, 각 항목은 <length>
정식 순서: 문법에 따름
애니메이션 유형: 계산된 값 기준

box-shadow-spread 속성은 하나 이상의 그림자 확장 거리를 정의합니다. 속성 값은 쉼표로 구분된 <length> 값 목록입니다.

양수 값은 그림자를 모든 방향으로 지정한 반지름만큼 확장합니다. 음수 값은 그림자를 축소합니다. 아래 Shadow Shape 참고.

내부 그림자의 경우, 그림자 영역이 확장(즉, 더 많은 그림자 면적 생성)되면 그림자 외곽 모양은 오히려 축소됩니다.

“계층, 레이아웃 및 기타 세부사항” 섹션을 참고하여, box-shadow-spread가 쉼표로 구분된 다른 그림자 속성과 어떻게 상호작용하여 각 그림자 계층을 만드는지 확인할 수 있습니다.

5.5. 그림자 위치: box-shadow-position 속성

이름: box-shadow-position
값: [ outset | inset ]#
초기값: outset
적용 대상: 모든 요소
상속: 아니오
퍼센트값: N/A
계산된 값: 리스트, 각 항목은 키워드 중 하나
정식 순서: 문법에 따름
애니메이션 유형: 계산된 값 기준

box-shadow-position 속성은 하나 이상의 그림자 위치를 정의합니다. 속성 값은 쉼표로 구분된 outsetinset 키워드 목록을 허용합니다.

outset
그림자를 외부 box-shadow로 만듭니다. 즉, 요소가 캔버스 위로 떠 있는 것처럼 상자를 캔버스에 그림자로 투영합니다.
inset
그림자를 내부 box-shadow로 만듭니다. 즉, 박스가 캔버스에서 오려져 뒤로 밀린 것처럼, 캔버스가 박스에 그림자로 투영됩니다.

“계층, 레이아웃 및 기타 세부사항” 섹션을 참고하여, box-shadow-position이 쉼표로 구분된 다른 그림자 속성과 어떻게 상호작용하여 각 그림자 계층을 만드는지 확인할 수 있습니다.

5.6. 그림자 축약형: box-shadow 속성

이름: box-shadow
값: <spread-shadow>#
초기값: none
적용 대상: 모든 요소
상속: 아니오
퍼센트값: N/A
계산된 값: 개별 속성 참조
정식 순서: 문법에 따름
애니메이션 유형: 개별 속성 참조

box-shadow 속성은 박스에 하나 이상의 그림자 효과를 부착합니다. 속성 값은 앞에서부터 뒤로(Front to Back) 쌓이는 그림자들의 쉼표로 구분된 리스트입니다.

각 그림자는 <spread-shadow>로 지정되며, box-shadow-offset와, box-shadow-blur, box-shadow-spread, box-shadow-color, box-shadow-position의 선택적 값을 포함합니다. 길이가 생략되면 0으로 간주되고, 색상이 생략되면 offset이 none일 때 transparent로, 그 외에는 currentcolor로 처리됩니다.

<spread-shadow> = <'box-shadow-color'>? && [ <'box-shadow-offset'> [ <'box-shadow-blur'> <'box-shadow-spread'>? ]? ] && <'box-shadow-position'>?

5.7. 계층화, 레이아웃 및 기타 세부 사항

그림자 효과는 box-shadow-* 속성으로 구성된 coordinated value list에서 선언되며, coordinating list property group을 형성합니다. 이때 box-shadow-offsetcoordinating list base property입니다. CSS Values 4 § A Coordinating List-Valued Properties 참고.

그림자 효과는 앞에서부터 뒤로(front-to-back) 적용됩니다: 첫 번째 그림자가 맨 위에, 다른 그림자들은 그 아래에 쌓입니다. 그림자는 레이아웃에 영향을 주지 않으며, 다른 박스나 텍스트 또는 그 그림자와 겹칠 수도 있습니다. 쌓임 맥락(stacking context) 및 페인팅 순서상, 요소의 외부 box-shadow는 그 요소의 배경 바로 아래에 그려지며, 내부 그림자는 배경 바로 위(테두리 및 border-image 아래)에서 그려집니다.

별다른 명시가 없다면, 그림자 효과는 주요 박스(principal box)에만 적용됩니다. 영향받는 박스에 여러 조각(fragment)이 있으면, box-decoration-break 명세에 따라 그림자가 적용됩니다.

그림자는 스크롤을 유발하거나 스크롤 영역을 늘리지 않습니다.

외부 그림자는 collapsing border model에서 내부 테이블 요소에 영향을 주지 않습니다. 하나의 border edge에 대해 여러 테두리 두께가 있는 collapsing border model(예: 특정 행만 테두리가 두꺼운 테이블, 또는 인접 셀의 테두리 두께가 다른 rowspanning 셀)에 그림자가 정의된 경우, 그림자의 정확한 위치·렌더링은 정의되어 있지 않습니다.

6. 테두리 모양

corner-shapeborder-radius가 테두리 스타일링의 표현력을 제공하긴 하지만, 여전히 테두리가 사각형이라는 전제에 기반합니다.

border-shape 함수는 작성자가 임의의 기본 도형을 사용하여 테두리 경로를 지정할 수 있게 하여 이 기능을 확장합니다.

6.1. border-shape 속성

이름: border-shape
값: none | [ <basic-shape> <geometry-box>?]{1,2}
초기값: none
적용 대상: 모든 요소
상속: 아니오
퍼센트값: 지정된 <geometry-box> 기준, 없으면 border box 기준
계산된 값: 리스트, 각 항목은 계산된 색상
정식 순서: 문법에 따름
애니메이션 유형: 계산된 값 기준

border-shape 속성은 단일 <basic-shape> 또는 두 개의 <basic-shape> 값을 받을 수 있으며, 각각 하나 또는 두 개의 경로(path)를 생성합니다. 단일 경로 border-shape는 기존 border 속성으로 그 경로를 따라 테두리를 그리며, 두 경로 border-shape는 두 경로 사이의 영역을 테두리처럼 채웁니다.

border-shape 속성은 border-radiuscorner-shape와 호환되지 않습니다. 요소의 computed valueborder-shapenone이 아니면, border-radius는 0으로 간주되어 무시되고, corner-shape도 마찬가지로 무시됩니다(이는 border-radius와 함께 동작할 때만 사용 가능하기 때문입니다).

box-shadow는 내부/외부 테두리 경로 모두를 따릅니다.

border-shape는 도형이나 레이아웃에는 영향을 주지 않으며, 기존 border-width 속성으로 계산됩니다.

border-shape는 박스 내부의 콘텐츠 흐름에는 영향을 주지 않습니다. 참고: 작성자는 border-shapeshape-inside를 함께 사용하여 박스를 장식하면서 동시에 텍스트 흐름을 제어할 수 있습니다.

내부 border-shape는 요소의 overflow 콘텐츠를 border-radius와 동일한 방식으로 자릅니다. 자세한 내용은 corner clipping을 참고하세요.

대체(replaced) 요소 클리핑에 어떤 영향을 줘야 하는지?

채우기/선 색상 및 선 두께는 각각 border-colorborder-width 속성에서 가져옵니다.

자세한 정의가 필요합니다. 덮어쓸 수 있게 해야 할까요?

border-style은 임의의 도형에 대해서는 어떻게 동작해야 할까요? 완전히 동작할 수 없음.

개인정보 고려사항

이 명세에 대해 새로운 개인정보 관련 고려사항은 보고되지 않았습니다.

보안 고려사항

이 명세에 대해 새로운 보안 관련 고려사항은 보고되지 않았습니다.

변경사항

[CSS3BG] 이후 추가사항

감사의 글

이 모듈의 선행 명세인 [CSS1], [CSS21], 및 [CSS3BG]의 많은 기여자들 외에도, 편집자들은 이 Level 4를 위해 특별히 제안과 피드백을 주신 Tab Atkins, Noam Rosenthal, Håkon Wium Lie, 그리고 Oriol Brufau에게 감사를 표합니다.

적합성

문서 규약

적합성 요구사항은 설명적 단언과 RFC 2119 용어의 조합으로 표현됩니다. 규범적 부분에서 사용되는 “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, “OPTIONAL” 등의 키워드는 RFC 2119에 따라 해석되어야 합니다. 다만 가독성을 위해 본 명세에서는 이러한 단어들을 모두 대문자로 표기하지 않을 수 있습니다.

이 명세의 모든 텍스트는, 명시적으로 비규범적이라 표기된 섹션, 예시 및 주석을 제외하고는 규범적입니다. [RFC2119]

이 명세의 예시는 “for example”이라는 표현으로 소개되거나, class="example"로 규범 텍스트와 구분됩니다. 예:

이것은 정보 제공용 예시입니다.

정보성 주석은 “Note”로 시작하며 class="note"로 구분되어 다음과 같이 표시됩니다:

참고: 이것은 정보 제공용 주석입니다.

권고(advisement)는 규범적 섹션 중 특별히 주의를 환기시키기 위해 스타일링된 것으로 <strong class="advisement">로 구분됩니다. 예: UA는 접근 가능한 대체 수단을 반드시 제공해야 합니다.

적합성 클래스

이 명세에 대한 적합성은 세 가지 클래스(Conformance classes)로 정의됩니다:

스타일시트
CSS 스타일시트(관련 정의).
렌더러
스타일시트의 의미를 해석하고 해당 스타일시트를 사용하는 문서를 렌더링하는 UA(관련 정의).
작성 도구
스타일시트를 작성하는 UA(관련 정의).

스타일시트가 이 명세에 적합하려면, 본 모듈에서 정의된 문법을 사용하는 모든 선언이 일반 CSS 문법 및 각 기능의 개별 문법에 따라 유효해야 합니다.

렌더러가 이 명세에 적합하려면, 스타일시트를 적절한 명세에 따라 해석할 뿐만 아니라, 본 명세에서 정의한 모든 기능을 올바르게 파싱하고 문서를 그에 맞게 렌더링해야 합니다. 다만 디바이스의 한계로 인해 UA가 문서를 완벽히 렌더링하지 못하는 경우에는 비적합으로 간주되지 않습니다(예: 단색 모니터에서 색상 렌더링이 불가능한 경우).

작성 도구가 이 명세에 적합하려면, 일반 CSS 문법 및 본 모듈의 각 기능에 대한 개별 문법에 따라 문법적으로 올바른 스타일시트를 생성하고, 이 모듈에서 요구하는 스타일시트 적합성 요구사항을 충족해야 합니다.

부분 구현

작성자가 앞으로의 호환 가능한 파싱 규칙을 활용해 폴백 값을 지정할 수 있도록, CSS 렌더러는 지원하지 않는 @규칙, 속성, 속성값, 키워드 및 기타 문법 구조를 적절히 무효로 처리(무시)해야 합니다. 특히 사용자 에이전트는 지원하지 않는 구성요소 값을 선택적으로 무시하고 같은 선언 내에서 지원되는 값만 적용하는 것을 해서는 안 됩니다: 어떤 값이 무효(지원되지 않아야 하는 경우 포함)로 간주되면, CSS는 전체 선언을 무시하도록 요구합니다.

불안정 및 독점 기능의 구현

향후 안정적인 CSS 기능과의 충돌을 피하기 위해, CSSWG는 베스트 프랙티스를 준수하여 불안정한 기능 및 독점 확장을 구현할 것을 권장합니다.

비실험적 구현

명세가 후보 권고(Candidate Recommendation) 단계에 도달하면 비실험적 구현이 가능하며, 구현자는 명세에 맞게 올바르게 구현된 CR 수준의 기능에 대해 접두어 없는 구현을 배포해야 합니다.

CSS의 상호운용성을 확립하고 유지하기 위해 CSS 워킹그룹은 비실험적 CSS 렌더러가 접두어 없는 구현을 배포하기 전에 구현 보고서(및 필요 시 해당 구현에 사용된 테스트케이스)를 W3C에 제출할 것을 요청합니다. W3C에 제출된 테스트케이스는 CSS 워킹그룹의 검토 및 수정 대상이 됩니다.

테스트케이스 및 구현 보고서 제출에 대한 추가 정보는 CSS 워킹그룹 웹사이트 https://www.w3.org/Style/CSS/Test/에서 확인하시고, 문의는 public-css-testsuite@w3.org 메일링리스트로 해주시기 바랍니다.

색인

이 명세에서 정의된 용어

참조 명세에서 정의된 용어

참고 문헌

규범 참조

[CSS-BOX-4]
Elika Etemad. CSS Box Model Module Level 4. 2024년 8월 4일. WD. URL: https://www.w3.org/TR/css-box-4/
[CSS-BREAK-4]
Rossen Atanassov; Elika Etemad. CSS Fragmentation Module Level 4. 2018년 12월 18일. FPWD. URL: https://www.w3.org/TR/css-break-4/
[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS Cascading and Inheritance Level 5. 2022년 1월 13일. CR. URL: https://www.w3.org/TR/css-cascade-5/
[CSS-COLOR-4]
Chris Lilley; Tab Atkins Jr.; Lea Verou. CSS Color Module Level 4. 2025년 4월 24일. CRD. URL: https://www.w3.org/TR/css-color-4/
[CSS-COLOR-5]
Chris Lilley; et al. CSS Color Module Level 5. 2025년 3월 18일. WD. URL: https://www.w3.org/TR/css-color-5/
[CSS-DISPLAY-4]
Elika Etemad; Tab Atkins Jr.. CSS Display Module Level 4. 2024년 12월 19일. FPWD. URL: https://www.w3.org/TR/css-display-4/
[CSS-GRID-2]
Tab Atkins Jr.; et al. CSS Grid Layout Module Level 2. 2025년 3월 26일. CRD. URL: https://www.w3.org/TR/css-grid-2/
[CSS-IMAGES-4]
Tab Atkins Jr.; Elika Etemad; Lea Verou. CSS Images Module Level 4. 2023년 2월 17일. WD. URL: https://www.w3.org/TR/css-images-4/
[CSS-MASKING-1]
Dirk Schulze; Brian Birtles; Tab Atkins Jr.. CSS Masking Module Level 1. 2021년 8월 5일. CRD. URL: https://www.w3.org/TR/css-masking-1/
[CSS-OVERFLOW-3]
Elika Etemad; Florian Rivoal. CSS Overflow Module Level 3. 2023년 3월 29일. WD. URL: https://www.w3.org/TR/css-overflow-3/
[CSS-OVERFLOW-4]
David Baron; Florian Rivoal; Elika Etemad. CSS Overflow Module Level 4. 2023년 3월 21일. WD. URL: https://www.w3.org/TR/css-overflow-4/
[CSS-RUBY-1]
Elika Etemad; et al. CSS Ruby Annotation Layout Module Level 1. 2022년 12월 31일. WD. URL: https://www.w3.org/TR/css-ruby-1/
[CSS-SHAPES-1]
Alan Stearns; Rossen Atanassov; Noam Rosenthal. CSS Shapes Module Level 1. 2025년 6월 12일. CRD. URL: https://www.w3.org/TR/css-shapes-1/
[CSS-SHAPES-2]
CSS Shapes Module Level 2. 편집자 초안. URL: https://drafts.csswg.org/css-shapes-2/
[CSS-TEXT-4]
Elika Etemad; et al. CSS Text Module Level 4. 2024년 5월 29일. WD. URL: https://www.w3.org/TR/css-text-4/
[CSS-TRANSFORMS-1]
Simon Fraser; et al. CSS Transforms Module Level 1. 2019년 2월 14일. CR. URL: https://www.w3.org/TR/css-transforms-1/
[CSS-UI-4]
Florian Rivoal. CSS Basic User Interface Module Level 4. 2021년 3월 16일. WD. URL: https://www.w3.org/TR/css-ui-4/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. 2024년 3월 12일. WD. URL: https://www.w3.org/TR/css-values-4/
[CSS-WRITING-MODES-3]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 3. 2019년 12월 10일. REC. URL: https://www.w3.org/TR/css-writing-modes-3/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 4. 2019년 7월 30일. CR. URL: https://www.w3.org/TR/css-writing-modes-4/
[CSS21]
Bert Bos; et al. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 2011년 6월 7일. REC. URL: https://www.w3.org/TR/CSS2/
[CSS3BG]
Elika Etemad; Brad Kemper. CSS Backgrounds and Borders Module Level 3. 2024년 3월 11일. CRD. URL: https://www.w3.org/TR/css-backgrounds-3/
[DOM]
Anne van Kesteren. DOM Standard. Living Standard. URL: https://dom.spec.whatwg.org/
[GEOMETRY-1]
Simon Pieters; Chris Harrelson. Geometry Interfaces Module Level 1. 2018년 12월 4일. CR. URL: https://www.w3.org/TR/geometry-1/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. 1997년 3월. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[SVG2]
Amelia Bellamy-Royds; et al. Scalable Vector Graphics (SVG) 2. 2018년 10월 4일. CR. URL: https://www.w3.org/TR/SVG2/

정보성 참조

[CSS-LOGICAL-1]
Rossen Atanassov; Elika Etemad. CSS Logical Properties and Values Level 1. 2018년 8월 27일. WD. URL: https://www.w3.org/TR/css-logical-1/
[CSS1]
Håkon Wium Lie; Bert Bos. Cascading Style Sheets, level 1. 2018년 9월 13일. REC. URL: https://www.w3.org/TR/CSS1/
[CSS3GRID]
Tab Atkins Jr.; et al. CSS Grid Layout Module Level 1. 2025년 3월 26일. CRD. URL: https://www.w3.org/TR/css-grid-1/

속성 색인

이름 초기값 적용 대상 상속 퍼센트 애니메이션 유형 정식 순서 계산된 값 논리 속성 그룹
border-block <'border-block-start'> 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 문법에 따름 개별 속성 참조
border-block-color <'border-top-color'>{1,2} 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 문법에 따름 개별 속성 참조
border-block-end <line-width> || <line-style> || <color> 개별 속성 참조 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 개별 속성 참조 문법에 따름 개별 속성 참조
border-block-end-color <color> | <image-1D> currentcolor 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 본문 참조 문법에 따름 계산된 색상 및/또는 1차원 이미지 함수 border-color
border-block-end-radius <length-percentage [0,∞]>{1,2} [ / <length-percentage [0,∞]>{1,2} ]? 0 모든 요소(본문 참조) 아니오 border box의 해당 치수 참조 개별 속성 참조 문법에 따름 개별 속성 참조
border-block-end-style <line-style> none 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 불연속 문법에 따름 지정된 키워드 border-style
border-block-end-width <line-width> medium 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 계산된 값 기준 문법에 따름 절대 길이, border width로 스냅; border-style이 none 또는 hidden이면 0 border-width
border-block-start <line-width> || <line-style> || <color> 개별 속성 참조 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 개별 속성 참조 문법에 따름 개별 속성 참조
border-block-start-color <color> | <image-1D> currentcolor 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 본문 참조 문법에 따름 계산된 색상 및/또는 1차원 이미지 함수 border-color
border-block-start-radius <length-percentage [0,∞]>{1,2} [ / <length-percentage [0,∞]>{1,2} ]? 0 모든 요소(본문 참조) 아니오 border box의 해당 치수 참조 개별 속성 참조 문법에 따름 개별 속성 참조
border-block-start-style <line-style> none 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 불연속 문법에 따름 지정된 키워드 border-style
border-block-start-width <line-width> medium 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 계산된 값 기준 문법에 따름 절대 길이, border width로 스냅; border-style이 none 또는 hidden이면 0 border-width
border-block-style <'border-top-style'>{1,2} 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 문법에 따름 개별 속성 참조
border-block-width <'border-top-width'>{1,2} 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 문법에 따름 개별 속성 참조
border-bottom <line-width> || <line-style> || <color> 개별 속성 참조 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 개별 속성 참조 문법에 따름 개별 속성 참조
border-bottom-color <color> | <image-1D> currentcolor 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 본문 참조 문법에 따름 계산된 색상 및/또는 1차원 이미지 함수 border-color
border-bottom-left-radius <length-percentage [0,∞]>{1,2} 0 모든 요소(본문 참조) 아니오 border box의 해당 치수 참조 계산된 값 기준 문법에 따름 계산된 <length-percentage> 값의 쌍 border-radius
border-bottom-radius <length-percentage [0,∞]>{1,2} [ / <length-percentage [0,∞]>{1,2} ]? 0 모든 요소(본문 참조) 아니오 border box의 해당 치수 참조 개별 속성 참조 문법에 따름 개별 속성 참조
border-bottom-right-radius <length-percentage [0,∞]>{1,2} 0 모든 요소(본문 참조) 아니오 border box의 해당 치수 참조 계산된 값 기준 문법에 따름 계산된 <length-percentage> 값의 쌍 border-radius
border-bottom-style <line-style> none 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 불연속 문법에 따름 지정된 키워드 border-style
border-bottom-width <line-width> medium 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 계산된 값 기준 문법에 따름 절대 길이, border width로 스냅; border-style이 none 또는 hidden이면 0 border-width
border-clip normal | [ <length-percentage [0,∞]> | <flex> ]+ normal 모든 요소 아니오 border-edge 면의 길이 기준 계산된 값 기준 문법에 따름 normal 또는 절대 길이/백분율 목록
border-clip-bottom normal | [ <length-percentage [0,∞]> | <flex> ]+ normal 모든 요소 아니오 border-edge 면의 길이 기준 계산된 값 기준 문법에 따름 normal 또는 절대 길이/백분율 목록
border-clip-left normal | [ <length-percentage [0,∞]> | <flex> ]+ normal 모든 요소 아니오 border-edge 면의 길이 기준 계산된 값 기준 문법에 따름 normal 또는 절대 길이/백분율 목록
border-clip-right normal | [ <length-percentage [0,∞]> | <flex> ]+ normal 모든 요소 아니오 border-edge 면의 길이 기준 계산된 값 기준 문법에 따름 normal 또는 절대 길이/백분율 목록
border-clip-top normal | [ <length-percentage [0,∞]> | <flex> ]+ normal 모든 요소 아니오 border-edge 면의 길이 기준 계산된 값 기준 문법에 따름 normal 또는 절대 길이/백분율 목록
border-color [ <color> | <image-1D> ]{1,4} 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 문법에 따름 개별 속성 참조
border-end-end-radius <length-percentage [0,∞]>{1,2} 0 모든 요소(본문 참조) 아니오 border box의 해당 치수 참조 계산된 값 기준 문법에 따름 계산된 <length-percentage> 값의 쌍 border-radius
border-end-start-radius <length-percentage [0,∞]>{1,2} 0 모든 요소(본문 참조) 아니오 border box의 해당 치수 참조 계산된 값 기준 문법에 따름 계산된 <length-percentage> 값의 쌍 border-radius
border-inline <'border-block-start'> 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 문법에 따름 개별 속성 참조
border-inline-color <'border-top-color'>{1,2} 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 문법에 따름 개별 속성 참조
border-inline-end <line-width> || <line-style> || <color> 개별 속성 참조 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 개별 속성 참조 문법에 따름 개별 속성 참조
border-inline-end-color <color> | <image-1D> currentcolor 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 본문 참조 문법에 따름 계산된 색상 및/또는 1차원 이미지 함수 border-color
border-inline-end-radius <length-percentage [0,∞]>{1,2} [ / <length-percentage [0,∞]>{1,2} ]? 0 모든 요소(본문 참조) 아니오 border box의 해당 치수 참조 개별 속성 참조 문법에 따름 개별 속성 참조
border-inline-end-style <line-style> none 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 불연속 문법에 따름 지정된 키워드 border-style
border-inline-end-width <line-width> medium 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 계산된 값 기준 문법에 따름 절대 길이, border width로 스냅; border-style이 none 또는 hidden이면 0 border-width
border-inline-start <line-width> || <line-style> || <color> 개별 속성 참조 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 개별 속성 참조 문법에 따름 개별 속성 참조
border-inline-start-color <color> | <image-1D> currentcolor 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 본문 참조 문법에 따름 계산된 색상 및/또는 1차원 이미지 함수 border-color
border-inline-start-radius <length-percentage [0,∞]>{1,2} [ / <length-percentage [0,∞]>{1,2} ]? 0 모든 요소(본문 참조) 아니오 border box의 해당 치수 참조 개별 속성 참조 문법에 따름 개별 속성 참조
border-inline-start-style <line-style> none 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 불연속 문법에 따름 지정된 키워드 border-style
border-inline-start-width <line-width> medium 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 계산된 값 기준 문법에 따름 절대 길이, border width로 스냅; border-style이 none 또는 hidden이면 0 border-width
border-inline-style <'border-top-style'>{1,2} 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 문법에 따름 개별 속성 참조
border-inline-width <'border-top-width'>{1,2} 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 문법에 따름 개별 속성 참조
border-left <line-width> || <line-style> || <color> 개별 속성 참조 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 개별 속성 참조 문법에 따름 개별 속성 참조
border-left-color <color> | <image-1D> currentcolor 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 본문 참조 문법에 따름 계산된 색상 및/또는 1차원 이미지 함수 border-color
border-left-radius <length-percentage [0,∞]>{1,2} [ / <length-percentage [0,∞]>{1,2} ]? 0 모든 요소(본문 참조) 아니오 border box의 해당 치수 참조 개별 속성 참조 문법에 따름 개별 속성 참조
border-left-style <line-style> none 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 불연속 문법에 따름 지정된 키워드 border-style
border-left-width <line-width> medium 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 계산된 값 기준 문법에 따름 절대 길이, border width로 스냅; border-style이 none 또는 hidden이면 0 border-width
border-limit all | [ sides | corners ] <length-percentage [0,∞]>? | [ top | right | bottom | left ] <length-percentage [0,∞]> all 모든 요소, 단 table 요소에서 border-collapse가 collapse인 경우 제외 아니오 border-box 기준 불연속 문법에 따름 명시한 대로
border-radius <length-percentage [0,∞]>{1,4} [ / <length-percentage [0,∞]>{1,4} ]? 0 모든 요소, 단 table 요소에서 border-collapse가 collapse인 경우 제외 아니오 해당 없음 개별 속성 참조 문법에 따름 명시한 대로
border-right <line-width> || <line-style> || <color> 개별 속성 참조 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 개별 속성 참조 문법에 따름 개별 속성 참조
border-right-color <color> | <image-1D> currentcolor 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 본문 참조 문법에 따름 계산된 색상 및/또는 1차원 이미지 함수 border-color
border-right-radius <length-percentage [0,∞]>{1,2} [ / <length-percentage [0,∞]>{1,2} ]? 0 모든 요소(본문 참조) 아니오 border box의 해당 치수 참조 개별 속성 참조 문법에 따름 개별 속성 참조
border-right-style <line-style> none 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 불연속 문법에 따름 지정된 키워드 border-style
border-right-width <line-width> medium 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 계산된 값 기준 문법에 따름 절대 길이, border width로 스냅; border-style이 none 또는 hidden이면 0 border-width
border-shape none | [ <basic-shape> <geometry-box>?]{1,2} none 모든 요소 아니오 지정된 <geometry-box> 기준 또는 미지정 시 border box 기준 계산된 값 기준 문법에 따름 리스트, 각 항목은 계산된 색상
border-start-end-radius <length-percentage [0,∞]>{1,2} 0 모든 요소(본문 참조) 아니오 border box의 해당 치수 참조 계산된 값 기준 문법에 따름 계산된 <length-percentage> 값의 쌍 border-radius
border-start-start-radius <length-percentage [0,∞]>{1,2} 0 모든 요소(본문 참조) 아니오 border box의 해당 치수 참조 계산된 값 기준 문법에 따름 계산된 <length-percentage> 값의 쌍 border-radius
border-top <line-width> || <line-style> || <color> 개별 속성 참조 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 개별 속성 참조 문법에 따름 개별 속성 참조
border-top-color <color> | <image-1D> currentcolor 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 본문 참조 문법에 따름 계산된 색상 및/또는 1차원 이미지 함수 border-color
border-top-left-radius <length-percentage [0,∞]>{1,2} 0 모든 요소(본문 참조) 아니오 border box의 해당 치수 참조 계산된 값 기준 문법에 따름 계산된 <length-percentage> 값의 쌍 border-radius
border-top-radius <length-percentage [0,∞]>{1,2} [ / <length-percentage [0,∞]>{1,2} ]? 0 모든 요소(본문 참조) 아니오 border box의 해당 치수 참조 개별 속성 참조 문법에 따름 개별 속성 참조
border-top-right-radius <length-percentage [0,∞]>{1,2} 0 모든 요소(본문 참조) 아니오 border box의 해당 치수 참조 계산된 값 기준 문법에 따름 계산된 <length-percentage> 값의 쌍 border-radius
border-top-style <line-style> none 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 불연속 문법에 따름 지정된 키워드 border-style
border-top-width <line-width> medium 모든 요소(단 ruby base container 및 ruby annotation container 제외) 아니오 해당 없음 계산된 값 기준 문법에 따름 절대 길이, border width로 스냅; border-style이 none 또는 hidden이면 0 border-width
box-shadow <spread-shadow># none 모든 요소 아니오 해당 없음 개별 속성 참조 문법에 따름 개별 속성 참조
box-shadow-blur <length [0,∞]># 0 모든 요소 아니오 해당 없음 계산된 값 기준 문법에 따름 리스트, 각 항목은 <length>
box-shadow-color <color># currentcolor 모든 요소 아니오 해당 없음 계산된 값 기준 문법에 따름 리스트, 각 항목은 계산된 색상
box-shadow-offset [ none | <length>{2} ]# none 모든 요소 아니오 해당 없음 계산된 값 기준, none은 non-none 값과 보간될 때 0 0으로 처리 문법에 따름 리스트, 각 항목은 none 또는 박스 기준의 오프셋 쌍
box-shadow-position [ outset | inset ]# outset 모든 요소 아니오 해당 없음 계산된 값 기준 문법에 따름 리스트, 각 항목은 키워드 중 하나
box-shadow-spread <length># 0 모든 요소 아니오 해당 없음 계산된 값 기준 문법에 따름 리스트, 각 항목은 <length>
corner-block-end-shape <corner-shape-value>{1,2} 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 문법에 따름 개별 속성 참조
corner-block-start-shape <corner-shape-value>{1,2} 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 문법에 따름 개별 속성 참조
corner-bottom-left-shape <corner-shape-value> round border-radius가 적용될 수 있는 모든 요소 아니오 해당 없음 superellipse 보간 참조 문법에 따름 해당 superellipse() 값 corner-shape
corner-bottom-right-shape <corner-shape-value> round border-radius가 적용될 수 있는 모든 요소 아니오 해당 없음 superellipse 보간 참조 문법에 따름 해당 superellipse() 값 corner-shape
corner-bottom-shape <corner-shape-value>{1,2} 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 문법에 따름 개별 속성 참조
corner-end-end-shape <corner-shape-value> round border-radius가 적용될 수 있는 모든 요소 아니오 해당 없음 superellipse 보간 참조 문법에 따름 해당 superellipse() 값 corner-shape
corner-end-start-shape <corner-shape-value> round border-radius가 적용될 수 있는 모든 요소 아니오 해당 없음 superellipse 보간 참조 문법에 따름 해당 superellipse() 값 corner-shape
corner-inline-end-shape <corner-shape-value>{1,2} 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 문법에 따름 개별 속성 참조
corner-inline-start-shape <corner-shape-value>{1,2} 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 문법에 따름 개별 속성 참조
corner-left-shape <corner-shape-value>{1,2} 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 문법에 따름 개별 속성 참조
corner-right-shape <corner-shape-value>{1,2} 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 문법에 따름 개별 속성 참조
corner-shape <corner-shape-value>{1,4} round border-radius가 적용될 수 있는 모든 요소 아니오 개별 속성 참조 개별 속성 참조 문법에 따름 개별 속성 참조
corner-start-end-shape <corner-shape-value> round border-radius가 적용될 수 있는 모든 요소 아니오 해당 없음 superellipse 보간 참조 문법에 따름 해당 superellipse() 값 corner-shape
corner-start-start-shape <corner-shape-value> round border-radius가 적용될 수 있는 모든 요소 아니오 해당 없음 superellipse 보간 참조 문법에 따름 해당 superellipse() 값 corner-shape
corner-top-left-shape <corner-shape-value> round border-radius가 적용될 수 있는 모든 요소 아니오 해당 없음 superellipse 보간 참조 문법에 따름 해당 superellipse() 값 corner-shape
corner-top-right-shape <corner-shape-value> round border-radius가 적용될 수 있는 모든 요소 아니오 해당 없음 superellipse 보간 참조 문법에 따름 해당 superellipse() 값 corner-shape
corner-top-shape <corner-shape-value>{1,2} 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 개별 속성 참조 문법에 따름 개별 속성 참조

이슈 색인

Level 3 텍스트를 이 초안에 병합하십시오.
이 속성의 정확한 이름과 문법을 결정하십시오. [Issue #11623]
이를 수행하기 위한 두 가지 제안이 있습니다: 두 번째는 GCPM에서 온 것이고, 첫 번째는 가독성을 위해 재구성하려는 시도입니다. 이름이 좋지 않은 것은 알려진 문제이며, 제안은 수락됩니다. 이것을 클리핑으로 생각하는 데 문제가 있습니다: 점선 테두리가 있으면 점 전체가 항상 보여야 하며 점의 일부만 보여서는 안 됩니다. 따라서 이것은 클립이 아니라 그리기 제한이어야 합니다.
대체 요소의 클리핑에 이것이 어떻게 영향을 주어야 합니까?
이를 자세히 정의하십시오. 어쩌면 어떤 방식으로 재정의 가능해야 할까요?
border-style에 대해서는 어떻게 해야 합니까? 임의의 도형에 대해 정확히 동작하지 않을 수 있습니다.