html
<div class="search">
<input type="text" />
<div class="material-icons">search</div>
</div>
css
.search {
display: inline-block;
height: 34px;
position: relative;
}
.search input {
width: 36px;
height: 34px;
padding: 4px 10px;
border: 1px solid #ccc;
box-sizing: border-box;
border-radius: 5px;
outline: none;
background: #fff;
color: #777;
font-size: 12px;
transition: width 0.4s;
}
.search input:focus {
width: 190px;
border-color: #669900;
}
.search .material-icons {
height: 24px;
position: absolute;
top: 0;
bottom: 0;
right: 5px;
margin: auto;
transition: 0.4s;
}
.search.focused .material-icons {
opacity: 0;
}
javascript
const searchEl = document.querySelector('.search')
const searchInputEl = searchEl.querySelector('input')
searchEl.addEventListener('click',function(){
searchInputEl.focus();
})
searchInputEl.addEventListener('focus', function(){
searchEl.classList.add('focused')
searchInputEl.setAttribute('placeholder','통합검색')
})
searchInputEl.addEventListener('blur', function(){
searchEl.classList.remove('focused')
searchInputEl.setAttribute('placeholder','')
})
input
에 width
를 적게주고 선택시 transition
효과와 함께 너비를 늘린다.