其他分享
首页 > 其他分享> > 布局解决悬浮固定导航栏遮挡页面主体内容问题(主要考虑遮挡锚点问题)

布局解决悬浮固定导航栏遮挡页面主体内容问题(主要考虑遮挡锚点问题)

作者:互联网

# 布局解决悬浮固定导航栏遮挡页面主体内容问题(主要考虑遮挡锚点问题)

作者:吴业飞

时间:2018.06.21


 

---

在工作中经常遇到使用`position: fixed;`固定在页面顶部的导航栏会遮挡页面主体内容,特别是在使用锚点跳转的时候,锚点默认跳转到视窗顶部,正好被导航遮挡。我使用过两种方式解决这个问题,各有优劣,视具体需求而定。

## 导航fix定位下的解决方案

思路是将锚点安在真正要使用锚点定位的元素的上一个兄弟元素上,文字表述有点绕,show the code!

假设我们要安锚点的元素是

<div id="backToTop">

我要瞬移到顶部!

</div>

现在我们修改`html`结构

<div id="backToTop">

</br>

</br>

</br>

</br>

</div>

<div>

我要瞬移到顶部!

</div>

原理很简单,我用`</br>`换行粗暴地撑开了一定的高度实现不被导航栏遮挡。这样的缺点是破坏了布局,撑开的间距可能会比较难看,如果导航的高度不是太大这点间距可以接受,如果导航的高度过高页面就会有较大留白,所以我不倾向使用这种方式,毕竟设计师要求100%还原设计稿。

## 使用absolute定位布局,从布局角度彻底解决遮挡问题

思路:不使用fix定位导航栏,直接将导航栏独立出来,不参与页面滚动,模拟悬浮固定效果。

`html`

<body>

<div class="page">

<div class="header"></div>

<div class="content">

<div class="footer"></div>

</div>

</div>

</body>

`css`

.page {

position: absolute;

top: 0;

left: 0;

width: 100%;

height: 100%;

}

.header,

.content {

position: absolute;

left: 0;

right: 0;

}

.content {

top: 90px;//这里的90px是留出头部导航栏的高度,头部多高这里就多高

bottom: 1px;//这里之所以设置1px是因为如果不设置将不会有头部‘悬浮固定’效果,头部将会随页面一起滚动,设置了1px以后滚动条只出现在content区域,从而模拟悬浮固定效果

overflow: auto;//关键代码!可以让content区域出现滚动条而不是整个page区域滚动,配合bottom:1px使用!

}

这个解决方案看起来完美地解决了遮挡问题,因为锚点确实只会跳到content区域的顶部,因为BFC了(不了解BFC的请自行Google,非本文重点在此不加阐述),但是在一个场景下是不适用的!就是头部半透明效果下的悬浮固定!因为我们布局的原因,content根本不会滚动到header下面,自然不可能实现半透明悬浮了,所以请根据具体需求选择解决方案!

### 参考文献

【1】张鑫旭.CSS 相对|绝对(relative/absolute)定位系列.http://www.zhangxinxu.com/wordpress/?p=1287

---

版权声明:自由转载-非商用-非衍生-保持署名





 

标签:悬浮,遮挡,content,锚点,导航,页面
来源: https://blog.csdn.net/qq_39684484/article/details/120095440