728x90
반응형
![](https://blog.kakaocdn.net/dn/blzmqK/btrNif3FSnn/ARKS2neKb4omeSoJh6d4EK/img.jpg)
searchEffect04
find()를 이용하여 속성을 검색하면 설명 보여주기
HTML
검색을 하거나 키워드를 누르면 결과를 보여주기 위한 틀을 잡아 줍니다.
<main id="main">
<div class="search__wrap">
<span>find()를 이용하여 속성을 검색하면 설명 보여주기</span>
<h1>CSS 속성 검색하기</h1>
<div class="search__box">
<label for="search">검색하기</label>
<input type="text" id="search" placeholder="CSS 속성 및 유형을 입력해주세요!">
</div>
<div class="search__desc">
<div class="desc">
속성을 검색하시면 설명이 표시 됩니다.
</div>
</div>
<div class="search__info">
<div>
전체 속성 갯수 : <span class="num">0</span>
</div>
</div>
<div class="search__list">
</div>
</div>
</main>
CSS
검색 결과를 보여주는 css에 대한 수정
:root {
--htmlColor: #223547;
--cssColor: #472222;
--javascriptColor: #224736;
}
* {
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 {
display: flex;
justify-content: space-between;
}
#header nav {
margin: 10px;
}
#header nav li {
position: relative;
display: inline;
}
#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 {
margin-bottom: 20px;
}
.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 li {
text-align: left;
line-height: 1.7;
}
.search__list li.hide {
display: none;
}
.search__list li.show {
display: block;
}
.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 .keyword {
text-align: center;
margin-bottom: 10px;
}
.search__info .keyword span {
border: 2px 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 {
position: relative;
text-align: center;
}
#footer a {
color: #000;
font-family: "NexonLv1Gothic";
padding-bottom: 50px;
}
#footer a:hover {
text-decoration: underline;
}
JAVASCRIPT
cssProperty안에 속성들에 대한 정보를 저장하고, map을 사용한 출력. 이벤트를 발생시키는 경우에 매개변수를 이용한 동작
const cssProperty = [
{ name: "accent-color", desc: "특정 요소에 색상을 지정할 때 사용됩니다." },
.
.
.
];
const searchList = document.querySelector(".search__list");
const searchNum = document.querySelector(".search__info .num") //전체 갯수
const searchBox = document.querySelector(".search__box input");
const searchDesc = document.querySelector(".search__desc");
//출력하기
cssProperty.map((element, index) => {
searchNum.innerText = index + 1; //0부터 시작하기에 더하여 전체
searchList.innerHTML += `${element.name}`;
});
//입력하기
searchBox.addEventListener("keyup", () => {
const searchWord = searchBox.value;
//console.log(searchWord);
findProperty(searchWord); //지역번수라서 매개변수로 전달
});
// 속성찾기
function findProperty(searchData) {
const targetData = cssProperty.find((data) => data.name === searchData);
if (targetData == null) {
searchDesc.textContent = "해당 속성은 존재하지 않습니다. 다시 검색해주세요!";
return; //결과값 출력도 있지만, 종료의 의미. 밑에 있는 실행이 무조건 실행되기에 리턴을로 종료를 시킨다.
}
searchDesc.textContent = targetData.desc;
};
// 클릭시 속성 동작
const searchClick = document.querySelectorAll(".search__list span");
searchClick.forEach((element, index) => {
element.addEventListener("click", () => {
const searchWord = element.innerText;
findProperty(searchWord);
}); forEach를 사용하며, 입력하기 방식과 유사
});
728x90
반응형
'Effect' 카테고리의 다른 글
mouseEffect06 (2) | 2022.09.29 |
---|---|
searchEffect05 (2) | 2022.09.29 |
mouseEffect05 (4) | 2022.09.28 |
mouseEffect04 (5) | 2022.09.22 |
mouseEffect03 (2) | 2022.09.22 |