본문 바로가기
Study/CSS

CSS 기초 강의 11편: 고급 CSS 기법과 트릭 활용하기

by wawManager 2024. 11. 26.
728x90

1. CSS 변수의 고급 활용법

CSS 변수는 단순히 색상이나 크기뿐만 아니라, 다른 CSS 함수와 결합하여 유동적인 값을 설정할 때 유용합니다. 이때 변수를 동적으로 조절하면 반응형 디자인과 효과적인 스타일 관리를 동시에 할 수 있습니다.

예제: 반응형 텍스트 크기 조정

CSS 변수를 calc()와 함께 사용해, 화면 크기에 따라 텍스트 크기를 유동적으로 조정할 수 있습니다.

:root {
    --base-font-size: 16px;
    --scale-factor: 1.2;
}

body {
    font-size: calc(var(--base-font-size) * var(--scale-factor));
}

@media (max-width: 768px) {
    :root {
        --scale-factor: 1;
    }
}

@media (max-width: 480px) {
    :root {
        --scale-factor: 0.8;
    }
}

코드 설명

  • 화면 크기에 따라 --scale-factor 변수를 조절하여 폰트 크기가 자동으로 반응형으로 변경됩니다.

2. 가상 클래스와 가상 요소 활용

CSS의 가상 클래스와 가상 요소는 사용자 상호작용 및 시각적 효과를 더하는 데 유용합니다. 주로 :hover, :focus, ::before, ::after 등이 사용됩니다.

1) 가상 클래스 :hover와 :focus

  • :hover: 요소에 마우스를 올렸을 때 적용
  • :focus: 요소에 포커스가 잡혔을 때 적용 (주로 버튼, 입력 필드)
.button {
    background-color: lightblue;
    transition: background-color 0.3s;
}

.button:hover, .button:focus {
    background-color: deepskyblue;
}

2) 가상 요소 ::before와 ::after

가상 요소는 콘텐츠 앞이나 뒤에 장식 효과를 추가할 때 유용합니다.

.heading::before {
    content: "★ ";
    color: gold;
}

.heading::after {
    content: " ★";
    color: gold;
}

3. CSS 필터 효과 (Filters)

필터는 이미지나 요소에 특정 시각적 효과를 적용합니다. 대표적으로 blur, brightness, contrast 등이 있습니다.

필터 속성 예제

.image {
    filter: brightness(0.8) contrast(1.2) blur(2px);
}

코드 설명

  • brightness(0.8): 밝기를 80%로 조정
  • contrast(1.2): 대비를 120%로 설정
  • blur(2px): 2px의 흐림 효과 추가

필터 효과는 이미지, 배경, 버튼 등의 시각적 요소에 자주 사용되며, 사용자 상호작용에 따라 변화하도록 트랜지션과 결합할 수 있습니다.


4. 레이아웃 트릭: CSS로 다양한 레이아웃 만들기

CSS의 position, display, overflow 등을 조합하여 레이아웃을 더욱 유연하게 만들 수 있습니다.

1) 중첩 그리드 레이아웃

CSS Grid를 활용하여 그리드 안에 또 다른 그리드를 배치할 수 있습니다.

.container {
    display: grid;
    grid-template-columns: 1fr 2fr;
    gap: 20px;
}

.sub-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 10px;
}

2) position: sticky로 고정 요소 만들기

position: sticky 속성을 사용하면, 스크롤 시 특정 위치에 고정되는 요소를 만들 수 있습니다.

.sidebar {
    position: sticky;
    top: 10px;
}

코드 설명

  • .sidebar는 스크롤 시 화면 상단에서 10px 아래에 고정되며, 지정된 위치까지 스크롤할 때까지는 기본 위치에 유지됩니다.

5. CSS로 화려한 효과 구현하기

1) 그라디언트 효과

CSS의 linear-gradient, radial-gradient를 사용하여 부드럽게 색상이 변하는 배경을 만들 수 있습니다.

.background {
    background: linear-gradient(to right, #3498db, #9b59b6);
}

2) 트랜지션과 트랜스폼을 이용한 효과

트랜지션과 트랜스폼을 결합하여 상호작용 시 시각적인 피드백을 줄 수 있습니다.

.card {
    transition: transform 0.3s ease;
}

.card:hover {
    transform: scale(1.05) rotate(5deg);
}

코드 설명

  • .card에 마우스를 올리면 크기가 커지면서 약간 회전하여 시각적 효과가 나타납니다.

6. 실전 예제: 고급 CSS 기법을 활용한 카드 디자인

아래는 CSS 변수, 가상 요소, 필터 효과 등을 활용하여 카드 UI에 다양한 효과를 적용한 예제입니다.

<!DOCTYPE html>
<html lang="ko">
<head>
    <title>고급 CSS 기법 예제</title>
    <style>
        /* CSS 변수 */
        :root {
            --card-bg: linear-gradient(135deg, #3498db, #9b59b6);
            --text-color: #fff;
            --card-width: 300px;
        }

        body {
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 100vh;
            margin: 0;
            background-color: #f5f5f5;
            font-family: Arial, sans-serif;
        }

        /* 카드 스타일 */
        .card {
            width: var(--card-width);
            background: var(--card-bg);
            color: var(--text-color);
            padding: 20px;
            border-radius: 15px;
            box-shadow: 0 8px 15px rgba(0, 0, 0, 0.3);
            position: relative;
            overflow: hidden;
            transition: transform 0.3s;
        }

        .card::before {
            content: "";
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: rgba(255, 255, 255, 0.1);
            mix-blend-mode: overlay;
        }

        .card:hover {
            transform: scale(1.05);
        }

        .card h2 {
            margin: 0 0 10px;
            font-size: 24px;
        }

        .card p {
            font-size: 16px;
            line-height: 1.5;
        }

        .card img {
            width: 100%;
            border-radius: 10px;
            filter: brightness(0.9);
        }
    </style>
</head>
<body>
    <div class="card">
        <h2>고급 CSS 카드</h2>
        <p>이 카드는 CSS 변수, 가상 요소, 필터 효과를 활용해 디자인되었습니다.</p>
        <img src="https://via.placeholder.com/300" alt="이미지">
    </div>
</body>
</html>

코드 설명

  • CSS 변수로 카드의 배경과 텍스트 색상을 관리하여 수정이 용이하도록 했습니다.
  • 가상 요소 ::before를 사용해 카드에 오버레이 효과를 주어 시각적 깊이를 더했습니다.
  • 필터로 이미지의 밝기를 조정하여 일관된 색조를 유지했습니다.
  • 마우스 호버 시 트랜지션트랜스폼으로 카드가 확대되어 생동감을 줍니다.

요약

이번 강의에서는 CSS의 고급 기법을 통해 더욱 다채로운 스타일링 방법을 익혔습니다. CSS 변수, 필터, 가상 요소 등을 결합해 시각적으로 매력적이고 유지보수가 용이한 코드를 작성할 수 있습니다. 다음 강의에서는 CSS 애니메이션을 더 깊이 다루어, 웹 페이지에 동적인 효과를 추가하는 방법을 알아보겠습니다.

728x90