[英]Slide-In Nav Overlay
I have a template for an off-screen nav
that slides in from the left when a toggle
is clicked. 我有一个
off-screen nav
模板,当点击一个toggle
时,它会从左侧滑入。 What I'd like to happen is when the nav
slides in, an overlay darkens the content behind it. 我想要发生的是当
nav
滑入时,覆盖层会使其背后的内容变暗。 To do this, I wrapped the page content in a div
and tried to add a BG color to cover the content, but it doesn't seem to work. 为此,我将页面内容包装在
div
并尝试添加BG颜色以覆盖内容,但它似乎不起作用。
Can anyone help? 有人可以帮忙吗? Code Below:
代码如下:
$(document).ready(function() { var toggle = $('.toggle'); var osNav = $('.offScreen-nav'); var pageContainer = $('.page-container'); toggle.click(function() { osNav.toggleClass('showNav'); pageContainer.toggleClass('navOnScreen') }); })
* { margin: 0; padding: 0; overflow: hidden; } nav { width: 100%; height: 70px; //border: 1px solid; background-color: #f1f1f1; display: flex; flex-direction: row; justify-content: flex-end; } .toggle { height: 50px; width: 50px; border: 1px solid; background-color: rgba(17,17,17, .9); opacity: .9; margin: 20px 15px; cursor: pointer; align-self: center; } main { height: 1000px; background-color: #ddd; } .offScreen-nav { width: 340px; height: 100vh; position: fixed; margin-left: 0; overflow: hidden; z-index: 2000; background-color: rgba(17,17,17, .9); transition: all .3s ease-in-out; transform: translate3d(-340px,0,0); } .showNav { transform: translate3d(0,0,0); } .page-container { transform: translate3d(0,0,0); transition: all .3s ease-in-out; transition-delay: .1s; } .page-container.navOnScreen { background-color: rgba(0,0,0, .6); transform: translate3d(20px,0,0); }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="offScreen-nav"></div> <div class="page-container"> <nav> <div class="toggle"></div> </nav> <main></main> </div>
Remove background-color
from nav
& main
as well (it is currently overlapping the body
's background color) like, 从
nav
和main
删除background-color
(它目前与body
的背景颜色重叠),如,
In JS: 在JS中:
// Toggle a class which removes background-color from main & nav
nav.toggleClass('remove-bg')
main.toggleClass('remove-bg')
In CSS: 在CSS中:
/* Resetting background-color to transparent */
.remove-bg {
background: transparent;
}
/* To get the transition well */
main, nav {
transition: all .3s ease-in-out;
transition-delay: .1s;
}
Have a look at the snippet below: 看看下面的代码:
$(document).ready(function() { var toggle = $('.toggle'); var osNav = $('.offScreen-nav'); var pageContainer = $('.page-container'); var nav = $('nav'); var main = $('main'); toggle.click(function() { osNav.toggleClass('showNav'); pageContainer.toggleClass('navOnScreen') nav.toggleClass('remove-bg') main.toggleClass('remove-bg') }); })
* { margin: 0; padding: 0; overflow: hidden; } nav { width: 100%; height: 70px; //border: 1px solid; background-color: #f1f1f1; display: flex; flex-direction: row; justify-content: flex-end; transition: all .3s ease-in-out; transition-delay: .1s; } .toggle { height: 50px; width: 50px; border: 1px solid; background-color: rgba(17,17,17, .9); opacity: .9; margin: 20px 15px; cursor: pointer; align-self: center; } main { height: 1000px; background-color: #ddd; transition: all .3s ease-in-out; transition-delay: .1s; } .offScreen-nav { width: 340px; height: 100vh; position: fixed; margin-left: 0; overflow: hidden; z-index: 2000; background-color: rgba(17,17,17, .9); transition: all .3s ease-in-out; transform: translate3d(-340px,0,0); } .showNav { transform: translate3d(0,0,0); } .page-container { transform: translate3d(0,0,0); transition: all .3s ease-in-out; transition-delay: .1s; } .page-container.navOnScreen { background-color: rgba(0,0,0, .6); transform: translate3d(20px,0,0); } .remove-bg { background: transparent; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="offScreen-nav"></div> <div class="page-container"> <nav> <div class="toggle"></div> </nav> <main></main> </div>
Hope this helps! 希望这可以帮助!
You can do something like this: 你可以这样做:
$(document).ready(function() { var toggle = $('.toggle'); var osNav = $('.offScreen-nav'); var pageContainer = $('.page-container'); var darkLayer = $('main, nav'); toggle.click(function() { $(this).toggleClass('border'); osNav.toggleClass('showNav'); darkLayer.toggleClass('darkLayer'); pageContainer.toggleClass('navOnScreen'); }); })
* { margin: 0; padding: 0; overflow: hidden; } nav { width: 100%; height: 70px; //border: 1px solid; background-color: #f1f1f1; display: flex; flex-direction: row; justify-content: flex-end; } .toggle { height: 50px; width: 50px; border: 1px solid; background-color: rgba(17,17,17, .9); opacity: .9; margin: 20px 15px; cursor: pointer; align-self: center; } main { height: 1000px; background-color: #ddd; } .offScreen-nav { width: 340px; height: 100vh; position: fixed; margin-left: 0; overflow: hidden; z-index: 2000; background-color: rgba(17,17,17, .9); transition: all .3s ease-in-out; transform: translate3d(-340px,0,0); } .showNav { transform: translate3d(0,0,0); } .page-container { transform: translate3d(0,0,0); transition: all .3s ease-in-out; transition-delay: .1s; } .page-container.navOnScreen { background-color: rgba(0,0,0,.6); transform: translate3d(20px,0,0); } .darkLayer { background: #333; opacity: .5; transition: all .3s linear; } .border { border-color: #fff; transition: all .3s linear; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="offScreen-nav"></div> <div class="page-container"> <nav> <div class="toggle"></div> </nav> <main></main> </div>
What I normally do is add another element called overlay and toggle it as you are toggling the nav item to produce that effect. 我通常做的是添加另一个名为overlay的元素,并在切换导航项以产生该效果时切换它。 I would also move the toggle button out of the nav so as you can give it a position absolute as you will need to apply a z-index to keep it visible when the overlay is enabled.
我还会将导航按钮从导航中移出,以便您可以给它一个绝对位置,因为您需要应用z-index以在启用叠加时使其保持可见状态。 See below... Hope it helps!
见下文......希望它有所帮助!
$(document).ready(function() { var toggle = $('.toggle'); var osNav = $('.offScreen-nav'); var overlay = $('.overlay'); var pageContainer = $('.page-container'); toggle.click(function() { osNav.toggleClass('showNav'); overlay.toggleClass('showNav'); pageContainer.toggleClass('navOnScreen') }); })
* { margin: 0; padding: 0; overflow: hidden; } nav { width: 100%; height: 70px; //border: 1px solid; background-color: #f1f1f1; display: flex; flex-direction: row; justify-content: flex-end; } .toggle { height: 50px; width: 50px; border: 1px solid; background-color: rgba(17,17,17, .9); opacity: .9; /* margin: 20px 15px; */ cursor: pointer; align-self: center; position: absolute; top: 10px; right: 15px; z-index: 2; } main { height: 1000px; background-color: #ddd; } .offScreen-nav { width: 340px; height: 100vh; position: fixed; margin-left: 0; overflow: hidden; z-index: 2000; background-color: rgba(17,17,17, .9); transition: all .3s ease-in-out; transform: translate3d(-340px,0,0); } .showNav { transform: translate3d(0,0,0); } .page-container { transform: translate3d(0,0,0); transition: all .3s ease-in-out; transition-delay: .1s; } .page-container.navOnScreen { background-color: rgba(0,0,0, .6); transform: translate3d(20px,0,0); } .overlay.showNav { width: 100vw; height: 100vh; background: blue; position: fixed; z-index: 1; } .overlay{ transition:0.3s ease; opacity: 0.5; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="offScreen-nav"></div> <div class="overlay"></div> <div class="toggle"></div> <div class="page-container"> <nav> </nav> <main></main> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.