Как узнать, когда все CSS отображаются в браузере (чтобы избежать FOUC)

Я работаю над сайтом на основе WP и модифицирую дочернюю тему. Существуют слои конкурирующих таблиц стилей, что приводит к значительному шатанию и подергиванию контента при загрузке страницы. У меня есть только контроль над внешним интерфейсом - есть PHP-разработчики, которые много работают над внутренним сервером - и поэтому имеют ограниченный контроль, если таковые имеются, того, где CSS-файлы размещаются в иерархии загрузки.

Я хотел бы избежать этого и думал просто CSS-скрыть нарушающие элементы, пока CSS не будет отрисован, а затем, в Javascript, изящно показать их.

Как узнать, когда браузер полностью "рендерит" CSS? Я полагаю, что $(документ) в jQuery, вероятно, уже не так - как раз тогда, когда загружается DOM, верно? У меня есть доступ к Modernizr в коде, и я мог бы что-то с этим сделать - но я не хочу загружать скрипты CSS или даже знать, когда они были загружены, но когда браузер завершил обработку всех их и выработка всех противоречивых правил.

Спасибо за любую помощь -

1 ответ

В подобных ситуациях я обычно устанавливаю интервал javascript, который просматривает конкретный элемент, чтобы увидеть, соответствует ли один из них правилам css тому, что будет установлено в таблице стилей. Например, допустим, у меня есть таблица стилей с глупым правилом, например:

p { margin-left: 900px; }

Затем я использую jQuery для проверки левого поля:

jQuery(document).ready(function(){
    var stylesheetInterval = setInterval(function(){
        if ( jQuery("p").css("margin-left") == "900px" ) {
            clearInterval( stylesheetInterval );
            // my stylesheet must have loaded. Now I can do whatever else I feel like doing.
        }
    }, 100);
});
Другие вопросы по тегам