๊ฐœ๋ฐœ ๐Ÿพ/HTML,CSS

input search x ๋ฒ„ํŠผ ์‚ญ์ œ ๋ฐ ํด๋ฆฌ์–ด ๋ฒ„ํŠผ ์ง์ ‘ ๋งŒ๋“ค์–ด ๋„ฃ๊ธฐ

JOTOKKI 2021. 6. 15. 16:50
728x90

input์˜ ํƒ€์ž…์„ search๋กœ ์ง€์ •ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ € ๋‚ด์—์„œ input ์ดˆ๊ธฐํ™” ๋ฒ„ํŠผ์„ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค. 

์˜ˆ์‹œ ์ด๋ฏธ์ง€

๋””์ž์ธ์„ ์ค‘์š”์‹œ ํ•˜๋Š” ์ผ๋ถ€ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ด๊ฒƒ๋งˆ์ € ์ปค์Šคํ…€ํ•ด์ฃผ๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. 

ํ•˜์ง€๋งŒ ์‚ฌ์‹ค์ƒ ๋ธŒ๋ผ์šฐ์ € ๋‚ด์—์„œ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ € ์ž์ฒด๋ฅผ ์ปค์Šคํ…€ ํ•  ์ˆ˜๋Š” ์—†๊ณ , ์ด๋ฅผ ๋ณด์ด์ง€ ์•Š๊ฒŒ ํ•œ ๋’ค ์ถ”๊ฐ€๋กœ ๋””์ž์ธ๊ณผ ๊ธฐ๋Šฅ์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

์•ฝ๊ฐ„์€ ๋ฒˆ๊ฑฐ๋กœ์šด ์ž‘์—…์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ƒ๊ฐ๋ณด๋‹ค ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. 

 

์šฐ์„  ๋ธŒ๋ผ์šฐ์ € ๋‚ด์—์„œ ์ƒ์„ฑํ•œ ์ดˆ๊ธฐํ™” ๋ฒ„ํŠผ์„ ์—†์• ๋ ค๋ฉด ๋‹จ์ˆœํžˆ input์˜ ํƒ€์ž…์„ text๋กœ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ css์—์„œ ํ•ด๊ฒฐํ•ด ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

/* IE์˜ ๊ฒฝ์šฐ */
input::-ms-clear,
input::-ms-reveal{
    display:none;
}
/* ํฌ๋กฌ์˜ ๊ฒฝ์šฐ */
input::-webkit-search-decoration,
input::-webkit-search-cancel-button,
input::-webkit-search-results-button,
input::-webkit-search-results-decoration{
    display:none;
}

( ํ…Œ์ŠคํŠธ ํ•ด๋ณด๋‹ˆ IE10๊นŒ์ง€๋งŒ ๋จน์Šต๋‹ˆ๋‹ค. )

 

๊ทธ๋ฆฌ๊ณ  div๋กœ ํ•œ๋ฒˆ ๊ฐ์‹ธ๊ณ  input์˜†์— ๋ฒ„ํŠผ์„ ์ถ”๊ฐ€ํ•ด ์ค๋‹ˆ๋‹ค. 

๋ฒ„ํŠผ์„ absolute๋กœ ๋ถ™์ธ ๋’ค ๋ฒ„ํŠผ์˜ ํฌ๊ธฐ๋งŒํผ input์— padding์„ ์ค˜์•ผ input์— ๊ธ€์”จ๋ฅผ ๋งŽ์ด ๋„ฃ์–ด๋„ ๊ฐ€๋ ค์ง€์ง€ ์•Š์•„์š”.

// html
<div class="inputWrap">
    <input type="search" placeholder="๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”" />
    <button class="btnClear"></button>
</div>
// css
.inputWrap {
    position: relative;
    height: 30px;
    display: inline-block;
 }
  
.inputWrap input {
  padding-right: 30px;
  height: inherit;
}

.inputWrap .btnClear {
  position: absolute;
  top: 0;
  right: 0;
  width: 30px;
  height: inherit;
  background: url(https://img.icons8.com/pastel-glyph/2x/cancel.png) center center no-repeat;
  background-size: 50%;
  border: none;
  outline: none;
  cursor: pointer;
}

๊ทธ๋ฆฌ๊ณ  input์˜ value๋ฅผ ์ดˆ๊ธฐํ™”์‹œ์ผœ์ค„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์งœ์ค๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ๊ฒ ์ง€๋งŒ ์ €๋Š” ๋ถ€๋ชจ์˜ ์ž์‹์„ ์ฐพ์•„์„œ ์—†์• ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ˜•์ œ๋ฅผ ์ฐพ๋Š” ๊ฒƒ๋ณด๋‹ค ์ด์ ์€ ๊ตฌ์กฐ์˜ ์ˆœ์„œ(input๊ณผ button)๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ ์ƒ๊ด€์ด ์—†๊ณ , ๋ณต์ˆ˜๊ฐœ๋ฅผ ๋„ฃ์–ด๋„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ผ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. 

 

์Šคํฌ๋ฆฝํŠธ๋Š” ์•„๋ž˜์˜ ์†Œ์Šค ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

1. addEventListener 

// javascript
// ํ•œ๊ฐœ์ผ๋•Œ
<script>
    var btnClear = document.querySelector('.btnClear');
    btnClear.addEventListener('click', function(){
        btnClear.parentNode.querySelector('input').value = "";
    })
</script>
// javascript
// ์—ฌ๋Ÿฌ๊ฐœ์ผ๋•Œ 
<script>
    var btnClear = document.querySelectorAll('.btnClear');
    btnClear.forEach(function(btn){
        btn.addEventListener('click', function(){
            btn.parentNode.querySelector('input').value = "";
        })
    })
</script>

2. onClick

<div class="inputWrap">
    <input type="search" placeholder="๋‚˜์ด๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”" />
    <button class="btnClear" onClick="clearInput(this)"></button> <!-- onClick ์ถ”๊ฐ€ -->
</div>
<script>
    var clearInput = function(obj) {
        obj.parentNode.querySelector('input').value = ""
    }
</script>

 

๋ฐ˜์‘ํ˜•