代码之家  ›  专栏  ›  技术社区  ›  myol

使用jQuery动画而不显示:块

  •  2
  • myol  · 技术社区  · 7 年前

    我想用 .slideToggle() 切换div display: none display: grid . 然而,这个动画似乎增加了 display: block 内联到html并覆盖任何其他css类

    CSS格式

    .grid {
        display: grid;
    }
    

    jQuery查询

    $('#nav-toggle').click(function() {
        $('.nav-menu').slideToggle(500, function() {
            $(this).toggleClass('grid')
        });
    });
    

    我在使用

    $('#nav-toggle').click(function() {
        $('.nav-menu').slideToggle(500, function() {
             if ($(this).is(':visible')) {
                 $(this).css('display','grid');
             }
        });
    });
    .nav-menu {
        display: none;
        grid-template-columns: repeat(3, 1fr);
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id=nav-toggle>
        Toggle
    </div>
    
    <div class=nav-menu>
        <div>Item 1</div>
        <div>Item 2</div>
        <div>Item 3</div>
    </div>

    但最初的动画似乎使用 显示:块 显示:块 (堆叠的项目)到 (项目间隔)。

    如何使初始动画也正确显示?

    2 回复  |  直到 7 年前
        1
  •  1
  •   aloisdg    7 年前

    解决方法是将导航菜单设置为 display:grid; 并使用JQuery隐藏和显示它。顺便说一句,如果你有一个用户禁用了JavaScript,他仍然可以阅读你的页面。

    $('.nav-menu').hide(); // clearer than display none
    $('#nav-toggle').click(function() {
      $('.nav-menu').slideToggle(500, function() {
        if ($(this).is(':visible')) {
          $(this).show(); // clearer than display previous (here grid)
        }
      });
    });
    .nav-menu {
      display: grid;
      grid-template-columns: repeat(3, 1fr);
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="nav-toggle">
      Toggle
    </div>
    
    <div class="nav-menu">
      <div>Item 1</div>
      <div>Item 2</div>
      <div>Item 3</div>
    </div>

    有关: https://stackoverflow.com/a/8144998/1248177

        2
  •  0
  •   myol    7 年前

    因此,为了使响应式CSS媒体查询更干净、更容易,我最终包装了 nav 元素,并使div在 display: none display: block .

    导航 保留了网格属性。在我的例子中,这个街区是一个更复杂的家庭的孩子 display: grid 布局,但由于它仍然是一个孩子,我仍然可以使用它的CSS网格属性,我只需要使用旧的CSS方法来扩展和中心块。

    它不是很干净,但我想这是我能做的最好的,直到jQuery被更新,以支持不仅仅是 显示:块 它的动画。

    $('#nav-toggle').click(function() {
        $('.nav-menu-container').slideToggle(500, function() {
            if ($(this).css('display') == 'none') {
                $(this).css('display', '');
            }
        });
    });
    .nav-menu-container {
        display: none;
    }
    
    .nav-menu {
        display: grid;
        grid-template-columns: repeat(3, 1fr);
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id=nav-toggle>
        Toggle
    </div>
    <div class=nav-menu-container>
        <div class=nav-menu>
            <div>Item 1</div>
            <div>Item 2</div>
            <div>Item 3</div>
        </div>
    </div>