布局解决悬浮固定导航栏遮挡页面主体内容问题(主要考虑遮挡锚点问题)
作者:互联网
# 布局解决悬浮固定导航栏遮挡页面主体内容问题(主要考虑遮挡锚点问题)
作者:吴业飞
时间: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