본문 바로가기

👩🏻‍💻Frontend/CSS

CSS 변수, 함수 ( 사용자 지정 CSS 속성 )

 

1. 사용자 지정 CSS 속성

사용자 지정 속성(CSS 변수종속 변수)은 CSS 저작자가 정의하는 개체로, 문서 전반적으로 재사용할 임의의 값을 담는다. 사용자 지정 속성을 사용하면 한 영역에 값을 저장해 놓고 다른 여러 곳에서 참조해갈 수 있어 유지보수에 용이하다.

 

 

 

1-1. 사용자 지정 CSS 속성 정의 방법

사용자 지정 속성은 '--'을 붙이는 전용 표기법을 사용해 정의하고,   ex)  --main-color: black;  

var() 함수를 사용해 접근할 수 있다.   ex)  color: var(--main-color);  

 

 

 

1-2. 사용자 지정 CSS의 사용

: root - 전역 변수 설정

:root 의사 클래스에 선언해서 HTML 문서 어디에서나 사용자 지정 속성에 접근할 수 있도록 구성한다.

하이픈 2개 -- 다음 속성이름을 적어주고 (콜론) 뒤에 속성값을 적는다.

:root {
  --main-bg-color: royalblue;
}

 

 

지역 변수 설정

지역변수로 선언된 CSS 변수는 변수명이 같을지라도 전체 요소에 공유되지 않고 오로지 그 요소에서만 적용되게 된다.

.box2{
        --box-color:gold;
        background-color: var(--box-color, yellow);

        }

 

var( ) 

CSS 변숫값으로 지정할 수 있다.  -->  첫 번째 인수: 가져올 사용자 지정 속성 이름 / 두 번째 인수: 대체값

.box1 {
  color: var(--main-bg-color, blue);
}

 

 

아래의 코드를 보면서 적용이 어떻게 되었는지 살펴보자.

<!DOCTYPE html>
<html lang="ko">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS 변수 설정</title>
    <style>
        :root {
            --main-bg-color: royalblue;
        }

        .box div {
            width: 200px;
            height: 200px;
            background-color: tomato;
        }

        div.box1 {
            background-color: var(--main-bg-color, blue);
        }

        div.box2 {
            --box-color: gold;
            background-color: var(--box-color, yellow);
        }

        div.box2 {
            background-color: var(--box-color, yellow);
        }

        div.box3 {
            background-color: var(--box-color, yellow);
        }
    </style>
</head>

<body>
    <div class="box">
        <div class="box1">box1</div>
        <div class="box2">box2</div>
        <div class="box3">box3</div>
    </div>
</body>

</html>

전역 변수로 지정한 --main-bg-color는 box1에 잘 적용되었고, 지역 변수로 지정한 --box-color는 box2에만 적용되고 box3에는 적용되지 않을 것을 확인할 수 있다.

 

 

 

1-3. 그렇다면, box2에 자식 요소가 있는 경우 자식요소에도 지역 변수가 적용이 될까?

자식, 자손 요소를 추가해 적용해 보았다.

<!DOCTYPE html>
<html lang="ko">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS 변수 설정</title>
    <style>
        :root {
            --main-bg-color: royalblue;
        }

        .box div {
            width: 200px;
            height: 200px;
            background-color: tomato;
        }

        div.box1 {
            background-color: var(--main-bg-color, blue);
        }

        div.box2 {
            height: auto;
            --box-color: gold;
            background-color: var(--box-color, yellow);
        }

        div.box2-1 {
            background-color: var(--box-color, yellow);
        }

        div.box2-2-1 {
            background-color: var(--box-color, yellow);
        }

        div.box3 {
            background-color: var(--box-color, yellow);
        }
    </style>
</head>

<body>
    <div class="box">
        <div class="box1">box1</div>
        <div class="box2">
            <div class="box2-1">
                box2-1
            </div>
            <div class="box2-2">
                <div class="box2-2-1">box2-2-1</div>
            </div>
        </div>
        <div class="box3">box3</div>
    </div>
</body>

</html>

자식 요소와 자손 요소까지 지역 변수가 적용됨을 확인할 수 있다.

 

 

 

2. 기타 CSS 함수

2-1. calc()

css 속성 값으로 계산식을 지정할 수 있으며 사칙연산이 가능하다. 서로 다른 단위 계산이 가능하다. 요소를 화면에 여백과 함께 배치할 때 사용하기 좋다.

.wrap{
	width:1400px;
	margin: auto;
	max-width:calc(100% - 60px);
}

*** 연산자 사이에 좌우 공백을 꼭!!! 넣어줘야 한다.***

  • calc(50% -80px) 유효하지 않다.(-뒤에 공백이 없기 때문)
  • calc(8px + -50%)는 길이와 음의 백분율 간의 덧셈으로 처리된다.
  • *, / 연산자는 좌우 공백을 요구하지 않지만, 일관성을 위해서 넣는 것이 좋다.

 

 

2-2. min(), max()

쉼표로 구분된 () 내 목록에서 가장 작은(min) 또는 가장 큰(max) 값을 설정한다.

.wrap{
	width:1400px;
	margin: auto;
	max-width:calc(100% - 60px);
}
.wrap{
	width: min(1400px, calc(100% - 60px));
	margin: auto;
}

 

 

 

2-3.clamp() 

설정된 이상적인 값을 기준으로 상한과 하한 사이의 값을 고정한다. 최솟값, 이상적인 값(중간 값), 최댓값 세 가지 값을 입력하며, 반응형 폰트를 설정할 때 사용할 수 있다.

font-size: clamp(1rem, 2.5vw, 2rem);

 

 

 

 

참고 자료 : https://developer.mozilla.org/ko/docs/Web/CSS/-webkit-line-clamp

https://runebook.dev/ko/docs/css/clamp

https://inpa.tistory.com/entry/CSS-%F0%9F%93%9A-CSS%EC%9A%A9-%EB%B3%80%EC%88%98-variable-%EC%A0%95%EB%A6%AC