w3.css
검색/필터 드롭다운
CSS와 JavaScript를 사용하여 드롭다운 메뉴에서 항목을 검색하는 방법을 알아보자.
클릭 가능한 드롭다운 만들기
사용자가 버튼을 클릭하면 나타나는 드롭다운 메뉴를 만든다.
1단계) HTML 추가
<div class="dropdown"> <button onclick="myFunction()" class="dropbtn">Dropdown</button> <div id="myDropdown" class="dropdown-content"> <input type="text" placeholder="Search.." id="myInput" onkeyup="filterFunction()"> <a href="#about">About</a> <a href="#base">Base</a> <a href="#blog">Blog</a> <a href="#contact">Contact</a> <a href="#custom">Custom</a> <a href="#support">Support</a> <a href="#tools">Tools</a> </div> </div>
<button>, <a> 또는 <p> 요소 등 모든 요소를 사용하여 드롭다운 메뉴를 연다.
드롭다운 메뉴를 만들고 그 안에 드롭다운 링크를 추가하려면 컨테이너 요소(예: <div>)를 사용한다.
CSS를 사용하여 <div> 요소를 버튼과 <div> 주위에 감싸서 드롭다운 메뉴를 올바른 위치에 배치한다.
2단계) CSS 추가
/* Dropdown Button */ .dropbtn { background-color: #04AA6D; color: white; padding: 16px; font-size: 16px; border: none; cursor: pointer; } /* Dropdown button on hover & focus */ .dropbtn:hover, .dropbtn:focus { background-color: #3e8e41; } /* The search field */ #myInput { box-sizing: border-box; background-image: url('searchicon.png'); background-position: 14px 12px; background-repeat: no-repeat; font-size: 16px; padding: 14px 20px 12px 45px; border: none; border-bottom: 1px solid #ddd; } /* The search field when it gets focus/clicked on */ #myInput:focus {outline: 3px solid #ddd;} /* The container- needed to position the dropdown content */ .dropdown { position: relative; display: inline-block; } /* Dropdown Content (Hidden by Default) */ .dropdown-content { display: none; position: absolute; background-color: #f6f6f6; min-width: 230px; border: 1px solid #ddd; z-index: 1; } /* Links inside the dropdown */ .dropdown-content a { color: black; padding: 12px 16px; text-decoration: none; display: block; } /* Change color of dropdown links on hover */ .dropdown-content a:hover {background-color: #f1f1f1} /* Show the dropdown menu (use JS to add this class to the .dropdown-content container when the user clicks on the dropdown button) */ .show {display:block;}드롭다운 버튼의 배경색, 패딩, 호버 효과 등의 스타일을 지정했다.
이 .dropdown클래스는 position:relative를 사용한다. 이는 드롭다운 콘텐츠를 드롭다운 버튼 바로 아래에 배치하려는 경우에 필요하다(position:absolute).
클래스 .dropdown-content는 실제 드롭다운 메뉴를 보유한다. 기본적으로 숨겨져 있으며, 호버하면 표시됩니다(아래 참조). 는 min-width230px로 설정되어 있습니다. 자유롭게 변경하세요. 팁: 드롭다운 콘텐츠의 너비를 드롭다운 버튼만큼 넓게 하려면 를 width100%로 설정하세요(그리고 overflow:auto작은 화면에서 스크롤을 활성화하세요).
검색 필드(#myInput)는 드롭다운 메뉴에 맞게 스타일이 지정되었습니다. 검색 아이콘을 추가했는데, 검색 필드 내부 왼쪽에 배치하여 이것이 실제로 검색 필드임을 나타냅니다.
배경색, 패딩, 호버 효과 등으로 드롭다운 버튼의 스타일을 지정했다.
.dropdown 클래스는 position:relative를 사용하는데, 이는 드롭다운 콘텐츠를 드롭다운 버튼 바로 아래에 배치할 때 필요하다(위치:절대값 사용).
.dropdown-content 클래스는 실제 드롭다운 메뉴를 보유한다. 이 클래스는 기본적으로 숨겨져 있으며 마우스를 가리키면 표시된다. 최소 너비는 230px로 설정되어 있다. 자유롭게 변경할 수 있다. 팁: 드롭다운 콘텐츠의 너비를 드롭다운 버튼만큼 넓게 하려면 width를 100%로 설정하자(작은 화면에서 스크롤을 사용하려면 overflow:auto를 설정하자).
검색 필드(#myInput)의 스타일이 드롭다운 메뉴 안에 들어가도록 변경되었다. 검색 필드 내부 왼쪽에 검색 아이콘을 추가하여 실제로 검색 필드임을 표시했다.
3단계) JavaScript 추가
/* When the user clicks on the button, toggle between hiding and showing the dropdown content */ function myFunction() { document.getElementById("myDropdown").classList.toggle("show"); } function filterFunction() { var input, filter, ul, li, a, i; input = document.getElementById("myInput"); filter = input.value.toUpperCase(); div = document.getElementById("myDropdown"); a = div.getElementsByTagName("a"); for (i = 0; i < a.length; i++) { txtValue = a[i].textContent || a[i].innerText; if (txtValue.toUpperCase().indexOf(filter) > -1) { a[i].style.display = ""; } else { a[i].style.display = "none"; } } }기본 예시예제 보기
참고
W3C School - How TO - Search/Filter Dropdown