Используйте CSS transitions
, (как вы сделали) и JS .scrollHeight
.
Более подробное объяснение:
- Установите размеры при загрузке страницы, потому что переходы могут 'оживить что-то от
auto
до ##px
. - Установите размеры
scrollHeight
, используя элемент, которым вы собираетесь его заменить.(Примечание: для точных размеров элемент должен иметь переполнение: скрытый` для учета полей и нет заполнения.)
Наконец, чтобы скрыть элементы, вы можете поместить их внутрьоберните и спрячьте его с родителем.
var fgDiv = document.querySelector('#fgDiv');
var fgContent = document.querySelector('#fgContent');
var rtButton = document.querySelector('#rightButton');
updateDimesions(fgContent, fgContent); // First update of the dimensions
function rightClick() {
if (rtButton.textContent === "What's a Grimmage?") {
nextButton = "How's it work?";
nextDiv = document.querySelector('#whatIsIt');
}
// I removed a handful of similar if statements.
fgContent.innerHTML = nextDiv.innerHTML;
rtButton.textContent = nextButton;
updateDimesions(fgContent, nextDiv); // Second update of the dimensions
};
function updateDimesions(el, replace) {
el.style.width = replace.scrollWidth + 'px';
el.style.height = replace.scrollHeight + 'px';
}
.foreground {
width: 33%;
background: whitesmoke;
}
.foreground-inner {
overflow: hidden;
/* Hide the content initially */
-moz-transition: all 1s ease;
-webkit-transition: all 1s ease;
-o-transition: all 1s ease;
transition: all 1s ease;
}
.hidden {
height: 0;
overflow: hidden;
}
.hidden > div {
overflow: hidden;
/* This accounts for margin in ".scrollHeight" */
padding: 0;
/* Padding messes with .scrollHeight */
}
<div class="foreground" id="fgDiv">
<div id="fgContent" class="foreground-inner">
<h1 id="foregroundTitle" class="headline">Make a Grimmage!</h1>
<p class="text">Balh.</p>
<p class="text">More blah.</p>
<p class="text">So much blah.</p>
<p class="text">More blah.</p>
<p class="text">So much blah.</p>
<p class="text">More blah.</p>
<p class="text">So much blah.</p>
</div>
<p>
<div class="btn-group" style="position: relative; margin: auto;"><a href="#" class="btn btn-primary">Login / Sign up</a><button id="rightButton" onclick="rightClick()" class="btn btn-info">What's a Grimmage?</button></div>
</p>
<div class="hidden">
<div id="whatIsIt">
<h1 class="headline">What is a Grimmage?</h1>
<p class="text">More blah.</p>
<p class="text">So much blah.</p>
</div>
</div>
</div>
</div>