Вы можете скрыть .tabs-container
, пока ваш JS не будет инициализирован и выполнен. Например, простой способ сделать это:
.tabs-container:not(.js) {
display: none;
}
Таким образом, он начинается скрытно, затем, когда ваши вкладки построены с использованием JS и он получает класс js
, он становится видимым, поэтому вы не видите мигания инициализации.
$(function() {
$('.tabs-container').addClass('js');
$('.tabs').each(function() {
const $a = $(this).find('a');
$a.on('click', function(e) {
const $this = $(this);
const href = $this.attr('href');
const $target = $(href);
if ($target.length) {
e.preventDefault();
$this.siblings('a').removeClass('active');
$this.addClass('active');
$target.siblings('.tab-content').removeClass('active');
$target.addClass('active');
}
});
});
});
.tabs-container:not(.js) {
display: none;
}
.tabs {
list-style-type: none;
margin: 5px 0 0 0;
padding: 0;
clear: both;
padding-bottom: 10px;
overflow: hidden;
}
.tabs a {
width: 20%;
display: inline-block;
height: 3em;
margin: 2px;
background: #eee;
font-size: 1em;
font-weight: bold;
line-height: 3em;
text-decoration: none;
color: #333;
text-align: center;
}
.tabs a.active {
background: #EC185D;
color: #fff;
}
.tabs-container.js .tab-content {
display: none;
padding: 1em;
font-size: 2em;
background: #eee;
border-radius: 2px;
}
.tabs-container.js .tab-content.active {
display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<div id="container">
<div class="tabs">
<a href="#tab1" class="active">tab1</a>
<a href="#tab2">tab2</a>
<a href="#tab3">tab3</a>
<a href="#tab4">tab4</a>
</div>
<div class="tabs-container">
<article id="tab1" class="tab-content active">
<div class="tab-text">
Content1
</div>
</article>
<article id="tab2" class="tab-content">
<div class="tab-text">
Content 2
</div>
</article>
<article id="tab3" class="tab-content">
<div class="tab-text">
Content 3
</div>
</article>
<article id="tab4" class="tab-content">
<div class="tab-text">
Content4
</div>
</article>
</div>
</div>
Редактировать
У вас всегда будет небольшая задержка, потому что ваши вкладки создаются с помощью JS. Итак, что бы ни случилось, вам нужно загрузить jQuery, визуализировать DOM, дождаться готовности документа, а затем выполнить сборку вкладок. Обойти это невозможно, оно никогда не будет мгновенным. В качестве обходного пути вы можете скрыть весь тег #container
или даже весь документ (<body>
), а затем переключить его на видимый после создания вкладок.
$(function() {
$('.tabs-container').addClass('js');
$('.tabs').each(function() {
const $a = $(this).find('a');
$a.on('click', function(e) {
const $this = $(this);
const href = $this.attr('href');
const $target = $(href);
if ($target.length) {
e.preventDefault();
$this.siblings('a').removeClass('active');
$this.addClass('active');
$target.siblings('.tab-content').removeClass('active');
$target.addClass('active');
}
});
});
$("body").show();
});
body {
display : none;
}
.tabs {
list-style-type: none;
margin: 5px 0 0 0;
padding: 0;
clear: both;
padding-bottom: 10px;
overflow: hidden;
}
.tabs a {
width: 20%;
display: inline-block;
height: 3em;
margin: 2px;
background: #eee;
font-size: 1em;
font-weight: bold;
line-height: 3em;
text-decoration: none;
color: #333;
text-align: center;
}
.tabs a.active {
background: #EC185D;
color: #fff;
}
.tabs-container.js .tab-content {
display: none;
padding: 1em;
font-size: 2em;
background: #eee;
border-radius: 2px;
}
.tabs-container.js .tab-content.active {
display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<div id="container">
<div class="tabs">
<a href="#tab1" class="active">tab1</a>
<a href="#tab2">tab2</a>
<a href="#tab3">tab3</a>
<a href="#tab4">tab4</a>
</div>
<div class="tabs-container">
<article id="tab1" class="tab-content active">
<div class="tab-text">
Content1
</div>
</article>
<article id="tab2" class="tab-content">
<div class="tab-text">
Content 2
</div>
</article>
<article id="tab3" class="tab-content">
<div class="tab-text">
Content 3
</div>
</article>
<article id="tab4" class="tab-content">
<div class="tab-text">
Content4
</div>
</article>
</div>
</div>