插入样式后jQuery强制重绘

时间:2014-03-03 14:08:29

标签: jquery css

我通过AJAX使用jQuery嵌入样式表来替换当前的font-family并使用其他字体类型进行一些测试。 那是我的代码:

<script type="text/javascript">
$(function(){
    var page = $('#page').html();
    $.ajax({
        url: '/css/style.css',
        success: function(data){
            data = data.replace(/Arial/g, 'Verdana');

            $('#styles').html(data);

        },
        async: false
    })
});
</script>
<style type="text/css" id="styles"></style>

问题是,font-family未正确应用。但是一旦我打开开发工具,样式就会得到应用。我想需要对页面进行完整的重新绘制。如何在不重新加载页面的情况下实现这一目标?

由于这仅用于测试,因此我不关心FOUC或性能问题。

修改

我忽略了代码中的typekit导入:

<script type="text/javascript" src="//use.typekit.net/****.js"></script>
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>

这似乎是一个问题。我认为在发出AJAX请求时,字体(我在typekit中包括“Europa”)还没有准备好。有任何建议如何解决?

2 个答案:

答案 0 :(得分:1)

加载脚本后,您应该尝试调用ajax。更容易解决的问题是:

$(window).on('load', function(){
    var page = $('#page').html();
    $.ajax({
        url: '/css/style.css',
        success: function(data){
            data = data.replace(/Arial/g, 'Verdana');

            $('#styles').html(data);

        },
        async: false
    })
});

顺便说一句,我看不出你为什么要设置async false的原因,你应该删除它。

答案 1 :(得分:0)

stackoverflow上有一个非常相似的问题。 CSS: Auto update font size

也许这适合你?它反映了有关强制调整大小事件的注释中的内容。

这是链接的小提琴: http://jsfiddle.net/danield770/rWYjk/

 causeRepaintsOn = $("h1, h2, h3, p");

 $(window).resize(function() {
    causeRepaintsOn.css("z-index", 1);
 });