순수한 HTML, CSS, JavaScript로 드롭다운 리스트 만들기

  • 4 minutes to read

드롭다운 리스트는 사용자 인터페이스에서 자주 사용되는 요소 중 하나로, 다양한 옵션을 깔끔하게 제공할 수 있습니다. 이번 아티클에서는 순수한 HTML, CSS, JavaScript만을 사용하여 드롭다운 리스트를 구현하는 방법을 설명합니다.

최종 완성된 결과는 다음 그림과 같습니다.

dul-dropdown 구현 결과

실행 데모는 다음 경로에서 확인할 수 있습니다.

http://www.hawaso.com/html/dul/dul-dropdown.html

프로젝트 폴더 구조

이 튜토리얼에서는 다음과 같은 폴더 구조를 사용합니다.

/html/dul/dul-dropdown.html
/css/dul/dul-dropdown.css
/lib/dul/dul-dropdown.js
/images/dul/dul-dropdown/

각 파일이 담당하는 역할은 다음과 같습니다:

  • dul-dropdown.html : 드롭다운 리스트를 포함하는 HTML 파일
  • dul-dropdown.css : 드롭다운 스타일을 정의하는 CSS 파일
  • dul-dropdown.js : 드롭다운 동작을 제어하는 JavaScript 파일
  • images/dul/dul-dropdown/ : 드롭다운 리스트에 표시될 아이콘 저장 폴더

1. HTML 코드 작성 (/html/dul/dul-dropdown.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="/css/dul/dul-dropdown.css">
    <link href="/css/open-iconic/font/css/open-iconic-bootstrap.min.css" rel="stylesheet" />
</head>
<body>
    <nav class="navbar">
        <div class="container">
            <span class="navbar-brand">
                <!-- dul-dropdown 시작 -->
                <span class="dul-dropdown">
                    <button class="dul-btn">
                        <i class="oi oi-grid-three-up dul-icon" style="font-size: medium;"></i>
                    </button>
                    <span class="dul-dropdown-content">
                        <a href="https://www.dotnetnote.com" target="_blank">
                            <img src="/images/dul/dul-dropdown/dul-dropdown-dotnetnote.png" style="width: 20px; height: 20px;" />
                            <span>DotNetNote</span>
                        </a>
                        <a href="https://www.dotnetkorea.com" target="_blank">
                            <img src="/images/dul/dul-dropdown/dul-dropdown-visualacademy.png" style="width: 20px; height: 20px;" />
                            <span>DotNetKorea</span>
                        </a>
                    </span>
                </span>
                <!-- dul-dropdown 종료 -->
                <a class="navbar-brand" href="/Home">Hawaso</a>
            </span>
        </div>
    </nav>

    <script src="/lib/dul/dul-dropdown.js"></script>
</body>
</html>

2. CSS 코드 작성 (/css/dul/dul-dropdown.css)

/* 드롭다운 버튼 스타일 */
.dul-btn {
    border: none;
    cursor: pointer;
    background-color: transparent;
}

/* 드롭다운 컨테이너 */
.dul-dropdown {
    position: relative;
    display: inline-block;
}

/* 드롭다운 내용 */
.dul-dropdown-content {
    display: none;
    position: absolute;
    background-color: #f1f1f1;
    min-width: 200px;
    overflow: auto;
    box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
    z-index: 1000;
    border-radius: 5px;
}

/* 드롭다운 링크 스타일 */
.dul-dropdown-content a {
    color: black;
    padding: 10px 12px;
    text-decoration: none;
    display: flex;
    align-items: center;
    font-size: 14px;
}

.dul-dropdown-content a img {
    margin-right: 8px;
}

.dul-dropdown-content a:hover {
    background-color: #ddd;
}

/* 드롭다운이 열렸을 때 */
.dul-show {
    display: block;
}

/* 아이콘 스타일 조정 */
.dul-icon {
    display: inline-block;
    max-width: 100%;
}

3. JavaScript 코드 작성 (/lib/dul/dul-dropdown.js)

document.addEventListener("DOMContentLoaded", function () {
    // 모든 dul-btn 버튼에 클릭 이벤트 추가
    document.querySelectorAll(".dul-btn").forEach(button => {
        button.addEventListener("click", function (event) {
            event.stopPropagation(); // 이벤트 전파 방지

            // 현재 버튼과 연결된 드롭다운 찾기
            let dropdown = this.nextElementSibling;
            if (dropdown && dropdown.classList.contains("dul-dropdown-content")) {
                // 모든 드롭다운 닫기 (하나만 열도록)
                document.querySelectorAll(".dul-dropdown-content").forEach(d => {
                    if (d !== dropdown) {
                        d.classList.remove("dul-show");
                    }
                });

                // 현재 드롭다운 토글
                dropdown.classList.toggle("dul-show");
            }
        });
    });

    // 문서 클릭 시 모든 드롭다운 닫기 (외부 클릭 감지)
    document.addEventListener("click", function () {
        document.querySelectorAll(".dul-dropdown-content").forEach(dropdown => {
            dropdown.classList.remove("dul-show");
        });
    });
});

4. 실행 방법

  1. 위의 HTML, CSS, JS 파일을 해당 경로에 저장합니다.
  2. 브라우저에서 /html/dul/dul-dropdown.html 파일을 열어 확인합니다.
  3. 드롭다운 버튼을 클릭하면 메뉴가 나타나고, 다시 클릭하면 사라지는지 확인합니다.
  4. 드롭다운 외부를 클릭하면 메뉴가 자동으로 닫혀야 합니다.

5. 결론

이 아티클에서는 순수한 HTML, CSS, JavaScript만을 사용하여 간단한 드롭다운 리스트를 구현하는 방법을 설명했습니다. 이 코드를 기반으로 드롭다운 디자인을 더욱 개선하거나 기능을 확장할 수 있습니다.

예를 들어, 애니메이션 효과를 추가하거나 여러 개의 드롭다운을 제어하는 기능을 추가할 수도 있습니다. 필요에 따라 이 코드를 활용하여 프로젝트에 맞게 커스터마이징해 보세요!

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com