代码之家  ›  专栏  ›  技术社区  ›  Bojan Kolano

我想让我的sidenav从页面推送内容

  •  0
  • Bojan Kolano  · 技术社区  · 7 年前

    好吧,我有个奇怪的要求。我有一个正常的内容页和一个从左到右的侧边栏。此时,当我点击图标时,导航栏会移到左边并推送内容,但它只会使其调整大小(主页的内容)。我需要的内容移动与导航栏,但它需要被删除。就像在书页后面散开纸张。我不知道这对你们是否有意义。 enter image description here

    <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'});
            }
        })
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Ramon de Vries    7 年前

    这并不难做到(只是想弄清楚),

    当你有javascript打开你的sidenav时,你可能有一个代码,将块上的显示或宽度设置为一个特定的数量onclick,在相同的功能中添加所有的元素以在var中推到一边,并给它们留有与sidenav宽度相同的余量。这将使它看起来像sidenav把内容推走

    编辑:

    我所做的是:

    #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";
    }