๊ฒ์ ์ดํํธ ๋ง๋ค๊ธฐ 02
์ด๋ฒ ์๊ฐ์๋ ๊ทธ ๋์ ๋ฐฐ์ ๋ JavaScript๋ฅผ ์ด์ฉํ์ฌ ๊ฒ์ ์ดํํธ๋ฅผ ๋ง๋ค์ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ด๋ฒ ํ์ต ๋ด์ฉ์ ์ ํ์ฉํ์ฌ ๊ทธ๋์ ๋ฐฐ์ ๋ CSS ์์ฑ๋ค์ ๊ฒ์์ฐฝ ํ์์ผ๋ก ์ํ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋๋ก
๋ง๋ค์ด๋ณด๋๋ก ํฉ์๋ค. ๋์ค์ ๋ชจ๋ฅด๋ ๊ฒ ์๊ฒผ์ ๋ ๊ณต๋ถํ๊ธฐ ํธํ๊ฒ ๋ง์ด์ฃ !
์, ๊ทธ๋ผ ์์ํด๋ณผ๊น์?
HTML ์์ค ๋ณด๊ธฐ
๊ฒ์ ์ดํํธ 02์ HTML ์์ค์ ๋ถ์ฐ ์ค๋ช
(์ฃผ์ ์ฒ๋ฆฌ๋จ)์ด๋ค.
CSS ์์ค๋ฅผ ํจ๊ป ๋ณด๊ณ ์ถ๋ค๋ฉด ๋งจ ์๋์ 'CSS ์์ค ๋ณด๊ธฐ' ๋ฒํผ์ ๋๋ฅผ ๊ฒ.
<body>
<header id="header">
<h1>Search</h1>
<nav>
<ul>
<li><a href="searchEffect01.html">01</a></li>
<li class="active"><a href="searchEffect02.html">02</a></li>
<li><a href="searchEffect03.html">03</a></li>
<li><a href="searchEffect04.html">04</a></li>
<li><a href="searchEffect05.html">05</a></li>
<li><a href="searchEffect06.html">06</a></li>
</ul>
</nav>
</header>
<!-- // header -->
<main id="main">
<div class="search__wrap">
<span>indexOf()๋ฅผ ์ด์ฉํ์ฌ ๊ฒ์ํ๊ธฐ</span>
<h1>CSS ์์ฑ ๊ฒ์ํ๊ธฐ</h1>
<div class="search__box"> <!-- ๊ฒ์์์ -->
<label for="search">๊ฒ์ํ๊ธฐ</label> <!-- ์คํฌ๋ฆฐ๋ฆฌ๋๊ธฐ์ ์ฝํ์ง๋ง ๊ฒ์ผ๋ก๋ ์๋ณด์ด๊ฒ CSS ์์ฑ์ผ๋ก ์ฒ๋ฆฌ -->
<input type="text" id="search" placeholder="CSS ์์ฑ ๋ฐ ์ ํ์ ์
๋ ฅํด์ฃผ์ธ์.">
</div>
<div class="search__info"> <!-- ์ ์ฒด ์์ฑ ๊ฐ์ ์ถ๋ ฅ์ฉ -->
<div class="type">ํ๋ ์ค, ์ ๋๋ฉ์ด์
, ๋ฐฑ๊ทธ๋ผ์ด๋, ๊ธฐํ ๋ฑ๋ฑ ์ ํ๋ณ๋ก ๊ฒ์ํด๋ณด์ธ์.</div>
<div>์ ์ฒด ์์ฑ ๊ฐ์ : <span class="num">0</span></div>
</div>
<div class="search__list">
<div class="css">
<ul>
<li data-name="accent-color"><strong>accent-color</strong> : ๋ค๋ฅธ ํ์ด์ง๋ก์ ์ด๋์ ์ค์ ํจ</li>
<li data-name="align-content" data-type="ํ๋ ์ค"><strong>align-content</strong> : ์ฝํ
์ธ ์์ดํ
์ ์ํ๊ด๊ณ ์ ๋ ฌ ์ํ๋ฅผ ์ค์ </li>
<li data-name="align-items" data-type="ํ๋ ์ค"><strong>align-items</strong> : ์ฝํ
์ธ ์์ดํ
์ ๋ด๋ถ ์ํ๊ด๊ณ ์ ๋ ฌ ์ํ๋ฅผ ์ค์ ํจ</li>
<!-- โฆ ๊ธธ์ด์ง๋ฏ๋ก ์ดํ ์๋ต -->
</ul>
</div>
</div>
</div>
</main>
<!-- // main -->
<footer id="footer">
<a href="mailto:kde66034@gmail.com">kde66034@gmail.com</a>
</footer>
<!-- // footer -->
</body>
JavaScript ์์ค ๋ณด๊ธฐ
๊ฒ์ ์ดํํธ 02์ JavaScript ์์ค์ ๋ถ์ฐ ์ค๋ช (์ฃผ์ ์ฒ๋ฆฌ๋จ)์ด๋ค.
// ์ ํ์ : ์์ const๋ฅผ ํ์ํ ๋งํผ ์ ์ธ ํ HTML ์์ญ์ div, ์๋งจํฑํ๊ทธ ๋ฑ์ class๋ช
๊ณผ ์ฐ๊ฒฐ
const searchBox = document.querySelector(".search__box input"); // ๊ฒ์ ์์ญ
const searchList = document.querySelectorAll(".search__list ul li"); // ๋ชฉ๋ก ๋ฆฌ์คํธ
const searchInfo = document.querySelector(".search__info .num"); // ์ ์ฒด ๊ฐ์
// ์ ์ฒด ๊ฐ์ ๊ตฌํ๊ธฐ
searchInfo.textContent = searchList.length; // CSS ์์ฑ ์ด ๊ฐ์ ์ถ๋ ฅ
// ์ ์ฒด ๊ฐ์ ๊ตฌํ๊ธฐ : for๋ฌธ (๋ณต์ก, ๊ถ์ฅํ์ง ์์)
// for(let i = 0; i <= searchList.length; i++) {
// const searchInfo = document.querySelector(".search__info .num");
// searchInfo.innerText = i;
// }
// ๊ฒ์์์ญ
searchBox.addEventListener("keyup", () => {
const searchWord = searchBox.value; // ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ํค์๋
searchList.forEach(el => {
const cssName = el.dataset.name; // CSS ์์ฑ ๋ชจ๋ ๊ฐ
if(cssName.includes(searchWord)) {
el.classList.remove("hide"); // ์ผ์น๊ฐ์ด ์์ผ๋ฉด ๋ณด์ฌ์ค(์จ๊น ํจ๊ณผ๋ฅผ ์ ๊ฑฐ)
} else {
el.classList.add("hide"); // ์์ผ๋ฉด ์ฌ๋ผ์ง๊ฒ ํ๊ธฐ(์จ๊น ํจ๊ณผ ํ์ฑํ)
}
});
});
'Effect > Search Effect' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Search Effect] ๊ฒ์ ์ดํํธ 06 (1) | 2022.10.21 |
---|---|
[Search Effect] ๊ฒ์ ์ดํํธ 05 (4) | 2022.09.29 |
[Search Effect] ๊ฒ์ ์ดํํธ 04 (3) | 2022.09.28 |
[Search Effect] ๊ฒ์ ์ดํํธ 03 (7) | 2022.08.22 |
[Search Effect] ๊ฒ์ ์ดํํธ 01 (8) | 2022.08.16 |
๋๊ธ