javascript - 在 Internet Explorer 中,当父元素的兄弟元素被隐藏时,子元素不会在页面上移动

标签 javascript jquery css

我正在创建一个支持 jQuery 的网页,其中包含指向外部站点的图像链接,用作浏览器主页。每组相关链接(开发、社交等)都包含在一个文件夹中,可以通过单击其标题展开或折叠该文件夹。这在 Firefox、Chrome 和 Safari 中运行良好。

Screenshot of working web page

在 Internet Explorer 中(惊喜!)我遇到了这种奇怪的行为。假设有三个垂直堆叠的文件夹。如果我折叠第一个文件夹,第二个和第三个文件夹及其内容将向上移动以填充空间,第二个文件夹的内容除外,它们在页面上保持相同的绝对位置。

我创建了该页面的精简版,其中包含显示问题所需的最低限度。在这里,我有名为“红色”、“绿色”和“蓝色”的文件夹,每个文件夹包含一个图像。

Screenshot of example page

如果我单击红色标题,蓝色图像及其文件夹将向上移动,但绿色图像仍保持在同一位置,现在位于蓝色图像的后面。

Screenshot of example page after clicking the read folder header

但是,如果我将文件夹标题和正文元素上的边框样式设置为“无”而不是“实心”,绿色图像将按预期随其他元素移动。

网页文件夹.html:

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <script type='text/javascript' src='jquery-1.7.2.min.js'></script>
    <script type='text/javascript' src='folder.js'></script>
    <link rel='stylesheet' type='text/css' href='style.css'></link>
    <title>Folder Example</title>
  </head>
</html>

样式表style.css:

div.folder-header
{
  background-color:#f0f0f0;
  border-color:#e0e0e0;
  border-width:1px;
  cursor:pointer;
}

div.folder-body
{
  background-color:#f8f8f8;
  border-color:#e0e0e0;
  border-width:1px;
}

div.link-viewport
{
  position:relative;
}

img.link-image
{
  position:absolute;
  display:block;
  border:none;
}

JavaScript 文件 layout.js:

$(document).ready(function()
{
    var border = true;

    var folder = function(title, src)
    {
        var section = $('<div>').appendTo('body');
        var header = $('<div>').addClass('folder-header').text(title).appendTo(section);
        var folder = $('<div>').addClass('folder-body').appendTo(section);
        var viewport = $('<div>').addClass('link-viewport').css('width', 64).css('height', 64).appendTo(folder);
        var image = $('<img>').addClass('link-image').attr('src', src).appendTo(viewport);

        header.css('border-style', border ? 'solid' : 'none');
        folder.css('border-style', border ? 'solid' : 'none');

        header.click(function()
        {
            folder.toggle();
        });
    };

    folder("Red", "red.png");
    folder("Green", "green.png");
    folder("Blue", "blue.png");
});

图像文件 red.png、green.png 和 blue.png:

Image file 1

Image file 2

Image file 3

非常感谢收到任何建议!

最佳答案

Accordion 似乎在 IE8+ 中工作,但我能够在使用 IE7 模式的 IE9 中看到问题(按 F12 打开 IE 开发工具 -> 浏览器模式 =“IE7”,文档模式 =“IE7 标准”)。我通过进行以下更改使其正常工作:

CSS:将 overflow: hidden; 添加到 div.folder-body 的规则集。

JS:删除第 18 行的 folder.toggle(); 并插入

if (folder.height()) { 
    folder.hide(); 
    folder.height(0); }
else { 
    folder.show(); 
    folder.height(64); 
}

虽然我不明白为什么!

这是 fiddle :http://jsfiddle.net/EhPk8/25/

关于javascript - 在 Internet Explorer 中,当父元素的兄弟元素被隐藏时,子元素不会在页面上移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12379133/

相关文章:

css - 如何使用 vh 制作页眉背景图片?

javascript - 分配 javascript 函数的返回值显示为 [object Object 而不是 HTML?

javascript - 从 Href 调用 JS 函数

javascript - 动态添加的控件属性显示为控件 =""而不是控件

javascript - $compile 显示未捕获的 TypeError : undefined is not a function

javascript - AJAX 成功返回旧结果

jquery - 在Jquery中检索标签内容

javascript - 排序列表但保留 CSS 标记

css - 悬停在一个元素上会影响所有元素

html - 无法在单个页面应用程序( Angular )中显示多个组件