Css переход от отображения нет к отображению блока, навигация с subnav
Вот что я ссылка jsFiddle
nav.main ul ul {
position: absolute;
list-style: none;
display: none;
opacity: 0;
visibility: hidden;
padding: 10px;
background-color: rgba(92, 91, 87, 0.9);
-webkit-transition: opacity 600ms, visibility 600ms;
transition: opacity 600ms, visibility 600ms;
}
nav.main ul li:hover ul {
display: block;
visibility: visible;
opacity: 1;
}
<nav class="main">
<ul>
<li>
<a href="">Lorem</a>
<ul>
<li><a href="">Ipsum</a></li>
<li><a href="">Dolor</a></li>
<li><a href="">Sit</a></li>
<li><a href="">Amet</a></li>
</ul>
</li>
</ul>
</nav>
Ответы
Ответ 1
Как вы знаете, свойство display
не может быть анимировано, но просто имея его в своем CSS, оно переопределяет переходы visibility
и opacity
.
Решение... просто удалили свойства display
.
nav.main ul ul {
position: absolute;
list-style: none;
opacity: 0;
visibility: hidden;
padding: 10px;
background-color: rgba(92, 91, 87, 0.9);
-webkit-transition: opacity 600ms, visibility 600ms;
transition: opacity 600ms, visibility 600ms;
}
nav.main ul li:hover ul {
visibility: visible;
opacity: 1;
}
<nav class="main">
<ul>
<li>
<a href="">Lorem</a>
<ul>
<li><a href="">Ipsum</a>
</li>
<li><a href="">Dolor</a>
</li>
<li><a href="">Sit</a>
</li>
<li><a href="">Amet</a>
</li>
</ul>
</li>
</ul>
</nav>
Ответ 2
Обычно, когда люди пытаются оживить display: none
, они действительно хотят:
- Уменьшить содержание и
- Если элемент не занял место в документе, когда он скрыт
В наиболее популярных ответах используется visibility
, который может достичь только первой цели, но, к счастью, так же легко достичь как с помощью position
.
Так как position: absolute
удаляет элемент из ввода интервала между потоками документа, вы можете переключаться между position: absolute
и position: static
(глобальное значение по умолчанию) в сочетании с opacity
. См. Приведенный ниже пример.
.content-page {
position:absolute;
opacity: 0;
}
.content-page.active {
position: static;
opacity: 1;
transition: opacity 1s linear;
}
Ответ 3
Вы можете сделать это с помощью анимационного ключевого кадра, а не перехода. Измените объявление hover и добавьте ключевой кадр анимации, вам также может потребоваться добавить префиксы браузера для -moz- и -webkit-. Подробнее см. https://developer.mozilla.org/en/docs/Web/CSS/@keyframes.
nav.main ul li:hover ul {
display: block;
visibility: visible;
opacity: 1;
animation: fade 1s;
}
@keyframes fade {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
Вот обновление на вашей скрипке. https://jsfiddle.net/orax9d9u/1/