JavaScript for Bulma Responsive Navbar
This post is for those who do not want to write their own JavaScript code, and just want to use the same code as that in Bulma official website.
The navbar code here comes from Transparent navbar [1] in Bulma official site, and the JavaScript code comes from main.js used in the official site too.
Full source code is as follows:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>JavaScript for Bulma navbar</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.6.2/css/bulma.min.css"> <script defer src="https://use.fontawesome.com/releases/v5.0.4/js/all.js"></script> </head> <body> <nav class="navbar is-transparent"> <div class="navbar-brand"> <a class="navbar-item" href="https://bulma.io"> <img src="https://bulma.io/images/bulma-logo.png" alt="Bulma: a modern CSS framework based on Flexbox" width="112" height="28"> </a> <div class="navbar-burger burger" data-target="navbarExampleTransparentExample"> <span></span> <span></span> <span></span> </div> </div> <div id="navbarExampleTransparentExample" class="navbar-menu"> <div class="navbar-start"> <a class="navbar-item" href="https://bulma.io/"> Home </a> <div class="navbar-item has-dropdown is-hoverable"> <a class="navbar-link" href="/documentation/overview/start/"> Docs </a> <div class="navbar-dropdown is-boxed"> <a class="navbar-item" href="/documentation/overview/start/"> Overview </a> <a class="navbar-item" href="https://bulma.io/documentation/modifiers/syntax/"> Modifiers </a> <a class="navbar-item" href="https://bulma.io/documentation/columns/basics/"> Columns </a> <a class="navbar-item" href="https://bulma.io/documentation/layout/container/"> Layout </a> <a class="navbar-item" href="https://bulma.io/documentation/form/general/"> Form </a> <hr class="navbar-divider"> <a class="navbar-item" href="https://bulma.io/documentation/elements/box/"> Elements </a> <a class="navbar-item is-active" href="https://bulma.io/documentation/components/breadcrumb/"> Components </a> </div> </div> </div> <div class="navbar-end"> <div class="navbar-item"> <div class="field is-grouped"> <p class="control"> <a class="bd-tw-button button" data-social-network="Twitter" data-social-action="tweet" data-social-target="http://localhost:4000" target="_blank" href="https://twitter.com/intent/tweet?text=Bulma: a modern CSS framework based on Flexbox&hashtags=bulmaio&url=http://localhost:4000&via=jgthms"> <span class="icon"> <i class="fab fa-twitter"></i> </span> <span> Tweet </span> </a> </p> <p class="control"> <a class="button is-primary" href="https://github.com/jgthms/bulma/archive/0.5.1.zip"> <span class="icon"> <i class="fas fa-download"></i> </span> <span>Download</span> </a> </p> </div> </div> </div> </div> </nav> <script src="main.js"></script> </body> </html> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | 'use strict'; document.addEventListener('DOMContentLoaded', function () { // Dropdowns in navbar var $dropdowns = getAll('.navbar-item.has-dropdown:not(.is-hoverable)'); if ($dropdowns.length > 0) { $dropdowns.forEach(function ($el) { $el.addEventListener('click', function (event) { event.stopPropagation(); $el.classList.toggle('is-active'); }); }); document.addEventListener('click', function (event) { closeDropdowns(); }); } function closeDropdowns() { $dropdowns.forEach(function ($el) { $el.classList.remove('is-active'); }); } // Close dropdowns if ESC pressed document.addEventListener('keydown', function (event) { var e = event || window.event; if (e.keyCode === 27) { closeDropdowns(); } }); // Toggles var $burgers = getAll('.burger'); if ($burgers.length > 0) { $burgers.forEach(function ($el) { $el.addEventListener('click', function () { var target = $el.dataset.target; var $target = document.getElementById(target); $el.classList.toggle('is-active'); $target.classList.toggle('is-active'); }); }); } // Functions function getAll(selector) { return Array.prototype.slice.call(document.querySelectorAll(selector), 0); } }); |
Tested on:
- Chromium 63.0.3239.84 on Ubuntu 17.10 (64-bit)
- Bulma 0.6.2
- Font Awesome 5.0.4
References:
[1] | Navbar | Bulma: a modern CSS framework based on Flexbox |
[2] | https://bulma.io/lib/main.js?v=201801161752 |