CSS 배경 및 테두리 모듈 레벨 3

W3C 후보 권고안 초안,

이 문서에 대한 추가 정보
이 버전:
https://www.w3.org/TR/2024/CRD-css-backgrounds-3-20240311/
최신 공개 버전:
https://www.w3.org/TR/css-backgrounds-3/
편집자 초안:
https://drafts.csswg.org/css-backgrounds/
이전 버전:
변경 이력:
https://www.w3.org/standards/history/css-backgrounds-3/
구현 보고서:
https://test.csswg.org/harness/results/css-backgrounds-3_dev/grouped/
테스트 스위트:
http://test.csswg.org/suites/css3-background/nightly-unstable/
피드백:
CSSWG 이슈 저장소
편집자:
Elika J. Etemad / fantasai (Apple)
(초청 전문가)
이전 편집자:
(W3C)
이 규격에 대한 수정 제안:
GitHub 편집자

요약

이 초안은 CSS의 테두리와 배경과 관련된 기능을 포함하고 있습니다. 레벨 2와 비교했을 때 주요 확장점은 이미지로 구성된 테두리, 여러 개의 배경을 가진 박스, 둥근 모서리를 가진 박스, 그림자가 있는 박스입니다.

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

이 문서의 상태

이 섹션은 문서가 공개된 시점에서의 상태를 설명합니다. 현재 W3C 출판물 목록과 이 기술 보고서의 최신 개정본은 W3C 기술 보고서 인덱스 https://www.w3.org/TR/에서 확인할 수 있습니다.

이 문서는 CSS 작업 그룹에서 후보 권고안 초안으로 권고안 트랙을 사용하여 발행되었습니다. 후보 권고안으로 발행되었다고 해서 W3C 및 회원들의 승인 또는 지지를 의미하지는 않습니다. 후보 권고안 초안은 이전 후보 권고안에서 작업 그룹이 다음 후보 권고 스냅샷에 포함하고자 하는 변경 사항을 통합한 것입니다.

이 문서는 초안이며, 언제든지 업데이트, 교체 또는 다른 문서로 대체될 수 있습니다. 진행 중인 작업 외의 용도로 이 문서를 인용하는 것은 적절하지 않습니다.

피드백은 GitHub에서 이슈 등록(권장)으로 보내주십시오. 제목에 규격 코드 “css-backgrounds”를 포함하여 다음과 같이 작성해 주세요: “[css-backgrounds] …의견 요약…”. 모든 이슈와 의견은 아카이브됩니다. 또는 피드백을 (아카이브) 공개 메일링 리스트 www-style@w3.org로 보낼 수도 있습니다.

이 문서는 2023년 11월 3일 W3C 프로세스 문서에 의해 관리됩니다.

이 문서는 W3C 특허 정책 아래에서 운영되는 그룹에서 작성되었습니다. W3C는 해당 그룹의 산출물과 관련해 공개 특허 공개 공개 목록을 유지합니다. 해당 페이지에는 특허 공개 방법에 대한 안내도 포함되어 있습니다. 특정 특허가 필수 청구항을 포함한다고 실제로 아는 개인은 W3C 특허 정책 6장에 따라 정보를 공개해야 합니다.

다음 기능들은 위험에 처해 있을 수 있으며, CR 기간 동안 삭제될 수 있습니다:

“위험에 처함(At-risk)”은 W3C 프로세스 용어이며, 해당 기능이 반드시 삭제되거나 지연될 위험이 있다는 뜻은 아닙니다. 작업 그룹은 기능이 상호운용성 구현에 시간적으로 어려움을 겪을 수 있다고 판단했으며, 위험에 처한 것으로 표시함으로써 제안된 권고 단계로 전환할 때 필요시 해당 기능을 삭제할 수 있도록 합니다. 이를 통해 기능을 먼저 삭제하지 않고 새로운 후보 권고를 발행하지 않아도 됩니다.

1. 소개

이 하위 섹션은 규범적이지 않습니다.

요소가 CSS 박스 모델 [CSS-BOX-3]에 따라 렌더링될 때, 각 요소는 완전히 표시되지 않거나, 하나 이상의 사각형 박스로 포맷됩니다. 각 박스는 사각형 콘텐츠 영역, 콘텐츠 주위의 패딩 띠, 패딩 주위의 테두리, 그리고 테두리 바깥의 마진을 가집니다. (마진은 실제로 음수일 수 있지만, 마진은 배경과 테두리에 영향을 주지 않습니다.)

일반 박스의 다이어그램으로, 콘텐츠, 패딩, 테두리, 마진 영역을 보여줌
전형적인 박스의 다양한 영역과 경계. (이 다이어그램은 CSS 박스 모델 모듈 [CSS-BOX-3]에서 설명됩니다.)

이 모듈의 속성들은 테두리 영역의 장식과 콘텐츠, 패딩, 그리고 테두리 영역의 배경을 다룹니다. 추가적으로 박스는 box-shadow 속성으로 "드롭 쉐도우" 효과를 줄 수 있습니다.

요소가 여러 박스 프래그먼트로 분할되는 경우, box-decoration-break [CSS-BREAK-3]는 테두리와 배경이 다양한 프래그먼트에 어떻게 나누어지는지 정의합니다. (요소가 줄 끝, 열 끝 또는 페이지 끝에서 분할되어 다음 줄, 열, 페이지에서 계속될 때 하나 이상의 프래그먼트가 생성될 수 있습니다.)

배경, 테두리, 그림자의 상대적인 쌓임 순서는 이 모듈에 제시되어 있습니다. 이러한 레이어가 다른 렌더링된 콘텐츠와 어떻게 상호작용하는지에 대해서는 부록 E "쌓임 컨텍스트의 상세 설명"을 [CSS2]에서 참고하세요.

1.1. 모듈 상호작용

이 모듈은 [CSS2] 8.5 및 14.2절에서 정의된 배경 및 테두리 기능을 대체하고 확장합니다.

이 모듈의 모든 속성은 ::first-letter 의사 요소에 적용됩니다. 배경 속성border-radius 속성::first-line 의사 요소에도 적용됩니다. UA는 (필수는 아니지만) border-image 또는 box-shadow 속성을 ::first-line에 적용할 수 있습니다. UA는 border-color/style/width 속성::first-line에 적용해서는 안 됩니다. [CSS2]

1.2. 값 정의

이 규격은 CSS 속성 정의 규약[CSS2]에서 따르며, 값 정의 문법[CSS-VALUES-3]에서 사용합니다. 이 규격에서 정의되지 않은 값 타입들은 CSS Values & Units [CSS-VALUES-3]에서 정의되어 있습니다. 다른 CSS 모듈과 조합하면 이러한 값 타입의 정의가 확장될 수 있습니다. 예를 들어, CSS Images와 결합하면 CSS 그라디언트를 background-image 또는 border-image 값으로 사용할 수 있습니다. [CSS-IMAGES-3]

정의에 나열된 속성별 값 외에도, 이 규격에서 정의된 모든 속성은 CSS-범용 키워드를 속성 값으로 허용합니다. 가독성을 위해 명시적으로 반복하지 않았습니다.

2. 배경

각 박스에는 배경 레이어가 있으며, 완전히 투명(기본값)하거나 색상 및 하나 이상의 이미지를 채울 수 있습니다. 배경 속성은 사용할 색상(background-color) 및 이미지(background-image), 그리고 그것들이 어떻게 크기 조정, 위치 지정, 타일링되는지 등을 지정합니다.

배경 속성은 상속되지 않지만, 부모 박스의 배경은 기본적으로 투명 값이 background-color의 초기값이기 때문에 비칩니다.

2.1. 여러 배경 이미지 레이어링

박스의 배경은 여러 개의 배경 이미지 레이어를 가질 수 있습니다. 레이어의 개수는 background-image 속성의 쉼표로 구분된 값의 개수로 결정됩니다. none 값도 레이어를 생성한다는 점에 유의하세요.

배경 이미지는 다른 배경 속성의 해당 값에 따라 크기, 위치, 타일링이 결정됩니다. 리스트는 첫 번째 값부터 맞춰집니다: 마지막에 남는 값들은 사용되지 않습니다. 속성이 레이어 수만큼 쉼표로 구분된 값이 부족한 경우, UA는 값을 반복하여 충분히 맞춰 사용된 값을 계산해야 합니다.

예를 들어, 다음 선언 집합은:
background-image: url(flower.png), url(ball.png), url(grass.png);
background-position: center center, 20% 80%, top left, bottom right;
background-origin: border-box, content-box;
background-repeat: no-repeat;

아래와 같이, 추가 위치 값은 삭제되고, background-originbackground-repeat의 부족한 값이 채워진(명확성을 위해 강조됨) 집합과 완전히 동일한 효과를 냅니다:

background-image: url(flower.png), url(ball.png), url(grass.png);
background-position: center center, 20% 80%, top left;
background-origin: border-box, content-box, border-box;
background-repeat: no-repeat, no-repeat, no-repeat;

리스트의 첫 번째 이미지는 사용자와 가장 가까운 레이어이고, 그 다음 이미지는 첫 번째 뒤에 그려지며, 그 다음도 마찬가지입니다. 배경 색상이 있으면 모든 레이어 아래에 그려집니다.

참고: border-image 속성 역시 배경 이미지를 정의할 수 있으며, 이 경우 해당 이미지는 배경 속성으로 생성된 배경 레이어 위에 그려집니다.

2.2. 기본 색상: background-color 속성

Name: background-color
Value: <color>
Initial: transparent
Applies to: 모든 요소
Inherited: 아니오
Percentages: 해당 없음
Computed value: 계산된 색상
Canonical order: 문법에 따름
Animation type: 계산된 값 기준

이 속성은 박스의 배경 색상을 설정합니다. 이 색상은 모든 배경 이미지 뒤에 그려집니다.

예시:
h1 { background-color: #F00 } /* 배경을 빨간색으로 설정 */

배경 색상은 가장 아래 background-clip 값에 따라 배경 이미지 레이어에 맞게 클리핑됩니다.

2.3. 이미지 소스: background-image 속성

Name: background-image
Value: <bg-image>#
Initial: none
Applies to: 모든 요소
Inherited: 아니오
Percentages: 해당 없음
Computed value: 리스트, 각 항목은 <image> 또는 키워드 none
Canonical order: 문법에 따름
Animation type: 불연속

이 속성은 요소의 배경 이미지를 지정합니다. 이미지는 처음 지정된 것이 맨 위(사용자에게 가장 가까움)에 그려지고, 그 다음 이미지는 앞의 이미지 뒤에 그려집니다. 속성 값은 쉼표로 구분된 <bg-image> 값 리스트로 주어집니다.

<bg-image> = <image> | none

none 값은 배경 이미지 레이어로 취급되지만 아무것도 그리지 않습니다. 이미지가 비어있거나(폭 또는 높이가 0), 다운로드에 실패하거나, 표시할 수 없는 경우 (예: 지원하지 않는 이미지 형식 등) 역시 레이어로 취급되지만 아무것도 그리지 않습니다.

§ 2.1 여러 배경 이미지 레이어링을 참고하여 background-image가 다른 쉼표로 구분된 배경 속성과 어떻게 상호작용하는지, 각 배경 이미지 레이어를 형성하는지 확인하세요.

배경 이미지를 설정할 때, 작성자는 이미지가 사용 불가할 때에도 텍스트와의 대비를 유지할 수 있도록 background-color도 지정해야 합니다.

접근성 측면에서, 작성자는 중요한 정보를 전달하는 유일한 방법으로 배경 이미지를 사용하지 않아야 합니다. 웹 콘텐츠 접근성 지침 F3 [WCAG20]을 참고하세요. 이미지는 비그래픽 프레젠테이션에서는 접근할 수 없으며, 특히 배경 이미지는 고대비 모드 등에서 꺼질 수 있습니다.

참고: 스타일용 전경 이미지는 CSS에서 content 속성으로 제공할 수 있습니다. 의미적으로 중요한 전경 이미지는 문서 마크업(예: HTML의 <img> 태그)으로 제공되어야 합니다.

참고: 미디어 프래그먼트를 사용하면 이미지의 일부만 표시할 수 있습니다. CSS Images 모듈은 이미지 형식에 대한 폴백 문법과 이미지 표시를 위한 추가 제어 기능을 제공합니다.

배경 이미지를 지정하는 예시:
html { background-image: url("marble.svg") }
p { background-image: none }
div { background-image: url(tl.png), url(tr.png) }
main { background-image: radial-gradient(at bottom right, transparent, white); }

구현체는 보이지 않는 이미지(예: 다른 불투명한 이미지 뒤에 있을 때)는 다운로드 및 그리기를 생략하여 최적화할 수 있습니다.

2.4. 이미지 타일링: background-repeat 속성

Name: background-repeat
Value: <repeat-style>#
Initial: repeat
Applies to: 모든 요소
Inherited: 아니오
Percentages: 해당 없음
Computed value: 리스트, 각 항목은 각 차원에 하나씩 키워드 쌍
Canonical order: 문법에 따름
Animation type: 불연속

이 속성은 배경 이미지크기 조정위치 지정된 후 어떻게 타일링되는지 지정합니다. 속성 값은 쉼표로 구분된 <repeat-style> 값의 리스트로 주어집니다.

<repeat-style> = repeat-x | repeat-y | [repeat | space | round | no-repeat]{1,2}

<repeat-style>의 단일 값 의미:

repeat-x
repeat no-repeat으로 계산됩니다.
repeat-y
no-repeat repeat으로 계산됩니다.
repeat
repeat repeat으로 계산됩니다.
space
space space으로 계산됩니다.
round
round round으로 계산됩니다.
no-repeat
no-repeat no-repeat으로 계산됩니다.

<repeat-style> 값이 두 키워드를 가지면, 첫 번째는 수평축에, 두 번째는 수직축에 적용됩니다:

repeat
이미지배경 그리기 영역을 덮을 만큼 반복됩니다.
space
이미지배경 위치 지정 영역 내에 잘리지 않게 최대한 반복되고, 이후 이미지는 영역을 채우도록 균등하게 배치됩니다. 첫 번째와 마지막 이미지는 영역의 끝에 닿습니다. 배경 그리기 영역배경 위치 지정 영역보다 크면, 패턴이 배경 그리기 영역을 채울 때까지 반복됩니다. 해당 방향의 background-position 값은 이미지가 두 번 이상 배치될 공간이 없을 때만 사용되며, 이 경우 이미지는 한 번만 배치되고 background-position이 위치를 결정합니다.
round
이미지배경 위치 지정 영역 내에 최대한 반복됩니다. 정수 배수로 맞지 않으면 크기가 조정되어 맞춰집니다. background-size 항목의 공식 참고. 배경 그리기 영역이 위치 지정 영역보다 크면, 패턴이 배경 그리기 영역을 채울 때까지 반복됩니다.
no-repeat
이미지가 한 번만 배치되고 해당 방향으로 반복되지 않습니다.

두 키워드 중 하나가 no-repeat이 아니면, 전체 배경 그리기 영역이 타일링됩니다. 즉, 한 줄이나 한 열만 타일링하는 것이 아닙니다.

body {
  background: white url("pendant.png");
  background-repeat: repeat-y;
  background-position: center;
}
중앙에 배경 이미지가 있고, 이미지가 테두리, 패딩, 콘텐츠 영역 위아래로 반복됨.
repeat-y의 효과: 배경 이미지 한 개가 중앙에 배치되고, 다른 이미지들은 그 위아래에 반복되어 요소 뒤에 수직 밴드를 만듭니다.
body {
  background-image: url(dot.png) white;
  background-repeat: space
}
점이 타일링된 배경 이미지를 가진 요소의 이미지
space의 효과: 점 이미지를 타일링하여 전체 배경을 채우고, 이미지는 균등 간격으로 배치됩니다.

§ 2.1 여러 배경 이미지 레이어링을 참고하여 background-repeat가 다른 쉼표로 구분된 배경 속성과 어떻게 상호작용하여 각 배경 이미지 레이어를 구성하는지 확인하세요.

2.5. 이미지 고정: background-attachment 속성

Name: background-attachment
Value: <attachment>#
Initial: scroll
Applies to: 모든 요소
Inherited: 아니오
Percentages: 해당 없음
Computed value: 리스트, 각 항목은 지정된 키워드
Canonical order: 문법에 따름
Animation type: 불연속

배경 이미지가 지정된 경우, 이 속성은 이미지가 뷰포트(fixed)에 고정되어 있는지, 박스와 함께 스크롤되는지(scroll), 혹은 콘텐츠와 함께 스크롤되는지(local)를 지정합니다. 속성 값은 쉼표로 구분된 <attachment> 키워드 리스트로 주어집니다.

<attachment> = scroll | fixed | local
fixed
배경은 뷰포트에 대해 고정됩니다. 페이지 미디어에서 뷰포트가 없는 경우, fixed 배경은 페이지 박스에 대해 고정되므로 모든 페이지에 복제됩니다.

참고: 하나의 뷰포트만 존재합니다. 박스가 스크롤 컨테이너여도, fixed 배경은 박스와 함께 이동하지 않습니다.

local
배경은 박스의 콘텐츠를 기준으로 고정됩니다: 박스에 스크롤 메커니즘이 있으면 배경은 콘텐츠와 함께 스크롤되고, 배경 그리기 영역배경 위치 지정 영역은 테두리가 아닌 스크롤 가능한 오버플로우 영역을 기준으로 합니다. 스크롤 가능한 오버플로우 영역에는 테두리 영역이 포함되지 않으므로, 스크롤 컨테이너의 경우 border-box 값은 padding-box와 동일하게 처리될 수 있습니다.
scroll
배경은 박스 자체에 대해 고정되며, 콘텐츠와 함께 스크롤되지 않습니다. (실질적으로 박스의 테두리에 붙어 있습니다.)

이미지가 고정되어 있어도, 박스의 배경 그리기 영역 또는 클리핑되지 않은 경우에만 보입니다. (§ 2.11 특수 요소의 배경에서 배경 이미지가 클리핑되지 않는 경우를 참고하세요.) 따라서 이미지가 타일링되지 않으면 보이지 않을 수 있습니다.

이 예시는 문서가 스크롤될 때 뷰포트에 "붙어있는" 무한 수직 밴드를 생성합니다.
body {
  background: red url("pendant.gif");
  background-repeat: repeat-y;
  background-attachment: fixed;
}

참고: fixed 배경을 지원하지 않는 UA (예: 하드웨어 플랫폼의 제한 등)은 fixed 키워드가 있는 선언을 무시합니다. 예시:

body {
  /* 모든 UA용: */
  background: white url(paper.png) scroll;
  /* fixed 배경을 지원하는 UA용: */
  background: white url(ledger.png) fixed;
}
h1 {
  /* 모든 UA용: */
  background: silver;
  /* fixed 배경을 지원하는 UA용: */
  background: url(stripe.png) fixed, white url(ledger.png) fixed;
}

§ 2.1 여러 배경 이미지 레이어링을 참고하여 background-attachment가 다른 쉼표로 구분된 배경 속성과 어떻게 상호작용하여 각 배경 이미지 레이어를 구성하는지 확인하세요.

2.6. 이미지 위치 지정: background-position 속성

Name: background-position
Value: <bg-position>#
Initial: 0% 0%
Applies to: 모든 요소
Inherited: 아니오
Percentages: 배경 위치 지정 영역의 크기 마이너스 배경 이미지의 크기에 대해 상대적임; 본문 참조
Computed value: 리스트, 각 항목은 좌상단 기준 오프셋(수평 및 수직 쌍)이며, 각각 계산된 <length-percentage> 값임
Canonical order: 문법에 따름
Animation type: 반복 가능한 리스트

배경 이미지가 지정된 경우, 이 속성은 각 이미지의 크기 조정 이후 해당 배경 위치 지정 영역 내에서의 초기 위치를 지정합니다.

속성 값은 쉼표로 구분된 <bg-position> 값의 리스트로 주어집니다.

<bg-position> = [
  [ left | center | right | top | bottom | <length-percentage> ]
|
  [ left | center | right | <length-percentage> ]
  [ top | center | bottom | <length-percentage> ]
|
  [ center | [ left | right ] <length-percentage>? ] &&
  [ center | [ top | bottom ] <length-percentage>? ]
]

값이 하나만 지정되면, 두 번째 값은 center로 간주됩니다. 값이 두 개이면, 첫 번째 <length-percentage>는 수평 위치(또는 오프셋)를 나타내며, 두 번째 <length-percentage>는 수직 위치(또는 오프셋)를 나타냅니다. 여기서 <length-percentage> 값은 배경 이미지의 좌상단이 배경 위치 지정 영역의 좌상단에서 얼마나 떨어져 있는지 오프셋을 의미합니다.

참고: 키워드 쌍은 순서를 바꿀 수 있지만, 키워드와 길이 또는 백분율의 조합은 순서 변경이 불가능합니다. 따라서 center left는 유효하지만 50% left는 유효하지 않습니다.

값이 세 개 또는 네 개이면, 각 <length-percentage>는 오프셋을 의미하며, 반드시 키워드 앞에 위치해야 하며, 키워드는 오프셋 기준이 되는 가장자리(edge)를 지정합니다. 예를 들어, background-position: bottom 10px right 20px10px 아래에서 위로(수직), 20px 오른쪽에서 왼쪽으로(수평) 오프셋을 의미합니다. 값이 세 개면, 누락된 오프셋은 0으로 간주합니다.

양수 값은 배경 위치 지정 영역의 가장자리에서 안쪽으로의 오프셋을 의미합니다. 음수 값은 배경 위치 지정 영역의 가장자리에서 바깥쪽으로의 오프셋을 의미합니다.

다음 선언들은 좌상단 기준(수평, 수직) 오프셋을 지정합니다:
background-position: left 10px top 15px;   /* 10px, 15px */
background-position: left      top     ;   /*  0px,  0px */
background-position:      10px     15px;   /* 10px, 15px */
background-position: left          15px;   /*  0px, 15px */
background-position:      10px top     ;   /* 10px,  0px */
background-position: left      top 15px;   /*  0px, 15px */
background-position: left 10px top     ;   /* 10px,  0px */
<percentage>
수평 오프셋에 대한 백분율은 (배경 위치 지정 영역의 너비 - 배경 이미지의 너비)에 상대적입니다. 수직 오프셋에 대한 백분율은 (배경 위치 지정 영역의 높이 - 배경 이미지의 높이)에 상대적입니다. 이미지의 크기는 background-size로 지정된 크기입니다.
예를 들어 값 쌍이 0% 0%이면, 이미지의 좌상단이 보통 박스의 padding edge의 좌상단에 정렬됩니다. 값 쌍이 100% 100%이면, 이미지의 우하단이 영역의 우하단에 위치합니다. 값 쌍이 75% 50%이면, 이미지의 75% 지점과 50% 지점이 영역의 75% 지점과 50% 지점에 맞춰집니다.
요소 내 이미지 위치 다이어그램
background-position: 75% 50%의 의미 다이어그램.
<length>
길이 값은 오프셋을 고정 길이로 지정합니다. 예를 들어 값 쌍이 2cm 1cm이면, 이미지의 좌상단이 배경 위치 지정 영역의 좌상단에서 오른쪽으로 2cm, 아래로 1cm에 위치합니다.
top
값이 하나 또는 두 개일 때 수직 위치에 대해 0%로 계산되며, 그 외에는 다음 오프셋의 기준을 top edge로 지정합니다.
right
값이 하나 또는 두 개일 때 수평 위치에 대해 100%로 계산되며, 그 외에는 다음 오프셋의 기준을 right edge로 지정합니다.
bottom
값이 하나 또는 두 개일 때 수직 위치에 대해 100%로 계산되며, 그 외에는 다음 오프셋의 기준을 bottom edge로 지정합니다.
left
값이 하나 또는 두 개일 때 수평 위치에 대해 0%로 계산되며, 그 외에는 다음 오프셋의 기준을 left edge로 지정합니다.
center
수평 위치가 별도로 지정되지 않으면 50%(left 50%)로 계산되고, 그렇지 않으면 수직 위치는 50%(top 50%)로 계산됩니다.
다음 background 축약형 선언들은 키워드를 사용하여 background-position을 해당 백분율 값으로 설정합니다.
body { background: url("banner.jpeg") right top }    /* 100%   0% */
body { background: url("banner.jpeg") top center }   /*  50%   0% */
body { background: url("banner.jpeg") center }       /*  50%  50% */
body { background: url("banner.jpeg") bottom }       /*  50% 100% */
아래 예시에서, (단일) 이미지는 뷰포트의 우하단에 위치합니다.
body {
  background-image: url("logo.png");
  background-attachment: fixed;
  background-position: 100% 100%;
  background-repeat: no-repeat;
}
배경 위치는 좌상단 이외의 다른 코너를 기준으로도 지정할 수 있습니다. 예를 들어, 아래는 배경 이미지를 아래에서 10px, 오른쪽에서 3em 만큼 띄웁니다:
background-position: right 3em bottom 10px

§ 2.1 여러 배경 이미지 레이어링을 참고하여 background-position이 다른 쉼표로 구분된 배경 속성과 어떻게 상호작용하여 각 배경 이미지 레이어를 구성하는지 확인하세요.

2.6.1. background-position 값의 직렬화

specified valuecomputed value<bg-position> 타입에 대해 [CSS-VALUES-4]에서 <position>에 정의된 그대로 직렬화됩니다. 3값 생성식(이는 <position>에서는 유효하지 않음)의 경우, specified value 직렬화는 생략된 오프셋이 그대로 생략된다는 점만 빼면 동등한 4값 문법과 동일합니다.

2.7. 그리기 영역: background-clip 속성

Name: background-clip
Value: <visual-box>#
Initial: border-box
Applies to: 모든 요소
Inherited: 아니오
Percentages: 해당 없음
Computed value: 리스트, 각 항목은 지정된 키워드
Canonical order: 문법에 따름
Animation type: 반복 가능한 리스트

배경 그리기 영역을 결정하며, 이는 배경이 그려지는 영역을 의미합니다. 값의 의미는 다음과 같습니다:

border-box
배경은 테두리 박스 내에서 (클리핑되어) 그려집니다.
padding-box
배경은 패딩 박스 내에서 (클리핑되어) 그려집니다.
content-box
배경은 콘텐츠 박스 내에서 (클리핑되어) 그려집니다.

참고: 루트 요소는 배경 그리기 영역이 다르므로, background-clip 속성은 루트 요소에 지정해도 효과가 없습니다. § 2.11 특수 요소의 배경 참고.

참고: 배경은 항상 테두리(있는 경우) 뒤에 그려집니다. [CSS2] 부록 E의 "쌓임 컨텍스트의 상세 설명" 참고.

§ 4.2 모서리 형태 지정을 참고하여 border-radius배경 그리기 영역의 형태에 어떻게 영향을 주는지 확인하세요.

§ 2.1 여러 배경 이미지 레이어링을 참고하여 background-clip이 다른 쉼표로 구분된 배경 속성과 어떻게 상호작용하여 각 배경 이미지 레이어를 구성하는지 확인하세요.

2.8. 위치 지정 영역: background-origin 속성

Name: background-origin
Value: <visual-box>#
Initial: padding-box
Applies to: 모든 요소
Inherited: 아니오
Percentages: 해당 없음
Computed value: 리스트, 각 항목은 지정된 키워드
Canonical order: 문법에 따름
Animation type: 반복 가능한 리스트

이 속성은 배경 위치 지정 영역을 결정합니다: 배경 이미지가 위치 지정되는 영역입니다. 여러 박스 프래그먼트로 렌더링된 요소(예: 여러 줄에 걸친 인라인 박스, 여러 페이지의 박스)에서, 어느 박스에 box-decoration-break [CSS-BREAK-3]가 적용되어 배경 위치 지정 영역을 결정하는지 지정합니다.

padding-box
위치는 패딩 박스 기준입니다. (단일 박스의 경우 0 0은 패딩 에지의 좌상단, 100% 100%은 우하단입니다.)
border-box
위치는 테두리 박스 기준입니다.
content-box
위치는 콘텐츠 박스 기준입니다.

background-attachment 값이 레이어에 대해 fixed이면, 이 속성은 효과가 없습니다: 이 경우 배경 위치 지정 영역초기 포함 블록이 됩니다.

참고: background-clippadding-box, background-originborder-box, background-positiontop left (초기값)이고, 요소에 0이 아닌 테두리가 있으면, 배경 이미지의 상단 및 좌측이 클리핑됩니다.

§ 2.1 여러 배경 이미지 레이어링을 참고하여 background-origin이 다른 쉼표로 구분된 배경 속성과 어떻게 상호작용하여 각 배경 이미지 레이어를 구성하는지 확인하세요.

2.9. 이미지 크기 지정: background-size 속성

Name: background-size
Value: <bg-size>#
Initial: auto
Applies to: 모든 요소
Inherited: 아니오
Percentages: 본문 참조
Computed value: 리스트, 각 항목은 (축별로 하나씩) 크기 쌍이며, 각각 키워드 또는 계산된 <length-percentage> 값으로 표시됨
Canonical order: 문법에 따름
Animation type: 반복 가능한 리스트

이 속성은 각 배경 이미지의 크기를 지정합니다. 속성 값은 쉼표로 구분된 <bg-size> 값의 리스트로 주어집니다.

<bg-size> = [ <length-percentage [0,∞]> | auto ]{1,2} | cover | contain

값의 의미는 다음과 같습니다:

contain
이미지의 자연 비율(있는 경우)을 유지하면서, 이미지의 너비와 높이가 모두 배경 위치 지정 영역 내에 완전히 들어갈 수 있도록 가장 크게 확대/축소합니다.
cover
이미지의 자연 비율(있는 경우)을 유지하면서, 이미지의 너비와 높이가 모두 배경 위치 지정 영역을 완전히 덮을 수 있게 최소한으로 확대/축소합니다.
[ <length-percentage [0,∞]> | auto ]{1,2}
첫 번째 값은 해당 이미지의 너비, 두 번째 값은 높이를 지정합니다. 값이 하나만 주어지면 두 번째 값은 auto로 간주합니다.

<percentage>배경 위치 지정 영역에 대해 상대적입니다.

한 쪽 차원에 auto 값이 있으면, 이미지의 자연 비율과 다른 차원의 크기를 사용해 결정하거나, 없으면 이미지의 자연 크기를, 그것도 없으면 100%로 처리합니다.

두 값 모두 auto면 이미지의 자연 너비높이를 사용합니다(존재하는 경우). 누락된 차원(있는 경우)은 위 설명대로 auto로 처리합니다. 이미지에 자연 크기가 없으면, contain과 동일하게 크기가 결정됩니다.

음수 값은 유효하지 않습니다.

몇 가지 예시입니다. 첫 번째 예시는 배경 이미지를 두 차원 모두 독립적으로 늘려서 콘텐츠 영역을 완전히 덮게 만듭니다:
div {
  background-image: url(plasma.png);
  background-repeat: no-repeat;
  background-size: 100% 100%;
  background-origin: content-box }

두 번째 예시는 이미지를 수평으로 정확히 두 개가 들어가도록 늘립니다. 비율은 유지됩니다:

p {
  background-image: url(tubes.png);
  background-size: 50% auto;
  background-origin: border-box }

이 예시는 배경 이미지를 15 x 15 픽셀로 강제 지정합니다:

p {
  background-size: 15px 15px;
  background-image: url(tile.png)}

이 예시는 이미지의 자연 크기를 사용합니다. 이는 CSS 레벨 1 및 2에서 유일하게 가능한 동작임에 유의하세요.

body {
background-size: auto;            /* 기본값 */
background-image: url(flower.png) }

아래 예시는 이미지 높이를 33.3%로 반올림해 지정합니다(원래 지정값 30%에서 증가). 30%일 때 이미지는 세 개가 완전히 들어가고 네 번째는 일부만 들어갑니다. 반올림 후에는 세 개가 정확히 들어갑니다. 이미지의 너비는 배경 위치 지정 영역 너비의 20%이며 반올림하지 않습니다.

p {
  background-image: url(chain.png);
  background-repeat: no-repeat round;
  background-size: 20% 30% }

background-repeat가 한(혹은 양) 축에 round일 경우, 두 번째 단계가 있습니다. UA는 해당(혹은 양방향) 축에서 이미지를 배경 위치 지정 영역에 정수 배수로 맞게 크기를 조정해야 합니다. 너비에 대해(높이는 유사하게 적용):

X ≠ 0이 1단계 후의 이미지 너비이고 W가 배경 위치 지정 영역의 너비일 때, 반올림된 너비 X' = W / round(W / X) 여기서 round()는 가장 가까운 자연수(0보다 큰 정수)를 반환합니다.

background-repeat가 한 축만 round이고, background-size의 다른 축 값이 auto라면, 세 번째 단계가 있습니다: 그 다른 축은 원래 비율이 복원되도록 크기 조정됩니다.

이 예시에서는 배경 이미지를 자연 크기로 보여줍니다:
div {
  background-image: url(image1.png);
  background-repeat: repeat;         /* 기본값 */
  background-size: auto }            /* 기본값 */

아래 예시에서는 배경을 너비 3em로 지정하며, 높이는 원래 비율을 유지하며 비례적으로 조정됩니다:

div {
  background-image: url(image2.png);
  background-repeat: repeat;         /* 기본값 */
  background-size: 3em }             /* = '3em auto' */

아래 예시에서는 배경 이미지를 대략 너비 3em로 보여줍니다: 배경 너비에 정수 배수로 딱 맞도록 스케일됩니다. 높이는 원래 비율을 유지하며 비례적으로 조정됩니다:

div {
  background-image: url(image3.png);
  background-repeat: round repeat;
  background-size: 3em auto }

아래 예시에서는 배경 이미지를 너비 3em, 높이는 해당 너비의 원래 비율에 맞게 혹은 약간 더 작게 보여줍니다:

div {
  background-image: url(image4.png);
  background-repeat: repeat round;
  background-size: 3em auto }

아래 예시에서는 배경 이미지를 높이 4em로 보여줍니다: 배경 높이에 정수 배수로 맞게 약간 스케일됩니다. 너비는 원래 비율에 따라 4em 높이에 맞춰 약간 스케일됩니다: 배경 너비에 정수 배수로 맞게 약간 스케일됩니다.

div {
  background-image: url(image5.png);
  background-repeat: round;
  background-size: auto 4em }

배경 이미지의 너비나 높이가 0으로 결정되면, 이미지는 표시되지 않습니다. (투명 이미지였던 것과 동일한 효과입니다.)

§ 2.1 여러 배경 이미지 레이어링을 참고하여 background-size가 다른 쉼표로 구분된 배경 속성과 어떻게 상호작용하여 각 배경 이미지 레이어를 구성하는지 확인하세요.

2.10. 배경 축약형: background 속성

Name: background
Value: <bg-layer>#? , <final-bg-layer>
Initial: 개별 속성 참조
Applies to: 모든 요소
Inherited: 아니오
Percentages: 개별 속성 참조
Computed value: 개별 속성 참조
Canonical order: 문법에 따름
Animation type: 개별 속성 참조

background 속성은 스타일시트 내에서 대부분의 배경 속성을 한 번에 설정할 수 있는 축약형 속성입니다. 쉼표로 구분된 항목의 개수가 배경 이미지 레이어의 개수를 정의합니다. 유효한 선언이 주어지면, 각 레이어마다 축약형은 background-image, background-position, background-size, background-repeat, background-origin, background-clip, background-attachment의 해당 값을 해당 속성의 초기값으로 먼저 설정하고, 이후 선언에서 명시적으로 지정된 값을 각 레이어에 할당합니다. 마지막으로 background-color는 지정된 색상으로 설정되고, 없으면 초기값으로 설정됩니다.

이 속성의 값은 쉼표로 구분된 값 리스트로 주어지며,

<bg-layer> = <bg-image> || <bg-position> [ / <bg-size> ]? || <repeat-style> || <attachment> || <visual-box> || <visual-box>
<final-bg-layer> =  <bg-image> || <bg-position> [ / <bg-size> ]? || <repeat-style> || <attachment> || <visual-box> || <visual-box> || <'background-color'>

참고: <final-bg-layer>에는 색상 지정이 가능하지만, <bg-layer>에는 불가합니다.

하나의 <visual-box> 값이 있으면 background-originbackground-clip 모두 해당 값으로 설정됩니다. 두 값이 있으면, 첫 번째 값은 background-origin에, 두 번째 값은 background-clip에 설정됩니다.

아래 예시의 첫 번째 규칙에서는 background-color만 지정되었으며 다른 개별 속성들은 초기값으로 설정됩니다. 두 번째 규칙에서는 여러 개의 개별 속성이 지정되었습니다.
body { background: red }
p { background: url("chess.png") 40% / 10em gray
                round fixed border-box; }

첫 번째 규칙은 아래와 동일합니다:

body {
    background-color: red;
    background-position: 0% 0%;
    background-size: auto;
    background-repeat: repeat;
    background-clip: border-box;
    background-origin: padding-box;
    background-attachment: scroll;
    background-image: none }

두 번째 규칙은 아래와 동일합니다:

p {
    background-color: gray;
    background-position: 40% 50%;
    background-size: 10em auto;
    background-repeat: round;
    background-clip: border-box;
    background-origin: border-box;
    background-attachment: fixed;
    background-image: url(chess.png) }
아래 예시는 배경 색상(#CCC)과 배경 이미지(url(metal.jpg))를 모두 설정하는 방법을 보여줍니다. 이미지는 요소의 전체 너비에 맞게 재조정됩니다:
E { background: #CCC url("metal.jpg") top left / 100% auto no-repeat}
또 다른 예시는 동등성을 보여줍니다:
div { background: padding-box url(paper.jpg) white center }
div {
    background-color: white;
    background-image: url(paper.jpg);
    background-repeat: repeat;
    background-attachment: scroll;
    background-position: center;
    background-clip: padding-box;
    background-origin: padding-box;
    background-size: auto auto }
아래 선언은 여러 개의 쉼표로 구분된 값을 사용합니다.
background: url(a.png) top left no-repeat,
            url(b.png) center / 100% 100% no-repeat,
            url(c.png) white;

이는 아래와 동일합니다

background-image:      url(a.png),  url(b.png),          url(c.png);
background-position:   top left,    center,              top left;
background-repeat:     no-repeat,   no-repeat,           repeat;
background-clip:       border-box,  border-box,          border-box;
background-origin:     padding-box, padding-box,         padding-box;
background-size:       auto auto,   100% 100%,           auto auto;
background-attachment: scroll,      scroll,              scroll;
background-color:      white;

2.11. 특수 요소의 배경

문서 캔버스는 문서가 렌더링되는 무한 표면입니다. [CSS2] 캔버스에 해당하는 요소가 없으므로, CSS는 아래에서 설명하는 대로 캔버스 스타일링을 위해 루트 요소(HTML의 경우 <body> 요소)의 배경을 전파합니다. 그러나 캔버스에 적용될 배경 요소가 display: none이면, 캔버스 배경은 투명해집니다.

캔버스 배경이 불투명하지 않으면, 그 아래의 캔버스 표면이 비쳐 보입니다. 캔버스 표면의 질감은 UA마다 다르며 (일반적으로 불투명한 흰색임).

2.11.1. 캔버스 배경 및 루트 요소

루트 요소의 배경이 캔버스 배경이 되며, 그 배경 그리기 영역은 전체 캔버스 전체를 덮게 확장됩니다. 하지만 이미지는 루트 요소 박스를 기준으로 크기 조정 및 위치 지정됩니다. (즉, 배경 위치 지정 영역은 루트 요소에 대해 결정됩니다.) 루트 요소는 이 배경을 다시 그리지 않으며, 즉 배경의 used valuetransparent입니다.

2.11.2. 캔버스 배경 및 HTML <body> 요소

루트 요소가 HTML HTML 요소 또는 XHTML html 요소인 문서 [HTML]의 경우: background-imagecomputed valuenone이고, background-colortransparent라면, UA는 해당 요소의 첫 번째 HTML BODY 또는 XHTML body 자식 요소의 배경 속성 computed value를 전파해야 합니다. 해당 BODY 요소의 배경 속성 used value초기값이며, 전파된 값은 루트 요소에 지정된 것처럼 처리합니다. HTML 문서 작성자에게는 캔버스 배경을 BODY 요소에 지정하는 것이 HTML 요소에 지정하는 것보다 권장됩니다.

참고: containment를 사용하면 HTML body 요소의 이 특수 처리가 비활성화됩니다. 자세한 내용은 CSS Containment 1 § 2 강한 컨테인먼트: contain 속성을 참고하세요.

이 규칙에 따라 아래 HTML 문서의 캔버스는 "marble" 배경을 갖습니다:
<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.0//EN'
  >
<html>
  <head>
    <title>Setting the canvas background</title>
    <style type="text/css">
       body { background: url("http://example.org/marble.png") }
    </style>
  </head>
  <body>
    <p>My background is marble.</p>
  </body>
</html>

2.11.3. ::first-line 의사 요소의 배경

::first-line 의사 요소는 배경에 대해서는 인라인 레벨 요소처럼 동작합니다 ([CSS2] 5.12.1절 참조). 예를 들어, 첫 줄이 왼쪽 정렬된 경우 배경이 반드시 오른쪽 끝까지 확장되는 것은 아닙니다.

3. 테두리

테두리는 미리 정의된 스타일(실선, 이중선, 점선, 의사 3D 테두리 등) 또는 이미지가 될 수 있습니다. 첫 번째 경우에는 여러 속성으로 테두리의 스타일(border-style), 색상(border-color), 두께(border-width) 등을 정의합니다.

3.1. 선 색상: border-color 속성들

Name: border-top-color, border-right-color, border-bottom-color, border-left-color
Value: <color>
Initial: currentColor
Applies to: 모든 요소(단, ruby base 컨테이너ruby annotation 컨테이너 제외)
Inherited: 아니오
Percentages: 해당 없음
Computed value: 계산된 색상
Canonical order: 문법에 따름
Animation type: 계산된 값 기준
Logical property group: border-color
Name: border-color
Value: <color>{1,4}
Initial: (개별 속성 참조)
Applies to: 모든 요소(단, ruby base 컨테이너ruby annotation 컨테이너 제외)
Inherited: 아니오
Percentages: 해당 없음
Computed value: 개별 속성 참조
Canonical order: 문법에 따름
Animation type: 개별 속성 참조

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

border-color 속성은 한 번의 선언으로 border-top-color, border-right-color, border-bottom-color, border-left-color를 설정하는 축약형 속성입니다.

값이 하나만 있으면 모든 면에 적용됩니다. 값이 두 개면 위와 아래는 첫 번째 값, 오른쪽과 왼쪽은 두 번째 값으로 설정됩니다. 값이 세 개면 위는 첫 번째 값, 왼쪽과 오른쪽은 두 번째 값, 아래는 세 번째 값이 적용됩니다. 값이 네 개면 각각 위, 오른쪽, 아래, 왼쪽에 적용됩니다.

3.2. 선 패턴: border-style 속성들

Name: border-top-style, border-right-style, border-bottom-style, border-left-style
Value: <line-style>
Initial: none
Applies to: 모든 요소(단, ruby base 컨테이너ruby annotation 컨테이너 제외)
Inherited: 아니오
Percentages: 해당 없음
Computed value: 지정된 키워드
Canonical order: 문법에 따름
Animation type: 불연속
Logical property group: border-style
Name: border-style
Value: <line-style>{1,4}
Initial: (개별 속성 참조)
Applies to: 모든 요소(단, ruby base 컨테이너ruby annotation 컨테이너 제외)
Inherited: 아니오
Percentages: 해당 없음
Computed value: 개별 속성 참조
Canonical order: 문법에 따름
Animation type: 개별 속성 참조

이 속성들은 테두리가 보일지 여부와, 보인다면 스타일이 어떻게 그려질지(테두리 이미지로 덮어쓰이지 않을 경우) 제어합니다.

border-style 속성은 한 번의 선언으로 border-top-style, border-right-style, border-bottom-style, border-left-style를 설정하는 축약형 속성입니다.

값이 하나면 모든 면에 적용됩니다. 값이 두 개면 위와 아래는 첫 번째 값, 오른쪽과 왼쪽은 두 번째 값으로 설정됩니다. 값이 세 개면 위는 첫 번째 값, 왼쪽과 오른쪽은 두 번째 값, 아래는 세 번째 값이 적용됩니다. 값이 네 개면 각각 위, 오른쪽, 아래, 왼쪽에 적용됩니다.

스타일은 <line-style> 키워드로 지정되며,

<line-style> = none | hidden | dotted | dashed | solid | double | groove | ridge | inset | outset

값의 의미는 다음과 같습니다:

none
테두리가 없습니다. 색상과 너비는 무시됩니다(즉, 테두리 너비는 0). 이로 인해 border-image-width의 초기값도 0으로 결정됩니다.
hidden
none과 동일하지만, 테이블의 테두리 충돌 해소 규칙에서 동작이 다릅니다(border-collapsed 테이블).
dotted
둥근 점들의 연속.
dashed
네모난 끝의 대시들의 연속.
solid
하나의 선분.
double
평행한 두 개의 실선, 그 사이에 공간이 있음. (선 두께는 지정되지 않지만, 선 두께와 공간의 합은 border-width와 같아야 함.)
groove
캔버스에 파인 것처럼 보임. (일반적으로 border-color보다 약간 밝고 어두운 두 색상으로 "그림자"를 만들어서 구현함.)
ridge
캔버스에서 튀어나온 것처럼 보임.
inset
테두리 안쪽의 콘텐츠가 캔버스에 파묻힌 것처럼 보임. ridge와 collapsing border 모델에서 동일하게 처리됨.
outset
테두리 안쪽의 콘텐츠가 캔버스에서 튀어나온 것처럼 보임. groove와 collapsing border 모델에서 동일하게 처리됨.

테두리는 요소의 배경보다 앞에 그려지지만, 콘텐츠(겹칠 경우)보다 뒤에 그려집니다.

테두리 스타일 예시
미리 정의된 테두리 스타일의 렌더링 예시.

참고: 테두리 색상이 검정 또는 흰색에 가까운 경우 groove, ridge, inset, outset의 "3D" 효과를 만들기 위해 중간 색상과는 다른 색상 계산이 필요할 수 있습니다.

참고: 점과 대시의 간격 및 대시의 길이는 제어할 수 없습니다. 구현체는 코너의 대칭을 고려한 간격을 선택하는 것이 권장됩니다.

참고: 이 명세는 서로 다른 스타일의 테두리가 코너에서 어떻게 결합되어야 하는지 정의하지 않습니다. 또한 둥근 모서리의 경우 패딩이 모서리 반경보다 작으면 코너와 콘텐츠가 겹칠 수 있습니다.

3.3. 선 두께: border-width 속성들

Name: border-top-width, border-right-width, border-bottom-width, border-left-width
Value: <line-width>
Initial: medium
Applies to: 모든 요소(단, ruby base 컨테이너ruby annotation 컨테이너 제외)
Inherited: 아니오
Percentages: 해당 없음
Computed value: 절대 길이, 테두리 너비로 스냅됨; 테두리 스타일이 none 또는 hidden이면 0
Canonical order: 문법에 따름
Animation type: 계산된 값 기준
Logical property group: border-width
Name: border-width
Value: <line-width>{1,4}
Initial: (개별 속성 참조)
Applies to: 모든 요소(단, ruby base 컨테이너ruby annotation 컨테이너 제외)
Inherited: 아니오
Percentages: 개별 속성 참조
Computed value: 개별 속성 참조
Canonical order: 문법에 따름
Animation type: 개별 속성 참조

이 속성들은 테두리의 두께, 즉 테두리 너비를 지정합니다. 여기서

<line-width> = <length [0,∞]> | thin | medium | thick

음수 값은 유효하지 않습니다. thin, medium, thick 키워드는 각각 1px, 3px, 5px에 해당합니다.

border-width 속성은 한 번의 선언으로 border-top-width, border-right-width, border-bottom-width, border-left-width를 설정하는 축약형 속성입니다.

값이 하나면 모든 면에 적용됩니다. 값이 두 개면 위와 아래는 첫 번째 값, 오른쪽과 왼쪽은 두 번째 값으로 설정됩니다. 값이 세 개면 위는 첫 번째 값, 왼쪽과 오른쪽은 두 번째 값, 아래는 세 번째 값이 적용됩니다. 값이 네 개면 각각 위, 오른쪽, 아래, 왼쪽에 적용됩니다.

참고: 초기 너비는 medium이지만, 초기 스타일은 none이므로; used 초기 너비는 0입니다.

3.4. 테두리 축약형 속성

Name: border-top, border-right, border-bottom, border-left
Value: <line-width> || <line-style> || <color>
Initial: 개별 속성 참조
Applies to: 모든 요소(단, ruby base 컨테이너ruby annotation 컨테이너 제외)
Inherited: 아니오
Percentages: 해당 없음
Computed value: 개별 속성 참조
Canonical order: 문법에 따름
Animation type: 개별 속성 참조

축약형 속성들은 박스의 위, 오른쪽, 아래, 왼쪽 border-width, border-color, border-style을 설정합니다. 생략된 값은 초기값으로 설정됩니다.

Name: border
Value: <line-width> || <line-style> || <color>
Initial: 개별 속성 참조
Applies to: 모든 요소(단, ruby base 컨테이너ruby annotation 컨테이너 제외)
Inherited: 아니오
Percentages: 해당 없음
Computed value: 개별 속성 참조
Canonical order: 문법에 따름
Animation type: 개별 속성 참조

border 속성은 박스의 네 면에 대해 동일한 border-width, border-color, border-style을 설정하는 축약형 속성입니다. marginpadding 축약형 속성과 달리, border 속성은 네 면에 서로 다른 값을 설정할 수 없습니다. 그럴 경우, 다른 테두리 속성들을 사용해야 합니다.

border 축약형은 border-image도 초기값으로 재설정합니다. 따라서 작성자는 이전에 적용된 테두리 설정을 덮어쓸 때 다른 축약형이나 개별 속성보다 border 축약형을 사용하는 것이 권장됩니다. 이렇게 하면 border-image도 재설정되어 새로운 스타일이 제대로 적용될 수 있습니다.

참고: CSS 작업 그룹은 border 축약형이 향후 CSS 레벨에서도 모든 테두리 속성을 리셋하도록 할 계획입니다. 예를 들어, 미래에 glyphs를 테두리로 사용할 수 있는 border-characters 속성이 도입된다면, 그것도 border 축약형으로 리셋됩니다. border 축약형으로 테두리를 리셋하면, 미래에 어떤 속성이 추가되더라도 "빈 캔버스"를 보장할 수 있습니다.

예를 들어, 아래 첫 번째 규칙은 그 뒤의 다섯 개 규칙과 같습니다:
p { border: solid red }
p {
  border-top: solid red;
  border-right: solid red;
  border-bottom: solid red;
  border-left: solid red;
  border-image: none;
}

속성들이 어느 정도 기능이 겹치므로, 규칙이 작성되는 순서가 중요할 수 있습니다.

아래 예시를 참고하세요:
blockquote {
  border-color: red;
  border-left: double;
  color: black
}

위 예시에서, 왼쪽 테두리 색상은 검은색이고, 나머지 테두리는 빨간색입니다. 이는 border-left가 너비, 스타일, 색상을 모두 설정하기 때문입니다. border-left 속성에 색상 값이 없으므로, color 속성에서 가져옵니다. color 속성이 border-left 뒤에 지정되어 있어도 상관없습니다.

4. 둥근 모서리

4.1. 곡률 반경: border-radius 속성들

Name: border-top-left-radius, border-top-right-radius, border-bottom-right-radius, border-bottom-left-radius
Value: <length-percentage [0,∞]>{1,2}
Initial: 0
Applies to: 모든 요소(본문 참조)
Inherited: 아니오
Percentages: 해당 border box의 치수 기준
Computed value: 쌍의 계산된 <length-percentage>
Canonical order: 문법에 따름
Animation type: 계산된 값 기준
Logical property group: border-radius
Name: border-radius
Value: <length-percentage [0,∞]>{1,4} [ / <length-percentage [0,∞]>{1,4} ]?
Initial: 개별 속성 참조
Applies to: 모든 요소(본문 참조)
Inherited: 아니오
Percentages: 해당 border box의 치수 기준
Computed value: 개별 속성 참조
Canonical order: 문법에 따름
Animation type: 개별 속성 참조

border-*-radius 속성의 두 <length-percentage> 값은 외부 border edge의 모서리 형태를 정의하는 1/4 타원의 반경을 의미합니다(아래 다이어그램 참고). 첫 번째 값은 수평 반경, 두 번째 값은 수직 반경입니다. 두 번째 값이 생략되면 첫 번째 값을 복사합니다. 길이 중 하나가 0이면, 모서리는 둥글지 않고 네모납니다. 수평 반경의 백분율은 border box의 너비를, 수직 반경의 백분율은 border box의 높이를 기준으로 합니다. 음수 값은 유효하지 않습니다.

내접 타원 다이어그램
border-top-left-radius: 55pt 25pt의 두 값은 모서리의 곡률을 정의합니다.
이 예시는 15em 너비, 10em 높이의 타원을 그립니다:
DIV.standout {
    width: 13em;
    height: 8em;
    border: solid black 1em;
    border-radius: 7.5em 5em }

border-radius 축약형은 네 border-*-radius 속성을 모두 설정합니다. 슬래시(/) 앞뒤에 값이 있으면, 슬래시 앞의 값들은 수평 반경을, 슬래시 뒤의 값들은 수직 반경을 설정합니다. 슬래시가 없으면, 모든 값이 두 축에 동일하게 적용됩니다. 각 반경의 네 값은 위쪽-왼쪽, 위쪽-오른쪽, 아래쪽-오른쪽, 아래쪽-왼쪽 순서입니다. 아래쪽-왼쪽이 생략되면 위쪽-오른쪽과 동일합니다. 아래쪽-오른쪽이 생략되면 위쪽-왼쪽과 동일합니다. 위쪽-오른쪽이 생략되면 위쪽-왼쪽과 동일합니다.

border-radius: 4em;

는 다음과 동일합니다

border-top-left-radius:     4em;
border-top-right-radius:    4em;
border-bottom-right-radius: 4em;
border-bottom-left-radius:  4em;

그리고

border-radius: 2em 1em 4em / 0.5em 3em;

는 다음과 동일합니다

border-top-left-radius:     2em 0.5em;
border-top-right-radius:    1em 3em;
border-bottom-right-radius: 4em 0.5em;
border-bottom-left-radius:  1em 3em;

4.2. 모서리 형태 지정

padding edge(내부 테두리) 반경은 외부 테두리 반경에서 해당 테두리 두께를 뺀 값입니다. 결과가 음수이면, 내부 반경은 0입니다. (이 경우 테두리 내부 곡선의 중심이 외부 곡선의 중심과 일치하지 않을 수 있습니다.) content edge 반경도 padding edge 반경에서 해당 padding을 뺀 값이며, 음수면 0입니다. 곡선 구간 내의 테두리와 패딩 두께는 인접한 면에서 보간되고, 인접한 두 테두리 두께가 다를 경우 코너는 두꺼운 테두리와 얇은 테두리 사이가 부드럽게 이어집니다.

모든 테두리 스타일(solid, dotted, inset 등) 모두 테두리 곡선을 따릅니다.

두께가 다른 테두리에 둥근 모서리가 미치는 영향
둥근 모서리가 연결된 두 테두리 두께가 다를 때(왼쪽), 둥근 모서리가 테두리의 반경보다 두꺼울 때(오른쪽)의 효과.

참고: 코너 외부 곡선의 중심이 반대쪽 padding edge를 넘으면(코너의 반대쪽 면의 border area에서), 내부 곡선은 완전한 1/4 타원이 아닙니다.

p { width: 70px; height: 70px; border: solid 30px;
border-color: orange orange silver silver;
border-top-right-radius: 100%; }
커브가 좌상단에서 시작해 우상단을 지나 우하단까지 이어지는 1/4 타원 호가 그려지며,
					          반대쪽 테두리 두께만큼 padding edge 곡선의 시작점이 외부 arc의 끝점에서 안쪽으로 들어간다.
border-radius 곡선이 반대쪽 테두리까지 확장되면, padding edge의 호가 90° 미만이 됩니다.

margin edgeborder edge의 바깥쪽에 있으므로, 각 테두리 반경에 해당 margin 두께를 더해서 반경을 계산합니다. 하지만, 테두리 반경이 margin보다 작아 뾰족한 코너를 만들어야 할 경우(둥근 코너와 뾰족한 코너의 연속성을 보장하기 위해), margin이 테두리 반경보다 작은 경우 margin은 반경/마진 비율 r에 대해 1 + (r-1)3만큼 곱해 코너 반경을 계산합니다.

4.3. 모서리 클리핑

테두리 이미지border-radius의 영향을 받지 않지만, 테두리, 패딩, 콘텐츠 에지에 대한 페인팅 또는 이벤트 처리 클리핑 효과는 각자 곡선에 맞게 잘려야 합니다. 예를 들어, 배경은 background-clip으로 지정된 곡선에 잘리고, overflowvisible이 아닐 때는 곡선 padding edge에, 치환 요소 콘텐츠는 곡선 content edge에, 포인터 이벤트는 곡선 border edge에 등등 잘립니다.

참고: border-radius가 요소의 상호작용 영역을 줄이므로, 저자는 남은 상호작용 영역이 대상 플랫폼의 권장 최소값을 충족하는지 확인해야 합니다. 특히, border-radius를 사용할 때 권장 터치 타깃 최소 크기에 맞추려면 더 넓은 너비와 높이가 필요할 수 있습니다.

이 예시는 적절한 패딩을 추가하여 콘텐츠가 모서리를 넘치지 않게 만듭니다. 테두리는 없지만, 배경은 둥근 모서리를 가집니다.
DIV {
    background: black;
    color: white;
    border-radius: 1em;
    padding: 1em }

4.4. 색상과 스타일 전환

색상과 스타일 전환은 두 border-radius와 내부 곡선의 중심(만약 border-radius가 border width보다 작다면 패딩 에지의 모서리일 수 있음)을 모두 포함하는 가장 작은 사각형과 교차하는 테두리 구간 내에 포함되어야 합니다.

이 중 하나의 테두리가 너비가 0이면, 다른 테두리가 전체 전환 영역을 차지합니다. 그렇지 않으면, 인접한 테두리 간의 색상과 스타일 전환의 중심은 테두리 두께의 비율에 대한 연속 단조 함수로 곡선 위의 한 점입니다. 하지만 실제로 이 전환이 어떻게 보이고, 이 비율에서 곡선의 점으로 어떻게 매핑되는지는 정의되지 않습니다.

곡선 모서리의 전환 영역 예시
이러한 모서리 형태에서는 색상과 스타일 전환이 초록색 영역 내에 있어야 합니다. D의 경우, border-radius로 정의된 사각형이 내부 곡선의 중심(뾰족한 코너)이 포함되지 않으므로, 전환 영역이 그 코너까지 확장됩니다. 전환은 전체 전환 영역을 차지할 수도 있으나, 반드시 그럴 필요는 없습니다. 예를 들어, 두 실선 테두리 사이의 그라데이션 색상 전환은 외부 반경과 내부 반경의 끝점만을 경계로 하는 영역(케이스 D에선 어두운 초록색 영역)만 차지할 수도 있습니다.

4.5. 곡선 겹침

모서리 곡선은 겹치면 안 됩니다: 인접한 두 border-radius의 합이 border box의 크기를 초과할 때, UA는 모든 border-radius의 사용값을 비례적으로 줄여 어느 것도 겹치지 않게 해야 합니다. 반경 축소 알고리즘은 다음과 같습니다:

f = min(Li/Si), 여기서 i ∈ {top, right, bottom, left}, Si는 해당 면의 두 코너 반경의 합, Ltop = Lbottom = 박스의 너비, Lleft = Lright = 박스의 높이. f < 1이면 모든 코너 반경을 f만큼 곱해 줄입니다.

참고: 이 공식은 1/4 원이 그대로 유지되고, 큰 반경이 작은 반경보다 항상 크도록 보장하지만, 이미 충분히 작은 코너까지 더 줄일 수 있으므로, 인접 요소의 테두리가 동일하게 보여야 하는데 다르게 보일 수 있습니다.

곡선이 스크롤바와 같은 UI 요소와 겹치면, UA는 영향을 받는 border-radius(해당 반경만)를 필요만큼 더 줄일 수 있습니다.

예를 들어, 아래 도형의 테두리 A는 다음과 같을 수 있습니다:
box-sizing: border-box;
width: 6em;
height: 2.5em;
border-radius: 0.5em 2em 0.5em 2em

높이(2.5em)는 지정된 반경(0.5em + 2.0em)에 충분합니다. 하지만 높이가 2em인 경우,

box-sizing: border-box;
width: 6em;
height: 2em;
border-radius: 0.5em 2em 0.5em 2em

모든 코너를 0.8배로 줄여야 합니다. 사용된 테두리 반경은 0.4em(0.5em 대신), 1.6em(2em 대신)입니다. 아래 도형의 B를 참고하세요.

[이미지: 두 개는 아주 작은 둥근 모서리, 두 개는 매우 큰 둥근 모서리를 갖는 사각형]
이 둥근 모서리는 'width: 6em; height: 2.5em; border-radius: 0.5em 2em 0.5em 2em'의 A 결과일 수 있습니다; B는 height: 2em일 때입니다.

4.6. 테이블에 미치는 효과

border-radius 속성은 table, inline-table, table-cell 박스에 분리된 테두리 모드(border-collapse: separate)에서 적용됩니다. border-collapsecollapse일 때는 효과가 없습니다.

5. 테두리 이미지

작성자는 테두리 스타일 대신 사용할 이미지를 지정할 수 있습니다. 이 경우, 테두리의 디자인은 border-image-source로 지정된 이미지의 면과 코너에서 가져오며, 해당 이미지의 조각들은 border image area 크기에 맞게 다양한 방식으로 분할, 크기 조정, 늘리기가 가능합니다. border-image 속성은 레이아웃에는 영향을 미치지 않습니다: 박스, 그 내용, 주변 내용의 레이아웃은 border-widthborder-style 속성만으로 결정됩니다.

이 예시는 위/아래 테두리는 오렌지색 다이아몬드 여러 개, 왼쪽/오른쪽 테두리는 하나의 늘린 다이아몬드로 구성된 테두리를 만듭니다. 코너는 다른 색상의 다이아몬드입니다. 타일로 사용할 이미지는 다음과 같습니다. 다이아몬드를 제외하고는 투명합니다:

테두리용 타일

이미지는 81x81 픽셀이며 9등분해야 합니다. 스타일 규칙은 아래와 같이 할 수 있습니다:

DIV {
  border: double orange 1em;
  border-image: url("border.png") 27 round stretch;
 }

12em x 5em 크기의 DIV에 적용하면, 결과는 다음과 비슷합니다:

다이아몬드 테두리 요소

좀 더 복잡한 예시입니다. 이 예시는 border 이미지가 폴백 border-style과 어떻게 대응되는지, border 영역을 넘어서 확장될 수 있음을 보여줍니다. 테두리 이미지는 확장된 코너 효과가 있는 물결 모양의 초록 테두리입니다:
다이어그램: 테두리 이미지는 물결 모양 초록색 테두리이며,
		     코너 쪽으로 더 과장된 물결이 있고,
		     코너에는 분리된 초록색 원이 있음.
		     각 면에서 124px 오프셋에서 네 번 잘라
		     이미지를 124px 정사각형 코너, 얇고 124px 너비의 측면, 작은 가운데 정사각형으로 나눔.
border-image-source 이미지, 네 border-image-slice 컷이 124px에서 이미지를 아홉 부분으로 나눔.

나머지 테두리 속성은 타일 배치에 다음과 같이 상호작용합니다:

다이어그램: 이미지 없는(폴백) 렌더링은 초록색 이중 테두리.
		          border-image를 사용하면 물결 모양 초록색 테두리가 나타나며,
		          코너에 가까워질수록 물결이 길어짐.
		          코너 타일은 124px 정사각형, 측면 타일은 정수 개수만큼 반복되어 사이 공간을 채움.
		          점진적 코너 효과 때문에 타일이 패딩 영역 깊숙이 침투.
		          전체 border-image 효과는 31px 아웃셋되어, 물결의 골짜기가 패딩 에지 바로 바깥에 맞춤.
모든 border-image 속성과 상호작용, border-image 적용/미적용 시 렌더링을 보여줌.

여기서 border-width는 12px이지만, border-image-width 속성은 124px로 계산됩니다. border image area는 border box에서 31px만큼 아웃셋되어 margin area까지 확장됩니다. border-image가 로드되지 않거나 UA가 지원하지 않으면, 폴백 렌더링은 초록색 이중 테두리를 사용합니다.

border 축약형은 border-image를 리셋합니다. 이를 통해 모든 테두리 효과를 끄거나 리셋하기 쉬워집니다:
.notebox {
  border: double orange;
  /* 반드시 'border' 축약형을 먼저 설정해야, 그렇지 않으면 'border-image'가 지워짐 */
  border-image: url("border.png") 30 round;
  /* 다른 'border' 속성은 이후에 설정 가능 */
  border-width: thin thick;
}
...
.sidebar .notebox {
  box-shadow: 0 0 5px gray;
  border-radius: 5px;
  border: none; /* 모든 테두리 끄기 */
  /* 'border' 축약형은 'border-image'도 리셋함 */
}

5.1. 이미지 소스: border-image-source 속성

Name: border-image-source
Value: none | <image>
Initial: none
Applies to: 모든 요소(단, border-collapsecollapse일 때의 내부 테이블 요소는 제외)
Inherited: 아니오
Percentages: 해당 없음
Computed value: 키워드 none 또는 계산된 <image>
Canonical order: 문법에 따름
Animation type: 불연속

이 속성은 border-style 속성으로 지정된 렌더링 대신 테두리로 사용할 이미지를 지정합니다. fill 키워드가 border-image-slice에 주어지면, 요소의 추가 이미지 배경으로도 사용됩니다. 값이 none이거나 이미지를 표시할 수 없거나(또는 속성이 적용되지 않으면) 테두리 스타일이 사용됩니다; 그렇지 않으면 요소의 border-style 테두리는 그려지지 않고, 이 border image가 아래에서 설명하는 방식으로 그려집니다.

5.2. 이미지 분할: border-image-slice 속성

Name: border-image-slice
Value: [<number [0,∞]> | <percentage [0,∞]>]{1,4} && fill?
Initial: 100%
Applies to: 모든 요소(단, border-collapsecollapse일 때의 내부 테이블 요소는 제외)
Inherited: 아니오
Percentages: 이미지 크기 기준
Computed value: 네 값(각각 숫자 또는 백분율); fill 키워드가 있으면 포함
Canonical order: 문법에 따름
Animation type: 계산된 값 기준

이 속성은 이미지의 상, 우, 하, 좌 가장자리에서 안쪽으로 오프셋을 지정해, 이미지를 9개 영역(4개 코너, 4개 면, 가운데)으로 나눕니다. 가운데 이미지는 fill 키워드가 없으면 버려집니다(완전히 투명 처리). (배경 위에 그려집니다; Drawing the Border Image 참고.)

값이 하나면 모든 면에 적용됩니다. 값이 두 개면 위/아래는 첫 번째 값, 오른쪽/왼쪽은 두 번째 값으로 설정됩니다. 값이 세 개면 위는 첫 번째 값, 왼쪽/오른쪽은 두 번째 값, 아래는 세 번째 값이 적용됩니다. 값이 네 개면 각각 위, 오른쪽, 아래, 왼쪽에 적용됩니다.

<percentage [0,∞]>
백분율은 이미지 크기 기준입니다: 수평 오프셋은 이미지 너비, 수직 오프셋은 이미지 높이 기준입니다.
<number [0,∞]>
숫자는 래스터 이미지는 픽셀 단위, 벡터 이미지는 벡터 좌표 단위입니다.
fill
fill 키워드가 있으면, border-image 가운데 부분이 보존됩니다. (기본값은 버림, 즉 빈 영역 처리.)

음수 값은 유효하지 않습니다. 이미지 크기보다 큰 계산값은 100%로 처리됩니다.

border-image-slice 값으로 지정된 영역은 겹칠 수 있습니다. 하지만 좌/우 너비의 합이 이미지 너비 이상이면, 상/하 면과 가운데 영역 이미지는 비어 있게 됩니다—​이 경우 해당 부분에 투명 이미지가 지정된 것과 동일한 효과입니다. 상/하 값도 마찬가지입니다.

이미지 크기를 알아야 분할할 수 있을 경우 (예: 자연 치수가 없는 SVG), 기본 크기 지정 알고리즘으로, 지정 크기 없이, border image area기본 객체 크기로 사용합니다.

다이어그램: 이미지에 두 번 수평, 두 번 수직으로 자르는 컷
25% 30% 12% 20% 값에 해당하는 컷을 보여주는 다이어그램

5.3. 그리기 영역: border-image-width 속성

Name: border-image-width
Value: [ <length-percentage [0,∞]> | <number [0,∞]> | auto ]{1,4}
Initial: 1
Applies to: 모든 요소, 단 border-collapsecollapse인 내부 테이블 요소는 제외
Inherited: 아니오
Percentages: border image area의 너비/높이 기준
Computed value: 네 값, 각각 숫자, auto 키워드, 또는 계산된 <length-percentage>
Canonical order: 문법에 따름
Animation type: 계산된 값 기준

border imageborder image area라 불리는 영역 내에 그려집니다. 이 영역의 경계는 기본적으로 border box와 일치합니다. border-image-outset 참고.

border-image-width의 네 값은 border image area를 아홉 개 영역(region)으로 나누는 데 사용되는 오프셋을 지정합니다. 각 오프셋은 해당 영역의 상, 우, 하, 좌에서 안쪽으로의 거리입니다.

값이 하나면 모든 면에 적용됩니다. 값이 두 개면 위/아래는 첫 번째 값, 오른쪽/왼쪽은 두 번째 값으로 설정됩니다. 값이 세 개면 위는 첫 번째 값, 왼쪽/오른쪽은 두 번째 값, 아래는 세 번째 값이 적용됩니다. 값이 네 개면 각각 위, 오른쪽, 아래, 왼쪽에 적용됩니다.

값의 의미는 다음과 같습니다:

<length-percentage [0,∞]>
백분율은 border image area 크기 기준입니다: 수평 오프셋은 영역 너비, 수직 오프셋은 영역 높이 기준입니다.
<number [0,∞]>
숫자는 해당 면의 계산된 border-width의 배수를 의미합니다.
auto
auto가 지정되면, 사용되는 border-image-width는 해당 이미지 조각의 자연 너비 또는 높이(해당되는 쪽)입니다(border-image-slice 참고). 이미지에 필요한 자연 치수가 없으면, 해당 계산된 border-width가 대신 사용됩니다.

모든 border-image-width 값에 대해 음수 값은 유효하지 않습니다.

대칭되는 두 border-image-width 오프셋이 겹칠 정도로 크면, 모든 border-image-width 오프셋의 사용값을 비례적으로 줄여 겹치지 않게 합니다. 수식으로는: Lwidthborder image area의 너비, Lheight는 높이, Wsideborder-image-width의 해당 면 값일 때, f = min(Lwidth/(Wleft+Wright), Lheight/(Wtop+Wbottom)). f < 1이면 모든 Wf만큼 곱해 줄입니다.

5.4. 에지 오버행: border-image-outset 속성

Name: border-image-outset
Value: [ <length [0,∞]> | <number [0,∞]> ]{1,4}
Initial: 0
Applies to: 모든 요소(단, border-collapsecollapse인 내부 테이블 요소는 제외)
Inherited: 아니오
Percentages: 해당 없음
Computed value: 네 값, 각각 숫자 또는 절대 길이
Canonical order: 문법에 따름
Animation type: 계산된 값 기준

이 값은 border image areaborder box를 얼마나 넘어서 확장되는지 지정합니다.

값이 하나면 모든 면에 적용됩니다. 값이 두 개면 위/아래는 첫 번째 값, 오른쪽/왼쪽은 두 번째 값으로 설정됩니다. 값이 세 개면 위는 첫 번째 값, 왼쪽/오른쪽은 두 번째 값, 아래는 세 번째 값이 적용됩니다. 값이 네 개면 각각 위, 오른쪽, 아래, 왼쪽에 적용됩니다.

<length [0,∞]>
지정된 길이만큼 오버행(outset)됩니다.
<number [0,∞]>
해당 면의 계산된 border-width 배수만큼 오버행됩니다.

음수 값은 유효하지 않습니다.

border box 바깥에 그려진 border-image 부분은 스크롤을 유발하지 않습니다. 또한 그러한 부분은 마우스 이벤트에 대해 보이지 않으며, 해당 요소에 이벤트를 대신 캡처하지도 않습니다.

참고: 스크롤 메커니즘을 유발하지 않더라도, outset된 이미지는 상위 요소나 뷰포트에 의해 잘릴 수 있습니다.

5.5. 이미지 타일링: border-image-repeat 속성

Name: border-image-repeat
Value: [ stretch | repeat | round | space ]{1,2}
Initial: stretch
Applies to: 모든 요소(단, border-collapsecollapse인 내부 테이블 요소는 제외)
Inherited: 아니오
Percentages: 해당 없음
Computed value: 두 키워드, 각 축별 하나
Canonical order: 문법에 따름
Animation type: 불연속

이 속성은 border image의 측면 및 가운데 부분 이미지를 어떻게 크기 조정과 타일링할지 지정합니다. 첫 번째 키워드는 위/가운데/아래 부분의 수평 크기 조정과 타일링에, 두 번째 키워드는 좌/가운데/우 부분의 수직 크기 조정과 타일링에 적용됩니다; Drawing the Border Image 참고. 두 번째 키워드가 없으면 첫 번째와 동일하게 간주합니다. 값의 의미는 다음과 같습니다:

stretch
이미지는 해당 영역(region)을 채우도록 늘어납니다.
repeat
이미지는 해당 영역(region)을 채우도록 타일링(반복)됩니다.
round
이미지는 해당 영역(region)을 채우도록 타일링(반복)됩니다. 영역을 정수 개 타일로 채우지 못하면, 이미지를 크기 조정하여 정수 개 타일이 딱 맞게 합니다.
space
이미지는 해당 영역(region)을 채우도록 타일링(반복)됩니다. 영역을 정수 개 타일로 채우지 못하면, 남는 공간을 타일 주변에 분배합니다.

테두리 이미지 부분의 크기 조정과 타일링 과정은 아래 섹션에서 정확히 설명됩니다.

5.6. 테두리 이미지 그리기

border imageborder-image-source로 지정된 후, border-image-slice 값으로 분할되고, 결과 9개의 이미지는 4단계로 해당 border image region에 맞게 크기 조정, 위치 지정, 타일링됩니다:

  1. border-image-width로 크기 조정.
    • 위/아래 테두리 이미지는 각각 위/아래 border image region 높이에 맞추고, 너비는 비례적으로 조정합니다.
    • 왼쪽/오른쪽 테두리 이미지는 각각 왼쪽/오른쪽 border image region 너비에 맞추고, 높이는 비례적으로 조정합니다.
    • 코너 이미지는 해당 border image region의 너비와 높이에 맞게 조정합니다.
    • 가운데 이미지는 위 이미지와 같은 비율로 너비를 조정하고, 그 비율이 0 또는 무한대면 아래 이미지의 비율을 대신 사용하며, 그것도 안 되면 너비 조정은 하지 않습니다. 가운데 이미지의 높이는 왼쪽 이미지와 같은 비율로 조정, 그 비율이 0 또는 무한대면 오른쪽 이미지의 비율을 대신 사용, 그것도 안 되면 높이 조정은 하지 않습니다.
  2. border-image-repeat로 크기 조정.
    • 첫 번째 키워드가 stretch면, 위/가운데/아래 이미지는 border image area의 가운데 영역 너비에 맞게 추가로 크기 조정됩니다. 높이는 더 이상 변경되지 않습니다.
    • 첫 번째 키워드가 round면, 위/가운데/아래 이미지는 너비가 조정되어, border image area의 가운데 영역에 정확히 정수 개가 맞게 들어갑니다. roundbackground-repeat에서와 동일합니다.
    • 첫 번째 키워드가 repeat 또는 space면, 위/가운데/아래 이미지는 더 이상 변경되지 않습니다.
    • 두 번째 키워드의 stretch, round, repeat, space 효과는 유사하게 좌/가운데/우 이미지의 높이에 적용됩니다.
  3. 첫 번째 타일 위치 지정.
    • 첫 번째 키워드가 repeat면, 위/가운데/아래 이미지는 해당 영역 내에서 수평 중앙에 배치됩니다. 아니면 해당 border image area의 왼쪽에 배치됩니다.
    • 두 번째 키워드가 repeat면, 좌/가운데/우 이미지는 해당 영역 내에서 수직 중앙에 배치됩니다. 아니면 해당 border image area의 위쪽에 배치됩니다.
  4. 타일링 및 그리기.
    • 이미지는 각자 영역을 채우도록 타일링됩니다.
    • space의 경우, 부분 타일은 버리고 남는 공간을 타일 앞뒤 및 사이에 고르게 분배합니다. (즉, 첫 타일 앞, 마지막 타일 뒤, 타일 사이의 간격이 동일합니다.) 이로 인해 border-image 측면 영역이 비어 있을 수 있습니다.
    • 이미지는 일반 테두리와 동일한 쌓임 수준에서 그려집니다: 배경 레이어 바로 앞.
    • fillborder-image-source에 지정되지 않은 경우 가운데 이미지는 그려지지 않습니다.

5.7. 테두리 이미지 축약형: border-image 속성

Name: border-image
Value: <'border-image-source'> || <'border-image-slice'> [ / <'border-image-width'> | / <'border-image-width'>? / <'border-image-outset'> ]? || <'border-image-repeat'>
Initial: 개별 속성 참조
Applies to: 개별 속성 참조
Inherited: 아니오
Percentages: 해당 없음
Computed value: 개별 속성 참조
Canonical order: 문법에 따름
Animation type: 개별 속성 참조

이 속성은 한 번의 선언으로 border-image-source, border-image-slice, border-image-width, border-image-outset, border-image-repeat를 설정하는 축약형 속성입니다. 생략된 값은 초기값으로 설정됩니다.

5.8. 테이블에 미치는 효과

border-image 속성은 border-collapsecollapse로 설정된 테이블 및 인라인 테이블의 테두리에 적용됩니다. 하지만 이 명세는 이미지 테두리가 어떻게 렌더링되는지 정의하지 않습니다. 특히, 이미지 테두리가 테이블의 셀, 행, 행 그룹의 테두리와 가장자리에서 어떻게 상호작용하는지 정의하지 않습니다 (테두리 충돌 해소 참고).

향후 명세에서 렌더링 방식이 정의될 것으로 예상됩니다. 그 전까지는 UA가 collapse된 테이블에 border image를 적용하지 않는 것이 권장됩니다.

6. 기타 효과

참고: 박스가 분할될 때 배경과 테두리가 어떻게 적용되는지 정의하는 box-decoration-break 속성은 CSS 단편화 모듈로 이동했습니다. [CSS-BREAK-3]

6.1. 드롭 섀도: box-shadow 속성

Name: box-shadow
Value: none | <shadow>#
Initial: none
Applies to: 모든 요소
Inherited: 아니오
Percentages: 해당 없음
Computed value: none 키워드 또는 리스트, 각 항목은 4개의 절대 길이와 계산된 색상, 선택적으로 inset 키워드로 구성됨
Canonical order: 문법에 따름
Animation type: 계산된 값 기준, none은 0 아이템 리스트로 처리, 빈 섀도(예: transparent 0 0 0 0)와 필요한 경우 inset 키워드를 추가해 더 긴 리스트와 호환되면 맞춤

box-shadow 속성은 박스에 하나 이상의 그림자(드롭 섀도)를 추가합니다. 값은 none이거나 쉼표로 구분된 그림자 리스트(앞에서 뒤로 순서)일 수 있습니다.

각 그림자는 <shadow>로 주어지며, 2~4개의 길이 값, 선택적 색상, 선택적 inset 키워드로 구성됩니다. 생략된 길이는 0, 생략된 색상은 currentColor가 기본값입니다.

<shadow> = <color>? && [<length>{2} <length [0,∞]>? <length>?] && inset?

<shadow>의 구성요소는 다음과 같이 해석됩니다:

1번째 <length>
그림자의 수평 오프셋을 지정합니다. 양수면 박스 오른쪽에 그림자가 생기고, 음수면 왼쪽에 그림자가 생깁니다.
2번째 <length>
그림자의 수직 오프셋을 지정합니다. 양수면 그림자가 아래쪽, 음수면 위쪽으로 이동합니다.
3번째 <length [0,∞]>
블러 반경을 지정합니다. 음수 값은 유효하지 않습니다. blur 값이 0이면 그림자 가장자리가 날카롭고, 값이 클수록 가장자리가 더 흐려집니다. 아래의 그림자 흐림 참고.
4번째 <length>
확장 거리(spread distance)를 지정합니다. 양수면 그림자가 모든 방향으로 지정된 반경만큼 확장되고, 음수면 그림자가 축소됩니다. 아래 그림자 형태 참고.

참고: 내부 그림자의 경우, 그림자 영역을 확장하면 그림자 외곽 형태는 오히려 축소됩니다.

<color>
그림자 색상을 지정합니다. 색상 생략 시 currentColor가 기본값입니다.
inset
inset 키워드가 있으면, 그림자가 외부 box-shadow(박스가 캔버스 위에 떠 있는 것처럼 그림자), 대신 내부 box-shadow(캔버스가 박스에 그림자를 던지는 것처럼 박스를 오려낸 것처럼 보임)으로 동작합니다.
아래 예시는 spread와 blur가 그림자에 미치는 효과를 보여줍니다:
width: 100px; height: 100px;
border: 12px solid blue; background-color: orange;
border-top-left-radius: 60px 90px;
border-bottom-right-radius: 60px 90px;
box-shadow: 64px 64px 12px 40px rgba(0,0,0,0.4),
            12px 12px 0px 8px rgba(0,0,0,0.4) inset;
위 샘플 코드는 100px×100px 오렌지 박스에 12px 파란 테두리를 만들고,
			          우측 상단/좌측 하단 모서리는 날카롭고, 좌측 상단/우측 하단 모서리는 타원형 곡선입니다.
			          두 그림자가 생성됨: 하나는 내부 그림자로, offset과 spread 덕분에 박스 상단/좌측에 20px 폭의 더 진한 오렌지 밴드(둥근 좌상단 모서리 형태에 맞춰 곡선)가 만들어지고,
			          다른 하나는 204px×204px 회색 복제 형태가 박스 뒤에 위치하며,
			          박스의 상단/좌측에서 24px 아래/오른쪽으로 offset됩니다.
			          외부 그림자에 12px blur를 적용하면 그림자 경계에서 24px 폭의 점진적 투명색 변화가 생깁니다.

6.1.1. 그림자 형태, 확장, 노크아웃

외부 box-shadow는 요소의 border-box가 불투명인 것처럼 그림자를 만듭니다. 확장 거리가 0이면, 외곽선은 border box와 정확히 동일한 크기와 형태입니다. 그림자는 border edge 바깥쪽에만 그려지고, 요소의 border-box 안쪽에서는 잘립니다.

내부 box-shadow는 padding edge 바깥이 불투명한 것처럼 그림자를 만듭니다. 확장 거리가 0이면, 외곽선은 padding box와 정확히 동일한 크기와 형태입니다. 그림자는 padding edge 안쪽에만 그려지고, 요소의 padding box 바깥에서는 잘립니다.

확장 거리가 정의되어 있으면, 위에서 정의한 그림자 외곽선이 외부 box-shadow의 경우 바깥쪽으로, 내부 box-shadow의 경우 안쪽으로 확장(또는 축소)됩니다. 그림자의 직선 가장자리를 확장 거리만큼 outsetting(내부는 insetting)하며, 결과 너비/높이를 0으로 바닥 처리합니다.

아래는 파란 테두리가 있는 오렌지 박스에 그림자를 줄 때의 예시입니다.
border:5px solid blue;
background-color:orange;
width: 144px;
height: 144px;
border-radius: 20px;
border-radius: 0;
box-shadow:
  rgba(0,0,0,0.4)
  10px 10px;
둥근 모서리 박스가 border box와 동일한 형태의 연한 회색 그림자를
					          박스 바로 아래쪽에서 오른쪽으로 10px, 아래쪽으로 10px offset되어 겹쳐짐. 네모난 모서리 박스가 border box와 동일한 형태의 연한 회색 그림자를
					          박스 바로 아래쪽에서 오른쪽으로 10px, 아래쪽으로 10px offset되어 겹쳐짐.
box-shadow:
  rgba(0,0,0,0.4)
  10px 10px
  inset
둥근 모서리 박스가 padding box의 역형태로 연한 회색 그림자가
					          상단/좌측에서 10px 안쪽(테두리 바로 안쪽)을 채움. 네모난 모서리 박스가 padding box의 역형태로 연한 회색 그림자가
					          상단/좌측에서 10px 안쪽(테두리 바로 안쪽)을 채움.
box-shadow:
  rgba(0,0,0,0.4)
  10px 10px 0
  10px /* spread */
둥근 모서리 박스가 박스와 동일한 형태지만 20px 더 크고,
					          그림자 상단/좌측이 박스와 정확히 겹치게 offset됨. 네모난 모서리 박스가 박스와 동일한 형태지만 20px 더 크고,
					          그림자 상단/좌측이 박스와 정확히 겹치게 offset됨.
box-shadow:
  rgba(0,0,0,0.4)
  10px 10px 0
  10px /* spread */
  inset
둥근 모서리 박스가 박스와 동일한 형태지만 20px 더 좁고,
					          그림자 상단/좌측이 padding edge 안쪽 20px을 채움. 둥근 모서리 박스가 박스와 동일한 형태지만 20px 더 좁고,
					          그림자 상단/좌측이 padding edge 안쪽 20px을 채움.

spread가 적용될 때 박스 형태를 유지하기 위해, 그림자의 코너 반경 또한 border-box(padding-box) 반경에서 확장 거리만큼 (내부는 감산) 증가(감소)합니다(0으로 바닥 처리). 단, 작은 border-radius에서 더 뾰족한 코너를 만들기 위해 (둥근·뾰족 코너의 연속성을 보장), border radius확장 거리보다 작으면 (내부 그림자는 확장 거리의 절대값보다 작을 때), 확장 거리를 비율 r에 따라 1 + (r-1)3 곱한 값으로 코너 반경 계산에 사용합니다. 예를 들어, border radius가 10px, 확장 거리가 20px이면(r = .5), 그림자 코너 반경은 10px + 20px × (1 + (.5 - 1)3) = 27.5px이 되어 30px보다 적게 됩니다. 이 보정은 각 치수별로 독립적으로 적용됩니다.

border-image는 box-shadow의 형태에 영향을 주지 않습니다.

6.1.2. 그림자 가장자리 흐림

0이 아닌 blur radius는 생성된 그림자가 흐려져야 함을 의미하며, 예를 들어 가우시안 필터 등이 사용될 수 있습니다. 정확한 알고리즘은 정의되지 않았으나, 생성된 그림자는 각 픽셀값이 예상값에서 5% 이내로 오차가 나야 하며, 그림자에 blur radius의 절반 표준편차로 가우시안 블러를 적용한 이미지와 유사해야 합니다.

참고: 긴 직선 그림자에서 blur radius는 그림자 가장자리를 기준으로 수직으로, 중심에서 양쪽으로 blur radius의 두 배 길이만큼 색상 변화가 명확하게 나타나며, 그림자 내부 끝점은 거의 그림자색, 외부 끝점은 거의 완전 투명입니다.

6.1.3. 레이어링, 레이아웃, 기타 세부사항

그림자 효과는 앞에서 뒤로 적용됩니다: 첫 번째 그림자가 맨 위, 나머지는 뒤에 쌓입니다. 그림자는 레이아웃에 영향을 주지 않고 다른 박스나 텍스트, 그림자와 겹칠 수 있습니다. 쌓임 컨텍스트와 페인팅 순서 기준으로, 요소의 외부 box-shadow는 해당 요소 배경 바로 아래에 그려지고, 내부 그림자는 배경 바로 위(테두리, border-image가 있으면 그 아래)에 그려집니다.

별도 명시가 없는 한, 드롭 섀도는 주 박스에만 적용됩니다. 영향받는 박스가 여러 fragment라면, box-decoration-break에 지정된 대로 그림자가 적용됩니다.

그림자는 스크롤을 유발하지 않으며 스크롤 가능한 오버플로우 영역의 크기를 늘리지 않습니다.

외부 그림자는 collapsing border 모델의 내부 테이블 요소에 영향을 주지 않습니다. collapsing border 모델에서 테두리 두께가 다를 때(예: 테이블의 한 행만 두꺼운 테두리, 행 span 셀이 인접 셀과 두께 다를 때) 단일 테두리 edge에 그림자가 정의되면, 그림자 위치와 렌더링은 정의되지 않습니다.

7. 레벨

이 절은 정보 제공용입니다. CSS는 각기 다른 기능 수준(레벨)을 가지며, 각 레벨은 그 상위 레벨의 부분집합입니다. (전체 설명은 [CSS-2017] 참고.) 아래 리스트는 이 명세의 각 레벨별 포함 기능을 설명합니다.

7.1. 레벨 1

7.2. 레벨 2

7.3. 레벨 3

8. 변경사항

8.1. 2023년 2월 14일 후보 권고안 스냅샷 이후 변경사항

8.2. 2020년 12월 22일 후보 권고안 스냅샷 이후 변경사항

8.3. 2017년 10월 17일 후보 권고안 이후 변경사항

8.4. 2014년 9월 9일 후보 권고안 이후 변경사항

이 명세에 대해 2014년 9월 9일 후보 권고안 이후 다음과 같은(비사소) 변경이 있었습니다:

8.5. 2014년 2월 4일 최종 초안 이후 변경사항

이 명세에 대해 2014년 2월 4일 최종 초안 이후 다음과 같은(비사소) 변경이 있었습니다:

전체 의견 처리 결과도 있음.

8.6. 2012년 7월 24일 후보 권고안 이후 변경사항

이 명세에 대해 2012년 7월 24일 후보 권고안 이후 다음과 같은(비사소) 변경이 있었습니다:

8.7. 2012년 4월 17일 후보 권고안 이후 변경사항

이 명세에 대해 2012년 4월 17일 후보 권고안 이후 다음과 같은(비편집) 변경이 있었습니다:

8.8. 2012년 2월 14일 “Last Call” 작업 초안 이후 변경사항

이 명세는 2012년 2월 14일 “Last Call” 작업 초안 이후 다음과 같은(비편집) 변경이 있었습니다:

이 변경들은 검토 기간 중 받은 의견에 대한 응답입니다. 자세한 내용은 의견 처리 결과를 참고하세요.

8.9. 2011년 2월 15일 후보 권고안 이후 변경사항

이 명세는 2011년 2월 15일 후보 권고안 이후 다음과 같은 변경이 있었습니다:

8.10. 2009년 12월 17일 후보 권고안 이후 변경사항

이 명세는 2009년 12월 17일 후보 권고안 이후 다음과 같은 변경이 있었습니다:

9. 감사의 글

Tapas Roy는 Border 모듈의 편집자였으며, 이후 Background 모듈과 통합되었습니다.

Ben Stucki에게는 둥근 모서리에서 인접한 두 테두리 두께가 다르거나 한쪽이 0일 때의 처리 정의에, Arjan Eising 및 Anne van Kesteren에게는 border-radius 문법에, Zack Weinberg에게는 코너 전환 영역 다이어그램에, Lea Verou, plinss, dbaron에게는 코너 반경 보정 공식에 감사드립니다 (특히 Lea에게는 실시간 데모에 특별히 감사드립니다).

테두리 이미지 관련 속성 세트는 처음에 fantasai가 제안했습니다. 현재의 단순화(이미지 한 장을 아홉 부분으로 자름)는 Ian Hickson 덕분입니다. (하지만 원래 아이디어는 익명의 Microsoft 엔지니어들에게서 나온 듯합니다.)

마지막으로 Brad Kemper에게는 초안의 많은 기능에 대한 피드백과 제안, 모든 box-shadow 예시 그림, 그리고 급진적인 변경 제안에 특별히 감사드립니다. 이 변경 제안 덕분에 border-image 속성이 이전 정의의 여러 문제를 해결할 수 있었습니다.

10. 개인정보 보호 관련 고려사항

이 명세는 새로운 개인정보 보호 관련 고려사항을 도입하지 않습니다.

11. 보안 관련 고려사항

이 명세는 새로운 보안 관련 고려사항을 도입하지 않습니다.

적합성

문서 관례

적합성 요구사항은 설명적 단언과 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는 접근 가능한 대안을 반드시(MUST) 제공해야 합니다.

적합성 클래스

이 명세에 대한 적합성은 세 가지 적합성 클래스에 대해 정의됩니다:

스타일 시트
CSS 스타일 시트.
렌더러
스타일 시트의 의미를 해석하여 이를 사용하는 문서를 렌더링하는 UA.
저작 도구
스타일 시트를 작성하는 UA.

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

렌더러가 본 명세에 적합하려면, 스타일 시트를 관련 명세에 정의된 대로 해석하는 것 외에도, 본 명세에서 정의된 모든 기능을 올바르게 파싱하고 그에 따라 문서를 렌더링해야 합니다. 단, 장치의 한계로 인해 UA가 문서를 올바르게 렌더링하지 못하는 경우 UA가 비적합하다고 할 수 없습니다. (예: UA는 흑백 모니터에서 색상을 렌더링할 필요는 없음.)

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

부분 구현

작성자가 향후 호환 가능한 파싱 규칙을 활용해 대체값을 지정할 수 있도록, CSS 렌더러는 사용 가능한 수준의 지원이 없는 모든 at-rule, 속성, 속성 값, 키워드, 기타 구문 구조를 반드시무효(적절히 무시)로 처리해야 합니다. 특히, UA는 여러 값이 있는 속성 선언에서 지원되지 않는 구성 값만 선택적으로 무시하고 지원되는 값만 적용해서는안 됩니다: 어떤 값이 무효(지원되지 않는 값은 반드시 무효로 간주)일 경우 CSS는 전체 선언을 무시해야 합니다.

불안정 및 독점적 기능의 구현

향후 안정적인 CSS 기능과의 충돌을 피하기 위해, CSSWG는 CSS의 불안정 기능 및 독점 확장 구현에 대해 모범 사례를 따를 것을 권장합니다.

비실험적 구현

명세가 후보 권고안 단계에 도달하면, 비실험적 구현이 가능해지며, 구현자는 명세대로 올바르게 구현되었음을 입증할 수 있는 모든 CR 수준 기능에 대해 별도의 접두사 없는 구현을 공개해야 합니다.

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

테스트케이스 및 구현 보고서 제출에 대한 추가 정보는 CSS 작업 그룹 웹사이트 https://www.w3.org/Style/CSS/Test/에서 확인할 수 있습니다. 문의는 public-css-testsuite@w3.org 메일링 리스트로 하세요.

CR 종료 기준

이 명세가 제안 권고안(Proposed Recommendation)으로 진급하려면, 각 기능별로 최소 두 개의 독립적이고 상호운용 가능한 구현이 있어야 합니다. 각 기능은 서로 다른 제품 집합에서 구현될 수 있으며, 모든 기능을 단일 제품에서 구현해야 한다는 요구는 없습니다. 이 기준을 위해 다음 용어를 정의합니다:

독립적(Independent)
각 구현은 서로 다른 주체가 개발해야 하며, 다른 적합 구현에서 사용된 코드를 공유, 재사용, 파생할 수 없습니다. 명세 구현에 영향을 미치지 않는 코드 부분은 이 요구사항에서 제외됩니다.
상호운용적(Interoperable)
공식 CSS 테스트 스위트의 해당 테스트케이스를 통과하거나, 구현이 웹 브라우저가 아닌 경우 동등한 테스트를 통과해야 합니다. 테스트 스위트의 모든 관련 테스트에 대해 해당 UA(사용자 에이전트)가 상호운용성을 주장하려면 동등한 테스트를 만들어야 하며, 이 동등 테스트를 통과할 수 있는 다른 UA도 있어야 합니다. 동등 테스트는 동료 검토(peer review)를 위해 공개되어야 합니다.
구현(Implementation)
다음을 만족하는 사용자 에이전트:
  1. 명세를 구현함.
  2. 일반 대중이 사용할 수 있음. 구현은 출시 제품 또는 기타 공개 버전(예: 베타 버전, 프리뷰 릴리스, "나이트리 빌드")일 수 있습니다. 출시되지 않은 제품 릴리스는 기능이 최소 한 달간 구현되어 안정성을 보여야 합니다.
  3. 실험적이지 않음(즉, 테스트 스위트를 통과하도록 특별히 설계된 버전이 아니며 향후 일반 사용을 위한 버전임).

명세는 최소 6개월 동안 후보 권고안 상태를 유지합니다.

색인

이 명세에서 정의된 용어

참조로 정의된 용어

참고문헌

규범적 참고문헌

[CSS-2023]
Chris Lilley 외. CSS Snapshot 2023. 2023년 12월 7일. 참고. URL: https://www.w3.org/TR/css-2023/
[CSS-BOX-3]
Elika Etemad. CSS Box Model Module Level 3. 2023년 4월 6일. 권고안. URL: https://www.w3.org/TR/css-box-3/
[CSS-BOX-4]
Elika Etemad. CSS Box Model Module Level 4. 2022년 11월 3일. 초안. URL: https://www.w3.org/TR/css-box-4/
[CSS-BREAK-4]
Rossen Atanassov; Elika Etemad. CSS Fragmentation Module Level 4. 2018년 12월 18일. 초안. 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일. 권고안. URL: https://www.w3.org/TR/css-cascade-5/
[CSS-COLOR-4]
Tab Atkins Jr.; Chris Lilley; Lea Verou. CSS Color Module Level 4. 2022년 11월 1일. 권고안. URL: https://www.w3.org/TR/css-color-4/
[CSS-COLOR-5]
Chris Lilley 외. CSS Color Module Level 5. 2022년 6월 28일. 초안. URL: https://www.w3.org/TR/css-color-5/
[CSS-DISPLAY-3]
Elika Etemad; Tab Atkins Jr.. CSS Display Module Level 3. 2023년 3월 30일. 권고안. URL: https://www.w3.org/TR/css-display-3/
[CSS-IMAGES-3]
Tab Atkins Jr.; Elika Etemad; Lea Verou. CSS Images Module Level 3. 2023년 12월 18일. 권고안. URL: https://www.w3.org/TR/css-images-3/
[CSS-OVERFLOW-3]
Elika Etemad; Florian Rivoal. CSS Overflow Module Level 3. 2023년 3월 29일. 초안. URL: https://www.w3.org/TR/css-overflow-3/
[CSS-RUBY-1]
Elika Etemad 외. CSS Ruby Annotation Layout Module Level 1. 2022년 12월 31일. 초안. URL: https://www.w3.org/TR/css-ruby-1/
[CSS-TEXT-DECOR-4]
Elika Etemad; Koji Ishii. CSS Text Decoration Module Level 4. 2022년 5월 4일. 초안. URL: https://www.w3.org/TR/css-text-decor-4/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 3. 2022년 12월 1일. 권고안. URL: https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. 2023년 12월 18일. 초안. URL: https://www.w3.org/TR/css-values-4/
[CSS2]
Bert Bos 외. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 2011년 6월 7일. 권고안. URL: https://www.w3.org/TR/CSS21/
[CSS22]
Bert Bos. Cascading Style Sheets Level 2 Revision 2 (CSS 2.2) Specification. 2016년 4월 12일. 초안. URL: https://www.w3.org/TR/CSS22/
[FILTER-EFFECTS-1]
Dirk Schulze; Dean Jackson. Filter Effects Module Level 1. 2018년 12월 18일. 초안. URL: https://www.w3.org/TR/filter-effects-1/
[HTML]
Anne van Kesteren 외. HTML 표준. 현행 표준. URL: https://html.spec.whatwg.org/multipage/
[MEDIAQUERIES-5]
Dean Jackson 외. Media Queries Level 5. 2021년 12월 18일. 초안. URL: https://www.w3.org/TR/mediaqueries-5/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. 1997년 3월. 최선의 현재 관행. URL: https://datatracker.ietf.org/doc/html/rfc2119
[SELECTORS-3]
Tantek Çelik 외. Selectors Level 3. 2018년 11월 6일. 권고안. URL: https://www.w3.org/TR/selectors-3/
[SELECTORS-4]
Elika Etemad; Tab Atkins Jr.. Selectors Level 4. 2022년 11월 11일. 초안. URL: https://www.w3.org/TR/selectors-4/

참고 참고문헌

[CSS-2017]
Tab Atkins Jr.; Elika Etemad; Florian Rivoal. CSS Snapshot 2017. 2017년 1월 31일. 참고. URL: https://www.w3.org/TR/css-2017/
[CSS-BREAK-3]
Rossen Atanassov; Elika Etemad. CSS Fragmentation Module Level 3. 2018년 12월 4일. 권고안. URL: https://www.w3.org/TR/css-break-3/
[CSS-CONTAIN-1]
Tab Atkins Jr.; Florian Rivoal. CSS Containment Module Level 1. 2022년 10월 25일. 권고안. URL: https://www.w3.org/TR/css-contain-1/
[CSS-CONTAIN-2]
Tab Atkins Jr.; Florian Rivoal; Vladimir Levin. CSS Containment Module Level 2. 2022년 9월 17일. 초안. URL: https://www.w3.org/TR/css-contain-2/
[CSS-CONTENT-3]
Elika Etemad; Dave Cramer. CSS Generated Content Module Level 3. 2019년 8월 2일. 초안. URL: https://www.w3.org/TR/css-content-3/
[CSS-SHAPES]
Rossen Atanassov; Alan Stearns. CSS Shapes Module Level 1. 2022년 11월 15일. 권고안. URL: https://www.w3.org/TR/css-shapes-1/
[CSS-SIZING-3]
Tab Atkins Jr.; Elika Etemad. CSS Box Sizing Module Level 3. 2021년 12월 17일. 초안. URL: https://www.w3.org/TR/css-sizing-3/
[WCAG20]
Ben Caldwell 외. 웹 콘텐츠 접근성 지침(WCAG) 2.0. 2008년 12월 11일. 권고안. URL: https://www.w3.org/TR/WCAG20/

속성 색인

이름 초기값 적용 대상 상속 % 애니메이션 타입 정규 순서 계산값 논리 속성 그룹
background <bg-layer>#? , <final-bg-layer> 개별 속성 참조 모든 요소 아니오 개별 속성 참조 개별 속성 참조 문법에 따름 개별 속성 참조
background-attachment <attachment># scroll 모든 요소 아니오 해당 없음 불연속(discrete) 문법에 따름 리스트, 각 항목은 지정된 키워드
background-clip <visual-box># border-box 모든 요소 아니오 해당 없음 반복 리스트(repeatable list) 문법에 따름 리스트, 각 항목은 지정된 키워드
background-color <color> transparent 모든 요소 아니오 해당 없음 계산값 기준 문법에 따름 계산된 색상
background-image <bg-image># none 모든 요소 아니오 해당 없음 불연속(discrete) 문법에 따름 리스트, 각 항목은 <image> 또는 none 키워드
background-origin <visual-box># padding-box 모든 요소 아니오 해당 없음 반복 리스트(repeatable list) 문법에 따름 리스트, 각 항목은 지정된 키워드
background-position <bg-position># 0% 0% 모든 요소 아니오 배경 위치 영역 크기에서 배경 이미지 크기를 뺀 것 참조; 본문 참고 반복 리스트(repeatable list) 문법에 따름 리스트, 각 항목은 왼쪽 상단 기원에서의 오프셋 쌍(수평/수직), 각 값은 계산된 <length-percentage> 값
background-repeat <repeat-style># repeat 모든 요소 아니오 해당 없음 불연속(discrete) 문법에 따름 리스트, 각 항목은 차원별 키워드 쌍
background-size <bg-size># auto 모든 요소 아니오 본문 참고 반복 리스트(repeatable list) 문법에 따름 리스트, 각 항목은 축별 크기 쌍(키워드 또는 계산된 <length-percentage> 값)
border <line-width> || <line-style> || <color> 개별 속성 참조 루비 기본 컨테이너 및 루비 주석 컨테이너 제외 모든 요소 아니오 해당 없음 개별 속성 참조 문법에 따름 개별 속성 참조
border-bottom <line-width> || <line-style> || <color> 개별 속성 참조 루비 기본 컨테이너 및 루비 주석 컨테이너 제외 모든 요소 아니오 해당 없음 개별 속성 참조 문법에 따름 개별 속성 참조
border-bottom-color <color> currentColor 루비 기본 컨테이너 및 루비 주석 컨테이너 제외 모든 요소 아니오 해당 없음 계산값 기준 문법에 따름 계산된 색상 border-color
border-bottom-left-radius <length-percentage [0,∞]>{1,2} 0 모든 요소(본문 참고) 아니오 border box 해당 차원 참조 계산값 기준 문법에 따름 계산된 <length-percentage> 값 쌍 border-radius
border-bottom-right-radius <length-percentage [0,∞]>{1,2} 0 모든 요소(본문 참고) 아니오 border box 해당 차원 참조 계산값 기준 문법에 따름 계산된 <length-percentage> 값 쌍 border-radius
border-bottom-style <line-style> none 루비 기본 컨테이너 및 루비 주석 컨테이너 제외 모든 요소 아니오 해당 없음 불연속(discrete) 문법에 따름 지정된 키워드 border-style
border-bottom-width <line-width> medium 루비 기본 컨테이너 및 루비 주석 컨테이너 제외 모든 요소 아니오 해당 없음 계산값 기준 문법에 따름 절대 길이, border width로 스냅됨; 스타일이 none 또는 hidden이면 0 border-width
border-color <color>{1,4} (개별 속성 참조) 루비 기본 컨테이너 및 루비 주석 컨테이너 제외 모든 요소 아니오 해당 없음 개별 속성 참조 문법에 따름 개별 속성 참조
border-image <'border-image-source'> || <'border-image-slice'> [ / <'border-image-width'> | / <'border-image-width'>? / <'border-image-outset'> ]? || <'border-image-repeat'> 개별 속성 참조 개별 속성 참조 아니오 해당 없음 개별 속성 참조 문법에 따름 개별 속성 참조
border-image-outset [ <length [0,∞]> | <number [0,∞]> ]{1,4} 0 border-collapse가 collapse인 내부 테이블 요소 제외 모든 요소 아니오 해당 없음 계산값 기준 문법에 따름 숫자 또는 절대 길이 4개
border-image-repeat [ stretch | repeat | round | space ]{1,2} stretch border-collapse가 collapse인 내부 테이블 요소 제외 모든 요소 아니오 해당 없음 불연속(discrete) 문법에 따름 축별 키워드 두 개
border-image-slice [<number [0,∞]> | <percentage [0,∞]>]{1,4} && fill? 100% border-collapse가 collapse인 내부 테이블 요소 제외 모든 요소 아니오 border image 크기 참조 계산값 기준 문법에 따름 숫자 또는 백분율 4개; fill 키워드 포함시 추가
border-image-source none | <image> none border-collapse가 collapse인 내부 테이블 요소 제외 모든 요소 아니오 해당 없음 불연속(discrete) 문법에 따름 none 키워드 또는 계산된 <image>
border-image-width [ <length-percentage [0,∞]> | <number [0,∞]> | auto ]{1,4} 1 border-collapse가 collapse인 내부 테이블 요소 제외 모든 요소 아니오 border image area의 너비/높이 기준 계산값 기준 문법에 따름 숫자, auto 키워드 또는 계산된 <length-percentage> 값 4개
border-left <line-width> || <line-style> || <color> 개별 속성 참조 루비 기본 컨테이너 및 루비 주석 컨테이너 제외 모든 요소 아니오 해당 없음 개별 속성 참조 문법에 따름 개별 속성 참조
border-left-color <color> currentColor 루비 기본 컨테이너 및 루비 주석 컨테이너 제외 모든 요소 아니오 해당 없음 계산값 기준 문법에 따름 계산된 색상 border-color
border-left-style <line-style> none 루비 기본 컨테이너 및 루비 주석 컨테이너 제외 모든 요소 아니오 해당 없음 불연속(discrete) 문법에 따름 지정된 키워드 border-style
border-left-width <line-width> medium 루비 기본 컨테이너 및 루비 주석 컨테이너 제외 모든 요소 아니오 해당 없음 계산값 기준 문법에 따름 절대 길이, border width로 스냅됨; 스타일이 none 또는 hidden이면 0 border-width
border-radius <length-percentage [0,∞]>{1,4} [ / <length-percentage [0,∞]>{1,4} ]? 개별 속성 참조 모든 요소(본문 참고) 아니오 border box 해당 차원 참조 개별 속성 참조 문법에 따름 개별 속성 참조
border-right <line-width> || <line-style> || <color> 개별 속성 참조 루비 기본 컨테이너 및 루비 주석 컨테이너 제외 모든 요소 아니오 해당 없음 개별 속성 참조 문법에 따름 개별 속성 참조
border-right-color <color> currentColor 루비 기본 컨테이너 및 루비 주석 컨테이너 제외 모든 요소 아니오 해당 없음 계산값 기준 문법에 따름 계산된 색상 border-color
border-right-style <line-style> none 루비 기본 컨테이너 및 루비 주석 컨테이너 제외 모든 요소 아니오 해당 없음 불연속(discrete) 문법에 따름 지정된 키워드 border-style
border-right-width <line-width> medium 루비 기본 컨테이너 및 루비 주석 컨테이너 제외 모든 요소 아니오 해당 없음 계산값 기준 문법에 따름 절대 길이, border width로 스냅됨; 스타일이 none 또는 hidden이면 0 border-width
border-style <line-style>{1,4} (개별 속성 참조) 루비 기본 컨테이너 및 루비 주석 컨테이너 제외 모든 요소 아니오 해당 없음 개별 속성 참조 문법에 따름 개별 속성 참조
border-top <line-width> || <line-style> || <color> 개별 속성 참조 루비 기본 컨테이너 및 루비 주석 컨테이너 제외 모든 요소 아니오 해당 없음 개별 속성 참조 문법에 따름 개별 속성 참조
border-top-color <color> currentColor 루비 기본 컨테이너 및 루비 주석 컨테이너 제외 모든 요소 아니오 해당 없음 계산값 기준 문법에 따름 계산된 색상 border-color
border-top-left-radius <length-percentage [0,∞]>{1,2} 0 모든 요소(본문 참고) 아니오 border box 해당 차원 참조 계산값 기준 문법에 따름 계산된 <length-percentage> 값 쌍 border-radius
border-top-right-radius <length-percentage [0,∞]>{1,2} 0 모든 요소(본문 참고) 아니오 border box 해당 차원 참조 계산값 기준 문법에 따름 계산된 <length-percentage> 값 쌍 border-radius
border-top-style <line-style> none 루비 기본 컨테이너 및 루비 주석 컨테이너 제외 모든 요소 아니오 해당 없음 불연속(discrete) 문법에 따름 지정된 키워드 border-style
border-top-width <line-width> medium 루비 기본 컨테이너 및 루비 주석 컨테이너 제외 모든 요소 아니오 해당 없음 계산값 기준 문법에 따름 절대 길이, border width로 스냅됨; 스타일이 none 또는 hidden이면 0 border-width
border-width <line-width>{1,4} (개별 속성 참조) 루비 기본 컨테이너 및 루비 주석 컨테이너 제외 모든 요소 아니오 개별 속성 참조 개별 속성 참조 문법에 따름 개별 속성 참조
box-shadow none | <shadow># none 모든 요소 아니오 해당 없음 계산값 기준, none은 0개 항목 리스트로 처리, 빈 그림자(transparent 0 0 0 0) 및 필요시 inset 키워드 추가, 더 긴 리스트와 호환되면 맞춤 문법에 따름 none 키워드 또는 리스트, 각 항목은 절대 길이 4개, 계산된 색상 및 선택적 inset 키워드로 구성