gpt4 book ai didi

javascript - 需要没有填充的clientHeight

转载 作者:行者123 更新时间:2023-12-04 12:55:19 25 4
gpt4 key购买 nike

我需要根据浏览器中的可用高度来调整垂直范围控件的大小。我几乎拥有它,但我认为存在某种我无法解决的填充/边框/边距问题。尽管它会根据浏览器的高度自行调整大小,但我的范围控件总是从页面底部离开几个像素。

这就是我得到高度的方式:

var height = window.innerHeight 
|| document.documentElement.clientHeight
|| document.body.clientHeight;

然后使用它来设置 slider 高度:
document.getElementById("slider").setAttribute('style', "height :" + height + "px");

我知道 clientHeight 返回高度包括填充,所以我一直在想我只需要获取顶部填充并减去它。
问题是当我得到如图所示的填充时,它为零(警报写出 0px):
alert("top pad: " + window.getComputedStyle(document.documentElement, null).getPropertyValue('padding-top'));

同时, slider 的 CSS 看起来像这样,所以我不认为它自己的 padding/border/margins 负责:
.sliderStyle {
height: 860px;
width: 2%;
-webkit-appearance: slider-vertical;
padding-top: 0px;
margin: 0px;
border: 0px;
}

HTML 正文中唯一的内容是范围控件:
<input id="slider" class="sliderStyle"  oninput='' onchange='' type="range"  min="0" max="1000" step="1" value="0"> 

这是整个文件:
<!DOCTYPE html>
<html>
<head>
<title>Size Control to Browser</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style type="text/css" media="screen">
.sliderStyle {
height: 860px;
width: 2%;
-webkit-appearance: slider-vertical;
padding-top: 0px;
margin: 0px;
border: 0px;
}
</style>

<script type="text/javascript">
function start() {
var height = window.innerHeight
|| document.documentElement.clientHeight
|| document.body.clientHeight;
alert('clientHeight: ' + height);
alert("top pad: " + window.getComputedStyle(document.documentElement, null).getPropertyValue('padding-top'));
alert("top margin: " + window.getComputedStyle(document.documentElement, null).getPropertyValue('margin-top'));
document.getElementById("slider").setAttribute('style', "height :" + height + "px");
}

</script>
</head>
<body onload='start()'>
<input id="slider" class="sliderStyle" type="range" min="0" max="1000" step="1" value="0">
</body>
</html>

clientHeight 警报确认不同浏览器尺寸的高度正在变化
top pad 和 top margin alerts 都返回 0px

最佳答案

回答您的问题 : 使用下面的 JavaScript 作为你的 height变量,而不是使用 clientHeightinnerHeight (并将正文设置为 100vh )。 (见 jsfiddle ):

JS:

var style = window.getComputedStyle(document.body, null),
height = style.getPropertyValue("height");

console.log(height);

CSS:
body {
padding: 20px;
height: 100vh;
}

div {
height: 30px;
}

HTML:
<div></div>

代码所做的是获取正文内容的高度,本质上是没有任何填充的正文的高度。

我放一个随机 div的唯一原因设置高度为 30px 的元素用于显示 console.log(height)将精确输出 30px,这是正文中所有内容的高度(在这种情况下, div 是正文中唯一的东西),不包括正文的填充(根据示例 CSS I上面使用的是20px)。 您显然可以删除这个 div ,因为它只是为了示例目的。

JavaScript 取自 this answer to "Get the height of an element minus padding, margin, border widths" ,它还显示了一个遗留的跨浏览器实现。

关于javascript - 需要没有填充的clientHeight,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30147850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com