css3中transition和display的坑

 不知道大家做css3动画的时候遇到过这种情景没?

用opacity实现淡入淡出的效果。噢!good!一切正常 给个栗子:



  1. <!DOCTYPE html>  
  2. <html>  
  3. <meta charset="uft-8"> 
  4. <head>  
  5. <style> 
  6. .div1{ 
  7.      background: red; 
  8. .div2 { 
  9.      width:100px; 
  10.      height:100px; 
  11.      background:blue; 
  12.      transition:opacity 2s; 
  13.      -moz-transition:opacity 2s; /* Firefox 4 */ 
  14.      -webkit-transition:opacity 2s; /* Safari and Chrome */ 
  15.      -o-transition:opacity 2s; /* Opera */ 
  16.      opacity: 0; 
  17. }  
  18. .div1:hover .div2 { 
  19.      opacity:1; 
  20. }  
  21. </style>  
  22. </head>  
  23. <body>  
  24.      <div class="div1"> 
  25.      <p>请移动到红色div上</p> 
  26.      <div class="div2"></div> 
  27. </div>  
  28. </body>  
  29. </html> 

或者用animation,在keyframe中写也一样。这里就不写出代码了

但是难免我们会遇到这样的需求,也一定会遇到: 我们都知道opacity:0的时候,其实他还是占页面空间的,他会遮挡到他下面的层(不是视觉上)。而且绑定在他上面的一些onclick事件之类的,也同样会发生。 这时候我们想在opacity:0的时候,把他隐藏掉,用display: none。 好,那我们稍微在css中加几句,变成


  1. .div1{ 
  2.      background: red; 
  3. .div2 { 
  4.      width:100px; 
  5.      height:100px; 
  6.      background:blue; 
  7.      transition:opacity 2s; 
  8.      -moz-transition:opacity 2s; /* Firefox 4 */ 
  9.      -webkit-transition:opacity 2s; /* Safari and Chrome */ 
  10.      -o-transition:opacity 2s; /* Opera */ 
  11.      opacity: 0; 
  12.      display: none; 
  13. }  
  14. .div1:hover .div2 { 
  15.      opacity:1; 
  16.      display:block 
  17. }  

打开浏览器看一下效果先。 我擦。。。。淡入淡出的效果全没了 怎么回事。。。这简直是破坏性的作用,这也是之前做动画过程中遇到的大坑

聪明的码农们当然有办法来解决这种情况。 大家都知道visibility的效果其实跟 display 在一定程度上相似, 当然是一定程度上。 那为什么说只是一定程度上相似呢,因为它仍然是占空间的,那么这时候看官一定会说,这么用跟opacity压根没区别呀

但聪明的码农们一定又想到,这时候,他是不会遮挡到下面的层的,也就是说 他跟opacity这样的存在不同,onclick等事件是不会发生的。

我们来说下visibility, 常用到的是visible和 hidden 两个值。但也可以是数值, 等于0时相当于hidden,而只要大于0时,visibility就为visible。那我们利用这点。


  1. .div1{ 
  2.      background: red; 
  3. .div2 { 
  4.      width:100px; 
  5.      height:100px; 
  6.      background:blue; 
  7.      transition:all 2s; 
  8.      -moz-transition:all 2s; /* Firefox 4 */ 
  9.      -webkit-transition:all 2s; /* Safari and Chrome */ 
  10.      -o-transition:all 2s; /* Opera */ 
  11.      visibility: hidden 
  12. }  
  13. .div1:hover .div2 { 
  14.      visibility: visible 
  15. }  

浏览一下,会发现,这时候是会有延时隐藏的效果的。很好,又发现新东西了

那渐变的效果怎么办。。。。

聪明的码农们又想起了opacity 。。。结合起来用会怎么用呢


  1. .div1{ 
  2.      background: red; 
  3. .div2 { 
  4.      width:100px; 
  5.      height:100px; 
  6.      background:blue; 
  7.      transition:all 2s; 
  8.      -moz-transition:all 2s; /* Firefox 4 */ 
  9.      -webkit-transition:all 2s; /* Safari and Chrome */ 
  10.      -o-transition:all 2s; /* Opera */ 
  11.      visibility: hidden; 
  12.      opacity: 0 
  13. }  
  14. .div1:hover .div2 { 
  15.      visibility: visible; 
  16.      opacity: 1 
  17. }  

浏览下先。。。。!!!!一切正常了

其实,visibility会在opacity生效后再应用。比如隐藏时,先opacity变为0,再应用了visibility:hidden 这时候就隐藏起来了,相关的事件也不会发生。 看来display:none这时候被抛弃了啊

当然,有人会说visibility:hidden始终是占着页面空间的,display能够减少页面的repaint,还是要用display:none怎么做呢

聪明的码农又想到了: 先把display变成block 然后延迟transition动画的执行

当然啦 这就需要用到JS了

以上就是display和transition中发现的坑。。。。!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索visiblity
, display
, div
, background
, visibility
, transition
, Opacity
hover延时
css3 transition、css3 transition 动画、css3 transition 抖动、css3 transition all、transition css3 实例,以便于您获取更多的相关知识。

时间: 2024-09-04 21:17:32

css3中transition和display的坑的相关文章

css3中 transition 与 animation用法介绍

在 CSS3 出现之前,网页上的动画都是靠 JavaScript 来实现的,在这个时代,你可能会经常看见这样的代码片段: setTimeout(funcntion() {   document.getElementById("test").style.opacity += 0.1; }, 300) 上面这段代码片段就实现了这个 id 所描述内容的透明度渐变. 这样写起来看上去比较复杂,可维护性也比较差.除此之外,在移动端的性能也很是捉急. CSS3 时代 石器时代终于过去,黎明已经到来

CSS3中Transition属性详解以及示例分享_CSS/HTML

1.transition-property的语法[css]transition-property :all(所有属性改变) || [attr] (指定要运动的样式)|| none(没有属性改变) 2.transition-property的属性值 (1)none:transition马上停止执行 (2)all:元素产生任何属性值变化时都将执行transition效果 (3)attr:指定要运动的样式 一.transition-property--指定要运动的样式 1.transition-pro

举例详解CSS3中的Transition

  1.会伸缩的搜索表单 常在 sf.gg 混的人都知道,它的顶部导航栏是这样的: 当输入框获得焦点就会变成这样的: 利用 CSS3 的 Transition 属性,我们可以简单做出一个类似的搜索表单出来: HTML 标记: XML/HTML Code复制内容到剪贴板 <header> <form action="#" method="post" class="searchForm"> <label for=&quo

CSS3中display的inline和block使用例子

在CSS中,使用display属性来定义盒的类型.总体来说,盒类型分为两类:inline和block.如div默认是block,span默认是Inline.可以通过display修改默认的表现方式.  代码如下 复制代码 <!DOCTYPR> <html> <head>     <meta http-equiv="content-type" content="text/html;charset=utf-8"/>    

css3中变形与动画(三)

transform可以实现矩阵变换,transition实现属性的平滑过渡,animation意思是动画,动漫,这个属性才和真正意义的一帧一帧的动画相关.本文就介绍animation属性. animation属性通过一些关键帧中元素属性的改变来实现动画效果.当然也可以控制动画持续时间,动画迭代次数等. 一.例子 在介绍transition时开篇有一个例子就是实现鼠标放上去,div宽度从100px缓慢增大到200px. 用transition实现方法如下 div:hover{ width: 200

css3中的应用的动画技术

随着网络的发展,浏览器具有更强的渲染更高级代码的能力,我们正逐步实现跨越所有平台和浏览器的目标.我们不但可以要花费更少的时间来确保我们的盒模型在IE6中看起来正常,而且形成了鼓励创新.避免hack.重前端脚本的氛围. 网络是一个非常好的环境,也是一个有丰富的知识来分享的协作社区.我们想要有圆角,我们就实现了它:我们想要多背景图片,我们实现了它:我们想要 边框图片,我们也让它实现了.所以需求从来不是问题,否则,我们可能还都仍然在使用table来布局页面而且使用过多的代码呢.我们都知道,网络无所不能

css3中flexbox伸缩盒深入理解

 这个背后有一个悲伤的故事,所以就取了个这么有点像标题党的标题,具体什么我就不说了.很早之前就知道css3里面有这么个东西,而且随着规范的改变,它的版本也改了几次.     也就是因为这个flexbox伸缩盒布局太强大了,以至于我没在意它也是display的一个属性. 要想解决这个布局问题,我们还是先了解一些基础的问题.先回顾下display有哪些属性吧:     none:隐藏对象.与visibility属性的hidden值不同,其不为被隐藏的对象保留其物理空间     inline:指定对象

css3中变形与动画(一)

css3制作动画的几个属性:变形(transform),过渡(transition)和动画(animation). 首先介绍transform变形. transform英文意思:改变,变形. css3中transform注意包括以下几种:旋转(rotate),扭曲(skew),缩放(scale).移动(translate)和矩阵变形matrix. 语法: transform : none | <transform-function> [ <transform-function> ]

CSS3的transition和transform

CSS3中的transition和transform是制作HTML5动画一定要使用到的两个属性. 注:这篇文章不考虑兼容性,只讨论webkit核心的浏览器.所以本文的所有例子请用chrome,safari或360极速浏览器看. transition transition对标签的变化过程进行设置.比如我需要将这个图在2s内进行翻转180的动画,就使用到这个了   transition可以配置的属性有: transision-property 要变化的属性,可以的参数请参考:http://www.z