Twitter Bootstrap - 响应词缀

Azi*_*ari 52 twitter-bootstrap

我正在使用Twitter Bootstrap,我有以下内容:

<div class="row">

    <div class="span3">
        <div data-spy="affix">
            <form>
                <!-- inputs and stuff -->
            </form>
        </div>
    </div>

    <!-- span9 and its contents -->

</div>
Run Code Online (Sandbox Code Playgroud)

Bootstrap正确应用了词缀效果,<div>当我向下滚动页面时它保持静止.但是,一旦我将页面调整为移动尺寸并引导自适应响应效果(导航栏折叠/对象在彼此之下很好地对齐),粘贴<div>现在位于页面的其他元素之上并且它变得混乱.这是发生,因为.affixposition: fixed这解释了它相当不错.

现在我去了Bootstrap的网站,并将页面调整为移动尺寸,附加元素(<ul>在他们的情况下)开始与页面很好地流动,采取其自然的位置,而不是在其他元素之上.我也注意到,一旦出现这种情况,则类是从变affixaffix-top.

我不确定这是否是他们的自定义或者它是否是框架的一部分,因为框架显然不是以相同的方式运行.任何人都可以详细说明这个吗?我需要在我的<div>位置具有相同的行为如果页面被调整为移动尺寸,则附加元素占据其自然位置.

编辑:我的观察有点缺陷.我注意到他们页面上的元素最初有affix-top,一旦我在data-top-offset它下面滚动它就会改变affix.它仍然无法解释为什么我<div>不会像<ul>调整大小时那样渲染.

Sar*_*ara 64

Bootstrap 为其文档使用额外的CSS文件,以覆盖某些元素的默认行为.

具体来说,在第917行,他们position将附加的侧边栏(作为<767px宽度的媒体查询的一部分)更改为static:

.bs-docs-sidenav.affix {
  position: static;
  width: auto;
  top: 0;
}
Run Code Online (Sandbox Code Playgroud)

他们有几个额外的自定义样式应用于附加的侧边栏; 您可以在手机大小的窗口上使用Chrome Web Inspector/Firebug查看它们.

  • 我想知道为什么bootstrap不应用必要的更改,如果词缀只适用于它们.也许他们太依赖上下文了. (5认同)
  • @Sara 您不应该检查问题跟踪器,因为它不是问题。这是预期的和记录在案的行为。“词缀插件在三个类之间切换,每个类代表一个特定的状态:.affix、.affix-top 和 .affix-bottom。你必须自己为这些类提供样式(独立于这个插件)来处理实际位置。 ” http://getbootstrap.com/javascript/#affix-usage(不过这篇文章是在 2012 年发布的,所以文档可能已经更新) (2认同)

小智 28

HTML不要粘贴span3(或span4等)DIV,而是它的孩子; 在我的情况下,我贴了#sidebar.此外,您不必将.affix类或data-offset-top ="XXX"添加到此div.以下Javascript将起到作用.

  <aside class="span3">
    <div id="sidebar">
     <p>some content</p>
    </div>
  </aside> 
Run Code Online (Sandbox Code Playgroud)

CSS(bootstrap.css上不存在以下代码,我从http://twitter.github.io/bootstrap/assets/css/docs.css复制了它)

.affix-bottom {
    position: absolute;
    top: auto;
    bottom: 400px;
}
Run Code Online (Sandbox Code Playgroud)

Javacript以下JS将根据有多少页面滚动更改类#sidebar从.affix到.affix底

   $('#sidebar').affix({
      offset: {
        bottom: 450
      }
   });
Run Code Online (Sandbox Code Playgroud)

实际上,在小分辨率下,#sidebar将与其他元素重叠.要解决此问题,请使用bootstrap的媒体查询http://twitter.github.io/bootstrap/scaffolding.html#responsive

正如萨拉先前指出的那样,你可以使用类似......

@media(max-width:767px){
   .affix {
     position: static;
     width: auto;
     top: 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

..所以你让#sidebar表现得很好.

希望这有助于某人!