Bootstrap

头部导航fixed定位后,a锚点定位有偏差(上部分被遮挡)

这两天实现了一个很简单的静态页面,主要功能就是在nav中设置几个导航按钮,点击之后可以跳转到该页面中对应的地方,如下图所示:

在实现该功能的过程中遇到一个小问题:当设置完锚点,对nav进行fixed固定定位之后, 主要代码(非全部代码,读懂即可)

设置锚点:

    <a class="header-ls-item" href="#advantage" >优势</a>   /* 开始设置 */

    <div id="advantage" class="padding-common">我们的优势我们的优势.....</div>  /* 锚点 */

css:

header {  /* 固定定位 */

       position:fixed;

       top: 0;

       height: 60px;

      z-index:100;

}

发现要展示的目标区域竟然上移了!!! 如下图所示:

想了一下,其实原因很简单:

先重温一下fixed定位:对象脱离常规流,偏移定位是以窗口为参考,盒子的偏移位置不影响常规流中的任何元素,其margin不与其他任何margin折叠。当出现滚动条时,对象不会随着滚动。

分析:

我们所见的页面可不是简单的一个平面,它可是能被划分成无限层的,每层之间是平行的~~~(题外话,哈哈哈!)。

言归正传,既然被fixed的元素已经脱离文档流了,那么我们就可以理解为该元素已经不再占据文档中的位置了(它已飞起),那么在它之后的元素自然毫不客气的占据了它的位置,所以当我们设置的锚点滚动上来的时候,就把nav的位置占据了,也导致了我们所看到的位置向上偏移的现象。

解决方案:

当锚点被召唤的时候,告诉它此地被占,留点地儿就好了~

<a class="header-ls-item" href="#advantage" >优势</a>   /* 开始设置 */

// <div id="advantage" class="padding-common">我们的优势我们的优势.....</div>  /* 锚点 */

<a name="advantage" class="target-fix"></a>

css:

.target-fix {  // 让它滚动上来的时候在实际位置的基础上向下偏移60px,和你设置的nav高度一致即可;

   position: relative;

   top: -60px; // 偏移值

   display: block;

   height: 0;  

   overflow: hidden; //不让它展示哈~

}

大功告成,就是这么优秀!!(看了其他的文章,说这个其实本名叫“暗锚”,好高大上的名字~)

 

;