`
openxtiger
  • 浏览: 151767 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

CSS3 Transition

    博客分类:
  • CSS3
 
阅读更多

本文非原创,引用来源:http://www.w3cplus.com/content/css3-transition

 

 

W3C标准中对css3transition这是样描述的:“css的transition允许css的属性值在一定的时间区间内平滑地过渡。这种效果可以在鼠标单击、获得焦点、被点击或对元素任何改变中触发,并圆滑地以动画效果改变CSS的属性值。”

下面我们同样从其最语法和属性值开始一步一步来学习transition的具体使用

语法:

  transition : [<'transition-property'> || <'transition-duration'> || <'transition-timing-function'> || <'transition-delay'> [, [<'transition-property'> || <'transition-duration'> || <'transition-timing-function'> || <'transition-delay'>]]* 

 

transition主要包含四个属性值:执行变换的属性:transition-property,变换延续的时间:transition-duration,在延续时间段,变换的速率变化transition-timing-function,变换延迟时间transition-delay。下面分别来看这四个属性值

一、transition-property:

语法:

  transition-property : none | all | [ <IDENT> ] [ ',' <IDENT> ]*

 

transition-property是用来指定当元素其中一个属性改变时执行transition效果,其主要有以下几个值:none(没有属性改变);all(所有属性改变)这个也是其默认值;indent(元素属性名)。当其值为none时,transition马上停止执行,当指定为all时,则元素产生任何属性值变化时都将执行transition效果,ident是可以指定元素的某一个属性值。其对应的类型如下:

1、color: 通过红、绿、蓝和透明度组件变换(每个数值处理)如:background-color,border-color,color,outline-color等css属性;

2、length: 真实的数字 如:word-spacing,width,vertical-align,top,right,bottom,left,padding,outline-width,margin,min-width,min-height,max-width,max-height,line-height,height,border-width,border-spacing,background-position等属性;

3、percentage:真实的数字 如:word-spacing,width,vertical-align,top,right,bottom,left,min-width,min-height,max-width,max-height,line-height,height,background-position等属性;

4、integer离散步骤(整个数字),在真实的数字空间,以及使用floor()转换为整数时发生 如:outline-offset,z-index等属性;

5、number真实的(浮点型)数值,如:zoom,opacity,font-weight,等属性;

6、transform list:详情请参阅:《CSS3 Transform

7、rectangle:通过x, y, width 和 height(转为数值)变换,如:crop

8、visibility: 离散步骤,在0到1数字范围之内,0表示“隐藏”,1表示完全“显示”,如:visibility

9、shadow: 作用于color, x, y 和 blur(模糊)属性,如:text-shadow

10、gradient: 通过每次停止时的位置和颜色进行变化。它们必须有相同的类型(放射状的或是线性的)和相同的停止数值以便执行动画,如:background-image

11、paint server (SVG): 只支持下面的情况:从gradient到gradient以及color到color,然后工作与上面类似

12、space-separated list of above:如果列表有相同的项目数值,则列表每一项按照上面的规则进行变化,否则无变化

13、a shorthand property: 如果缩写的所有部分都可以实现动画,则会像所有单个属性变化一样变化

具体什么css属性可以实现transition效果,在W3C官网中列出了所有可以实现transition效果的CSS属性值以及值的类型,大家可以点这里了解详情。这里需要提醒一点是,并不是什么属性改变都为触发transition动作效果,比如页面的自适应宽度,当浏览器改变宽度时,并不会触发transition的效果。但上述表格所示的属性类型改变都会触发一个transition动作效果。

二、transition-duration:

语法:

 transition-duration : <time> [, <time>]* 

 

transition-duration是用来指定元素 转换过程的持续时间,取值:<time>为数值,单位为s(秒),可以作用于所有元素,包括:before和:after伪元素。其默认值是0,也就是变换时是即时的。

三、transition-timing-function:

语法:

  transition-timing-function : ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier(<number>, <number>, <number>, <number>) [, ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier(<number>, <number>, <number>, <number>)]* 

 

取值:

transition-timing-function的值允许你根据时间的推进去改变属性值的变换速率,transition-timing-function有6个可能值:

1、ease:(逐渐变慢)默认值,ease函数等同于贝塞尔曲线(0.25, 0.1, 0.25, 1.0).

2、linear:(匀速),linear 函数等同于贝塞尔曲线(0.0, 0.0, 1.0, 1.0).

3、ease-in:(加速),ease-in 函数等同于贝塞尔曲线(0.42, 0, 1.0, 1.0).

4、ease-out:(减速),ease-out 函数等同于贝塞尔曲线(0, 0, 0.58, 1.0).

5、ease-in-out:(加速然后减速),ease-in-out 函数等同于贝塞尔曲线(0.42, 0, 0.58, 1.0)

6、cubic-bezier:(该值允许你去自定义一个时间曲线), 特定的cubic-bezier曲线。 (x1, y1, x2, y2)四个值特定于曲线上点P1和点P2。所有值需在[0, 1]区域内,否则无效。

其是cubic-bezier为通过贝赛尔曲线来计算“转换”过程中的属性值,如下曲线所示,通过改变P1(x1, y1)和P2(x2, y2)的坐标可以改变整个过程的Output Percentage。初始默认值为default.

其他几个属性的示意图:

四、transition-delay:

语法:

  transition-delay : <time> [, <time>]* 

 

transition-delay是用来指定一个动画开始执行的时间,也就是说当改变元素属性值后多长时间开始执行transition效果,其取值:<time>为数值,单位为s(秒),其使用和transition-duration极其相似,也可以作用于所有元素,包括:before和:after伪元素。 默认大小是"0",也就是变换立即执行,没有延迟。

有时我们不只改变一个css效果的属性,而是想改变两个或者多个css属性的transition效果,那么我们只要把几个transition的声明串在一起,用逗号(“,”)隔开,然后各自可以有各自不同的延续时间和其时间的速率变换方式。但需要值得注意的一点:transition-delay与transition-duration的值都是时间,所以要区分它们在连写中的位置,一般浏览器会根据先后顺序决定,第一个可以解析为时间的怭值为transition-duration第二个为transition-delay。如:

  a {
    -moz-transition: background 0.5s ease-in,color 0.3s ease-out;
    -webkit-transition: background 0.5s ease-in,color 0.3s ease-out;
    -o-transition: background 0.5s ease-in,color 0.3s ease-out;
    transition: background 0.5s ease-in,color 0.3s ease-out;
  }

 

如果你想给元素执行所有transition效果的属性,那么我们还可以利用all属性值来操作,此时他们共享同样的延续时间以及速率变换方式,如:

  a {
    -moz-transition: all 0.5s ease-in;
    -webkit-transition: all 0.5s ease-in;
    -o-transition: all 0.5s ease-in;
    transition: all 0.5s ease-in;
  }

 

综合上述我们可以给transition一个速记法:transition: <property> <duration> <animation type> <delay>如下图所示:

相对应的一个示例代码:

p {
  -webkit-transition: all .5s ease-in-out 1s;
  -o-transition: all .5s ease-in-out 1s;
  -moz-transition: all .5s ease-in-out 1s;
  transition: all .5s ease-in-out 1s;
}

因为transition最早是有由webkit内核浏览器提出来的,mozilla和opera都是最近版本才支持这个属性,而我们的大众型浏览器IE全家都是不支持,另外由于各大现代浏览器Firefox,Safari,Chrome,Opera都还不支持W3C的标准写法,所以在应用transition时我们有必要加上各自的前缀,最好在放上我们W3C的标准写法,这样标准的会覆盖前面的写法,只要浏览器支持我们的transition属性,那么这种效果就会自动加上去:

   //Mozilla内核
   -moz-transition : [<'transition-property'> || <'transition-duration'> || <'transition-timing-function'> || <'transition-delay'> [, [<'transition-property'> || <'transition-duration'> || <'transition-timing-function'> || <'transition-delay'>]]* 
   //Webkit内核
   -webkit-transition : [<'transition-property'> || <'transition-duration'> || <'transition-timing-function'> || <'transition-delay'> [, [<'transition-property'> || <'transition-duration'> || <'transition-timing-function'> || <'transition-delay'>]]* 
   //Opera
   -o-transition : [<'transition-property'> || <'transition-duration'> || <'transition-timing-function'> || <'transition-delay'> [, [<'transition-property'> || <'transition-duration'> || <'transition-timing-function'> || <'transition-delay'>]]* 
   //W3C 标准
   transition : [<'transition-property'> || <'transition-duration'> || <'transition-timing-function'> || <'transition-delay'> [, [<'transition-property'> || <'transition-duration'> || <'transition-timing-function'> || <'transition-delay'>]]* 

这个示例是通过CSS3的transition模仿制作jQuery的slideshow效果,当然这种效果跟js和jQ制作出来的是没得比,但有时还是可以用一用的,以前腾讯就使用过这样的一个效果。我们这个DEMO实现的效果原理跟上一个DEMO极其相似,这里我们是通过select的change事件来触slideshow的CSS3属性变化,这里应用到一部分jQuery,主要是制作数字切换和前一张下一张的按钮,以及select的change事件。下面我把代码贴出以供大家参考,如果你跟着做了的话,你会觉得CSS3的transition真的是魅力是无穷的。

Html Code:

  <div id="demoSliderContainer">
    <ul id="demoSlider" class="slide-images">
      <li class="slide-image">
        <img src="/images/monstersinc.jpg" alt="monsters inc" />
        <span>Monsters Inc</span>
      </li>
      <li class="slide-image">
        <img src="/images/nemo.jpg" alt="nemo" />
        <span>Nemo</span>
      </li>
      <li class="slide-image">
        <img src="/images/up.jpg" alt="up" />
        <span>Up</span>
      </li>
      <li class="slide-image">
        <img src="/images/walle.jpg" alt="walle" />
        <span>Wall-E</span>
      </li>
    </ul>
    <div class="options">
      <a href="javascript:;" class="prevSlide">Prev</a>
      <span class="slide-pager">
        <a href="" class="javascript:;">1</a>
        <a href="" class="javascript:;">2</a>
        <a href="" class="javascript:;">3</a>
        <a href="" class="javascript:;">4</a>
      </span>
      <a href="javascript:;" class="nextSlide">Next</a>
    </div>
  </div>
  <div id="options">
     <label for="transitionEffect">Transition effect :</label>
     <select id="transitionEffect">
        <option value="transition-opacity">opacity fade</option>
        <option value="transition-left">left slide</option>
        <option value="transition-right">right slide</option>
        <option value="transition-top">top slide</option>
        <option value="transition-bottom">bottom slide</option>
        <option value="transition-zoom">zoom</option>
        <option value="transition-dezoom">de-zoom</option>
        <option value="transition-cornerzoom">corner zoom</option>
        <option value="transition-rotate">rotate</option>
      </select>
  </div>

 

CSS Code:

#demoSliderContainer {
  background: #000;
  -moz-box-shadow: 1px 1px 5px #000;
  -webkit-box-shadow: 1px 1px 5px #000;
  box-shadow: 1px 1px 5px #000;
  padding: 0;
  overflow: auto;
  margin: 10px auto;
  width: 560px;
}
    
#demoSlider {
  border: 1px solid #000;
  border-width: 5px 5px 0;
  height: 220px;
  margin: 0 auto;
  width: 550px;
  overflow: hidden;
  position: relative;
}
    
.slide-images .slide-image {
  position: absolute;
}
    
.slide-images .slide-image img {
  z-index: 2;
}
    
.slide-images .slide-image span {
  background: rgba(0,0,0,0.3);
  -moz-border-radius: 5px 0 0 0;
  -webkit-border-radius: 5px 0 0 0;
  border-radius: 5px 0 0 0;
  bottom: 4px;
  color: rgba(255,255,255,0.8);
  font-size: 14px;
  font-weight: bold;
  padding: 5px 10px;
  position: absolute;
  right: 0;
  z-index: 3;
}
.slide-images .slide-image.current img {
  z-index: 12;
}
    
.slide-images .slide-image.current span {
  z-index: 13;
}
    
#demoSliderContainer .options {
  padding: 3px 10px;
  text-align: center;
}
#demoSliderContainer .options a {
  color: #91BECC;
  font-family: Georgia,Serif;
  font-size: 12px;
  font-weight: bold;
  text-decoration: none;
}
#demoSliderContainer .options a:hover {
  color: #D3E5EB;
}
#demoSliderContainer .slide-pager a {
  -moz-transition-duration: 0.5s;
  -webkit-transition-duration: 0.5s;
  -o-transition-duration: 0.5s;
  transition-duration: 0.5s;
}
#demoSliderContainer .slide-pager a.current {
  background-color: #91BECC;
  border-radius: 5px 5px 5px 5px;
  color: black;
  padding: 0 4px;
}
#demoSliderContainer .options .prevSlide {
  float: left;
}
#demoSliderContainer .options .nextSlide {
  float: right;
}
   
 /*transition effect*/
.slide-images .slide-image,
.slide-images .slide-image img {
   -moz-transition-duration: 1.5s;
   -webkit-transition-duration: 1.5s;
   -otransition-duration: 1.5s;
   transition-duration: 1.5s;
 }
    
 .slide-images.transition-opacity .slide-image {
   opacity: 0;
   width: 0;
 }
    
 .slide-images.transition-opacity .slide-image.current {
   opacity: 1;
   width: 550px;
 }
   
 .slide-images.transition-left .slide-image {
   left: -550px;
   opacity: 0;
 }
    
 .slide-images.transition-left .slide-image.current {
   left: 0;
   opacity: 1;
 }
    
 .slide-images.transition-right .slide-image {
   right: -550px;
   opacity: 0;
 }
 .slide-images.transition-right .slide-image.current {
   right: 0;
   opacity: 1;
 }
    
    
 .slide-images.transition-top .slide-image {
   opacity: 0;
   top: -220px;
 }
 .slide-images.transition-top .slide-image.current {
   opacity: 1;
   top: 0;
 }
    
 .slide-images.transition-bottom .slide-image {
   opacity: 0;
   bottom: -220px;
 }
 .slide-images.transition-bottom .slide-image.current {
   opacity: 1;
   bottom: 0;
 }
    
 .slide-images.transition-cornerzoom .slide-image {
   opacity: 0;
 }
    
 .slide-images.transition-cornerzoom .slide-image.current {
   opacity: 1;
 }
    
 .slide-images.transition-cornerzoom .slide-image img {
   width: 0;
 }
    
 .slide-images.transition-cornerzoom .slide-image.current img {
   width: 550px;
 }
    
 .slide-images.transition-zoom .slide-image {
   opacity: 0;
 }
 .slide-images.transition-zoom .slide-image.current {
   opacity: 1;
 }
 .slide-images.transition-zoom .slide-image img {
   left: -275px;
   position: relative;
   top: -110px;
   width: 1100px;
 }
 .slide-images.transition-zoom .slide-image.current img {
   left: 0;
   top: 0;
   width: 550px;
 }
    
 .slide-images.transition-dezoom .slide-image {
   -moz-box-shadow: 2px 2px 8px black;
   -webkit-box-shadow: 2px 2px 8px black;
   box-shadow: 2px 2px 8px black;
   opacity: 0;
 }
 .slide-images.transition-dezoom .slide-image.current {
   opacity: 1;
 }
 .slide-images.transition-dezoom .slide-image img {
   left: 275px;
   position: relative;
   top: 110px;
   width: 0;
 }
 .slide-images.transition-dezoom .slide-image.current img {
   left: 0;
   top: 0;
   width: 550px;
 }
   
 .slide-images.transition-rotate .slide-image {
   opacity: 0;
 }
 .slide-images.transition-rotate .slide-image.current {
   opacity: 1;
 }
 .slide-images.transition-rotate .slide-image img {
   width: 550;
   height: 220px;
   position: relative;
   left: -550px;
   top: -220px;
   
  }
  .slide-images.transition-rotate .slide-image.current img {
    width: 550px;
    height: 220px;
    left: 0;
    top: 0;
    -moz-transform: rotate(1440deg);
    -webkit-transform: rotate(1440deg);
    -o-transform: rotate(1440deg);
    transform: rotate(1440deg);
  }
    
    
  #options {
     margin: 20px auto;
     padding: 5px;
     width: 550px;
  }

 

jQuery Code:

<script type="text/javascript">
    $(document).ready(function(){
      $(".slide-images").each(function(){
        var slider = $(this);
        var slides = $(".slide-image",slider);
        var sliderPages = $(".slide-pager");
        
        //Slide Navigation
        
        var currentSlideNum = 0;
        slides.removeClass("current");
        slides.eq(currentSlideNum).addClass("current");
        sliderPages.each(function(){
          var pages = $("a",this);
          pages.removeClass("current");
          pages.eq(currentSlideNum).addClass("current");
        });
        
        var goToSlide = function(slideNum) {
          slides.eq(currentSlideNum).removeClass("current");
          slides.eq(slideNum).addClass("current");
          sliderPages.each(function(){
            var pages = $("a", this);
            pages.eq(currentSlideNum).removeClass("current");
            pages.eq(slideNum).addClass("current");
          });
          currentSlideNum = slideNum;
        };
        
        var nextSlide = function() {
          var nextSlideNum = currentSlideNum + 1;
          if(nextSlideNum >= slides.size()) 
            nextSlideNum = 0;
            goToSlide(nextSlideNum);
          
        }; 
        
        var prevSlide = function() {
          var prevSlideNum = currentSlideNum - 1;
          if(prevSlideNum < 0)
            prevSlideNum = slides.size() - 1;
            goToSlide(prevSlideNum);
          
        };
        
        //transition effects
        var setTransitionEffect = function(transitionEffect) {
          slider.attr("class","slide-images "+ transitionEffect);
        };
        
        $("#transitionEffect").change(function(){
          setTransitionEffect($(this).val());
        }).change();
        
        //Navigation binding
        
        $(".prevSlide").click(prevSlide);
        $(".nextSlide").click(nextSlide);
        $(".slide-pager a").each(function(i){
          if(i >= slides.size()) return false;
          $(this).click(function(){
            goToSlide(i);
          });
        });
        
        //Auto next slide
        
        var lastHumanNav = 0;
        $(".prevSlide, .nextSlide, .slide-pager a").click(function(){
          lastHumanNav = new Date().getTime();
        });
        setInterval(function(){
          var now = new Date().getTime();
          if(now - lastHumanNav > 5000)
            nextSlide();
        },5000);
      });
    });
    
</script>

 

记得在你的本地页面头部加上jQuery的版本库文件。

效果示意图:

分享到:
评论

相关推荐

    CSS3 transition鼠标hover按钮动画特效源码.zip

    【CSS3 transition】是CSS(层叠样式表)的一个重要特性,它允许元素在不同状态之间平滑过渡,比如当鼠标悬停(hover)在按钮上时,可以创建出丰富的动画效果。在网页设计中,按钮是用户交互的重要组件,通过CSS3 ...

    css3 transition图文动画显示特效.zip

    【CSS3 Transition 图文动画显示特效】 在网页设计中,CSS3 Transition(过渡效果)是一种强大的工具,可以为用户交互添加动态视觉体验。本资源"css3 transition图文动画显示特效.zip"提供了一种创新的方式,当鼠标...

    纯CSS3 transition属性鼠标经过酷炫按钮动画特效

    在本文中,我们将深入探讨如何使用CSS3的`transition`属性来创建鼠标经过时的酷炫按钮动画特效。`transition`是CSS3中一个强大的工具,它允许元素在不同状态间平滑过渡,为用户界面增添动态效果,提高用户体验。 ...

    CSS3 transition属性制作水平手风琴鼠标点击手风琴展...

    CSS3 transition属性制作水平手风琴鼠标点击手风琴展...CSS3 transition属性制作水平手风琴鼠标点击手风琴展...CSS3 transition属性制作水平手风琴鼠标点击手风琴展...

    CSS3 transition鼠标hover按钮动画特效

    **CSS3过渡(Transition)详解** CSS3是CSS(层叠样式表)的最新版本,引入了许多新特性,其中一项重要特性就是过渡(Transition)。过渡允许我们平滑地改变一个元素从一种样式到另一种样式的状态,使得网页的交互...

    纯css3 transition鼠标悬停图片文字动画显示

    在本文中,我们将深入探讨如何使用CSS3的`transition`属性来实现鼠标悬停时的图片文字动画效果。`transition`是CSS3中一个强大的工具,它允许元素在不同的状态之间平滑过渡,例如在鼠标悬停时改变颜色、大小或透明度...

    HTML5 and CSS3 Transition, Transformation, and Animation

    A handy guide to understanding Microdata, the new JavaScript APIs, and the new form elements in HTML5 and CSS3 along with transition, transformation, and animation using lucid code samples Overview ...

    纯css3 transition动画过渡属性制作鼠标悬停图片标题

    在本文中,我们将深入探讨如何使用CSS3的`transition`属性来创建动态的鼠标悬停效果,特别是针对图片标题的应用。CSS3的`transition`属性是实现平滑过渡的关键工具,它允许元素在两种状态之间平滑地变化,而不是立即...

    css3 transition属性鼠标悬停图标按钮动画提示框效果

    在CSS3中,`transition`属性是一个非常重要的特性,它使得元素在不同状态间转换时可以平滑地过渡,而不是瞬间变化。这个属性主要用于创建动态效果,如按钮悬停时的动画,图标变换等,特别是在网页设计中,能极大地...

    css3 transition按钮动画特效.zip

    本资源"css3 transition按钮动画特效.zip"专注于利用CSS3的transition属性为网页按钮创建丰富多彩的动画效果。Transition是CSS3中的一个关键特性,它允许元素在不同状态之间平滑过渡,比如在鼠标悬停、点击或其他...

    jquery+css3 transition鼠标滑过新闻列表动画提示新闻图片信息特效源码.zip

    该资源是一个基于jQuery和CSS3 Transition技术的网页特效源码,用于实现鼠标滑过新闻列表时,动态展示新闻图片和相关信息的效果。这个效果可以提升用户体验,使得用户在不离开当前页面的情况下快速预览新闻概要。 ...

    div css3 transition过渡属性制作水平图片手风琴

    div css3 transition过渡属性制作水平图片手风琴 div css3 transition过渡属性制作水平图片手风琴 div css3 transition过渡属性制作水平图片手风琴

    21种css3 transition属性鼠标悬停导航条动画效果

    在网页设计中,CSS3(层叠样式表第三版)为开发者提供了许多强大的工具,其中“transition”属性是实现动态效果的关键。这个属性允许我们平滑地过渡元素的样式变化,使得用户交互更加生动和吸引人。在这个主题“21种...

    CSS3 transition实现超酷图片墙动画效果.pdf

    【CSS3 transition】是CSS3中的一个重要特性,用于创建平滑的过渡效果,使得元素从一种样式平滑地转变到另一种样式。在本教程中,我们将深入探讨如何使用CSS3 transition来实现超酷的图片墙动画效果。 首先,我们要...

    CSS3 transition实现超酷图片墙动画效果.docx

    【CSS3 transition实现超酷图片墙动画效果】 CSS3中的`transition`属性是现代网页设计中实现平滑过渡效果的关键工具。它允许元素在不同状态之间进行动态变换,而不是立即跳转。通过设置`transition`,我们可以指定...

    CSS3 transition属性单页模板鼠标悬停导航菜单文字动画

    在网页设计中,CSS3(层叠样式表第三版)为开发者提供了许多强大的新特性,其中之一就是`transition`属性。这个属性使得元素的样式变化能够平滑地过渡,而不是瞬间跳变,从而创造出丰富的视觉效果。在本项目“CSS3 ...

    css3 transition按钮动画特效特效代码

    **CSS3 Transition 按钮动画特效详解** 在网页设计中,CSS3的Transition(过渡)属性是一个强大的工具,它可以让我们轻松地为元素添加平滑的动态效果,特别是在按钮交互中,过渡效果能够显著提升用户体验。本文将...

Global site tag (gtag.js) - Google Analytics