jquery - 奇怪的 IE8 html5shiv 行为

标签 jquery css html internet-explorer-8

考虑以下...

<!DOCTYPE>
<html>
<head>
    <title></title>
    <!--[if lt IE 9]>
        <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->
    <style>
        main{
            width:500px;
            height:500px;
            margin:0 auto;
            border:5px solid red;
            display:none;  
        }
    </style> 
</head>
<body>
    <main>
        <h1>Test</h1>
    </main>
</body>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script>
    $(document).ready(function () {
        //load some external content then on callback...
        $('main').show();
    });
</script>
</html>

在除 IE8 之外的所有浏览器中都能正常工作(令人震惊)。如果删除 display:none;那么一切都很好,所以我假设这是问题所在。但是为什么?

我想要完成的事情

<main>是我的包装器,其中包含 <nav> , <footer>和一个 <div>通过 ajax 调用注入(inject)内容。当网站首次加载并将着陆页内容注入(inject)空的 <div> 时,会出现轻微的闪烁。内容持有人。没什么大不了的,但我想让眼睛更舒服,所以我加了一个 display:none;main样式定义并添加了一个 show()fadeIn()一旦内容被加载以防止闪烁。工作...除了在 IE8 中。就好像<main>失去它的 display由 shiv 定义,默认为 inline .

我尝试过的事情

我已经替换了 <main><div id="main"> 标记这很好用。但我正在尝试接受 HTML5 并想使用 <main>标签。

我知道这是次要的,当我不明白原因时,我会感到沮丧。

最佳答案

这不能完全归功于...与我一起工作的另一个开发人员是 jQuery yoda...

默认情况下,jQuery 似乎添加了“display:inline;”的 css 样式标记元素。因为'main'在IE中没有被定义为已知元素(比如div),它默认为'inline'。一些解决方案可能是:

$('main').css('display','block');

或淡入淡出:

var $main = $('main');
$main.css('display','block').hide().show(600); //--not yet tested

关于jquery - 奇怪的 IE8 html5shiv 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19013256/

相关文章:

jquery - 如何使用 Bootstrap 选择?

javascript - 将 Accordion 旋转 90 度

javascript - 如何使用 jquery 更改 html 中的背景颜色

html - 内容部分位于标题之上

javascript - 如何使用 on() 切换元素?

javascript - 如何使用 javascript 扩展多级 div 并在 url 中保存扩展条件以用于链接共享或手动复制/过去

html - Bootstrap Div,文本和图像(对齐)居中

javascript - 试图实现某种具有动态高度的可滚动容器

php - 在段落中显示 mysql 内容时出现问题

javascript - 图像调整大小会在 WebKit 浏览器中产生轻微、短暂的像素化