在某些 window 宽度处偏移 1 个像素

1 pixel offset at certain window widths

我在 Safari 和 Firefox 中使用以下 JSFiddle 遇到了一个非常有趣的故障:

http://jsfiddle.net/68gcy2gp/

您必须单击红色框才能切换蓝色叠加层。

我有两个左浮动相对定位的 li 元素,宽度为 32% 加上 1% 右边距。然后,我在 li 元素上放置了一个 div 元素,该元素位于 absolute 和 top/left 0 之上。 div 的宽度将设置为与 32% li 相同的宽度(通过 jQuery)。

在某些屏幕宽度上,我会出现 1px 的故障(太长或太短)。就像这个截图显示的那样:

我怎样才能避免这个故障?

好的,作为官方回答:

jQuery .width() 或 .innerWidth() 将子像素的宽度四舍五入为下一个整数值,使用 floor 或 ceil,具体取决于值。为避免这种情况,您可以使用一些原始 javascript:

$('.person').each(function() {
    var front = $(this).find('.front');
    var back = $(this).find('.back');
    var link = $('<a href="#"></a>');

    link.on('click', function() {
        var width = $(front)[0].getBoundingClientRect().width;
        back.innerWidth(width);
        back.toggle();
    });

    $(this).wrap(link);
    back.hide();
});

以下函数用于通过使用活动叠加层调整 window 的大小来检查像素错误:

$(window).resize(function() {
    $('li').each(function() {
        var back = $(this).find('.back');
        var width = $(this)[0].getBoundingClientRect().width;
        back.width(width);    
    });
});

如果您使用 .innerWidth() 而不是 getBoundingClientRect(),您将看到您所陈述的错误。