Reputation: 27
my header is expanding downward. but how can I animate this to take 1 second from top to bottom? I did add one but its not working.
https://jsfiddle.net/MrWhestr/5xLmdy4h/
HTML
<div class="momnav" id ="mymomnav">
<div class="nav">
<ul>
<li><a href="">ANA SAYFA</a></li>
<li><a href="">HAKKIMIZDA</a></li>
<li><a href="">İLETİŞİM</a></li>
</ul>
</div>
CSS
.momnavresponsive {
display: flex;
transition: height 1s ;
}
Javascript
function myFunction() {
var x = document.getElementById("mymomnav");
if ( x.className === "momnav") {
x.className += "responsive";
}
else {
x.className = "momnav";
}
}
Upvotes: 0
Views: 388
Reputation: 844
The issue is caused by CSS transition
. transition
doesn't work for values that cannot be represented numerically: auto
, display: none/block/flex etc
etc.
For exmaple,
height: 0
<-> height: auto
display: none
<-> display: flex
height: 0
<-> height: 100vh
color: blue
<-> color: red
(Colors CAN be reperesented numerically).momnav {
display: none; /* NOT work for none <-> flex */
}
.momnavresponsive {
display: flex; /* NOT work for none <-> flex */
transition: height 1s; /* NOT work for 0 <-> auto */
}
You have to write more CSS/JavaScript for a dropdown menu.
const body = document.querySelector('body');
const menuBtn = document.querySelector('#menu-btn');
const classToAssign = 'is-open-menu';
function toggleMenu(e) {
e.stopPropagation();
// When <body> has .is-open-menu class
if (body.classList.contains(classToAssign)) {
// Remove the class = close the menu
body.classList.remove(classToAssign);
}
// When <body> DOES NOT have .is-open-menu class
else {
// Add the class = open the menu
body.classList.add(classToAssign);
}
}
menuBtn.addEventListener('click', toggleMenu, false);
/* Skip this part and see below */
*,
*::before,
*::after {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.wrap {
padding: 2em;
}
.header {
position: fixed;
top: 0;
left: 0;
width: 100%;
background-color: tomato;
}
.header-top__inner {
display: flex;
justify-content: space-between;
}
.main {
margin-top: 100px;
}
/* CHECK THIS */
/* Closed menu */
.menu {
height: 0;
transform: scaleY(0);
transition: transform 0.4s;
transform-origin: 0 0;
}
.menu__inner {
transform: scaleY(0);
transition: transform 0.4s;
transform-origin: 0 0;
background-color: tomato;
}
/* CHECK THIS */
/* Opened menu */
.is-open-menu .menu {
transform: scaleY(1);
}
.is-open-menu .menu__inner {
transform: scaleY(1);
}
<body>
<header id="header" class="header">
<div class="header-top">
<div class="header-top__inner wrap">
<h1 class="site-logo"><a href="#">Website Name</a></h1>
<button id="menu-btn" class="menu-btn">🔻</button><!-- CHECK -->
</div>
</div>
<nav class="menu"><!-- CHECK -->
<div class="menu__inner wrap"><!-- CHECK -->
<ul class="menu-list">
<li class="menu-item"><a href="#">Link</a></li>
<li class="menu-item"><a href="#">Link</a></li>
<li class="menu-item"><a href="#">Link</a></li>
</ul>
</div>
</nav>
</header>
<main class="main">
<div class="wrap">
<p><a href="https://www.google.com/">Go to Google</a> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Velit neque doloribus quo voluptatibus accusamus commodi blanditiis cupiditate asperiores iusto est. Sunt iste, corporis non saepe quis consectetur natus necessitatibus tempore.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Velit neque doloribus quo voluptatibus accusamus commodi blanditiis cupiditate asperiores iusto est. Sunt iste, corporis non saepe quis consectetur natus necessitatibus tempore.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Velit neque doloribus quo voluptatibus accusamus commodi blanditiis cupiditate asperiores iusto est. Sunt iste, corporis non saepe quis consectetur natus necessitatibus tempore.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Velit neque doloribus quo voluptatibus accusamus commodi blanditiis cupiditate asperiores iusto est. Sunt iste, corporis non saepe quis consectetur natus necessitatibus tempore.</p>
</div>
</main>
</body>
Upvotes: 1