CSS와 JavaScript를 결합한 상호작용 웹 디자인

반응형


CSS와 JavaScript를 결합하면 정적인 웹 페이지에 동적인 상호작용을 추가할 수 있습니다. 이 글에서는 CSS와 JavaScript를 함께 사용해 버튼 애니메이션, 모달 창, 드롭다운 메뉴 등 다양한 상호작용 요소를 구현하는 방법을 배워봅니다.

1. CSS와 JavaScript를 결합하는 이유


CSS는 스타일링과 애니메이션, JavaScript는 로직과 동작을 담당합니다. 두 기술을 함께 사용하면 사용자가 클릭, 스크롤, 호버와 같은 동작에 따라 페이지가 반응하도록 만들 수 있습니다.

예시:
• 클릭 시 버튼 색상 변경
• 스크롤 시 특정 요소가 나타나는 효과
• 메뉴 클릭 시 드롭다운 표시

2. 실전 예제 1: 버튼 클릭 애니메이션

HTML

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>버튼 애니메이션</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <button id="animated-button">클릭하세요</button>
    <script src="script.js"></script>
</body>
</html>


CSS

/* styles.css */
#animated-button {
    background-color: #007bff;
    color: white;
    border: none;
    padding: 15px 30px;
    font-size: 16px;
    border-radius: 5px;
    cursor: pointer;
    transition: transform 0.2s ease;
}

#animated-button.clicked {
    transform: scale(1.2);
    background-color: #0056b3;
}


JavaScript

// script.js
document.getElementById('animated-button').addEventListener('click', function () {
    this.classList.add('clicked');
    setTimeout(() => {
        this.classList.remove('clicked');
    }, 200);
});


결과: 버튼을 클릭하면 크기가 확대되고 색상이 변경됩니다.

3. 실전 예제 2: 모달 창 구현

HTML

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>모달 창</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <button id="open-modal">모달 열기</button>
    <div id="modal" class="hidden">
        <div class="modal-content">
            <span id="close-modal">&times;</span>
            <p>모달 창 내용</p>
        </div>
    </div>
    <script src="script.js"></script>
</body>
</html>


CSS

/* styles.css */
body {
    font-family: Arial, sans-serif;
}

.hidden {
    display: none;
}

#modal {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0.5);
    display: flex;
    justify-content: center;
    align-items: center;
}

.modal-content {
    background: white;
    padding: 20px;
    border-radius: 10px;
    text-align: center;
    position: relative;
}

#close-modal {
    position: absolute;
    top: 10px;
    right: 10px;
    cursor: pointer;
    font-size: 20px;
    font-weight: bold;
}


JavaScript

// script.js
const modal = document.getElementById('modal');
const openModalButton = document.getElementById('open-modal');
const closeModalButton = document.getElementById('close-modal');

openModalButton.addEventListener('click', () => {
    modal.classList.remove('hidden');
});

closeModalButton.addEventListener('click', () => {
    modal.classList.add('hidden');
});


결과: 버튼을 클릭하면 화면 중앙에 모달 창이 표시되고, 닫기 버튼을 클릭하면 사라집니다.

4. 실전 예제 3: 드롭다운 메뉴

HTML

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>드롭다운 메뉴</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="dropdown">
        <button id="dropdown-button">메뉴 열기</button>
        <ul id="dropdown-menu" class="hidden">
            <li>메뉴 1</li>
            <li>메뉴 2</li>
            <li>메뉴 3</li>
        </ul>
    </div>
    <script src="script.js"></script>
</body>
</html>


CSS

/* styles.css */
body {
    font-family: Arial, sans-serif;
}

.dropdown {
    position: relative;
    display: inline-block;
}

#dropdown-menu {
    position: absolute;
    top: 100%;
    left: 0;
    list-style: none;
    background: white;
    border: 1px solid #ccc;
    padding: 0;
    margin: 0;
    width: 150px;
    display: none;
}

#dropdown-menu li {
    padding: 10px;
    cursor: pointer;
}

#dropdown-menu li:hover {
    background-color: #f0f0f0;
}


JavaScript

// script.js
const dropdownButton = document.getElementById('dropdown-button');
const dropdownMenu = document.getElementById('dropdown-menu');

dropdownButton.addEventListener('click', () => {
    if (dropdownMenu.classList.contains('hidden')) {
        dropdownMenu.classList.remove('hidden');
        dropdownMenu.style.display = 'block';
    } else {
        dropdownMenu.classList.add('hidden');
        dropdownMenu.style.display = 'none';
    }
});


결과: 버튼을 클릭하면 드롭다운 메뉴가 나타나고, 다시 클릭하면 사라집니다.

5. CSS와 JavaScript 결합 시 주의사항
1. 접근성 고려: 키보드와 스크린 리더 사용자를 위해 aria-* 속성을 추가하세요.

<button aria-expanded="false" aria-controls="dropdown-menu">메뉴 열기</button>


2. 최적화: JavaScript 이벤트 리스너를 필요 최소한으로 사용하고, CSS 애니메이션을 활용해 성능을 최적화하세요.
3. 코드 분리: CSS는 스타일, JavaScript는 동작을 담당하도록 명확히 역할을 분리하세요.

CSS와 JavaScript를 결합하면 정적인 디자인에 생동감을 더할 수 있습니다. 이 글의 예제를 바탕으로 다양한 상호작용 요소를 구현하고, 사용자가 즐길 수 있는 웹 경험을 만들어 보세요.

다음 글에서는 CSS 애니메이션과 JavaScript의 고급 활용법을 다룰 예정입니다.

반응형