Проблема с использованием стиля css для первоначального скрытия некоторых элементов страницы, а затем с помощью javascript для изменения стиля обратно на видимый после загрузки страницы, состоит в том, что люди, у которых не включен javascript, никогда не увидят эти элементы. Так что это решение, которое не изящно ухудшается.
Поэтому лучше использовать javascript для первоначального скрытия, а также для повторного отображения этих элементов после загрузки страницы. Используя jQuery, у нас может возникнуть соблазн сделать что-то вроде этого:
$(document).ready(function() {
$('body').hide();
$(window).on('load', function() {
$('body').show();
});
});
Однако, если ваша страница очень большая с большим количеством элементов, этот код не будет применен достаточно скоро (тело документа не будет готово достаточно скоро), и вы все равно можете увидеть FOUC. Однако есть один элемент, который мы МОЖЕМ скрыть, как только скрипт встретится в заголовке, даже до того, как документ будет готов, - тег HTML. Таким образом, мы могли бы сделать что-то вроде этого:
<html>
<head>
<!-- Other stuff like title and meta tags go here -->
<style type="text/css">
.hidden {display:none;}
</style>
<script type="text/javascript" src="/scripts/jquery.js"></script>
<script type="text/javascript">
$('html').addClass('hidden');
$(document).ready(function() { // EDIT: From Adam Zerner's comment below: Rather use load: $(window).on('load', function () {...});
$('html').show(); // EDIT: Can also use $('html').removeClass('hidden');
});
</script>
</head>
<body>
<!-- Body Content -->
</body>
</html>
Обратите внимание, что метод jQuery addClass () вызывается * вне * метода .ready () (или лучше .on ('load')).