I'm trying to implement an adaptation of this animated custom Navbar toggler button in Bootstrap 5. However, the spacing between the three bars that comprise the toggler button appears different in different browsers.
I've found that margin-top
of -15px
in .navbar-toggler.collapsed .top-bar
and margin-top
of 15px
in .navbar-toggler.collapsed .bottom-bar
yield good spacing in Chrome and Firefox (see zoomed-in screenshots below).
Navbar in Chrome, Navbar in Firefox
However, the same values in Safari yield bars with too much spacing between them (see zoomed-in screenshot below).
Is there a way to standardize the vertical spacing between the bars across browsers? I'm new to web development and would appreciate any help the community can provide. Thanks!
The code is below.
/* "./static/css/styles_navbar_toggler.css" */
.navbar-toggler {
margin-right: 10px;
width: 20px;
height: 20px;
position: relative;
transition: .5s ease-in-out;
}
.navbar-toggler,
.navbar-toggler:focus,
.navbar-toggerl:active,
.navbar-toggler-icon:focus {
outline: none;
box-shadow: none;
border: 0;
}
.navbar-toggler span {
margin: 0;
padding: 0;
}
.toggler-icon {
display: block;
position: absolute;
height: 2px;
width: 100%;
background: #9b9d9e;
border-radius: 1px;
opacity: 1;
left: 0;
transform: rotate(0deg);
transition: .25s ease-in-out;
}
.middle-bar {
margin-top: 0px;
}
/* When toggler is clicked */
.navbar-toggler .top-bar {
margin-top: 0px;
transform: rotate(135deg);
}
.navbar-toggler .middle-bar {
opacity: 0;
filter: alpha(opacity=0);
}
.navbar-toggler .bottom-bar {
margin-top: 0px;
transform: rotate(-135deg);
}
/* When navbar is collapsed */
.navbar-toggler.collapsed .top-bar {
margin-top: -15px;
transform: rotate(0deg);
}
.navbar-toggler.collapsed .middle-bar {
opacity: 1;
filter: alpha(opacity=100);
}
.navbar-toggler.collapsed .bottom-bar {
margin-top: 15px;
transform: rotate(0deg);
}
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<!-- Custom CSS -->
<link href="/static/css/styles_navbar_toggler.css" rel="stylesheet">
</head>
<body>
<!-- Popper and Bootstrap JS -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js" integrity="sha384-7+zCNj/IqJ95wo16oMtfsKbZ9ccEh31eOz1HGyDuCQ6wgnyJNSYdrPa03rtR1zdB" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js" integrity="sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13" crossorigin="anonymous"></script>
<header>
<nav class="navbar sticky-top navbar-expand-lg navbar-dark bg-dark">
<div class="container">
<a class="navbar-brand" href="#">Navbar</a>
<!-- For custom toggler, (a) added "collapsed d-flex d-lg-none flex-column justify-content-around" to "navbar-toggler" class, -->
<!-- (b) replaced <span class="navbar-toggler-icon"></span> with the three lines below, and -->
<!-- (c) defined new "navbar-toggler" class in "styles_navbar_toggler.css" -->
<button class="navbar-toggler collapsed d-flex d-lg-none flex-column justify-content-around" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="toggler-icon top-bar"></span>
<span class="toggler-icon middle-bar"></span>
<span class="toggler-icon bottom-bar"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="#">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<main>
Hello world
</main>
</body>
</html>