我正在使用jQuery UI标签。我应该如何防止加载内容的闪烁,同时确保在禁用javascript时内容可见?
我已经尝试在加载文档时向主体添加.js类,但是当添加的类同时加载选项卡时,仍然会闪烁内容。
#container{display:none;}
<div id="container">
<div id="tabs">
<ul>
<li><a href="#tabs-1">Nunc tincidunt</a></li>
<li><a href="#tabs-2">Proin dolor</a></li>
</ul>
<div id="tabs-1">
<p>Tab 1</p>
</div>
<div id="tabs-2">
<p>Tab 2</p>
</div>
</div>
</div>
<script>
$(document).ready(function(){
$('#tabs').tabs();
$('#container').show();
});
</script>
答案 0 :(得分:5)
<html class="nojs">
...
<head>
<script>
document.documentElement.className = "js";
</script>
</head>
...
<style>
#container {display:none;}
.nojs #container { display: block;}
</style>
即使您的设备上没有js,这也会使您的内容可见。这种方法与H5BP + Modernizr几乎相同,并且除了好处之外,它将阻止JS FOUC(由于js稍后执行而导致无格式内容的闪现)。
答案 1 :(得分:5)
这就是我的工作。在您的html标记上放置一个no-js
类,然后在html标记之后放置以下代码:
<script>
// Sets 'js' on html element and removes 'no-js' if present (here to prevent flashing)
(function(){
document.documentElement.className = document.documentElement.className.replace(/(^|\s)no-js(\s|$)/, '$1$2') + (' js ');
})();
</script>
如果需要,此方法允许您在html
标记上包含其他类。对于未启用js的页面,请使用样式中的no-js
类。
样式示例:
#container {
display:none;
}
.no-js #container
{
display: block;
}
答案 2 :(得分:1)
你可以这样做:
<div id="container">
<div id="tabs">
<script>$('#tabs').addClass('js');</script><!-- added this line -->
<ul>
<li><a href="#tabs-1">Nunc tincidunt</a></li>
<li><a href="#tabs-2">Proin dolor</a></li>
</ul>
<div id="tabs-1">
<p>Tab 1</p>
</div>
<div id="tabs-2">
<p>Tab 2</p>
</div>
</div>
</div>
<script>
$(document).ready(function(){
$('#tabs').tabs().show(); // changed this line
$('#container').show();
});
</script>
答案 3 :(得分:1)
感谢上述想法来解决负载闪烁问题。 当浏览器尝试尽快呈现标记时,对于某些(巨大的)jquery-ui内容元素应该避免使用jquery-ui Tabs。
此解决方案适用于我:
.modal-body {
margin-bottom: 100px;
}
答案 4 :(得分:0)
你可以这样试试:
<script>
$("#container").hide();
$(document).ready(function(){
$('#tabs').tabs();
$('#container').show();
});
</script>
容器在加载时是隐藏的,当文档准备好并且标签完成后,您可以显示容器。