javascript - 我希望我的 sidenav 从页面推送内容
问题描述
好的,所以我有一个奇怪的要求。我有一个正常的内容页面和一个从左到右的侧边栏。目前,当我点击图标时,导航栏向左移动并推送内容,但它只会调整大小(主页的内容)。我需要内容与导航栏一起移动,但需要将其删除。就像在书页后面散去一样。我不知道这是否对你们有意义。
也许这张图片会有所帮助,所以你可以理解。
<body>
<div class="pop opened">
<nav class="pop-nav">
<div class="pop-links">
<li><a href="javascript:;">What we do</a></li>
<li><a href="javascript:;">About</a></li>
<li><a href="javascript:;">Pricing</a></li>
<li><a href="javascript:;">Contact</a></li>
</div>
<div class="pop-social">
<ul>
<li><a href="javascript:;"><span><i class="s s-facebook footer-soc"></i></span></a></li>
<li><a href="javascript:;"><span><i class="s s-twitter footer-soc"></i></span></a></li>
<li><a href="javascript:;"><span><i class="s s-youtube footer-soc"></i></span></a></li>
</ul>
</div>
</nav>
</div>
<div class="main">
<div class="wrapper">
<header class="header">
<div class="row">
<div class="col-3">
<!--Icon missing instead of img--><img src="./images/logo_desktop.png" alt="HCI Logo" class="logo">
</div>
<div class="col-9">
<nav class="header-nav">
<li><a href="javascript:;">What we do</a></li>
<li><a href="javascript:;">About</a></li>
<li><a href="javascript:;">Pricing</a></li>
<li><a href="javascript:;">Contact</a></li>
</nav>
<span><i class="s s-hamburger hamburger"></i></span>
</div>
</div>
</header>
</div>
<section class="hero" style="background-image: url(./images/hero.png)">
<div class="wrapper">
<div class="row row-big">
<div class="col-1"></div>
<div class="col-10">
<h1 class="title">
Lorem ipsum dolor sit amet, consectetur adipiscing elit
</h1>
</div>
<div class="col-1"></div>
</div>
<div class="row row-small">
<div class="col-12">
<h1 class="title">
Lorem ipsum dolor sit amet, consectetur adipiscing elit
</h1>
</div>
</div>
<div class="row">
<div class="col-12">
<button type="button" class="btn">Sign up now<span><i class="s s-arrow"></i></span></button>
</div>
</div>
</div>
</section>
这是导航的重要部分。剩下的只是页面内容。
.main {
transition: margin-right .5s;
margin-right: 0;
}
.pop {
position: fixed;
z-index: 10;
height: 100%;
background-color: $dark-blue;
width: 0;
top: 0;
right: 0;
overflow-x: hidden;
transition: 0.5s;
.pop-nav {
padding: 46px 0 0 100px;
border-top: 1px solid $grey-blue;
margin: 79px 0 0;
@include breakpoint(phone) {
padding: 33px 0 0 35px;
}
}
}
.pop-links {
padding-bottom: 65px;
li {
display: block;
padding-bottom: 40px;
&:last-child {
padding-bottom: 0;
}
a {
color: $white;
}
}
}
希望你们能帮助我。
$('.hamburger').on('click', function(){
$(this).toggleClass('opened');
if ($(this).hasClass('opened')){
$(window).resize(function(){
if ($(window).width() <= 640){
$('.pop').css({'width' : '255px'});
$('.main').css({'margin-right' : '255px' , "padding-right" : "255px"});
}
else{
$('.pop').css({'width' : '550px'});
$('.main').css({'margin-right' : '550px'});
}
}).resize();
}
else {
$('.pop').css({'width' : '0'});
$('.main').css({'margin-right' : '0'});
}
})
解决方案
这并不难做到(只是想弄清楚),
当你有javascript来打开你的sidenav时,你可能有一个代码将块或宽度的显示设置为一定数量的onclick,在同一个函数中添加所有元素以推到var中并给它们margin-left相同的数量sidenav 的宽度。这将使它看起来像 sidenav 将内容推开
编辑:
我所做的是:
CSS:
#main {
transition: margin-left .5s;
}
.sidenav {
transition: 0.5s;
}
javascript:
function closeNav() {
document.getElementById("mySidenav").style.width = "0";
document.getElementById("main").style.marginLeft= "0";
}
function openNav() {
document.getElementById("mySidenav").style.width = "250px";
document.getElementById("main").style.marginLeft = "250px";
}
只需将其编辑为您需要的内容,因此将 #main 更改为您要推送的所有内容,将 .sidenav 更改为 sidenav 并使用左侧、宽度和过渡
推荐阅读
- javascript - 带有 bulkWrite 的猫鼬 runValidator
- c++ - 使用继承的类中的模板显式特化
- google-cloud-sql - 从元数据库云连接到 Google Cloud Sql
- python - matplotlib 中的自定义“多色线”
- python - Python 上的网络扫描仪
- angular - Angular - 类型“desc”不能分配给类型“null”
- javascript - 如何使用javascript将html表单数据保存在txt文件中
- docker - 在主机 Nginx 后面使用多个 dockerized Nginx
- node.js - Flutter socket.io 客户端未通过 https 与 node.js socket.io 服务器连接
- jmeter - JMeter Beanshell - 将文件另存为 pdf