奇怪的IE8 html5shiv行为

时间:2013-09-25 19:10:27

标签: jquery css html5 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调用注入内容。当网站首次加载并将着陆页内容注入空的<div>内容持有者时,会有轻微的尴尬闪烁。这并不是什么大不了的事,但我希望眼睛看起来更容易,所以我在display:none;样式定义中添加了main,并在内容加载后添加了show()fadeIn()防止闪烁。工作......除了IE8。它好像<main>丢失了由shiv定义的display,默认为inline

我尝试过的事情

我已将<main>标记替换为<div id="main">,这样可以正常使用。但我正在尝试使用HTML5,并希望使用<main>标记。

我知道这是次要的,当我不理解为什么时,我感到很沮丧。

1 个答案:

答案 0 :(得分:1)

不能完全归功于此......我与之合作的其他开发人员是jQuery yoda ....

jQuery默认情况下会添加“display:inline;”的CSS样式标记元素。因为IE中没有将'main'定义为已知元素(例如div),所以它默认为'inline'。一些解决方案可能是:

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

或淡出:

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