今天要说的是文章详情页右侧的目录栏,当页面下滑的时候,它也会固定到页面顶部,之前是用js去监听scroll事件,然后根据位置进行判断,togglefixed的方案,出于一些原因,决定对它用sticky去重写。
几下就写完了,去掉滚动事件监听,然后将菜单元素.post-nav加上position:sticky;top:0样式,但是,不起效!
wtf!百思不得其解,我开始搜索原因。在so搜到了这个,说到可能是元素的父级元素有对overflow属性进行处理,比如加了什么overflow:hidden啥的,但是看了下,并没有这种情况。
然后我猜想会不会是bootstrap布局的问题(事实上确实有关系),写下demo:
<!DOCTYPEhtml>
<html>
<head>
<title></title>
<linkhref="//cdn.bootcss.com/bootstrap/4.1.1/css/bootstrap.min.css"rel="stylesheet">
<style>
body{font-size:50px;font-weight:900;}
.main{height:2000px;background:#eee}
.menu{height:200px;background:yellow}
.ad{height:200px;background:red;position:sticky;top:0px;}
.guess{height:200px;background:blue;}
</style>
</head>
<body>
<pclass="container">
<pclass="row">
<pclass="col-md-8main">content</p>
<pclass="col-md-4">
<pclass="menu">menu</p>
<pclass="ad">ad</p>
<pclass="guess">others</p>
</p>
</p>
</p>
</body>
</html>
但是没问题,突然想到网站用的bootstrap版本是3.x,然后改成3.3.7的版本,这时候问题就出来了。
这时候问题就比较好定位了,4.x用的是flex布局,而3.x还是float浮动布局,问题应该是出在这里了。
最终代码(参考这个issue):
<!DOCTYPEhtml>
<html>
<head>
<title></title>
<linkhref="//cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"rel="stylesheet">
<style>
body{font-size:50px;font-weight:900;}
.main{height:2000px;background:#eee}
.side{height:2000px;}
.menu{height:200px;background:yellow}
.ad{height:200px;background:red;position:sticky;top:0px;}
.guess{height:200px;background:blue;}
</style>
</head>
<body>
<pclass="container">
<pclass="row">
<pclass="col-md-8main">content</p>
<pclass="col-md-4side">
<pclass="menu">menu</p>
<pclass="ad">ad</p>
<pclass="guess">others</p>
</p>
</p>
</p>
</body>
</html>
对应到开始的问题上,因为menu是属于.col-md-3元素的,所以右边的.col-md-3需要和左边的.col-md-9保持高度一致即可,加上这行代码:
$('.side').height($('.main').height())
因为左边的内容区域有图片的延迟加载,所以这行代码需要持续执行:
$(window).scroll(function(){
$('.side').height($('.main').height())
//othercode
//...
})
总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。更多相关教程请访问HTML视频教程!


本文转载自中文网


本文转载自中文网
如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h54579.shtml