Bootstrap Navbar(附加)动态宽度

时间:2016-06-20 15:01:34

标签: javascript jquery html css twitter-bootstrap

在滚动页面时,我在修复引导导航栏以正确调整宽度时遇到问题。

我希望导航栏在页面滚动时保持其包含元素的宽度,或者采用页面的整个宽度(从左到右)

我做错了什么,或者我需要做什么?

小提琴:https://jsfiddle.net/btckkdkk/12/

        <div class="container">
        <div id="renderbody">
<div id="renderbody-inner">
 <nav class="navbar navbar-default" role="navigation" data-spy="affix" data-offset-top="100" style="margin-bottom:5px">
        <div class="col-sm-12">
            <button type="button" class="navbar-toggle navbar-toggle-sm navbar-left" data-toggle="collapse" data-target="#storysubmit-navbar">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <form action="#" class="navbar-form navbar-form-custom navbar-left" role="search" id="searchForm" data-results-target="#storyList">

                <div class="input-group">
                    <input type="text" class="form-control input-sm" placeholder="Search" name="searchTerms" id="searchTerms" />
                    <div class="input-group-btn">
                        <div class="btn-group">
                            <button type="submit" class="btn btn-sm btn-default"><i class="glyphicon glyphicon-search"></i></button>                           
                        </div>
                        <a href="#" class="btn btn-sm btn-link" style="margin-right:30px">Advanced</a>
                    </div>
                </div>
            </form>
            <div class="navbar-form navbar-right collapse navbar-collapse" style="padding-right: 15px; padding-left: 15px; margin-right:0" id="storysubmit-navbar">
                <a href="#" class="btn btn-default btn-sm">
                    <i class="glyphicon glyphicon-pencil margin-right-5" aria-hidden="true"></i>
                    Submit
                </a>
            </div>          
        </div>

    </nav>
<div style="height:500px; background-color:darkgray;">
</div>
<div style="height:500px; background-color:lightgray;">
</div>
<div style="height:500px; background-color:darkgray;">
</div>
<div style="height:500px; background-color:lightgray;">
</div>
</div>
</div>
</div>

1 个答案:

答案 0 :(得分:1)

如何控制固定导航栏的宽度

The Affix plugin通过添加或删除.affix类来控制Navbar的行为。此类适用position: fixed;属性。因此,您可以使用特殊属性来控制导航栏的宽度:

  

对于绝对定位的元素(具有position: absoluteposition: fixed的元素),它指定元素的边缘边缘与其包含块的边缘之间的距离。

     

对于相对定位的元素(具有position: relative的元素),它指定元素移动到正常位置以下的数量。

当Navbar为fixed位置时,其位置将相对于浏览器窗口计算。

窗口的100%

我已将此CSS添加到您的https://jsfiddle.net/btckkdkk/8/

.navbar.affix {
  left: 0;
  right: 0;
  width: auto;
}

此代码在窗口的左右边缘之间拉伸导航栏。

检查结果:https://jsfiddle.net/glebkema/essb11a1/

父块的宽度

您需要计算面板相对于浏览器窗口的宽度和位置。然后,您将能够模拟特定区块中面板的位置。

您可以通过媒体查询为每个width of the container设置Navbar的属性。公式是

90% * (width of the container - 2 * padding of the container)

所以代码是

.navbar.affix {
  left:  calc(15px + 5%);
  right: calc(15px + 5%);
  width: auto;
}
@media (min-width: 768px) {
  .navbar.affix {
    left: 50%;
    right: auto;
    width: 648px;
    transform: translateX(-50%);
  }
}
@media (min-width: 992px) {
  .navbar.affix {
    width: 846px;
  }
}
@media (min-width: 1200px) {
  .navbar.affix {
    width: 1026px;
  }
}

检查结果:https://jsfiddle.net/glebkema/jo06z06n/