Collapsible menu plugin with Vanilla-JS
This plugin does not support any version of IE browser.
Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ | ❌ |
Using npm:
npm install metismenujs
Using yarn:
yarn add metismenujs
Using pnpm:
pnpm add metismenujs
Once the package is installed, you can import the library using import
or require
approach:
// recommended approach
import { MetisMenu } from 'metismenujs';
// You can also use the default export
import MetisMenu from 'metismenujs';
If you use require
for importing, only default export is available:
const MetisMenu = require('metismenujs');
Note CommonJS usage In order to gain the TypeScript typings (for intellisense / autocomplete) while using CommonJS imports with
require()
, add the following to yourtsconfig.json
:
{
"compilerOptions": {
"moduleResolution": "NodeNext"
}
}
Using jsDelivr CDN:
<script src="https://cdn.jsdelivr.net/npm/metismenujs"></script>
Using unpkg CDN:
<script src="https://unpkg.com/metismenujs"></script>
Using jsDelivr CDN:
<script type="module">
import { MetisMenu } from 'https://cdn.jsdelivr.net/npm/metismenujs/dist/metismenujs.esm.min.js';
</script>
Using unpkg CDN:
<script type="module">
import { MetisMenu } from 'https://unpkg.com/metismenujs/dist/metismenujs.esm.min.js';
</script>
Install with composer
composer require onokumus/metismenujs:dev-master
Ready to use files are located in the dist
directory.
Include metismenujs StyleSheet
jsDelivr :
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/metismenujs/dist/metismenujs.min.css">
unpkg :
<link rel="stylesheet" href="https://unpkg.com/metismenujs/dist/metismenujs.min.css">
import 'metismenujs/style';
or sass source file
import 'metismenujs/sass';
Add class metismenu
to unordered list
<ul class="metismenu" id="menu">
</ul>
Make expand/collapse controls accessible
Be sure to add
aria-expanded
to the elementa
. This attribute explicitly defines the current state of the collapsible element to screen readers and similar assistive technologies. If the collapsible element is closed by default, it should have a value ofaria-expanded="false"
. If you've set the collapsible element's parentli
element to be open by default using theactive
class, setaria-expanded="true"
on the control instead. The plugin will automatically toggle this attribute based on whether or not the collapsible element has been opened or closed.
<ul class="metismenu" id="menu">
<li class="mm-active">
<a href="#" aria-expanded="true">Menu 1</a>
<ul>
...
</ul>
</li>
<li>
<a href="#" aria-expanded="false">Menu 2</a>
<ul>
...
</ul>
</li>
...
</ul>
Arrow Options
add
has-arrow
class toa
element
<ul class="metismenu" id="menu">
<li class="mm-active">
<a class="has-arrow" href="#" aria-expanded="true">Menu 1</a>
<ul>
...
</ul>
</li>
<li>
<a class="has-arrow" href="#" aria-expanded="false">Menu 2</a>
<ul>
...
</ul>
</li>
...
</ul>
Call the plugin:
new MetisMenu("#menu");
// or
MetisMenu.attach('#menu');
Setting aria-disabled="true" in the <a>
element as shown will stop metisMenu opening the menu for that particular list. This can be changed dynamically and will be obeyed correctly:
<a href="#" aria-expanded="false" aria-disabled="true">List 1</a>
Option | Type | Default | Description | Example |
---|---|---|---|---|
toggle | Boolean | true | For auto collapse support. | new MetisMenu("#menu", { toggle: false }); |
triggerElement | css selector | a | new MetisMenu("#menu", { triggerElement: '.nav-link' }); |
|
parentTrigger | css selector | li | new MetisMenu("#menu", { parentTrigger: '.nav-item' }); |
|
subMenu | css selector | ul | new MetisMenu("#menu", { subMenu: '.nav.flex-column' }); |
For stop and destroy metisMenu.
const mm = new MetisMenu("#menu");
mm.dispose();
Re-init metisMenu.
const mm = new MetisMenu("#menu");
mm.dispose();
// ajax ...
mm.update();
Event Type | Description |
---|---|
show.metisMenu | This event fires immediately when the show instance method is called. |
shown.metisMenu | This event is fired when a collapse ul element has been made visible to the user (will wait for CSS transitions to complete). |
hide.metisMenu | This event is fired immediately when the hide method has been called. |
hidden.metisMenu | This event is fired when a collapse ul element has been hidden from the user (will wait for CSS transitions to complete). |
Property | Default | Description |
---|---|---|
--mm-transition-timing-function | ease | This property sets how intermediate values are calculated for CSS properties being affected by a transition effect. |
--mm-trantisition-duration | 0.35s | This property sets the length of time a transition animation should take to complete. |
metisMenu.js
& metisMenu.css
filesactive
class to mm-active
https://github.com/metismenu/examples
https://onokumus.github.io/metismenujs
Contains a simple HTML file to demonstrate metisMenu plugin.
Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.
Osman Nuri Okumus
Copyright © 2023, Osman Nuri Okumuş. Released under the MIT License.