Максимальная высота решения от Джейка работает хорошо, если жестко
значение максимальной высоты не намного больше реальной высоты
(потому что в противном случае возникают нежелательные задержки и проблемы со временем).
С другой стороны, если жестко закодированное значение случайно
не больше реальной высоты, элемент не открывается полностью.
Следующее решение только для CSS также требует жесткого размера, который
должно быть больше, чем большинство реальных размеров. Однако это
Решение также работает, если реальный размер в некоторых ситуациях превышает
жестко закодированный размер. В этом случае переход может немного подскочить,
но он никогда не оставит частично видимый элемент.
Таким образом, это решение также может быть использовано для неизвестного контента, например, от
база данных, где вы просто знаете, что контент обычно не больше
чем х пикселей, но есть исключения.
Идея состоит в том, чтобы использовать отрицательное значение для поля на полях (или поле на полях для
слегка отличная анимация) и поместить элемент содержимого в
средний элемент с переполнением: скрытый. Отрицательное поле контента
элемент так уменьшает высоту среднего элемента.
В следующем коде используется переход на полях с -150px на
0px. Это само по себе работает нормально, пока элемент содержимого не
выше 150px. Кроме того, он использует переход на максимальную высоту для
средний элемент от 0px до 100%. Это, наконец, скрывает средний элемент
если элемент содержимого выше 150px.
Для максимальной высоты переход используется только для отсрочки его применения.
на секунду при закрытии, не для плавного визуального эффекта (
и поэтому он может работать от 0px до 100%).
CSS:
.content {
transition: margin-bottom 1s ease-in;
margin-bottom: -150px;
}
.outer:hover .middle .content {
transition: margin-bottom 1s ease-out;
margin-bottom: 0px
}
.middle {
overflow: hidden;
transition: max-height .1s ease 1s;
max-height: 0px
}
.outer:hover .middle {
transition: max-height .1s ease 0s;
max-height: 100%
}
HTML:
<div class="outer">
<div class="middle">
<div class="content">
Sample Text
<br> Sample Text
<br> Sample Text
<div style="height:150px">Sample Test of height 150px</div>
Sample Text
</div>
</div>
Hover Here
</div>
Значение для нижнего поля должно быть отрицательным и как можно ближе
возможно до реальной высоты элемента содержимого. Если оно (абсолютное
значение) больше, есть такие же проблемы с задержкой и временем
решения максимальной высоты, которые, однако, могут быть ограничены до тех пор, пока
жестко закодированный размер не намного больше реального. Если абсолют
значение для поля-дна меньше, чем реальная высота
переход немного подпрыгивает. В любом случае после перехода
элемент содержимого либо полностью отображается, либо полностью удален.
Подробнее см. В моем блоге http://www.taccgl.org/blog/css_transition_display.html#combined_height