How To Add Accordion In Html
You can use HTML, CSS and JavaScript to create stylish and dynamic spider web elements. And one useful element you can build is an accordion carte du jour.
Accordion menus expand and collapse when a user clicks a button. It's a peachy way to not have to evidence all the info about a topic up forepart, and instead requite users the choice to prove just what they need.
In this tutorial, I'll show you how to build a simple accordion menu that looks like this:
In UI blueprint, an accordion menu is a vertically stacked list of various pieces of data. For each list, there is a labelled header pointing to corresponding content. Each list's content is subconscious by default. Clicking on a particular label will aggrandize its content.
1 very mutual use case for accordions is to hold a list of frequently asked questions. Clicking on any question will toggle/show a corresponding answer.
How to Build an Piano accordion Bill of fare using HTML, CSS and JS
We'll begin by defining the HTML markup. If you are using an IDE like VS Lawmaking and you take emmet installed, create a new index.html
file and type !
followed by enter. This should create HTML boilerplate code for your project.
Alternatively, you can copy the following code into your index.html
, or get the code for this project from Codepen.
The folder construction is simple. We will create a binder called piano accordion. Within the folder we will create three files: alphabetize.html
, styles.css
, and app.js
. We will also link all files into our HTML markup equally you tin see higher up.
HTML Markup for the Accordion
For each listing in the menu, we volition have two div
s – one for the characterization, the other for the content.
Without CSS, our page will look all bare, like this:
How to Style the Accordion with CSS
We want our accordion bill of fare to wait good, of course. Time to bring some CSS into play. I've added some comments in the code to explain what each piece is doing:
@import url('https://fonts.googleapis.com/css2?family=Rubik:wght@300&brandish=swap'); /* Sets the background color of the torso to blue. Sets font to Rubik */ trunk { background-colour: #0A2344; font-family: 'rubik', sans-serif; } /* Aligns the heading text to the center. */ h1 { text-marshal: center; } /* Sets the width for the accordion. Sets the margin to 90px on the top and bottom and auto to the left and correct */ .accordion { width: 800px; margin: 90px auto; color: black; background-color: white; padding: 45px 45px; }
With all of these styles practical, here is how our accordion will look like now:
Now we need to start doing some work on the inside to gear up up its functionality. Start, we set the position property for each of the containers (holding both the characterization and content) to relative.
That means we tin can at present position its children relative to it.
.accordion .container { position: relative; margin: 10px 10px; } /* Positions the labels relative to the .container. Adds padding to the top and bottom and increases font size. Too makes its cursor a pointer */ .squeeze box .label { position: relative; padding: 10px 0; font-size: 30px; colour: black; cursor: arrow; }
You can now discover the difference in the image below:
The next activity will be to append a fiddling '+' sign at the finish of each listing. This will allow users know that they can expand the section to learn/run into more.
Nosotros volition achieve this using the ::before
selector. The ::earlier
and ::after
selector is used to place content earlier of or afterward a specified chemical element.
Here, nosotros are inserting '+' earlier the label. But we will use the offset properties top
and right
to identify it at the far right corner.
/* Positions the plus sign 5px from the correct. Centers it using the transform belongings. */ .accordion .label::before { content: '+'; color: black; position: absolute; top: 50%; right: -5px; font-size: 30px; transform: translateY(-50%); } /* Hides the content (elevation: 0), decreases font size, justifies text and adds transition */ .accordion .content { position: relative; background: white; top: 0; font-size: 20px; text-align: justify; width: 780px; overflow: hidden; transition: 0.5s; } /* Adds a horizontal line betwixt the contents */ .accordion hr { width: 100; margin-left: 0; border: 1px solid grey; }
This will make everything improve. Besides observe that the content for each listing is now subconscious.
Calculation JavaScript to our Accordion
At this indicate, our piano accordion is pretty much static. To make a container display the content when a user clicks on it, nosotros will need to bring in some JavaScript.
Navigate to your script app.js
and blazon in the following lawmaking:
const accordion = document.getElementsByClassName('container'); for (i=0; i<accordion.length; i++) { piano accordion[i].addEventListener('click', function () { this.classList.toggle('agile') }) }
This script will access all of our lists by classname
of container
.
Then we will loop through the list. For each container, we just want to register an event listener to information technology. When information technology gets clicked, we want to toggle the form "active" on that element.
At present we are going to exam this effect. Click the first container with the label What is HTML
, open your DevTools (click on F12), and audit information technology inside of the elements tab.
Yous should find the active
class registered on information technology:
Clicking on the element again will remove the active
class from information technology.
How to Stop Upward the App
In that location is i terminal affair we need to do. We demand to create an active class inside a stylesheet. We will define how we want our accordion to look one time JavaScript toggles the class on a container.
/* Unhides the content part when active. Sets the height */ .accordion .container.active .content { height: 150px; } /* Changes from plus sign to negative sign once active */ .accordion .container.active .label::before { content: '-'; font-size: 30px; }
This is how our app looks and behaves in the finish:
Wrapping Upwards
So in this tutorial, we built an accordion menu using HTML, CSS, and JavaScript.
Thanks for following along. I hope you learned something useful from this tutorial.
If you are interested in content like this, follow my blog.
Have a great week.