Skip to content

DigitalA11Y

Your Accessibility Partner

  • Home
  • ServicesExpand
    • WCAG Audit Services
    • VPAT/ACR Services
    • Accessibility Consulting
    • PDF Remediation
    • Accessibility Trainings
    • Website Remediation
    • Design Audit
  • Free ToolsExpand
    • Accessibility Checker
    • A11Y Cost Calculator
    • A11Y Bookmarklets
    • Color Contrast Extension
    • WCAG Contrast Checker
  • ResourcesExpand
    • A11Y Articles
    • WCAG Primer
    • ARIA Cheatsheet
    • A11Y Tools
    • A11Y Patterns
    • A11Y Cheatsheets
  • Contact
Search
DigitalA11Y
Your Accessibility Partner
Search

Multi-accordion with Checkboxes

flowers (accordion)

Tablist help: use the accordion controls to toggle the visibility of their respective panels (below the controls).

Some info about rose

Bla bla bla… all about rose…

A beautiful rose

A link to a page with more infos about rose!

More elements can come here related to rose

Maybe even some form element where you can enter a name for your rose:

Some info about tulip

Bla bla bla… all about tulip…

A beautiful tulip

A link to a page with more infos about tulip!

More elements can come here related to tulip

Maybe even some form element where you can enter a name for your tulip:

Some info about sunflower

Bla bla bla… all about sunflower…

A beautiful sunflower

A link to a page with more infos about sunflower!

More elements can come here related to sunflower

Maybe even some form element where you can enter a name for your sunflower:

Code

  • HTML
  • CSS
  • JavaScript
<p>
  <button>Focusable element before</button>
</p>
<div class="accordion">
  <h1 class="visually-hidden">
    flowers (accordion)
  </h1>
  <p class="visually-hidden">
    Tablist help: use the accordion controls to toggle the visibility of their respective panels (below the controls).
  </p>
  <div class="control">
    <input checked="1" class="visually-hidden" id="accordion_flowers_panel_rose" type="checkbox" />
    <h2>
      <label for="accordion_flowers_panel_rose"><span class="visually-hidden">Show panel </span>rose</label>
    </h2>
  </div>
  <div class="panel" id="accordion_flowers_panel_rose_panel">
    <h3>
      Some info about rose
    </h3>
    <p>
      Bla bla bla... all about rose...
    </p>
    <p>
      <img alt="A beautiful rose" src="..." />
    </p>
    <p>
      A link to a page with <a href="#">more infos about rose</a>!
    </p>
    <h3>
      More elements can come here related to rose
    </h3>
    <p>
      Maybe even some form element where you can enter a name for your rose: <input type="text" />
    </p>
  </div>
  <div class="control">
    <input checked="1" class="visually-hidden" id="accordion_flowers_panel_tulip" type="checkbox" />
    <h2>
      <label for="accordion_flowers_panel_tulip"><span class="visually-hidden">Show panel </span>tulip</label>
    </h2>
  </div>
  <div class="panel" id="accordion_flowers_panel_tulip_panel">
    <h3>
      Some info about tulip
    </h3>
    <p>
      Bla bla bla... all about tulip...
    </p>
    <p>
      <img alt="A beautiful tulip" src="..." />
    </p>
    <p>
      A link to a page with <a href="#">more infos about tulip</a>!
    </p>
    <h3>
      More elements can come here related to tulip
    </h3>
    <p>
      Maybe even some form element where you can enter a name for your tulip: <input type="text" />
    </p>
  </div>
  <div class="control">
    <input checked="1" class="visually-hidden" id="accordion_flowers_panel_sunflower" type="checkbox" />
    <h2>
      <label for="accordion_flowers_panel_sunflower"><span class="visually-hidden">Show panel </span>sunflower</label>
    </h2>
  </div>
  <div class="panel" id="accordion_flowers_panel_sunflower_panel">
    <h3>
      Some info about sunflower
    </h3>
    <p>
      Bla bla bla... all about sunflower...
    </p>
    <p>
      <img alt="A beautiful sunflower" src="..." />
    </p>
    <p>
      A link to a page with <a href="#">more infos about sunflower</a>!
    </p>
    <h3>
      More elements can come here related to sunflower
    </h3>
    <p>
      Maybe even some form element where you can enter a name for your sunflower: <input type="text" />
    </p>
  </div>
</div>
<p>
  <button>Focusable element after</button>
</p>
.visually-hidden {
  position: absolute;
  left: -10000px;
  top: auto;
  width: 1px;
  height: 1px;
  overflow: hidden;
}

body {
  padding: 20px;
}

.accordion {
  margin-bottom: 20px;
}

.control h2 {
  margin-bottom: 0;
}
.control label {
  display: block;
  border: 1px solid black;
  margin: 0 0 -1px 0;
  padding: 4px 10px;
  background-color: lightyellow;
}
.control label::before {
  content: "+";
  display: inline-block;
  width: 0.75em;
  font-weight: normal;
}

input[type=checkbox]:checked + h2 label {
  border-bottom-color: lightyellow;
  position: relative;
}
input[type=checkbox]:checked + h2 label::before {
  content: "-";
}

a:focus,
input:focus,
input[type=checkbox]:focus + h2 label {
  outline: 2px dotted red;
  outline-offset: 2px;
}

input[type=checkbox] + h2 label:hover {
  cursor: pointer;
  text-decoration: underline;
}

.panel {
  border: 1px solid;
  background-color: lightyellow;
  padding: 0 0 0 10px;
}
(function() {
  $(document).ready(function() {
    return $("input[type='checkbox']").each((i, element) => {
      var $checkbox;
      $checkbox = $(element);
      
      // Make Enter select/deselect checkbox (instead of submitting form)
      $checkbox.keypress(function(e) {
        if ((e.keyCode ? e.keyCode : e.which) === 13) {
          return $(this).trigger('click');
        }
      });
      return $checkbox.change(function() {
        var $panel, panel_id;
        panel_id = `#${$checkbox.attr('id')}_panel`;
        $panel = $(panel_id);
        if ($checkbox.is(':checked')) {
          return $panel.show();
        } else {
          return $panel.hide();
        }
      });
    });
  });

}).call(this);

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiPGFub255bW91cz4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFBQSxDQUFBLENBQUUsUUFBRixDQUFXLENBQUMsS0FBWixDQUFrQixRQUFBLENBQUEsQ0FBQTtXQUNoQixDQUFBLENBQUUsd0JBQUYsQ0FBMkIsQ0FBQyxJQUE1QixDQUFpQyxDQUFDLENBQUQsRUFBSSxPQUFKLENBQUEsR0FBQTtBQUNuQyxVQUFBO01BQUksU0FBQSxHQUFZLENBQUEsQ0FBRSxPQUFGLEVBQWhCOzs7TUFHSSxTQUFTLENBQUMsUUFBVixDQUFtQixRQUFBLENBQUMsQ0FBRCxDQUFBO1FBQ2pCLElBQUcsQ0FBSSxDQUFDLENBQUMsT0FBTCxHQUFrQixDQUFDLENBQUMsT0FBcEIsR0FBaUMsQ0FBQyxDQUFDLEtBQXBDLENBQUEsS0FBOEMsRUFBakQ7aUJBQ0UsQ0FBQSxDQUFFLElBQUYsQ0FBSSxDQUFDLE9BQUwsQ0FBYSxPQUFiLEVBREY7O01BRGlCLENBQW5CO2FBSUEsU0FBUyxDQUFDLE1BQVYsQ0FBaUIsUUFBQSxDQUFBLENBQUE7QUFDckIsWUFBQSxNQUFBLEVBQUE7UUFBTSxRQUFBLEdBQVcsQ0FBQSxDQUFBLENBQUEsQ0FBSSxTQUFTLENBQUMsSUFBVixDQUFlLElBQWYsQ0FBSixDQUFBLE1BQUE7UUFDWCxNQUFBLEdBQVcsQ0FBQSxDQUFFLFFBQUY7UUFFWCxJQUFHLFNBQVMsQ0FBQyxFQUFWLENBQWEsVUFBYixDQUFIO2lCQUNFLE1BQU0sQ0FBQyxJQUFQLENBQUEsRUFERjtTQUFBLE1BQUE7aUJBR0UsTUFBTSxDQUFDLElBQVAsQ0FBQSxFQUhGOztNQUplLENBQWpCO0lBUitCLENBQWpDO0VBRGdCLENBQWxCO0FBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIkKGRvY3VtZW50KS5yZWFkeSAtPlxuICAkKFwiaW5wdXRbdHlwZT0nY2hlY2tib3gnXVwiKS5lYWNoIChpLCBlbGVtZW50KSA9PlxuICAgICRjaGVja2JveCA9ICQoZWxlbWVudClcbiAgICBcbiAgICAjIE1ha2UgRW50ZXIgc2VsZWN0L2Rlc2VsZWN0IGNoZWNrYm94IChpbnN0ZWFkIG9mIHN1Ym1pdHRpbmcgZm9ybSlcbiAgICAkY2hlY2tib3gua2V5cHJlc3MgKGUpIC0+XG4gICAgICBpZiAoaWYgZS5rZXlDb2RlIHRoZW4gZS5rZXlDb2RlIGVsc2UgZS53aGljaCkgPT0gMTNcbiAgICAgICAgJChAKS50cmlnZ2VyICdjbGljaydcblxuICAgICRjaGVja2JveC5jaGFuZ2UgLT5cbiAgICAgIHBhbmVsX2lkID0gXCIjI3skY2hlY2tib3guYXR0cignaWQnKX1fcGFuZWxcIlxuICAgICAgJHBhbmVsICAgPSAkKHBhbmVsX2lkKVxuICAgICAgXG4gICAgICBpZiAkY2hlY2tib3guaXMoJzpjaGVja2VkJylcbiAgICAgICAgJHBhbmVsLnNob3coKVxuICAgICAgZWxzZVxuICAgICAgICAkcGFuZWwuaGlkZSgpIl19
//# sourceURL=coffeescript

Company

  • About
  • Blog
  • Careers
  • Contact

Services

  • Accessibility Audits
  • Accessibility Consulting
  • VPAT/ACR
  • Accessibility Trainings

Compliance

  • WCAG
  • ADA
  • Section 508
  • EN 301 549
  • EAA
  • AODA Compliance Services — Make Your Digital Assets Accessible in Ontario
  • ACA

Resources

  • Accessibility Resources
  • Understanding WCAG
  • WCAG Checklist
  • Understanding WAI-ARIA

Legal

  • Privacy Policy
  • Terms and Conditions
  • Disclaimer
  • Accessibility Statement for digitala11y.com
  • Sitemap

© 2025 DigitalA11Y
All Rights Reserved

Linkedin Twitter Facebook Instagram YouTube

DigitalA11Y
Plot No 108, 3rd Cross Rd, Saipuri Colony,
Hastinapuri Colony, Sainikpuri, Secunderabad -500094
Telangana, India.

Tel:(+91)99082 66680,
E-mail: [email protected]

Scroll to top
  • Home
  • Services
    • WCAG Audit Services
    • VPAT/ACR Services
    • Accessibility Consulting
    • PDF Remediation
    • Accessibility Trainings
    • Website Remediation
    • Design Audit
  • Free Tools
    • Accessibility Checker
    • A11Y Cost Calculator
    • A11Y Bookmarklets
    • Color Contrast Extension
    • WCAG Contrast Checker
  • Resources
    • A11Y Articles
    • WCAG Primer
    • ARIA Cheatsheet
    • A11Y Tools
    • A11Y Patterns
    • A11Y Cheatsheets
  • Contact