fixed 宽度超过内容页面_position Fixed on Scroll 相对定位时内容超出范围出现滚动条...

本文介绍了如何处理CSS中相对定位的目录在滚动时的显示问题。通过监听滚动事件,当目录顶部触碰顶部菜单栏时,将其设置为fixed定位并固定在右上角。同时,当目录内容超出高度时,动态添加滚动条以展示全部内容。
摘要由CSDN通过智能技术生成

文章目录

之前写过一篇 关于css相对定位不跟随滚动条移动点击查看.

正如我的博客内容页右侧目录的效果.

垂直滚动内容时,右侧目录始终定位在右上角不跟随滚动条.

但是,

当我的目录足够长,因为它不跟随滚动条垂直移动,

导致超出屏幕的部分无法看到.

右侧目录相对定位 'position': 'fixed',

'top': 25px,

'width': 400px

top 25px 是因为我的博客顶部菜单高度25px,所以为了不让菜单遮挡右侧目录,所以距离顶部25px

但是页面初始化后,我们并不想直接让目录相对定位到右上角,

因为右上角还有需要展示的模块,

我们更希望是滚动条滚动到目录模块时,这个模块始终相对定位始终停留在右上角.

右侧目录初始绝对定位滚动后计算位置 var $elm = $('#catelog');

const barWidth = $('#ad').css('width');

var startPos = $elm.offset().top;

$(window).scroll(function (){

var p = $(window).scrollTop();

if (p > startPos - 68) {

$elm.css({

'position': 'fixed',

'top': 25,

'width': barWidth

});

} else {

$elm.css({

'position': 'relative',

'top': '0px'

});

}

注意:需要引用jquery

$(window).scroll(function (){ //这里是监视滚动条滚动时的事件})

p 是当前滚动条滚动的距离

startPos 是博客目录元素距离浏览器可视化顶部距离

68是博客顶端飘浮菜单栏的高度

if (p > startPos - 68)

说明右侧目录元素顶部刚刚触碰到飘浮的顶部菜单栏底部时,

目录元素被设置成相对定位

'width': barWidth

元素宽度是根据上面左侧广告的的宽度动态计算的,

因为博客做了各种设备的适配,随着可视化窗口变化大小,

右侧模块宽度动态变化.

这样会遇到另外一个问题

当目录内容足够长,高度超出目录元素高度时,底部隐藏的内容无法看到(因为目录模块是相对定位,漂浮在右侧)

所以我们需要滚动内容来查看

fixed下内容超出高度出现Scroll

当内容高度大于元素在窗口的可视化高度时,内容div出现滚动条

var $elm = $('#catelog');

const barWidth = $('#ad').css('width');

var startPos = $elm.offset().top;

var $content = $('#catelog_content'); //新增

const catelogHeight = parseInt($('#catelog_content').css('height')); //新增

$(window).scroll(function (){

--------新增

if (catelogHeight >= 460) {

$content.css({

'height': '460px',

'overflow-y': 'scroll'

});

}

------新增

var p = $(window).scrollTop();

if (p > startPos - 68) {

$elm.css({

'position': 'fixed',

'top': 25,

'width': barWidth

});

} else {

$elm.css({

'position': 'relative',

'top': '0px'

});

}

留意上方新增的几行代码

var $content = $('#catelog_content'); 这是目录模块内的加载列表元素的div容器

const catelogHeight = parseInt($('#catelog_content').css('height'));

获取列表元素div容器的高度,因为返回的是 xxpx,

parseInt只是把 xxpx转化成整数xx

$content.css({

'height': '460px',

'overflow-y': 'scroll'

});

}

当列表元素高度大于460的时候,

固定列表元素外div容器高度为 460px,同时设置纵向滚动条

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值