2021년 애니메이션 FAQ 아코디언으로 콘텐츠 구성 !🔥|| CSS JS
이러한 불행을 방지하기 위해 FAQ/콘텐츠를 애니메이션 아코디언으로 정리할 수 있습니다. 아래와 같이 👇
이 블로그는 CSS 및 JS를 사용하여 2021년 FAQ 아코디언을 구축하는 방법에 관한 것입니다. 자, 여행을 시작해 볼까요 💪
코드펜 🔥
전체 코드는 Codepen에서 찾을 수 있습니다.
유튜브 튜토리얼 🔥
목차 🔥
목차 🔥
HTML:
We're gonna create 4 div inside a parent div with class name container. Let's start small with 1 item.
Like this 👇
<div class="container">
<h1>Frequently Asked Questions</h1>
<div class = "item-1"> </div>
</div>
Next up, setup 2 siblings with class-name .accordion & .panel inside .item-1 class
<div class="container">
<h1>Frequently Asked Questions</h1>
<div class = "item-1">
<div class="accordion"> </div>
<div class="panel"> </div>
</div>
</div>
Inside .accordion, create 2 siblings- .title & .icon
Inside .icon, write "+"
Inside .title, write your content, *anything u wish.
Inside .panel, set some dummy text.
<div class="container">
<h1>Frequently Asked Questions</h1>
<div class = "item-1">
<div class="accordion">
<div class="title">How to Install?</div>
<div class="icon">+</div>
</div>
<div class="panel">
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
Rem commodi provident modi eligendi consequuntur esse
consequatur quis corrupti delectus quas.
</p>
</div>
</div>
</div>
이렇게 4개의 형제 div를 만들고 HTML Part를 완성합니다.
<div class="container">
<h1>Frequently Asked Questions</h1>
<div class="item-1">
<div class="accordion">
<div class="title">How To Install ?</div>
<div class="icon">+</div>
</div>
<div class="panel">
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
Rem commodi provident modi eligendi consequuntur esse
consequatur quis corrupti delectus quas.
</p>
</div>
</div>
<div class="item-2">
<div class="accordion">
<div class="title">How To Uninstall ?</div>
<div class="icon">+</div>
</div>
<div class="panel">
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
Rem commodi provident modi eligendi consequuntur esse
consequatur quis corrupti delectus quas.
</p>
</div>
</div>
<div class="item-3">
<div class="accordion">
<div class="title">How To Upgrade ?</div>
<div class="icon">+</div>
</div>
<div class="panel">
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
Rem commodi provident modi eligendi consequuntur esse
consequatur quis corrupti delectus quas.
</p>
</div>
</div>
<div class="item-4">
<div class="accordion">
<div class="title">Refund Policy ?</div>
<div class="icon">+</div>
</div>
<div class="panel">
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
Rem commodi provident modi eligendi consequuntur esse
consequatur quis corrupti delectus quas.
</p>
</div>
</div>
</div>
규칙 설정:
In this part,
We're gonna pick "Poppins" as the font-family,
Create a template using a mixin,
Create some commonly used variables, and
Change default styles by the * selector.
@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap');
//*** Template of the CSS Flexbox Model******
@mixin flex($jus,$ali){
display: flex;
justify-content:$jus;
align-items:$ali;
}
// Commonly used Values/colors as variables
$bgc: #000;
$color-1: #fff;
$color-2: red;
*{
margin:0px;
padding:0px;
box-sizing:border-box;
body{
@include flex(center,null);
width:100%;
min-height:100vh;
background-color: $bgc;
color: $color-1;
font-family: 'Poppins';
}
}
SCSS :
First, style the .container
.container{
width:80%;
//***Media Query to make the Accordion look good on larger screens.
@media (min-width: 800px){
width:45%;
}
h1{
text-align:center;
font-weight:300;
margin: 50px 0;
}
}
Then, style the .accordion
// Targetting & styling all .accordion classes
.accordion{
@include flex(space-between,null);
border-bottom: 2px solid $color-2;
font-size: 22px;
letter-spacing: 5px;
// text-transform: uppercase;
font-weight: 500;
cursor:pointer;
transition: all .3s ease;
&:hover{
color: $color-2;
}
}
Next up, style the .panel
// Targetting & styling all .panel classes
.panel{
max-height: 0px;
overflow:hidden;
transition: all 1s ease;
p{
margin: 10px 0px 10px 20px;
text-align:justify;
}
}
Finally, create an extra .open class to be used in JS
// This is an extra class. It will be used inside javascript.
// it's main task is to change color of accordion title from white to red.
.open{
color : $color-2;
}
자바스크립트:
Explanation is given as comments on the code. If you don't understand this part, then scroll to top, and see the youtube tutorial.
// Targetting all the .accordion classes
let acc = document.getElementsByClassName('accordion')
// console.log(acc);
// Creating a loop to add eventListener to all .accordion classes
for(let i=0;i<acc.length;i++){
acc[i].addEventListener('click',function(){
//targetting sibling of every .accordion class named .panel class
let panel = this.nextElementSibling
//if panel is open, then this block will close it on mouse click
if(panel.style.maxHeight){
panel.style.maxHeight=null;
this.classList.remove('open')
this.getElementsByClassName('icon')[0].innerHTML ='+';
}
//if panel is closed, then this block will open it on mouse click
else{
//Removes everthing on previous accordion on new mouse click
//by this for loop
for(let x=0;x<acc.length; x++){
acc[x].classList.remove('open')
acc[x].nextElementSibling.style.maxHeight=null;
acc[x].getElementsByClassName('icon')[0].innerHTML ='+';
}
//if panel is closed, then these codes will open it on mouse click & set those specific rules mentioned below.
panel.style.maxHeight = panel.scrollHeight + 'px';
this.classList.toggle('open')
this.getElementsByClassName('icon')[0].innerHTML ='-'
}
})
}
결론 :
축하합니다 🎖️
프로젝트가 끝났습니다. 🔥
댓글 상자에 대한 귀하의 생각을 알려주세요.
제안과 비판은 매우 감사합니다 ❤️
Like this 👇
<div class="container">
<h1>Frequently Asked Questions</h1>
<div class = "item-1"> </div>
</div>
<div class="container">
<h1>Frequently Asked Questions</h1>
<div class = "item-1">
<div class="accordion"> </div>
<div class="panel"> </div>
</div>
</div>
Inside .icon, write "+"
Inside .title, write your content, *anything u wish.
Inside .panel, set some dummy text.
<div class="container">
<h1>Frequently Asked Questions</h1>
<div class = "item-1">
<div class="accordion">
<div class="title">How to Install?</div>
<div class="icon">+</div>
</div>
<div class="panel">
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
Rem commodi provident modi eligendi consequuntur esse
consequatur quis corrupti delectus quas.
</p>
</div>
</div>
</div>
<div class="container">
<h1>Frequently Asked Questions</h1>
<div class="item-1">
<div class="accordion">
<div class="title">How To Install ?</div>
<div class="icon">+</div>
</div>
<div class="panel">
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
Rem commodi provident modi eligendi consequuntur esse
consequatur quis corrupti delectus quas.
</p>
</div>
</div>
<div class="item-2">
<div class="accordion">
<div class="title">How To Uninstall ?</div>
<div class="icon">+</div>
</div>
<div class="panel">
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
Rem commodi provident modi eligendi consequuntur esse
consequatur quis corrupti delectus quas.
</p>
</div>
</div>
<div class="item-3">
<div class="accordion">
<div class="title">How To Upgrade ?</div>
<div class="icon">+</div>
</div>
<div class="panel">
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
Rem commodi provident modi eligendi consequuntur esse
consequatur quis corrupti delectus quas.
</p>
</div>
</div>
<div class="item-4">
<div class="accordion">
<div class="title">Refund Policy ?</div>
<div class="icon">+</div>
</div>
<div class="panel">
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
Rem commodi provident modi eligendi consequuntur esse
consequatur quis corrupti delectus quas.
</p>
</div>
</div>
</div>
In this part,
We're gonna pick "Poppins" as the font-family,
Create a template using a mixin,
Create some commonly used variables, and
Change default styles by the * selector.
@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap');
//*** Template of the CSS Flexbox Model******
@mixin flex($jus,$ali){
display: flex;
justify-content:$jus;
align-items:$ali;
}
// Commonly used Values/colors as variables
$bgc: #000;
$color-1: #fff;
$color-2: red;
*{
margin:0px;
padding:0px;
box-sizing:border-box;
body{
@include flex(center,null);
width:100%;
min-height:100vh;
background-color: $bgc;
color: $color-1;
font-family: 'Poppins';
}
}
SCSS :
First, style the .container
.container{
width:80%;
//***Media Query to make the Accordion look good on larger screens.
@media (min-width: 800px){
width:45%;
}
h1{
text-align:center;
font-weight:300;
margin: 50px 0;
}
}
Then, style the .accordion
// Targetting & styling all .accordion classes
.accordion{
@include flex(space-between,null);
border-bottom: 2px solid $color-2;
font-size: 22px;
letter-spacing: 5px;
// text-transform: uppercase;
font-weight: 500;
cursor:pointer;
transition: all .3s ease;
&:hover{
color: $color-2;
}
}
Next up, style the .panel
// Targetting & styling all .panel classes
.panel{
max-height: 0px;
overflow:hidden;
transition: all 1s ease;
p{
margin: 10px 0px 10px 20px;
text-align:justify;
}
}
Finally, create an extra .open class to be used in JS
// This is an extra class. It will be used inside javascript.
// it's main task is to change color of accordion title from white to red.
.open{
color : $color-2;
}
자바스크립트:
Explanation is given as comments on the code. If you don't understand this part, then scroll to top, and see the youtube tutorial.
// Targetting all the .accordion classes
let acc = document.getElementsByClassName('accordion')
// console.log(acc);
// Creating a loop to add eventListener to all .accordion classes
for(let i=0;i<acc.length;i++){
acc[i].addEventListener('click',function(){
//targetting sibling of every .accordion class named .panel class
let panel = this.nextElementSibling
//if panel is open, then this block will close it on mouse click
if(panel.style.maxHeight){
panel.style.maxHeight=null;
this.classList.remove('open')
this.getElementsByClassName('icon')[0].innerHTML ='+';
}
//if panel is closed, then this block will open it on mouse click
else{
//Removes everthing on previous accordion on new mouse click
//by this for loop
for(let x=0;x<acc.length; x++){
acc[x].classList.remove('open')
acc[x].nextElementSibling.style.maxHeight=null;
acc[x].getElementsByClassName('icon')[0].innerHTML ='+';
}
//if panel is closed, then these codes will open it on mouse click & set those specific rules mentioned below.
panel.style.maxHeight = panel.scrollHeight + 'px';
this.classList.toggle('open')
this.getElementsByClassName('icon')[0].innerHTML ='-'
}
})
}
결론 :
축하합니다 🎖️
프로젝트가 끝났습니다. 🔥
댓글 상자에 대한 귀하의 생각을 알려주세요.
제안과 비판은 매우 감사합니다 ❤️
.container{
width:80%;
//***Media Query to make the Accordion look good on larger screens.
@media (min-width: 800px){
width:45%;
}
h1{
text-align:center;
font-weight:300;
margin: 50px 0;
}
}
// Targetting & styling all .accordion classes
.accordion{
@include flex(space-between,null);
border-bottom: 2px solid $color-2;
font-size: 22px;
letter-spacing: 5px;
// text-transform: uppercase;
font-weight: 500;
cursor:pointer;
transition: all .3s ease;
&:hover{
color: $color-2;
}
}
// Targetting & styling all .panel classes
.panel{
max-height: 0px;
overflow:hidden;
transition: all 1s ease;
p{
margin: 10px 0px 10px 20px;
text-align:justify;
}
}
// This is an extra class. It will be used inside javascript.
// it's main task is to change color of accordion title from white to red.
.open{
color : $color-2;
}
Explanation is given as comments on the code. If you don't understand this part, then scroll to top, and see the youtube tutorial.
// Targetting all the .accordion classes
let acc = document.getElementsByClassName('accordion')
// console.log(acc);
// Creating a loop to add eventListener to all .accordion classes
for(let i=0;i<acc.length;i++){
acc[i].addEventListener('click',function(){
//targetting sibling of every .accordion class named .panel class
let panel = this.nextElementSibling
//if panel is open, then this block will close it on mouse click
if(panel.style.maxHeight){
panel.style.maxHeight=null;
this.classList.remove('open')
this.getElementsByClassName('icon')[0].innerHTML ='+';
}
//if panel is closed, then this block will open it on mouse click
else{
//Removes everthing on previous accordion on new mouse click
//by this for loop
for(let x=0;x<acc.length; x++){
acc[x].classList.remove('open')
acc[x].nextElementSibling.style.maxHeight=null;
acc[x].getElementsByClassName('icon')[0].innerHTML ='+';
}
//if panel is closed, then these codes will open it on mouse click & set those specific rules mentioned below.
panel.style.maxHeight = panel.scrollHeight + 'px';
this.classList.toggle('open')
this.getElementsByClassName('icon')[0].innerHTML ='-'
}
})
}
결론 :
축하합니다 🎖️
프로젝트가 끝났습니다. 🔥
댓글 상자에 대한 귀하의 생각을 알려주세요.
제안과 비판은 매우 감사합니다 ❤️
Reference
이 문제에 관하여(2021년 애니메이션 FAQ 아코디언으로 콘텐츠 구성 !🔥|| CSS JS), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/joyshaheb/content-organization-with-animated-faq-accordion-in-2021-css-js-4556텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)