简体   繁体   English

滑入式导航叠加

[英]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, navmain删除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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM