【问题标题】:Collapse DIV only on Mobile View - Bootstrap 3仅在移动视图上折叠 DIV - Bootstrap 3
【发布时间】:2015-01-22 10:45:22
【问题描述】:

我有一个侧边栏搜索参数。我只想在移动设备上对此 DIV 进行折叠功能。使用 Bootstrap 3 - 最新版本。

这是 HTML 标记。

<div class="col-md-3 col-sm-4 SearchParameters">
            <h4 data-toggle="collapse" data-target="#search">Location</h4>
            <div class="col-md-12 sCheck no-gutter collapse" id="search">
                <h5>Lahore (254)</h5>
                <div class="col-md-12">
                    <form role="form">
                        <div class="checkbox checkbox-primary">
                            <input type="checkbox" id="ModelTown">
                            <label for="ModelTown">Model Town</label>
                        </div>
                        <div class="checkbox checkbox-primary">
                            <input type="checkbox" id="DHA">
                            <label for="DHA">DHA</label>
                        </div>
                        <div class="checkbox checkbox-primary">
                            <input type="checkbox" id="CG">
                            <label for="CG">Cavalry Ground</label>
                        </div>
                        <div class="checkbox checkbox-primary">
                            <input type="checkbox" id="Gulberg">
                            <label for="Gulberg">Gulberg</label>
                        </div>
                        <div class="checkbox checkbox-primary">
                            <input type="checkbox" id="Samnabad">
                            <label for="Samnabad">Samnabad</label>
                        </div>
                        <div class="checkbox checkbox-primary">
                            <input type="checkbox" id="AIT">
                            <label for="AIT">Allama Iqbal Town</label>
                        </div>
                        <div class="checkbox checkbox-primary">
                            <input type="checkbox" id="GardenTown">
                            <label for="GardenTown">Garden Town</label>
                        </div>
                        <div class="checkbox checkbox-primary">
                            <input type="checkbox" id="Township">
                            <label for="Township">Township</label>
                        </div>
                        <div class="checkbox checkbox-primary">
                            <input type="checkbox" id="FaisalTown">
                            <label for="FaisalTown">Faisal Town</label>
                        </div>
                        <a href="#">20 more locations</a>
                    </form>
                </div><!-- form-group -->
                <div class="clearfix"></div>
                <h5 class="second">Availability</h5>

                <div class="col-md-12 SelectDays">
                    <a href="#" class="Day">M</a>
                    <a href="#" class="Day">T</a>
                    <a href="#" class="Day active">W</a>
                    <a href="#" class="Day">Th</a>
                    <a href="#" class="Day">F</a>
                    <a href="#" class="Day">S</a>
                    <a href="#" class="Day">SU</a>
                </div><!-- SelectDays -->

                <div class="col-md-12 TimeSet">
                    <!-- timeFunction -->
                </div><!-- TimeSet -->

            </div><!-- col-md-12 -->
        </div><!-- SearchParameters -->

我用来为代码设置样式的 SearchParameters DIV。

注意:我只想在移动设备上折叠“SearchParameters”div,然后用按钮打开它。应该只有 1 个 div。我可以隐藏这个 div 并显示另一个在移动设备上可见的 div,但这不是一个好方法。我想折叠此 div 并仅在移动设备上单击按钮时显示它。

【问题讨论】:

  • 想隐藏div
  • 我只想在移动设备上折叠“SearchParameters”div,然后用按钮打开它。

标签: twitter-bootstrap


【解决方案1】:

你可以这样做:

<button class="visible-xs" data-toggle="collapse" data-target="#SearchParameters">Toggle it</button>

<div class="hidden-xs col-md-3 col-sm-4 SearchParameters" id="SearchParameters">
...

CSS:

#SearchParameters.in,
#SearchParameters.collapsing {
    display: block!important;
}

【讨论】:

  • 这个解决方案在Bootstrap 3.3.5中不起作用,使用hidden-xs表示可折叠区域根本不展开
  • @Rudi css 修复了它!作品
  • 这对我来说效果很好,但我发现如果我在 XS 点击折叠然后取消折叠,然后将 XS 上方的屏幕宽度更改为不可见,所以我添加了一个媒体查询来强制它总是在断点上方可见,例如。 @media screen and (min-width:768px) { #SearchParameters{ display: block!important;visibility:visible!important; } }
  • 清洁解决方案。我使用了 Rudi 的答案和 johna 的附录作为衡量标准。
【解决方案2】:

由于“in”类将可折叠元素定义为打开状态,因此在移动设备上移除它会导致它开始折叠。

例如

<button data-toggle="collapse" data-target="#collapsible">Show/Hide</button>
<div class="collapse in" id="collapsible">
    Content Here.
</div>
<div class="visible-xs" id="xs-check"></div>
<script>
if( $("#xs-check").is(":visible") )
    $("#collapsible").removeClass("in");
</script>

【讨论】:

  • 我选择了相反的方式(如果支票被隐藏,则添加 in 类)。
  • 我使用了这种方法,但使用了默认的引导 javascript,如下所示:if($("#visible-check").is(":visible")) { $("#collapsible").collapse('show'); } else { $("#collapsible").collapse('hide'); } 好处是添加和删除的类是自动的。 Bootstrap 3 reference
  • 谢谢你,我不知道这个函数存在,它似乎比手动添加类更好。
【解决方案3】:

纯 CSS 方法。也适用于 Bootstrap 4。

@media (min-width: 768px) {
  .collapse.dont-collapse-sm {
    display: block;
    height: auto !important;
    visibility: visible;
  }
}
<div class="container">
  
  <button class="btn btn-primary hidden visible-xs" type="button" data-toggle="collapse" data-target="#collapseExample" aria-expanded="false" aria-controls="collapseExample">
    Collapse Button
  </button>
  
  <div class="collapse dont-collapse-sm" id="collapseExample">
    <div class="well">
      Collapse Panel
    </div>
  </div>
</div>

source

【讨论】:

    【解决方案4】:

    为什么不使用 window.matchMedia?

    为简单起见,我创建了一个基于 Andrew Dinmore 的示例。 不需要额外的空div来检查是否可见。

    <button class="btn btn-default btn-block visible-xs hidden-sm hidden-md hidden-lg" data-toggle="collapse" data-target="#Foo">Toggle</button>
    
    <div id="Foo" class="collapse in">
      <!-- fancy content here -->
    </div>
    
    <script type="text/javascript">
        $(document).ready(function () {
          if (matchMedia) {
            var mq = window.matchMedia("(max-width: 768px)");
            mq.addListener(WidthChange);
            WidthChange(mq);
          }
    
          function WidthChange(mq) {
            if (mq.matches) {
              $("#Foo").removeClass("in");
            }
          }
        });
      </script>
    

    享受吧! ;-)

    【讨论】:

    • 请注意,如果有人感兴趣,我通常检查元素可见性而不是使用 matchMedia 有几个原因。第一个,虽然现在几乎完全不相关,但 IE
    • 当然,使用 matchMedia 并没有错;这实际上是一种在技术上更有效的工作方式。但是,如果构建过程没有设置为共享断点值,我认为不需要担心额外的几个字节,当然不是平均页面所需的数据量这些天。
    【解决方案5】:

    与 Rudy 的解决方案类似,对于 Bootstrap 4.6Razor (Blazor WASM),我发现以下解决方案可以很好地满足我的需求:

    @media (min-width: 641px) {
      .collapse.collapse-show-xs {
          display: block !important;
      }
    }
    

    用法:

    <div class="collapse collapse-show-xs @NavMenuCssClass" @onclick="ToggleNavMenu">
        <ul class="nav flex-column">
            <li class="nav-item px-3">
                <NavLink class="nav-link" href="" Match="NavLinkMatch.All">
                    <span class="oi oi-home" aria-hidden="true"></span> Home
                </NavLink>
            </li>
    

    当我升级 Blazorize 的引导程序版本时,我注意到我的侧边栏不再显示。现在它正在做我想做的事情,即它在至少满足 xs 屏幕尺寸时从不隐藏,并且在低于时可以隐藏。

    【讨论】:

      猜你喜欢
      • 2017-03-18
      • 1970-01-01
      • 2022-11-26
      • 2013-11-18
      • 1970-01-01
      • 1970-01-01
      • 2014-07-07
      • 2016-04-17
      • 2015-06-05
      相关资源
      最近更新 更多