显示屏上的过渡:属性
我目前正在设计一种CSS'mega dropdown'菜单 - 基本上是一个普通的CSS下拉式菜单,但是它包含不同类型的内容。
  目前, 看起来CSS3转换不适用于'display'属性 ,也就是说你不能做任何从display: none到display: block (或任何组合)的转换。 
任何人都可以为上面的例子中的第二层菜单设想一种方式,当有人悬停在顶层菜单项之一上时“淡入”?
  我知道你可以在visibility:属性上使用转换,但我想不出有效利用它的方法。 
我也尝试过使用高度,但是失败了。
我也意识到使用JavaScript来实现这一点很简单,但我想挑战自己只使用CSS,而且我认为我的想法有点短了。
所有和任何建议最受欢迎。
您可以连接两个或更多的转换,而visibility是这次派上用场的。 
div {
  border: 1px solid #eee;
}
div > ul {
  visibility: hidden;
  opacity: 0;
  transition: visibility 0s, opacity 0.5s linear;
}
div:hover > ul {
  visibility: visible;
  opacity: 1;
}<div>
  <ul>
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
  </ul>
</div>您需要通过其他方式隐藏该元素才能使其发挥作用。
  我通过绝对定位两个<div>并将隐藏的一个设置为opacity: 0来实现效果opacity: 0 。 
  如果您甚至将display属性从none切换为block ,则不会发生其他元素的转换。 
  要解决此问题,请始终允许该元素display: block ,但通过调整以下任何方式来隐藏该元素: 
height设置为0 。 opacity设置为0 。 overflow: hidden元素的框架之外overflow: hidden 。   有可能有更多的解决方案,但如果您将元素切换到display: none无法执行转换。  例如,你可以尝试尝试这样的事情: 
div {
    display: none;
    transition: opacity 1s ease-out;
    opacity: 0; 
}
div.active {
    opacity: 1;
    display: block;
}
但是,这是行不通的。 根据我的经验,我发现这无所作为。
  正因为如此,你总是需要保持元素display: block - 但你可以通过做这样的事情来解决它: 
div {
    transition: opacity 1s ease-out;
    opacity: 0; 
    height: 0;
    overflow: hidden;
}
div.active {
    opacity: 1;
    height: auto;
}
  在本文发布时,如果您尝试更改display属性,所有主流浏览器都会禁用CSS转换,但CSS动画仍然可以正常工作,因此我们可以将它们用作解决方法。 
示例代码: - (您可以将其应用于您的菜单)演示
将以下CSS添加到您的样式表中: -
@-webkit-keyframes fadeIn {
    from { opacity: 0; }
      to { opacity: 1; }
}  
@keyframes fadeIn {
    from { opacity: 0; }
      to { opacity: 1; }
}
  然后将fadeIn动画应用于父悬停上的子项: - (当然,设置display: block ) 
.parent:hover .child {
    display: block;
    -webkit-animation: fadeIn 1s;
    animation: fadeIn 1s;
}
上一篇: Transitions on the display: property
下一篇: How can I make the cursor a hand when a user hovers over a list item?
