Javascript:在Safari / iOS中计算溢出其容器的元素的宽度

时间:2014-07-22 13:34:35

标签: javascript jquery css

http://mkoryak.github.io/floatThead/

一起使用时,我遇到的问题首先发生在我身上

在某些页面上,我有一些列的表格。客户端选择水平滚动这些表。因此,这些表包含在具有overflow-x: auto;

的div中

在桌面浏览器和Safari / iOS上运行良好。

在某些时候使用floatThead时,它会请求outerWidth()表的宽度来设置浮动时表头的宽度。在浮动表头的iPad上,与包装元素一样宽,其余的都被裁剪掉了。我调试了容器和表的outerWidth()值。

在桌面浏览器上,我获得了类似于容器容量为1200px,容器内容量更大的容量为1900px。

但是在Safari iOS中我获得了935px的 容器和表格。容器元素不必设置为滚动较大的内容以产生此错误。我使用Twitter Bootstrap 2.3.2。如果有一个带有容器流体的页面,其宽度将调整为窗口宽度。如果内部有一个宽度较大的桌子,则可以通过overflow: visible;看到。但是 - 在iPad上 - 当触发floatThead时,浮动的表头宽度被限制为流体容器的宽度(减去其填充)。

因此,我认为其原因是对较小容器内较大元素宽度的不同计算。

如果我理解正确,jQuery的outherWidth()使用css()来检索元素的宽度,css()使用getComputedStylecurrentStyle

我假设浏览器返回"错误"使用值,并且所有jQuery / floatThead都可以使用。

我想知道我的假设是否正确,或者是否可能有其他因素引发错误"在Safari iOS中计算宽度。

1 个答案:

答案 0 :(得分:2)

道歉,在提问之前,我没有再自己检查。制作一个有问题的页面的静态副本并连续删除html,javascript和css代码后,我能够找到原因。

Twitter Bootstrap 2.3.2为表元素设置max-width: 100&;。在上述情况下(表位于允许抄写其内容的较小容器内),表格宽度不需要以任何方式限制。

它不会在桌面浏览器中造成任何问题。即使在Safari中,表本身的宽度也很好并且滚动工作。只是jQuery的outerWidth()收到了一个错误的值,导致浮动的thead被裁剪到外部容器的宽度。