본문 바로가기
FrontEnd

[HTML CSS JS] 검색 박스 구현 (Search Box)

by 나무꾼 2022. 2. 6.

HTML CSS JS를 활용하여 Transition 효과가 들어간 검색 박스를 구현한다.

1. HTML 구현

  • search 클래스 div를 생성
  • search div 내에 input 태그 생성
  • material-icons 클래스를 갖는 span 태그 생성
    • material-icons 클래스는 구글에서 제공하는 아이콘들을 이용하기 위한 방법으로 내용(content)로 아이콘 명을 작성하면 해당 아이콘이 삽입됨 https://fonts.google.com/icons

구글에서 제공하는 아이콘 종류 예시

  • 구글에서 제공하는 material-icons를 활용하기 위해 <head>태그 안에 아래 코드 삽입 (삽입 위치는 js파일, css파일 위에 작성하는 것이 좋음) 
<link rel="stylesheet"
      href="https://fonts.googleapis.com/icon?family=Material+Icons" />

 

2. CSS 구현

/* 높이와 하위 항목 position absolute 지정을 위한 position relative 지정 */
header .sub-menu .search {  
  height: 34px;
  position: relative;
}

/* 입력 창 디자인 설정 */
/* 입력창 클릭시 창 확장을 위한 transition 적용 */
header .sub-menu .search input {
  width: 36px;
  height: 34px;
  padding: 4px 10px;
  border: 1px solid #ccc;
  box-sizing: border-box;
  border-radius: 5px;
  outline: none;
  background-color: #fff;
  color: #777;
  transition: width 0.4s;
}

/* 입력창 focus된 경우 width 확장 */
header .sub-menu .search input:focus {
  width: 190px;
  border-color: #669900;
}

/* 검색 아이콘 디자인 설정 */
header .sub-menu .search .material-icons {
  height: 24px;
  position: absolute;
  top: 0;
  bottom: 0;
  right: 5px;
  margin: auto;
  transition: 0.4s;
}

/* 검색아이콘 사라지도록 설정 */
header .sub-menu .search.focused .material-icons {
  opacity: 0;
}

 

3. Javascript 구현

const searchEl = document.querySelector(".search");
const searchInputEl = searchEl.querySelector("input");

//search 영역 클릭 시 입력창에 focus되도록
searchEl.addEventListener("click", function () {
  searchInputEl.focus();
});

// 입력창이 포커스 이벤트 호출시 search클래스에 focused클래스 추가
// 입력창에 placeholder 입력
searchInputEl.addEventListener("focus", function () {
  searchEl.classList.add("focused");
  searchInputEl.setAttribute("placeholder", "통합검색");
});

// 입력창에 focus가 없어지는 경우 search클래스에 focused클래그 제거
// 입력창에 placeholder 제거
searchInputEl.addEventListener("blur", function () {
  searchEl.classList.remove("focused");
  searchInputEl.setAttribute("placeholder", "");
});

 

쉽게 생각한 경우 search영역에 click 이벤트를 구현하지 않아도 input 태그에 focus 이벤트가 호출될 수 있다.

하지만 input 입력창 위에 아이콘이 위치(덮고 있음)하여 focus 이벤트가 호출되지 않을 수 있다.

그래서 search 영역 전체에 click 이벤트를 구현하여 input에 강제로 focus가 되도록 한다.

본 포스팅 내용은 "Starbucks Clone 코딩 강의"의 내용을 정리한 것이다.

 

댓글