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

3,951 阅读3分钟

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

作者:吴业飞 时间: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)定位系列.www.zhangxinxu.com/wordpress/?…


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