Skip to content

Commit b73f667

Browse files
committed
Complete Accordion Project
1 parent 79b1265 commit b73f667

File tree

3 files changed

+70
-10
lines changed

3 files changed

+70
-10
lines changed

10. Accordions/src/Accordion.jsx

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
1-
import React from 'react'
1+
import React, { useState } from "react";
2+
3+
const Accordion = ({ title, content }) => {
4+
const [isActive, setIsActive] = useState(false);
25

3-
function Accordion() {
46
return (
5-
<div>
6-
Accordion
7-
</div>
8-
)
7+
<section className="accordion-card" key={Math.random()}>
8+
<div className="header" onClick={() => setIsActive(!isActive)}>
9+
<div>{ title }</div>
10+
<p className="icon">{isActive ? "-" : "+"}</p>
11+
</div>
12+
13+
<div className="content">
14+
{isActive && <p className="card-info">{content}</p>}
15+
</div>
16+
</section>
17+
);
918
}
1019

11-
export default Accordion
20+
export default Accordion;

10. Accordions/src/App.jsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import React from "react";
22
import Accordion from "./Accordion";
3-
3+
import { accordionData } from "./utils/content";
44

55
function App() {
66
return (
7-
<div>
8-
<Accordion/>
7+
<div className="accordion">
8+
{accordionData.map(({ title, content }) => {
9+
return <Accordion title={title} content={content} />;
10+
})}
911
</div>
1012
);
1113
}

10. Accordions/src/index.css

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
* {
2+
margin: 0;
3+
padding: 0;
4+
box-sizing: border-box;
5+
}
6+
7+
body {
8+
background: rgb(36, 36, 36);
9+
color: #fff;
10+
font-family: sans-serif;
11+
height: 100vh;
12+
display: flex;
13+
flex-direction: column;
14+
justify-content: center;
15+
align-items: center;
16+
}
17+
18+
.container {
19+
border: 2px solid white;
20+
}
21+
22+
.accordion-card {
23+
margin: 20px;
24+
padding: 20px;
25+
background: rgb(73, 73, 73);
26+
}
27+
28+
.header {
29+
display: flex;
30+
justify-content: space-between;
31+
width: 40rem;
32+
}
33+
34+
.card-title {
35+
display: flex;
36+
justify-content: space-between;
37+
width: 50rem;
38+
}
39+
40+
.icon {
41+
font-size: 1.5rem;
42+
cursor: pointer;
43+
}
44+
45+
p.card-info {
46+
width: 30rem;
47+
padding: 20px 0;
48+
line-height: 1.3;
49+
}

0 commit comments

Comments
 (0)