⭐Accordion is a useful tool when we want to toggle between hiding and showing the content⭐
So in today I will write about making an accordian without Javascript ❕
<---CSS--->
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: "Inter", sans-serif;
}
.accordion {
width: 700px;
margin: 100px auto;
display: flex;
flex-direction: column;
gap: 24px;
}
.item {
box-shadow: 0 0 32px rgba(0, 0, 0, 0.1);
padding: 24px;
display: grid;
grid-template-columns: auto 1fr auto;
column-gap: 24px;
row-gap: 32px;
align-items: center;
}
.open {
border-top: #087f5b 4px solid;
}
.open .hidden-box {
display: block;
}
.number,
.text {
font-size: 24px;
font-weight: 500px;
/* color: #087f5b; */
}
.number {
color: #ced4da;
}
.icon {
width: 24px;
height: 24px;
stroke: #087f5b;
}
.hidden-box p {
line-height: 1.5;
margin-bottom: 24px;
}
.hidden-box ul {
color: #868e96;
margin-left: 20px;
display: flex;
flex-direction: column;
gap: 12px;
}
.hidden-box {
grid-column: 2/-1;
display: none;
}
/* .hidden-box li {
margin-bottom: 12px;
} */
</style>
<----html--->
<body>
<div class="accordion">
<div class="item">
<p class="number">01</p>
<p class="text">How long do I have to return my chair</p>
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
strokeWidth="{1.5}"
stroke="currentColor"
class="icon"
>
<path
strokeLinecap="round"
strokeLinejoin="round"
d="M19.5 8.25l-7.5 7.5-7.5-7.5"
/>
</svg>
<div class="hidden-box">
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Libero
recusandae porro provident quasi dolor odit eum ipsa est, officia
aliquid nostrum amet, at vero cumque? Laborum dicta rem quam ab.
</p>
<ul>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
</ul>
</div>
</div>
<div class="item open">
<p class="number">02</p>
<p class="text">How long do I have to return my chair</p>
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
strokeWidth="{1.5}"
stroke="currentColor"
class="icon"
>
<path
strokeLinecap="round"
strokeLinejoin="round"
d="M19.5 8.25l-7.5 7.5-7.5-7.5"
/>
</svg>
<div class="hidden-box">
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Libero
recusandae porro provident quasi dolor odit eum ipsa est, officia
aliquid nostrum amet, at vero cumque? Laborum dicta rem quam ab.
</p>
<ul>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
</ul>
</div>
</div>
<div class="item">
<p class="number">03</p>
<p class="text">How long do I have to return my chair</p>
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
strokeWidth="{1.5}"
stroke="currentColor"
class="icon"
>
<path
strokeLinecap="round"
strokeLinejoin="round"
d="M19.5 8.25l-7.5 7.5-7.5-7.5"
/>
</svg>
<div class="hidden-box">
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Libero
recusandae porro provident quasi dolor odit eum ipsa est, officia
aliquid nostrum amet, at vero cumque? Laborum dicta rem quam ab.
</p>
<ul>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</li>
</ul>
</div>
</div>
</div>
</body>
</html>
❣result❣
❗ New Fact that I learned ❗
- Give the same class (here, hidden-box) to all three of the boxes you see, and then add the class to the parent class of the box you want the toggle to open.
- I wanted to make the second toggle open in this case, so I added ( .open ) class to the item, the largest parent class in the second box.
So when I wrote it in HTML, I used.- Because the CSS has already done
.hidden-box{ display:none; }.open.hidden-box{ display:block;//The sub-element will work if we have the parent element (.open).// }