Интерфейс JQuery UI выглядит уродливым до document.ready
Элементы HTML отображаются ранее, тогда запускается onload или document.ready.
Все виджеты jQuery UI загружаются на document.ready, и это делает страницу выглядящей уродливой в течение нескольких секунд.
Возможная опция справиться с этим - скрыть элементы до того, как они будут сжаты с помощью jQuery UI и показать их с JS после загрузки. Но в случае отключения JS пользователь не увидит никаких элементов ни стандартного HTML, ни jQuery UI.
Какова наилучшая практика для работы с ним?
Ответы
Ответ 1
Если вы посмотрите на документацию пользовательского интерфейса jQuery, возьмите вкладки, например,, если вы посмотрите на Theming вы можете увидеть классы, которые следует применять, чтобы избежать вспышки неровного содержимого:
<div class="ui-tabs ui-widget ui-widget-content ui-corner-all" id="tabs">
<ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all">
<li class="ui-state-default ui-corner-top ui-tabs-selected ui-state-active"><a href="#tabs-1">Nunc tincidunt</a></li>
<li class="ui-state-default ui-corner-top"><a href="#tabs-2">Proin dolor</a></li>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom" id="tabs-1">
<p>Tab one content goes here.</p>
</div>
...
</div>
Примечание. Это не лучшая практика, но если вы хотите не показывать содержимое, это вариант, здесь другой:
Вы можете скрыть элементы с помощью CSS, дать этим wrapping <div>
element класс, пусть .startsUgly
, который в вашей таблице стилей имеет:
.startsUgly { display: none; }
.... и показать их в JavaScript, например. $(".startsUgly").show();
Затем для обработки этих пользователей с отключенным JavaScript несколько <noscript>
magic:
<noscript>
<style type="text/css">.startsUgly { display: block; }</style>
</noscript>
Таким образом, те, у кого отключен JavaScript, не получают эффект display: none
, они все равно будут видеть содержимое.
Ответ 2
Прежде всего, классы пользовательского интерфейса jQuery в документации применяются только после document.ready. Вы можете стилизовать их все, что вам нравится, но вы не избавитесь от вспышки несвязанного контента. Классы полезны для использования пользовательского интерфейса, а не для того, чтобы повлиять на то, как выглядят вещи до того, как пользовательский интерфейс будет на месте.
Во-вторых, тег noscript в основном следует избегать по целому ряду причин:
1) Это действительно не говорит вам, включен ли javascript. Например, он может быть включен в браузере, но заблокирован брандмауэром.
2) Это тег уровня блока, поэтому есть только определенные места, где он может быть действительным. Это не универсальное решение.
3) Тег не различает степени реализации javascript в разных системах.
Вы были ближе к лучшей практике в своем оригинальном посте. Трюк состоит в том, чтобы делать как скрытие, так и показ в javascript. Во-первых, создайте свою страницу так, чтобы она выглядела приемлемой при отключенном javascript. Затем, чтобы предотвратить появление неровного содержимого, сделайте скрытие уродливых элементов в javascript до document.ready(это критическая часть), назначив класс элементу html:
jQuery('html').addClass('blahblah');
Поскольку элемент html уже существует, он действителен для работы с ним до document.ready.
Затем, как и Ник говорит, помещаем оскорбительные элементы в div с классом "startugly", а затем помещаем строку в ваш css, который скрывает оскорбительные элементы:
.blahblah .startsugly {display: none;}
Дело здесь в том, что дисплей: никто не входит в игру, когда включен javascript. Пользователи с отключенным будут по-прежнему иметь доступ к вашему контенту. Затем, после document.ready, добавьте в свои функции jQuery UI "сутенерство" и снова покажите элемент нарушения:
$(".startsUgly").show();
хотя, если он содержит только условно видимые в гармонике или структуре табуляции, этот последний шаг может даже оказаться ненужным.
Ответ 3
$('[class*=" ui-"]').remove();
Ответ 4
Создание второго предложения Ника Кравера - я не собираюсь украсть его ответ, просто добавив еще один вариант - вы можете использовать красоту Modernizr. Modernizr добавит простой класс js
к элементу html, если JavaScript включен. Так что вы можете добавить простой стиль в свою основную таблицу стилей, как показано ниже, которая будет скрывать тело только в том случае, если JavaScript включен (так как мы должны использовать JavaScript позже, чтобы показать тело):
main.js body
{
display: block;
}
И тогда на вашей "главной странице" должна быть простая строка JavaScript, как показано ниже:
<script type="text/javascript">
$(function()
{
$("body").css("display", "block");
}
</script>
Это хорошее решение, если вы уже используете Modernizr для других вещей. В противном случае, если у вас нет другого использования для Modernizr, я бы пошел с предложением Ника Кравера.