charAt()์ ํตํด ๊ฒ์ ์ฌ์ดํธ ์ ์ํ๊ธฐ
์ด๋ฒ ์๊ฐ์๋ ๋ฌธ์์ด ๋ฉ์๋ ์ค ํ๋์ธ charAt() ๋ฉ์๋๋ฅผ ํตํด ์ํ๋ฒณ๊ณผ css์์ฑ์ ์ฒซ๊ธ์๊ฐ ๋์ผํ ๊ฒ๋ง ๋์ค๋ ๊ฒ์ ์ฌ์ดํธ๋ฅผ ์ ์ํด๋ณด๊ฒ ์ต๋๋ค!
๋จผ์ charAt() ๋ฉ์๋์ ๋ํ ์ดํด๋ฅผ ๋์ด๊ธฐ ์ํด ์ ๊ฒ์๊ธ์ ๋ณด๊ณ ์ค์๋ ๊ฒ์ด ์ข์ต๋๋ค ;)
#1. HTML : ๊ตฌ์กฐ ์ง๊ธฐ
! point !
๋ฒํผ์ ์ํ ์ํ๋ฒณ ๋งํฌ์
์ ์์
ํด์ค๋๋ค. ์คํฌ๋ฆฝํธ์ css์์ฑ์ ์ํด ์ธํฌ ์์ keyword ๋ถ๋ชจ ์์๋ฅผ ๋ง๋ค์ด ์ค๋๋ค.
โ๏ธ์ฝ๋ ๋ณด๊ธฐ
<div class="search__info">
<div class="keyword">
<span>a</span>
<span>b</span>
<span>c</span>
<span>d</span>
<span>e</span>
<span>f</span>
<span>g</span>
<span>h</span>
<span>i</span>
<span>j</span>
<span>k</span>
<span>l</span>
<span>n</span>
<span>m</span>
<span>o</span>
<span>p</span>
<span>q</span>
<span>r</span>
<span>s</span>
<span>t</span>
<span>u</span>
<span>v</span>
<span>w</span>
<span>x</span>
<span>y</span>
<span>z</span>
</div>
<div>CSS ์์ฑ ๊ฐฏ์ : <span class="num">0</span></div>
</div>
์ํ๋ฒณ ๋ฒํผ ์์ ์ด ๋๋๋ฉด ์์ฑ ๋ฆฌ์คํธ๋ฅผ ์์ ํด์ค๋๋ค.
โ๏ธ ๋ฆฌ์คํธ ๋ณด๊ธฐ
<li><strong>accent-color</strong> : accent-color๋ ์์์ ๊ฐ์กฐ ์์์ ์ง์ ํฉ๋๋ค.</li>
<li><strong>align-content</strong> : align-content๋ ์ฝํ
์ธ ์ฌ์ด์ ์ฝํ
์ธ ์ฃผ์ ๋น ๊ณต๊ฐ์ ํ๋ ์ค ๋ฐ์ค'์ ๊ต์ฐจ์ถ ๋๋ ๊ทธ๋ฆฌ๋์ ๋ธ๋ก ์ถ์ ๋ฐ๋ผ ๋ฐฐ์นํ๋ ๋ฐฉ์์ ๊ฒฐ์ ํฉ๋๋ค.</li>
<li><strong>align-items</strong> : align-item์ ์ฝํ
์ธ ์์ดํ
์ ๋ด๋ถ ์ํ๊ด๊ณ ์ ๋ ฌ ์ํ๋ฅผ ์ค์ ํฉ๋๋ค.</li>
<li><strong>align-self</strong> : align-self๋ ๊ฐ๋ณ์ ์ฝํ
์ธ ์์ดํ
์ ์ ๋ ฌ ์ํ๋ฅผ ์ค์ ํฉ๋๋ค.</li>
<li><strong>all</strong> : all์ ์์์ ๋ชจ๋ ์์ฑ์ ์ด๊ธฐํํฉ๋๋ค. ๋๋ ์์์ ์ค์ ํฉ๋๋ค.</li>
<li><strong>animation</strong> : animation์ ์ ๋๋ฉ์ด์
๊ณผ ๊ด๋ จ๋ ์์ฑ์ ์ผ๊ด์ ์ผ๋ก ์ค์ ํฉ๋๋ค.</li>
<li><strong>animation-delay</strong> : animation-delay๋ ์ ๋๋ฉ์ด์
์ง์ฐ ์๊ฐ์ ์ค์ ํฉ๋๋ค.</li>
<li><strong>animation-direction</strong> : animation-direction๋ ์ ๋๋ฉ์ด์
์์ง์ ๋ฐฉํฅ์ ์ค์ ํฉ๋๋ค.</li>
<li><strong>animation-duration</strong> : animation-duration๋ ์ ๋๋ฉ์ด์
์์ง์ ์๊ฐ์ ์ค์ ํฉ๋๋ค.</li>
<li><strong>animation-fill-mode</strong> : animation-fill-mode๋ ์ ๋๋ฉ์ด์
์ด ๋๋ ํ์ ์ํ๋ฅผ ์ค์ ํฉ๋๋ค.</li>
<li><strong>animation-iteration-count</strong> : animation-iteration-count๋ ์ ๋๋ฉ์ด์
์ ๋ฐ๋ณต ํ์๋ฅผ ์ค์ ํฉ๋๋ค.</li>
<li><strong>animation-name</strong> : animation-name์ ์ ๋๋ฉ์ด์
Keyframe ์ด๋ฆ์ ์ค์ ํฉ๋๋ค.</li>
<li><strong>animation-play-state</strong> : animation-play-state๋ ์ ๋๋ฉ์ด์
์ ์งํ ์ํ๋ฅผ ์ค์ ํฉ๋๋ค.</li>
<li><strong>animation-timeline</strong> : animation-timeline์ ์์์ ์ ์ฉํ ์คํฌ๋กค ์ ๋๋ฉ์ด์
์ ์ค๋ช
ํ๋ ํ๋ ์ด์์ @scroll-timeline at-rules ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.</li>
<li><strong>animation-timing-function</strong> : animation-timing-function์ ์ ๋๋ฉ์ด์
์์ง์์ ์๋๋ฅผ ์ค์ ํฉ๋๋ค.</li>
<li><strong>appearance</strong> : appearance๋ webit ๊ณ์ด์ ๋ธ๋ผ์ฐ์ ์ type="search" ํ๋์ ๋ฅ๊ทผ ํ
๋๋ฆฌ ๊ฐ์ด๋ reset ํจ๊ณผ๋ฅผ ๋ํ๋ด๋ ๋ฒํผ์ ์ญ์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.</li>
<li><strong>aspect-ratio</strong> : aspect-ratio๋ ์์์ ํฌ๊ธฐ๋ฅผ ๋น์จ๋๋ก ์กฐ์ ํ ์ ์๊ฒ ํฉ๋๋ค.</li>
<!-- ์ a์ํ๋ฒณ์ ๋ฆฌ์คํธ์ฒ๋ผ ์์
ํด์ค๋๋ค.(๋๋จธ์ง๋ ์๋ต!) -->
#3. CSS : ์คํ์ผ์ฃผ๊ธฐ
! point !
๋งํฌ์
์ ์ฐธ๊ณ ํ์ฌ ์คํ์ผ ์์ฑ์ ์ค์ ํด๋ณด์!
๐ก ์คํ์ผ ์์ฑ์ ์ ํด์ง ๊ฒ์ด ์๋๋ ์ค์ตํ์ค ๋ถ๋ค์ ์ง์ ์์ฑ์ ์์๋ณด๊ณ ์คํ์ผ์ ์ค์ ํ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์
๋๋ค!
โ๏ธ ์์ฑ ๋ณด๊ธฐ
/* font color */
:root {
--htmlColor : #223547;
--cssColor : #472237;
--javascriptColor : #624313;
}
/* reset */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'NexonLv1Gothic';
color: var(--htmlColor);
}
*, *:before, *:after {
box-sizing:border-box;
}
a {
color: var(--htmlColor);
text-decoration: none;
}
li {
list-style: none;
}
/* header */
#header nav {
margin: 10px;
}
#header nav li {
display: inline;
position: relative;
}
#header nav li a {
width: 30px;
height: 30px;
border: 1px solid var(--htmlColor);
border-radius: 50%;
display: inline-block;
text-align: center;
line-height: 30px;
font-family: 'NexonLv1Gothic';
}
#header nav li.active a {
background-color: var(--htmlColor);
color: #fff;
}
#header nav li .sub {
position: absolute;
left: 0;
top: 35px;
width: 400px;
}
#header nav li .sub li a {
width: auto;
background-color: transparent;
color: var(--htmlColor);
border: 0;
text-align: left;
line-height: 1.2;
}
#header nav li .sub li.active a {
text-decoration: underline;
}
/* main */
#main {
margin: 50px 10px;
}
.search__wrap {
max-width: 1400px;
margin: 0 auto;
border: 3px solid var(--htmlColor);
border-radius: 20px;
background-color: #F1F3F6;
padding: 30px;
text-align: center;
}
.search__wrap > span {
font-size: 20px;
margin-bottom: 20px;
display: inline-block;
}
.search__wrap > h1 {
font-family: 'Tmon';
color: var(--htmlColor);
font-size: 6vw;
margin-bottom: 10px;
}
/* search__box */
.search__box {
margin-bottom: 40px;
}
/* irํจ๊ณผ */
.search__box label {
position: absolute;
clip: rect(0 0 0 0);
width: 1px;
height: 1px;
margin: -1px;
overflow: hidden;
}
.search__box input {
border: 2px solid var(--htmlColor);
padding: 15px 40px;
width: 70%;
border-radius: 50px;
font-size: 20px;
}
/* search__list */
.search__list li {
text-align: left;
line-height: 1.7;
}
.search__list li.hide {
display: none;
}
.search__list li.show {
display: block;
}
/* search__info_type */
.search__info {
text-align: right;
margin-bottom: 30px;
padding-bottom: 10px;
border-bottom: 2px dashed var(--htmlColor);
}
.search__info .type {
text-align: center;
margin-bottom: 10px;
}
/* search__info_keword */
.search__info .keyword{
text-align: center;
margin-bottom: 10px;
}
.search__info .keyword span {
border: 1px solid var(--htmlColor);
border-radius: 50px;
padding: 10px;
display: inline-block;
margin-bottom: 4px;
}
.search__info .keyword span:hover {
background-color: var(--htmlColor);
color: #fff;
cursor: pointer;
}
/* ๋ชจ๋ฐ์ผ */
@media (max-width: 600px){
.search__wrap {
padding: 20px;
}
.search__wrap > span {
font-size: 16px;
margin-bottom: 10px;
}
.search__wrap > h1 {
font-size: 44px;
}
.search__box input {
font-size: 16px;
padding: 12px 30px;
}
}
/* footer */
#footer {
text-align: center;
}
#footer a {
color: #000;
font-family: 'NexonLv1Gothic';
padding-bottom: 50px;
}
#footer a:hover {
text-decoration: underline;
}
#4. JAVASCRIPT : ์คํฌ๋ฆฝํธ ์ง๊ธฐ
charAt()์ ๋ฐ๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ์ ํตํด ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํด๋ณด์!
์ฝ๋์ ์ฃผ์๊ณผ ํจ๊ป ์คํฌ๋ฆฝํธ๋ฅผ ์ดํดํด๋ณด๋๋ก ํฉ๋๋ค:)
โ๏ธ์คํฌ๋ฆฝํธ ๋ณด๊ธฐ
//์ ํ์
const searchKeyword = document.querySelectorAll(".search__info .keyword span"); //์ํ๋ฒณ
const searchList = document.querySelectorAll(".search__list ul li"); //๋ชฉ๋ก ๋ฆฌ์คํธ
const searchInfo = document.querySelector(".search__info .num"); //๊ฐฏ์
//์ ์ฒด ๊ฐฏ์ ๊ตฌํ๊ธฐ
searchInfo.textContent = searchList.length;
//searchBox ๊ฒ์ ์์ญ
searchKeyword.forEach(el => {
el.addEventListener("click", () => {
const searchWord = el.innerText; // ์ฌ์ฉ์๊ฐ ํด๋ฆญํ ์ํ๋ฒณ / searchWord์ ํด๋ฆญํ ์ํ๋ฒณ ๋ฐ์ดํฐ ์ ์ฅ
searchList.forEach(el => {
const cssName = el.querySelector("strong").innerText; //CSS ์์ฑ ํ
์คํธ / cssName์ ์
๋ ํฐํ ์์ ๋ฐ์ดํฐ ์ ์ฅ
//์ํ๋ฒณ ์ฒซ๊ธ์์ css์์ฑ์ ์ฒซ๊ธ์๊ฐ ๊ฐ์ ๊ฒ๋ง ์ถ๋ ฅ๋๋ค.
if(searchWord.charAt(0) === cssName.charAt(0)){
el.classList.remove("hide");
}else {
el.classList.add("hide");
}
});
});
});
! ๊ฒ์ ์์ญ์ด ์๋๋๋ ๊ณผ์ ์์๋ณด๊ธฐ !
***charAt(๊ฒ์๊ฐ) ๋ฉ์๋๋ ์ฌ์ฉ์๊ฐ ๊ฒ์ํ ๋ฌธ์์ด์ด ์์์ ์ ์ฅํ ๋ฐ์ดํฐ ๋ด์ ํฌํจ๋์์ ๋ ์ซ์๋ฅผ ๋ฐํํ๊ฒ ๋ฉ๋๋ค.***
1. forEach๋ฌธ์ ํตํด ์ฌ์ฉ์๊ฐ ์ํ๋ฒณ์ ํด๋ฆญํ ๊ฒฝ์ฐ ๋ฐ๋ณต๋ฌธ๊ณผ ์กฐ๊ฑด๋ฌธ์ ์คํ์ํต๋๋ค.
2. classList๋ฅผ ํตํด hide๋ผ๋ ํด๋์ค๋ฅผ ์ถ๊ฐํด์ฃผ๊ณ charAt()์ ์ด์ฉํ์ฌ css์์ฑ์ ์ฒซ๊ธ์์ ์ํ๋ฒณ์ด ๋์ผํ ๋ฆฌ์คํธ๋ hide๊ฐ ์ง์์ ธ ์ถ๋ ฅ๋๋๋ก ํฉ๋๋ค.
(โ css ์์ฑ๊ฐ์ผ๋ก hide์๊ฒ display: none;์ ์ฃผ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ด ๋์ผํ์ง ์์ ๊ฒฝ์ฐ ๋ณด์ด์ง ์๊ฒ ๋๋ค!)
#4. ๊ฒฐ๊ณผ
'EFFECT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[QUIZ] ํด์ฆ ๋ง๋ค๊ธฐ06 : ์ฌ๋ผ์ด๋ ํ์ (3) | 2022.08.25 |
---|---|
[QUIZ] ํด์ฆ ๋ง๋ค๊ธฐ05 : ๊ฐ๊ด์ 60๋ฌธ์ (4) | 2022.08.25 |
[Search] ๊ฒ์ ์ ํ ์ฌ์ดํธ ๋ง๋ค๊ธฐ02 (4) | 2022.08.17 |
[Search] ๊ฒ์ ์ ํ ์ฌ์ดํธ ๋ง๋ค๊ธฐ01 (5) | 2022.08.17 |
ํด์ฆ ๋ฌธ์ ๋ง๋ค๊ธฐ04 (6) | 2022.08.08 |
๋๊ธ