【问题标题】:Change a header's position from fixed to relative on opening (active) mobile drop down menu?在打开(活动)移动下拉菜单时将标题的位置从固定更改为相对?
【发布时间】:2013-10-05 00:35:57
【问题描述】:

我有一个响应式设计,当在小于600px 宽度的设备上查看时,使用下拉多级导航。它嵌套在设置为position: fixed 的标头中。问题是,当您下拉菜单时,菜单会向下溢出并且不会滚动(因为标题是固定的),因此选项卡不可见。有没有办法(使用 Javascript、jQuery 或 PHP)动态设置它,以便当下拉菜单(通过单击右上角或左上角的汉堡菜单图标)时,它会更改标题的位置 fixedrelative

一个很好的例子是 www.dribbble.com。当宽度小于800px时,header是粘性的(fixed),那么当你点击左上角的菜单时,很明显header的位置会自动变为relative

HTML

    <header role="banner" class="secondary">
    <a href="#menu" class="menu-toggle"><em>Menu</em> <span aria-hidden="true"></span></a>
    <nav id="nav" role="navigation">
    <ul class="menu set">
    <li class="subnav">
    <a href="#">Link</a>
        <ul class="sub-menu">
            <li><a href="#">Link</a></li>
            <li><a href="#">Link</a></li>
            <li><a href="#">Link</a></li>
        </ul>
    </li>
    </ul>
    </nav>
    </header>

CSS

header[role="banner"] {
    width: 100%;
    background: #fff;
    display: block;
    margin: 0 auto;
    padding: 0;
    box-shadow: 0 2px 4px rgba(0,0,0,0.25);
    z-index: 10000; 
}

@media all and (min-width: 500px) {
    header[role="banner"] {
        position: fixed;
        top: 0;
        left: 0;
        clear: both;
        height: auto;
        display: block;
    }
}

@media all and (max-width: 499px) {
    header[role="banner"] {
        position: fixed;
    }
}

JavaScript

    $(document).ready(function() {

$('body').addClass('js');
      var $menu = $('#nav'),
          $menulink = $('.menu-toggle'),
          $menuTrigger = $('.subnav > a');

$menulink.click(function(e) {
        e.preventDefault();
        $menulink.toggleClass('active');
        $menu.toggleClass('active');
});

var add_toggle_links = function() {         
    if ($('.menu-toggle').is(":visible")){
        if ($(".toggle-link").length > 0){
        }
        else{
            $('.subnav > a').before('<span class="toggle-link">Open</span>');
            $('.toggle-link').click(function(e) {       
                var $this = $(this);
                $this.toggleClass('active').siblings('ul').toggleClass('active');
            }); 
        }
    }
    else{
        $('.toggle-link').empty();
    }
 }
add_toggle_links();
$(window).bind("resize", add_toggle_links); 

    });

【问题讨论】:

  • 显示您的代码 .. 没有它我们无能为力。

标签: javascript php jquery css


【解决方案1】:

好吧,如果您有一个自定义 id 或其他类型的选择器属性,那么您可以通过多种方式更改 position CSS 属性。

CSS3

@media all and (max-width: 800px) {
   header[role="banner"] {
      position: relative;
   }
}

jQuery

​​>
$(document).ready(function() {
    $('.menu-toggle').click(function() {
       if ($( document ).width() < 499)
          $('header[role="banner"]').css('position', 'relative');
       else
          $('header[role="banner"]').css('position', 'fixed');
    });
});

注意:您编辑了您的帖子。您是否意识到您在两个 CSS @media 规则中都使用了 position: fixed;?将第二个更改为position: relative;

【讨论】:

  • 谢谢。我试过了,但没有用。我需要 header[role="banner"] position: fixed 更改为 position: relative 当仅单击#hamburger-icon 菜单时。所以标题会固定,但是当点击菜单时,一切都会滚动。
  • 好的,我做到了,把 max-width: 499px 改成 position: relative,但是还是不行。
  • 您提供的 jQuery 代码不起作用。标题需要从位置:固定更改为位置:相对仅当在小于 499 像素的设备上查看时,并且 .menu-toggle 链接是时钟的,所以基本上是在激活菜单时。
  • @user2485157 根据您的代码,我也更新了 jQuery 解决方案和 CSS。他们都为我工作。只使用其中一种。
  • 好的,非常感谢,成功了。但是,当您再次单击菜单时,标题仍保留在位置:相对。有没有办法在 jQuery 中包含规则,所以如果再次单击菜单切换链接(关闭菜单),标题返回到位置:固定?我还注意到闪烁,所以假设您在页眉固定的情况下向下滚动页面的一半,然后单击菜单将其打开,页面有点跳跃。标题从页面上消失了,但它确实在顶部,但是是相对的。这有意义吗?
猜你喜欢
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-28
  • 1970-01-01
相关资源
最近更新 更多