使用JavaScript将最大高度设置为calc无效(无法分配给CSS属性)
更新:甚至使用JavaScript将最大高度设置为calc无效(无法分配给CSS属性),javascript,html,css,Javascript,Html,Css,更新:甚至document.getElementById(“聊天盒”).style.maxHeight=“calc(100%-54px);”不起作用,因此问题在于分配给CSS属性。在Chrome developer工具的“元素”选项卡中手动更改该值将正常工作 在一个事件中,我创建了一个p并将其插入到一个div之前。然后我需要重新计算该div的最大高度,以确保不会出现不必要的滚动条。要重新计算最大高度,我在JS中创建了一个字符串: var mhstr = "calc(100% - 25px - "
document.getElementById(“聊天盒”).style.maxHeight=“calc(100%-54px);”使用JS的代码>不起作用,因此问题在于分配给CSS属性。在Chrome developer工具的“元素”选项卡中手动更改该值将正常工作
在一个事件中,我创建了一个p并将其插入到一个div之前。然后我需要重新计算该div的最大高度,以确保不会出现不必要的滚动条。要重新计算最大高度,我在JS中创建了一个字符串:
var mhstr = "calc(100% - 25px - "+pin.getBoundingClientRect().height.toString()+"px);"
,pin是新创建的p元素
该字符串按预期返回:calc(100%-25px-29px)但是,document.getElementById(“聊天盒”).style[“max height”]
不接受它,并且保持不变
最大高度的默认原始值为calc(100%-25px)代码>,25px为具有固定位置的其他div的固定高度
我试图在pin.getBoundingClientRect()高度中添加25,但仍然无效
在Chrome开发者工具中将max height值更改为mhstr字符串可以完成这项工作,但我希望通过脚本更改它
下面是div对象:
<div id="chatbox" style="overflow-y: auto; max-height: calc(100% - 25px);">
注:mhstr返回calc(100%-25px-29px)
,将[“max height”]或maxHeight更改为0、“2px”或“100%”等固定值可以正常工作,但不会更改为mhstr。如果25px
是固定值,为什么不这样更改公式
constmhstr=`calc(100%-${25+pin.getBoundingClientRect().height}px);`;
document.getElementById('chatbox').style.maxHeight=mhstr;
如果要为最大高度
属性使用百分比数据类型,如以下示例所示:
最大高度:100%;
最大高度:计算(100%-25%);
最大高度:计算(100%-25px);
...
然后您应该有一个固定高度的父元素
因此,在这种情况下,在CSS或JS中设置“最大高度”并不重要
正如您在下面的示例中所看到的,第一个组有一个固定高度的父级,而第二个组有一个不固定高度的父级
因此,在设置“最大高度”后,第一个是半隐藏的,但第二个完全不变
document.getElementById(“固定高度子项”).style.maxHeight=“10%”;
document.getElementById(“未固定高度子项”).style.maxHeight=“10%”代码>
#固定高度{
高度:75px;/*精确指定了父级高度*/
}
#不固定高度{
/*未指定高度值*/
}
.孩子{
溢出:隐藏;
}
固定高度的父母
高度不固定的父对象
在Firefox中,这项功能完美无瑕:
const maxHeight=“计算(20px-10px)”;
chatbox.style.maxHeight=maxHeight代码>
#聊天室{
背景颜色:黄色;
溢出:隐藏;
}
test
我想你的意思是document.getElementById(“chatbox”).style.maxHeight
。父元素是否有固定的高度?如果没有,则包含的max height
将不起作用100%
,在calc内部或通过自身我尝试了style[“max height”]和style.maxHeight。没有区别。div可能会被其他元素填满,因此固定高度对它不是很好。默认的计算(100%-25px)工作正常,只是样式本身不想更改。或者它没有发生……如果父母没有固定的高度calc(100%-25px)
就不应该工作。。所以这听起来很奇怪,它不起作用,最大高度仍然保持calc(100%-25px)
@GreatCorn您是否检查了console.log(pin.getBoundingClientRect().height)代码>返回定义的值?并尝试console.log(mhstr)
只是为了确保问题不在css属性的更改中。在分配给maxHeight之前,Iconsole.log(mhstr)
会返回假定的字符串=calc(100%-25px-29px)代码>,pin.getBoundingClientRect()。高度按预期返回29我的代码无法返回计算值(100%-25px-29px)代码>。它应该返回calc(100%-54px)代码>。非常抱歉,一直在这两者之间切换。您的代码确实返回calc(100%-54px)代码>,但maxHeight never ChangesAgent确实存在,但是,高度既没有指定也没有固定:
。正如我已经说过的,在ChromeDeveloper工具的Elements选项卡中手动更改值是正常的。我想问题在于如何分配css属性。
var mhstr = "calc(100% - 25px - "+pin.getBoundingClientRect().height.toString()+"px);"
console.log(mhstr);
document.getElementById("chatbox").style["max-height"] = mhstr;