linear-gradient在firefox里的0高度

使用linear-gradient呈现多彩背景时,如果DOM中的元素不够多,body的高度小于窗口的高度,在firefox中会出现背景色没有铺满整个窗口的情况,导致背景色多层重复出现。

例如,整个body空无一物的时候,这是一般的理想情况:

但在firefox中是这样的:

 

此时特别简单地,把html和css的height设为100%,问题立刻就解决了。

但另一个问题来了,如果之后dom中的元素动态地有发生变化,使得body的内容总高度反超了浏览器的窗口高度,linear-gradient的平铺高度却不会随之变化,而是局限在原来的浏览器窗口的高度,所以此时下拉滚动条就会看到...

 

所以,将html和body设为100%并不是一个美妙的解决办法。

接着想到的是,那就在一个setInterval中不断地检测body的高度是否小于DOM的高度,小于就更新body的高度:

setInterval(function() {
	if ($("body").height() < $(document).height())
		$("body").height($(document).height());
});

这样想起来似乎是可行的,但实际发现,这样做后body的高度会持续不断地在增大,滚动条越来越细...

调试发现,每次body变大到document的高度后,DOM的高度会立刻增大一点...

于是就在这里卡了许久,不断地调试看了其他许多的高度clientHeight、offsetHeight、scrollHeight等的不同之处也无解,忽然想到会不会用html就不一样了:

setInterval(function() {
	if ($("html").height() < $(document).height())
		$("html").height($(document).height());
});

惊喜地发现窗口不会不断增大了,linear-gradient的效果也完美地平铺着,解决了!

 

原来是因为浏览器默认情况下body是有边距存在的,所以每次body变为DOM的高度时,整个DOM因为还有body的边距就必须跟着增大,而使用html就不会。

所以另外地,如果把body的css设为:

body {
    outline: 0;
    padding: 0;
    margin: 0;
    border: 0;
}

此时在setInterval中使用body判断,也可以完美解决了~

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值