我如何让短码,小工具和模板标签的css加载在头部只有需要?

时间:2015-04-05 作者:Chris Howard

我有一个短代码,小部件和模板标签,需要加载CSS。我正在init中注册,并根据需要排队。

唯一的问题是,它将CSS加载程序添加到页面的底部,而不是头部,因此在短代码/小部件/模板标记的内容未设置样式的情况下,可能会出现严重的延迟。

鉴于这些内容可能会出现在页面流中的任何人身上,甚至可能不会出现,因此无法在页面开始呈现之前进行预测。它只需等待,直到遇到它们,然后将队列挂接到wp\\u head挂钩就为时已晚了。

我想不出怎么可能避免这种情况,所以目前在加载css之前隐藏内容。

然而,如果有人知道一些魔术,那就太好了!

谢谢

1 个回复
SO网友:tao

也不wp_enqueue_style() 也没有wp_register_style() 有一个参数,允许将它们作为其script 对应方会这样做。唯一的解决方案是在style 内部标记head, 添加了wp_head 行动挂钩。我用了一段时间这个技巧,但在某个时候,我厌倦了试图找出我需要的规则head 对于每个特定主题,我开发了一个更通用的解决方案,可以应用于任何网站上的几乎任何主题。

使用相同的动作挂钩,我只应用一个临时样式,直到页面加载完毕,在页面完全加载之前有效地隐藏或至少淡入整个页面,然后使用简单的javascript淡入视图。在这里,应该放进去functions.php 您的孩子主题:

add_action(\'wp_head\', \'fix_fouc_problem\');
function fix_fouc_problem() {
    if (!is_admin()) {
        echo \'
    <style type="text/css">
        body {
            opacity: 0;
            transition: opacity .25s ease-in-out;
            -moz-transition: opacity .25s ease-in-out;
            -webkit-transition: opacity .25s ease-in-out;
        }
    </style>
    <script type="text/javaScript">
    function showTheBody() {
        var body = document.getElementsByTagName("body")[0];
        body.style.opacity = 1;
    }
    if (window.addEventListener) { /* W3C standard */
        window.addEventListener("load", showTheBody, false);
    } else if (window.attachEvent) { /* Microsoft browsers */
        window.attachEvent("onload", showTheBody);
    } else { /* this is for any future browser that might not know any of the
              * methods above, just in case, showing the body:
              */
        showTheBody();
    }
    </script>
    <noscript><style>
/* If javascript is disabled, I\'m changing body opacity back to 1, 
 * via CSS, but over an entire second, to give the page time to load
 * past the fouc point
 */
    body {
        transition: opacity 1s ease-in-out;
        -moz-transition: opacity 1s ease-in-out;
        -webkit-transition: opacity 1s ease-in-out;
        opacity: 1;
        }
    </style></noscript>\';
    }
}
如果您不喜欢页面加载时的背景颜色,请添加加载background-color 属性到html 内部style 标记,如果需要,在页面完全加载时执行的函数中更改它:showTheBody(). 请注意,很可能jQuery当时还没有加载,所以您只能使用javaScript。

此外,如果您认为加载页面所需的时间过长,可以更改body 在加载期间,从0.25 甚至.35 因此,用户可以看到褪色的元素正在加载。随着页面的褪色和CSS不透明度的快速转换,fouc变得难以识别。

使用此方法时,我能想到的唯一缺点是加载时间很长的页面,因为这些页面在完全加载之前会褪色或不可见。但是,这不适用于使用ajax加载内容的页面(想想无限滚动等),因为这些页面是独立的异步调用,加载/onload事件通常在这些页面上触发得非常快。

结束

相关推荐

如何使子主题的css在保存时更新?

当前系统WordPress 4.1.1主题:的子主题Lovecraft</我的主题,Lovecraft的一个子主题,正在用URI调用样式表[…]/blog/wp-content/themes/lovecraft-child/style.css?ver=4.1.1. 请注意?ver=4.1.1. 当我编辑时style.css 并将新版本上载到我的服务器,仍有一个调用style.css?ver=4.1.1 在<head>, 并且我的更新未应用。如果我导航到style.css 在我的浏览器中,