jQuery为WebKit(chrome)和Firefox中的相同对象返回不同的高度
我被这个困惑了。
jQuery.height()在Firefox和Chrome中返回不同的值。 测量屏幕上的像素表示两者中的一个,Chrome似乎报告了正确的值,而firefox每次关闭2或3个像素。 还有其他人遇到过这个问题吗?
我尝试使用各种jQuery高度函数(innerHeight,outerHeight,height)来获取高度无济于事。 我已经剥离了所有可能干扰高度值的css样式(所有填充,边框,边距等),但我仍然得到不一致的结果。
如果它有帮助,我正在处理表格单元格。 代码在第一个表旁创建第二个表,然后匹配每行的高度以在表上创建一种“粘性”左侧列。 单元格具有不同的内容,但在所有边上匹配边界,填充和边距的0值。
编辑 6小时后,这个问题继续困扰我。
当我修改边框并切换到使用innerHeight()来获得高度测量时,两个浏览器都会完美地渲染它。 但我需要在那里找到一个底线…
目前我有webkit完美地渲染带有边框的表格,并且每个单元格上的firefox关闭了1px。 我转而使用jQuery的innerHeight()函数来获取’master’表格中单元格的高度,但不知何故,firefox总是在测量时出现一个像素。
这是涉及的相关代码。 请注意,HTML是由firebug复制的,后者是由javascript生成的,所以在那里进行高度声明。 ‘master’表格HTML:
70609 R1000 Armoire Casegoods 70634 C1124 Nightstand Casegoods 70642 999 Nice Table New Name Casegoods 70643 OC603 Coffee Table Casegoods 70644 OC606 Coffee Table Casegoods
辅助表格HTML:
Sent 2 days ago $90.00 Sent 2 days ago Sent 2 days ago
CSS:
.items-table { font-size: 12px; color: #252629; position: relative; } .items-table td { height: 46px; padding: 4px; border-bottom: 1px solid #E0E3E3; vertical-align: top; } .items-table .item-thumb { margin-right: 0px; } .items-table tr { cursor: pointer; } .items-table td.id { display:none; } .items-table td.checkbox { width: 16px; padding: 0 6px 0 9px; vertical-align: middle; } .items-table td.thumb { width: 48px; vertical-align: middle; } .items-table td.details { vertical-align: middle; } .items-table td.details .code { font-weight: bold; } .items-table td.details .itemtype { color: #606060; } .items-table tr.selected td { background: #E3E3E3; } .items-table tr:hover td { background: #ccdbe5; } .items-table tr.active td { background: #1f6497 url('/images/selected-item.png') repeat-x top left; color: white; font-weight: bold; } .items-table tr.active .itemtype { color: #C1C5E1; } .items-table .cost { padding: 2px 0 0 0; } .items-table .tags { padding: 2px 0 0 0; }
jQuery业务:
$('#items .items-table tr').each(function() { var ti = $(this).find('.id').text(); $('#bids .items-table').append(" "+newCells+" ") var th = $(this).find('td.thumb').innerHeight(); $('#bids .items-table').find('tr:last td').height(th); });
这就是Chrome中的样子: 替代文字http://dl.dropbox.com/u/5536259/chromeSpacing.png
Firefox: alt text http://dl.dropbox.com/u/5536259/firefoxSpacing.png
您是否尝试过根本不设置TD元素的样式,而是尝试包装单元格的DIV元素? 然后,计算并设置DIV高度,因为它更可靠? 让表格根据其内容自动设置单元格高度。 这,因为您已经certificate不同的浏览器以不同的方式计算TD高度(带边框…)
Firefox和一般情况下,基于Gecko的浏览器与其他浏览器的不同之处在于它们尝试进行亚像素布局和渲染 。
这可能会使生活变得困难,特别是如果您使用基于其内容大小的表格单元格。
IE,Webkit和Gecko可以报告不同的维度 – 后者报告了一些奇特的分数大小。
至于错误:经过与类似的东西的挣扎 – 测量动态大小的表格单元的尺寸 – 有一段时间,我最终得到了特殊的分数数字套管。
由于它影响位置和尺寸,有些人最终使用clientWidth
而不是jQuery的’innerWidth()’ ,而有些人只是在返回的结果上使用parseInt()
。 (搜索来源中的fract
。)
如果不满意,您可以尝试以下方法:
- 默认情况下,使用“visibility:hidden”呈现主表,以便布局但不显示
- 从jQuery测量单元格高度
- 将高度四舍五入到主表中最接近的整数值并应用为内联样式(向上舍入可能是一个好主意,以确保单元格不会将内容减少1px)
- 基于这些整数值呈现辅助表并恢复主表的可见性
可能仍然会出现边框未对齐的情况 – 如果主表和辅助表的位置不相同(例如:主要顶部:123.75px,次要顶部:123px),则可能出现这种情况。在这种情况下,放置表格在一个公共容器中或只是重新定位到整数坐标可能会有所帮助。
祝好运…
编辑:据我记忆,由于一些IE和边界崩溃exception,我采用了(已弃用) cellspacing
属性 – 应该将表元素放在HTML而不是CSS中 – 并指定单独的边框,其尺寸为CSS中的0
。 我将整个桌子放在一个背景色很好的div中。
整个事情的效果好像表格边框是1px,折叠有背景div的颜色….
我有类似的问题,这似乎是一个错误,虽然我不是100%肯定。 例如,如果某个元素有填充 ,则innerHeight()
在Webkit和Firefox中没有显示相同的结果。 作为临时修复,我使用innerHeight()
和height()
来获得该元素的正确高度。
同样,我无法使用height()
在浏览器(IE和其他)中显示相同的内容。 我在浏览器中使用了类似的东西:
$("#element").css('height', '100');
如果要包含填充/边框/边距,请参阅innerHeight()
和outerHeight()
。
Firefox是一块垃圾。 添加容器
并在其上运行outerHeight()
可以解决问题。
- 回发不用于Firefox for asp.net(C#)页面
- 为什么Firefox中的document.body == null而不是Safari
- 如何让CSS mediaqueries与jQuery $(window).innerWidth()一起使用?
- 使用firefox w / firebug,如何在浏览器中编写javascript并使用.js文件对象呢?
- css filter invert()不能在mozilla firefox上运行?
- jQuery $ .get()函数成功用200但在Firefox中没有返回内容
- 在Firefox中使用JavaScript捕获Tab键
- JSON在FireFox和Safari上返回空响应(Windows Vista)
- 当用户点击不在Firefox中工作的特定div时,防止模糊