Javascript getBoundingClientRect在计算td宽度时似乎不准确
我正在开发一个功能,它要求我在单击按钮时将CSS宽度设置为表中每个td的像素。我使用getBoundingClientRect计算td宽度并获得px(例如100px),然后将其设置为td.style.width。但是,如果已设置table.style.width,则会导致某些单元格移动,但如果未设置table.style.width,则不会发生移动。请参阅以下表格的HTMLJavascript getBoundingClientRect在计算td宽度时似乎不准确,javascript,html,css,html-table,Javascript,Html,Css,Html Table,我正在开发一个功能,它要求我在单击按钮时将CSS宽度设置为表中每个td的像素。我使用getBoundingClientRect计算td宽度并获得px(例如100px),然后将其设置为td.style.width。但是,如果已设置table.style.width,则会导致某些单元格移动,但如果未设置table.style.width,则不会发生移动。请参阅以下表格的HTML <table id='mytable' style="border-collapse:collapse;w
<table id='mytable' style="border-collapse:collapse;width:300px">
<tbody>
<tr height="19" style="height:14.25pt">
<td style="border:1px solid rgb(212, 212, 212);height:14.25pt;width:100px"></td>
<td style="border:1px solid rgb(212, 212, 212);width:100px"></td>
<td style="border:1px solid rgb(212, 212, 212);width:100px"></td>
</tr>
</tbody>
</table>
奇怪的是,我可以看到每个td的宽度是:100100100,但在应用了从getBoundingClientRect().right-getBoundingClientRect().left
计算出的新宽度后,它变成了:98.5100.5101。这种不一致导致了转移效应
我发现,如果width:300px
不存在于表的CSS中,它将在不移位的情况下完美地工作,但如果它已经存在,我不能仅仅移除它,因为移除它也会导致移位。因此,我想知道是否有一种方法可以做到这一点而不删除table.style.width
我创建了jsfiddle来重新编程。我想要的是在将px分配给每个td之后不要移动单元。谢谢
如果在CSS中将
td
elements'box size
样式属性默认为border box
:
td { box-sizing: border-box;}
点击小提琴上的按钮不会改变桌子的宽度
<table id='mytable' style="border-collapse:collapse;width:300px">
<tbody>
<tr height="19" style="height:14.25pt">
<td style="border:1px solid rgb(212, 212, 212);height:14.25pt;width:100px"></td>
<td style="border:1px solid rgb(212, 212, 212);width:100px"></td>
<td style="border:1px solid rgb(212, 212, 212);width:100px"></td>
</tr>
</tbody>
</table>
基本上,默认情况下,表元素是通过
内容框设置的。在按钮单击中将默认值更改为边框框
,这意味着浏览器必须使用不同的大小调整规则再次布局表格。谢谢,这是可行的,而且默认使用td{box size:border box;}
,似乎每列也不会移动,但是如果默认情况下没有设置此样式属性,我认为如果我们在代码中动态地设置它,它仍然会导致变化?如果默认情况下未设置框大小样式属性,则不确定是否有避免移动的方法?您可以更改CSS中td
元素的默认框模型。如果只想更改特定类的表单元格元素,请使用类名限定规则。您还可以显式设置box模型:边框框