#javascript #html #css
#javascript #HTML #css
Вопрос:
У меня проблема. У меня есть эта страница с вкладками, но содержимое, которое не отображается, по-прежнему использует пробел, поэтому все разделы находятся друг под другом. Я хочу, чтобы использование пространства исчезло, но все равно хочу анимацию, которую я создал. Вот фрагмент:
let tabHeader = document.getElementsByClassName("tabbedpage-header")[0];
let tabIndicator = document.getElementsByClassName("tabbedpage-indicator")[0];
let tabContent = document.getElementsByClassName("tabbedpage-content")[0];
let tabsPane = tabHeader.getElementsByTagName("div");
for(let i=0;i<tabsPane.length;i ){
tabsPane[i].addEventListener("click",function(){
tabHeader.getElementsByClassName("active")[0].classList.remove("active");
tabsPane[i].classList.add("active");
tabContent.getElementsByClassName("active")[0].classList.remove("active");
tabContent.getElementsByTagName("div")[i].classList.add("active");
tabIndicator.style.left = `calc(calc(100% / 2) * ${i})`;
});
}
.tabbedpage {
padding: 20px 0px;
}
.tabbedpage .tabbedpage-header {
height:60px;
display:flex;
align-items:center;
}
.tabbedpage .tabbedpage-header > div {
width:calc(100% / 2);
text-align:center;
color:#888;
font-weight:600;
cursor:pointer;
font-size:20px;
text-transform:uppercase;
outline:none;
}
.tabbedpage .tabbedpage-header > div > i {
display:block;
margin-bottom:5px;
}
.tabbedpage .tabbedpage-header > div.active {
color:#d81e05;
display: block;
}
.tabbedpage .tabbedpage-indicator {
position:relative;
width:calc(100% / 2);
height:5px;
background:#d81e05;
left:0px;
border-radius:5px;
transition:all 500ms ease-in-out;
}
.tabbedpage .tabbedpage-content {
position:relative;
height:calc(100% - 60px);
padding:10px 5px;
}
.tabbedpage .tabbedpage-content > div {
top:-200%;
opacity:0;
transform:scale(0.9);
transition:opacity 500ms ease-in-out 0ms,
transform 500ms ease-in-out 0ms;
}
.tabbedpage .tabbedpage-content > div.active {
top:0px;
opacity:1;
transform:scale(1);
}
<div class="tabbedpage">
<div class="tabbedpage-header">
<div class="active">
Statistics
</div>
<div>
User management
</div>
</div>
<div class="tabbedpage-indicator"></div>
<div class="tabbedpage-content">
<div class="active">
<h2>This is statistics section</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Error neque saepe commodi blanditiis fugiat nisi aliquam ratione porro quibusdam in, eveniet accusantium cumque. Dolore officia reprehenderit perferendis quod libero omnis.</p>
</div>
<div>
<h2>This is sser management section</h2>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Modi minus exercitationem vero, id autem fugit assumenda a molestiae numquam at, quisquam cumque. Labore eligendi perspiciatis quia incidunt quaerat ut ducimus?</p>
</div>
</div>
</div>
Как я могу удалить пространство, которое использует скрытый div, но при этом анимация по-прежнему исчезает?
Ответ №1:
Вы используете opacity
, чтобы скрыть div
, что означает div
, что не будет скрыто, но это будет invisible
. Таким образом, пространство div
будет там.
Использование display приведет к удалению анимации.
Давайте поиграем с позицией, перекрываем оба div
использования position: absolute
и контролируем видимость с помощью opacity
.
Смотрите код ниже.
let tabHeader = document.getElementsByClassName("tabbedpage-header")[0];
let tabIndicator = document.getElementsByClassName("tabbedpage-indicator")[0];
let tabContent = document.getElementsByClassName("tabbedpage-content")[0];
let tabsPane = tabHeader.getElementsByTagName("div");
for(let i=0;i<tabsPane.length;i ){
tabsPane[i].addEventListener("click",function(){
tabHeader.getElementsByClassName("active")[0].classList.remove("active");
tabsPane[i].classList.add("active");
tabContent.getElementsByClassName("active")[0].classList.remove("active");
tabContent.getElementsByTagName("div")[i].classList.add("active");
tabIndicator.style.left = `calc(calc(100% / 2) * ${i})`;
});
}
.tabbedpage {
padding: 20px 0px;
}
.tabbedpage .tabbedpage-header {
height:60px;
display:flex;
align-items:center;
}
.tabbedpage .tabbedpage-header > div {
width:calc(100% / 2);
text-align:center;
color:#888;
font-weight:600;
cursor:pointer;
font-size:20px;
text-transform:uppercase;
outline:none;
}
.tabbedpage .tabbedpage-header > div > i {
display:block;
margin-bottom:5px;
}
.tabbedpage .tabbedpage-header > div.active {
color:#d81e05;
display: block;
}
.tabbedpage .tabbedpage-indicator {
position:relative;
width:calc(100% / 2);
height:5px;
background:#d81e05;
left:0px;
border-radius:5px;
transition:all 500ms ease-in-out;
}
.tabbedpage .tabbedpage-content {
position:relative;
height:calc(100% - 60px);
padding:10px 5px;
}
.tabbedpage .tabbedpage-content > div {
position: absolute;
width: 100%;
top:0;
left: 0;
opacity:0;
transform:scale(0.9);
transition:opacity 500ms ease-in-out 0ms,
transform 500ms ease-in-out 0ms;
}
.tabbedpage .tabbedpage-content > div.active {
opacity:1;
transform:scale(1);
}
<div class="tabbedpage">
<div class="tabbedpage-header">
<div class="active">
Statistics
</div>
<div>
User management
</div>
</div>
<div class="tabbedpage-indicator"></div>
<div class="tabbedpage-content">
<div class="active">
<h2>This is statistics section</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Error neque saepe commodi blanditiis fugiat nisi aliquam ratione porro quibusdam in, eveniet accusantium cumque. Dolore officia reprehenderit perferendis quod libero omnis.</p>
</div>
<div>
<h2>This is sser management section</h2>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Modi minus exercitationem vero, id autem fugit assumenda a molestiae numquam at, quisquam cumque. Labore eligendi perspiciatis quia incidunt quaerat ut ducimus?</p>
</div>
</div>
</div>
Комментарии:
1. Да, но теперь анимация исчезла. Я все еще хочу использовать анимацию
2. @A.Vreeswijk Я обновил свой ответ. Пожалуйста, проверьте.
3. Теперь у меня другая проблема xD, потому что это абсолютный макет, содержимое страницы с вкладками проходит через нижний колонтитул моей страницы?
4. Я не могу справиться с макетом без вашего полного кода. Тем не менее, вы можете контролировать переполнение.