transition不支持display属性

想让display从none变为block,或者从block变为none时,实现这样的动画效果大多数人都会采用transition。然而可惜的是transition并不支持display。那么能想到的办法就是使用visibility属性实现从 visible到hidden的转换。

但是visibility属性与display的区别
display隐藏的元素是脱离文档流的,它不在页面中占用空间。而visibility: hidden的元素会在页面上留白。所以还是display的用法好一点,那么怎样来填这个坑,可以通过设置max-height(max-width等等),使这些属性 进行过渡(transition).
例如:

 .table_list{  
            width:100%;   
            top:10px;  
            max-height: 0px;
            margin-bottom: 10px;
            position:relative;     
            opacity: 0;
            font-size: 12px; 
            -webkit-transition: max-height 2s linear;      

            }  

.cenima_name:hover .table_list
    {   
            opacity: 1; 
            max-height: 300px;
    }

上面这段代码实现的功能就是,鼠标悬浮在一个div上,显示另一个div。
但是这样做的前提是另一个div必须是包含它的div的子元素。

然而问题是当你要显示的元素小于300px时,就会留白,也不美观。所以在.cenima_name:hover .table_list中加入overflow:hidden。这样的话就可以比较完美的解决了transition不支持display属性这个问题。

.cenima_name:hover .table_list
    {   

        opacity: 1; 
        max-height: 300px;
        overflow: hidden;

    }
### 解决方案 对于CSS过渡效果不生效的情况,通常是因为目标元素的状态变化未能触发浏览器重新计算样式。为了确保`transition`属性正常工作,需遵循特定的最佳实践。 #### 1. 确认初始状态与结束状态不同 如果两个状态之间没有任何差异,则不会发生视觉上的改变,因此也不会有过渡动画。例如,在应用`.notransition`类时,应确保该类仅用于禁用某些情况下的过渡效果[^1]: ```css .notransition { -webkit-transition: none !important; -moz-transition: none !important; -o-transition: none !important; transition: none !important; } ``` #### 2. 避免立即设置相同的值 当图片加载完成后执行淡入操作时,可能会遇到短暂闪烁的现象。这通常是由于JavaScript或HTML结构导致的瞬间重绘问题。为了避免这种情况,可以考虑使用伪类`:nth-child()`或其他方法延迟显示图片直到其完全加载完毕[^2]。 #### 3. 正确处理悬停后的回退行为 针对悬停状态下旋转的对象,在移除鼠标指针后应当逐渐减速返回原始位置。可以通过调整`transition-timing-function`属性来实现更平滑的效果。例如,采用`ease-out`函数可以让对象在接近终点时慢慢停止运动[^3]: ```css img:hover { transform: rotate(360deg); transition-duration: 0.5s; transition-timing-function: ease-in; } img { transition-duration: 0.5s; transition-timing-function: ease-out; } ``` #### 4. 浏览器兼容性考量 考虑到跨平台支持的需求,特别是旧版本Internet Explorer的支持,建议为所有涉及变换(transform)的操作添加相应的厂商前缀。比如,为了让基本的旋转变换能在IE9及以上版本中运行良好,可加入如下声明[^4]: ```css -ms-transform: rotate(10deg); /* IE 9 */ transform: rotate(10deg); ``` #### 5. 处理display:none带来的挑战 最后需要注意的是,一旦设置了`display:none;`,则任何基于可见性的转换都将失效。这是因为不可见元素实际上被从文档流中移除了,所以不存在所谓的“淡入”。要解决这个问题,推荐改用其他方式隐藏内容,如通过绝对定位将其移动到屏幕外或将透明度(opacity)设为零[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值