How do I create a CSS-only accordion menu?
Davide S
davide s profile pic

To create a CSS-only accordion menu, you can utilize CSS properties like:target andmax-height to control the visibility and height of the accordion panels. Here's a step-by-step guide on how to achieve this: 1. HTML Markup: Start by creating the HTML markup for the accordion menu:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  <div class="accordion">
     <div class="accordion-item">
       <input type="checkbox" id="accordion-item-1" />
       <label for="accordion-item-1">Accordion Item 1</label>
       <div class="accordion-content">
         <!-- Content for Accordion Item 1 -->
       </div>
     </div>
     <div class="accordion-item">
       <input type="checkbox" id="accordion-item-2" />
       <label for="accordion-item-2">Accordion Item 2</label>
       <div class="accordion-content">
         <!-- Content for Accordion Item 2 -->
       </div>
     </div>
     <!-- Add more accordion items as needed -->
   </div>
   

In this example, we have a parent container with the class"accordion". Inside it, we create multiple accordion items using the.accordion-item class. Each item consists of aninput element withtype="checkbox", alabel element, and adiv element for the accordion content. Thefor attribute of thelabel should match theid of the correspondinginput element. 2. CSS Styling: Apply CSS styles to create the accordion menu:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 .accordion-item input[type="checkbox"] {
     display: none;
   }

   .accordion-item label {
     cursor: pointer;
     padding: 10px;
     background-color: #f0f0f0;
   }

   .accordion-item .accordion-content {
     max-height: 0;
     overflow: hidden;
     transition: max-height 0.3s ease;
   }

   .accordion-item input[type="checkbox"]:checked ~ .accordion-content {
     max-height: 1000px; /* Adjust to a sufficiently large value to show all content */
     transition: max-height 0.3s ease;
   }
   

In this example,.accordion-item input[type="checkbox"] targets the checkboxes within the accordion items and hides them usingdisplay: none. The checkboxes are used as triggers to control the visibility of the accordion content. .accordion-item label styles the labels for the accordion items. You can modify the padding, background color, and other properties to suit your design. .accordion-item .accordion-content styles the accordion content. By default, themax-height is set to0 and theoverflow is set tohidden to hide the content. Thetransition property creates a smooth animation when expanding or collapsing the accordion. .accordion-item input[type="checkbox"]:checked ~ .accordion-content selects the accordion content that follows a checked checkbox and sets themax-height to a sufficiently large value (e.g.,1000px) to display all the content. This expands the accordion content when the checkbox is checked. 3. Customization: Customize the CSS styles within the.accordion-item,.accordion-item label, and.accordion-item .accordion-content selectors to achieve the desired visual effect for the accordion menu. You can modify the colors, typography, padding, transitions, or add additional styles to match your design requirements. 4. Testing: Test the accordion menu by clicking on the labels. The accordion content should expand or collapse based on the checkbox state. By following these steps and customizing the CSS styles , you can create a CSS-only accordion menu. The menu allows users to expand or collapse the accordion content by clicking on the labels. It provides a clean and interactive way to present hierarchical information or collapsible sections without the need for JavaScript or other scripting languages.