순수한 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만을 사용하여 간단한 드롭다운 리스트를 구현하는 방법을 설명했습니다. 이 코드를 기반으로 드롭다운 디자인을 더욱 개선하거나 기능을 확장할 수 있습니다.

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

더 깊이 공부하고 싶다면
DevLec에서는 실무 중심의 C#, .NET, ASP.NET Core, Blazor, 데이터 액세스 강좌를 단계별로 제공합니다. 현재 수강 가능한 강좌 외에도 더 많은 과정이 준비되어 있습니다.
DevLec.com에서 자세한 커리큘럼을 확인해 보세요.
DevLec 공식 강의
C# Programming
C# 프로그래밍 입문
프로그래밍을 처음 시작하는 입문자를 위한 C# 기본기 완성 과정입니다.
ASP.NET Core 10.0
ASP.NET Core 10.0 시작하기 MVC Fundamentals Part 1 MVC Fundamentals Part 2
웹 애플리케이션의 구조와 MVC 패턴을 ASP.NET Core로 실습하며 익힐 수 있습니다.
Blazor Server
풀스택 웹개발자 과정 Part 1 풀스택 웹개발자 과정 Part 2 풀스택 웹개발자 과정 Part 3
실무에서 바로 활용 가능한 Blazor Server 기반 관리자·포털 프로젝트를 만들어 봅니다.
Data & APIs
Entity Framework Core 시작하기 ADO.NET Fundamentals Blazor Server Fundamentals Minimal APIs
데이터 액세스와 Web API를 함께 이해하면 실무 .NET 백엔드 개발에 큰 도움이 됩니다.
VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com