【问题标题】:Expanding div not pushing down content in IE8扩展 div 不下推 IE8 中的内容
【发布时间】:2014-02-07 04:36:19
【问题描述】:

我正在使用下面链接的插件作为投资组合。您单击一个缩略图,它会展开一个 div 以显示内容,这会将其下方的所有缩略图向下推。这在现代浏览器中运行良好,但我必须支持 IE8。该插件声称支持它,但在 IE8 中,缩略图的底部行没有被向下推。

http://plugins.gravitysign.com/colio/index_black.html

我怀疑它与位置有关:绝对。为了向下推底部缩略图,脚本会根据展开的 div 的高度动态更改每个 li 上的 top:xxx 位置。但是这个位置没有得到适当的改变或在 IE8 中没有得到尊重。

这里是 colio 插件的源代码:http://plugins.gravitysign.com/colio/js/jquery.colio.js

这似乎是 jquery.colio.js 代码中的相关部分(我认为?):

     // variables           
    var duration = this.settings.expandDuration, 
        easing = this.settings.expandEasing;

    // get content_id for item to get viewport height to make a gap in item grid
    var content_id = item.data('colio-content-id');
    var viewport_height = this.getViewportHeight(content_id);

    // add any bottom margins to colio viewport height
    viewport_height += parseFloat(this.markup.css('margin-bottom'));

// push items that are below colio viewport down by the amount of viewport height
        $.each(this.insideBottomItems(item), function(){

            // save initial top position
            var item_top = $(this).data('colio-item-top');
            if(item_top === undefined) {
                item_top = parseFloat($(this).css('top')) || 0;
                $(this).data('colio-item-top', item_top);
            }

            // add class to items that we have pushed down
            $(this).addClass('colio-bottom-item');

            // push items using animation
            $(this).stop().animate({top: item_top + viewport_height}, duration, easing);

        });

有人知道这个问题的解决方法吗?

谢谢!

【问题讨论】:

  • 我们无法看到您正在使用的代码。
  • 对不起,我指的是我上面链接的演示。我将直接链接到源代码并编辑我的帖子。感谢您的提醒。
  • 在 Windows 7 虚拟机中,IE10 运行 IE8 渲染模式,我没有看到任何问题:d.pr/i/tzUy
  • 当您在第一行的任何缩略图中单击“查看项目”时,您是否看到第二行被推下?在我的 Windows 7 IE8 测试中,第二行从不向下推为展开的 div 腾出空间。

标签: jquery css internet-explorer-8 cross-browser


【解决方案1】:

不能很好地测试这一点,但是添加一个模拟位置的空 DIV 怎么样:绝对位置,但具有常规定位? 添加一个 onresize 函数,将“shadowDiv”的大小设置为与“floatingDIV”相同的比例?

...
<div id="shadow">
<div style="position:absolute;" id="float"></div>
</div>
...
document.getElementById('float').onresize = function(){
 var shadow = document.getElementById('shadow');
 shadow.style.width = this.style.width;
 shadow.style.height = this.style.height;
}
...

【讨论】:

  • 这是一个有趣的想法。我应该把
    放在哪里,因为绝对位置 div 是动态创建的,实际上并不在 HTML 中开始?
  • 在这种情况下,不妨试试 floatDiv.outerHTML = '
    '+floatDiv.outerHTML+'
    '。或者只是将 div 的创建重定向到在创建之前必须存在的 shadowDiv。取决于什么最适合您的问题。
【解决方案2】:

问题是包含所有缩略图的ul 被赋予了一个固定的height: 440px,而当“查看项目” div 被创建/扩展时,它被赋予了带有页面偏移量的position: absolute

即使在现代浏览器中,这也不会将元素向下推,所以我想 IE8 会有一些 javascript 失败。您可以通过以下几种方式解决此问题:

  • 添加一些额外的代码来手动调整下方缩略图的位置。
  • 使用 z-index 确保打开的 div 始终覆盖缩略图
  • 打开绝对定位的内容较低或作为某种形式的模式对话框
  • 尝试找出 IE8 和适用的浏览器之间的差异

【讨论】:

  • 谢谢。有没有办法做模态对话框选项仍然会向下推内容?我需要那部分功能,而不是覆盖内容。手动添加代码可能很困难,因为该网站是响应式的,因此行数和每行中的缩略图总是会发生变化。
  • 模态对话框意味着它覆盖了所有内容,就像一个新窗口。所以这不是你想要的。我只是在其中扔了一些手动 javascript 来手动按下较低的 li 元素。这很丑陋,但又是我们正在处理的 IE
  • 当我不知道展开后的 div 的高度是多少时,有没有办法手动执行?它随里面的内容而变化,所以我不确定如何手动定位它们。最终位于扩展内容下方的 li 被赋予“colio-bottom-item”类。所以我可以尝试针对那些。这是当前为底部项目设置新顶部位置的行,但在 IE8 中似乎失败: $(this).stop().animate({top: item_top + viewport_height}, duration, easing);
  • 使用 jquery 可以确定项目内容 div 的 topheight,将两者加在一起加上一些“间距”,然后将该值用作新的 top lis
  • 谢谢。虽然这不是“top: item_top + viewport_height” 已经在做的事情,尽管在 IE8 中没有成功?
【解决方案3】:

感谢到目前为止所有试图提供帮助的人。虽然我无法解决实际问题,但我可以通过简单的编辑来解决它。我只是在扩展内容 div 上将 z-index 设置得更高,以便它与未能按下的缩略图重叠。我想这算是一个“足够好”的解决方案,但我会保持打开状态,以防其他人知道如何强制 IE8 下推那些底行。

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签