사이트의 초기 스타일을 빌드하고 있는데 CSS에서 일부 값을 반복하고 있다고 가정해 보겠습니다. dodgerblue
를 기본 색상으로 사용하고 버튼 테두리, 링크 텍스트, 헤더 배경에 추가하고 디자인 도구를 사용하여 사이트의 다른 부분에 사용할 파란색의 변형을 선택합니다. 그러면 스타일 가이드가 표시되고 기본 색상이 oklch(70% 0.15 270)
로 변경됩니다.
맞춤 속성 또는 CSS 변수를 사용하면 CSS에서 값을 정리하고 재사용할 수 있으므로 스타일이 더 유연하고 이해하기 쉬워집니다.
속성 만들기
속성을 만드는 가장 간단한 방법은 정의한 이름으로 새 속성에 값을 설정하는 것입니다.
.card {
--base-size: 1em;
}
모든 속성 이름은 대시 두 개로 시작해야 합니다. 이렇게 하면 기존 CSS 속성 이름을 맞춤 값에 사용하려고 시도하는 것을 방지할 수 있습니다. CSS 사양에서는 대시 두 개로 시작하는 속성을 추가하지 않습니다.
그런 다음 var()
함수를 사용하여 이 속성에 액세스할 수 있습니다. 이 예시에서는 .card-title
내의 글꼴 크기를 --base-size
값의 두 배로 설정합니다.
.card .card-title {
font-size: calc(2 * var(--base-size));
}
맞춤 속성 사용
앞에서 살펴본 것처럼 var()
함수와 함께 맞춤 속성 값을 사용할 수 있습니다. var()
함수는 값에서 사용할 수 있지만 미디어 쿼리에서는 사용할 수 없습니다. 특히 다른 CSS 함수의 인수로 유용합니다.
대체
값이 설정되지 않은 맞춤 속성을 사용하려고 하면 어떻게 되나요? var()
함수는 대체 값으로 사용될 두 번째 값을 사용합니다. 대체 값은 중첩된 var()
이 있는 다른 맞춤 속성일 수도 있습니다.
#my-element {
background: var(
--alert-variant-background,
var(--alert-primary-background)
);
}
잘못된 값
맞춤 속성이 잘못된 값(예: background-color
속성의 1em
값)으로 확인되면 해당 속성에 대한 해당 요소의 다른 유효한 선언은 사용되지 않습니다. 브라우저는 값을 계산할 때 다른 선언을 삭제한 후에야 값이 유효한지 알 수 있기 때문입니다. 대신 사용된 값은 상속된 값 또는 초기 값이 됩니다.
.content {
background-color: blue;
}
.content.invalid {
--length: 2rem;
background-color: var(--length);
}
위의 예시에서 .invalid
요소의 배경은 파란색이 아닙니다. background-color
는 상속되지 않으므로 값은 초깃값인 transparent
이 됩니다.
재정의 및 상속
대부분의 경우 값이 상속되는 맞춤 속성의 기본 동작을 사용하는 것이 좋습니다. 속성의 새 값을 설정하면 다른 값으로 재정의될 때까지 해당 요소와 모든 하위 요소에 해당 값이 적용됩니다.
맞춤 속성은 캐스케이드에 의해 결정되므로 더 구체적인 선택기로 재정의할 수도 있습니다.
@property
로 더 많은 제어
값을 설정하여 만든 맞춤 속성은 모든 유형이 될 수 있으며 상속됩니다. 맞춤 속성을 더 세부적으로 제어하려면 @property
규칙을 사용하면 됩니다.
이전에 만든 --base-size
속성은 이 @property
선언과 동일합니다.
@property --base-size {
syntax: "*";
inherits: true;
initial-value: 18px;
}
syntax
값은 속성에 유효한 CSS 값의 유형을 설정합니다. 해당 속성에 다른 유형을 설정하면 무효화되고 캐스케이드에서 더 높게 설정된 초깃값이나 상속된 값으로 대체됩니다.
@property
를 사용하여 맞춤 속성을 만들 때 inherit: false
를 사용하여 상속을 사용 중지할 수 있습니다. 상속이 사용 중지된 맞춤 속성의 값을 재정의하면 선택한 요소의 값은 변경되지만 하위 요소의 값은 변경되지 않습니다. 이는 여러 선택기가 동일한 요소를 타겟팅할 때 유용한 경우가 많습니다.
initial-value
는 나중에 변경되지 않는 한 속성 값을 설정합니다. 구문이 *
(모든 CSS 유형)이 아닌 경우 @property
은 initial-value
을 설정해야 합니다. 이렇게 하면 속성이 항상 지정된 구문의 값을 가지며 정의되지 않습니다.
JavaScript로 맞춤 속성 업데이트
요소의 맞춤 속성 값은 JavaScript를 사용하여 업데이트할 수 있으며, 이를 통해 사이트의 스타일을 동적으로 업데이트할 수 있습니다.
const element = document.getElementById("my-button");
getComputedStyle(element).setPropertyValue("--color", orange);
이 예시에서는 #my-button
요소의 스타일 태그를 업데이트합니다. DevTools에서 검사하면 다음이 표시됩니다.
<button id="my-button" style="--color: orange">Click me</button>
위의 예에서는 맞춤 HTML 속성에 저장된 데이터에 액세스하여 맞춤 속성을 설정하는 방법을 확인할 수 있습니다. 각 버튼에는 특정 색상 값이 있는 data-color
속성이 있습니다. 본문 요소에 설정된 --background
맞춤 속성이 클릭된 버튼의 data-color
값으로 재설정됩니다.
getComputedStyle(element).getPropertyValue("--variable")
를 사용하여 특정 요소의 속성 값을 가져올 수도 있습니다. 이는 로직이 캐스케이드 값에 응답해야 하는 경우에 유용합니다.