• HTML+CSS之光标悬停图片翻转效果


    设计思路

            首先做一个包括图片和说明文字的简单的页面结构,然后再设置它的变换。将变换的元素,即照片和文字放在一个父容器里面,这就需要四个父容器 ,再将这四个父容器放在最外层的舞台上面进行变换,在每个父容器里面都包括两部分:一个是上面的图片,还有一个是下面的说明文字。最后采用层定位将图片和下面的说明文字让它有一个叠加的效果。先显示这个图片,当鼠标悬停在上面的时候,由于做了3D变换,(即每幅图片翻转的效果是围绕Y轴翻转180度来进行的),那么后面的文字就会被显示出来。

    ㈠HTML主页文件的基本结构

         先做一个整个需要变换元素它的一个结构。最外层有一个舞台,放在一个盒子里面,给舞台起一个名字,叫“piclist”。由于当前的舞台只用到一个,就使用ID来进行引用,用“#”号来定义,舞台里面有四组需要变换的元素,做4个盒子作为父容器,给父容器起一个名字,叫“picbox”,采用class来引用这个样式,父容器里面有两个部分需要变换的元素,正面部分放入图片,背面部分放入说明的文字。正面和背面都有共同的样式,将它们共同的样式用class来引用,放在face这样的一个共同样式里面。正面的图片有一个单独的样式,将它放在front这样的一个样式里面来引用;背面的文字也有一个单独的样式,将它放在back里面来引用。这就是当前的父容器的结构。我们再设置一下容器里面图片和文字的内容,其中图片采用相对路径进行添加。

        我们简单的设置一下CSS样式部分:首先将默认样式清零,设置页面的背景颜色为深蓝色,直接在body标签里面进行设置。

        当前的基本结构和样式就已经设置完了,让我们看一下代码是如何编写的。

    下面就是代码部分:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Document</title>
     6     <style>
     7         *{
     8             padding: 0;
     9             margin: 0;
    10         }
    11         body{
    12             background-color:#0D3462;
    13         }        
    14         
    15     </style>
    16 </head>
    17 <body>
    18     <div id="piclist">
    19         <div class="picbox">
    20                 <div class="face front"><img src="images/1.jpg"></div>
    21             <div class="face back"><h3>浓缩咖啡</h3></div>
    22         </div>
    23         <div class="picbox">
    24                 <div class="face front"><img src="images/2.jpg"></div>
    25             <div class="face back"><h3>卡布奇诺</h3></div>
    26         </div>
    27         <div class="picbox">
    28                 <div class="face front"><img src="images/3.jpg"></div>
    29             <div class="face back"><h3>拿铁</h3></div>
    30         </div>
    31         <div class="picbox">
    32             <div class="face front"><img src="images/4.jpg"></div>
    33             <div class="face back"><h3>摩卡</h3></div>
    34         </div>
    35     </div>
    36 </body>
    37 </html>

     

    效果图如下:

     

    ㈡CSS样式设置后展开的效果

           在上面的基础上将样式细化一下。首先设置舞台的样式:设置舞台的高度,宽度,也就是舞台的大小,这个数字是根据里面元素的大小设定的。设置舞台的位置:垂直方向距离上边距有100px的距离,水平方向居中显示。设置四个父容器的样式:四个父容器作为一个盒子,排列为一行,设置它们的浮动为向左浮动,再设置它们的高度,宽度,外边距,最重要的是由于父元素它需要里面包含需要变换的内容,设置3D变换(编辑器里面采用trsf扩展生成),将它的值设置为preserve-3d,这种变换不是一下子就变换过来的,而是渐进的变换,设置transition,让它在1.5s内完成变换,这是对于父容器的初步设定。

           设置在父容器里面鼠标悬停在上面的时候来进行的3D变换:沿着Y轴翻转180度。父容器里面两个需要变换的元素,它们共同的效果就像扑克牌的两面一样。那么来设置face的样式:先设置高和宽,进一步设置正面放置图片的这一面的样式,设置它的边框为2个像素实线,为了配合咖啡的颜色,设置边框颜色为棕色,再设置背面的样式,设置它的背景颜色是咖啡色,边框为2个像素,实线,白色来显示,背面的文字用白色显示,文本内容水平居中。

    下面是CSS样式设置后的代码:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Document</title>
     6     <style>
     7                 *{
     8             padding: 0;
     9             margin: 0;
    10         }
    11         body{
    12             background-color:#0D3462;
    13         }
    14         /*舞台*/
    15         #piclist{  
    16             width:760px; /*170*4+10*8*/
    17             height: 220px;/*190+边框*/
    18             margin: 100px auto;
    19         }
    20         /*容器*/
    21         .picbox{
    22             float: left;
    23             /*position: relative;*/
    24             width: 170px;
    25             height: 190px;
    26             margin: 10px;
    27             /*3d——双面效果*/
    28             transform-style:preserve-3d;
    29             transition:1.5s;
    30         }
    31         /*舞台鼠标悬停,就翻转,
    32         正面背面互换*/
    33         .picbox:hover{
    34             transform:rotateY(180deg);
    35         }
    36         .face{
    37             /*position: absolute;*/
    38             width:170px;
    39             height:190px;
    40         }
    41         .front{
    42             border:2px solid #4b2518;
    43         }        
    44         .back{
    45             /*让它成为背面,开始只显示正面*/
    46             /*transform:rotateY(180deg);    */
    47             background-color: #4b2518;
    48             border:2px solid #fff;
    49         }
    50         .back h3{
    51             color:white;
    52             text-align:center;
    53         }
    54     </style>
    55 </head>
    56 <body>
    57     <div id="container">
    58         <div id="piclist">
    59             <div class="picbox">
    60                    <div class="face front"><img src="images/1.jpg"></div>
    61                 <div class="face back"><h3>浓缩咖啡</h3></div>
    62             </div>
    63             <div class="picbox">
    64                    <div class="face front"><img src="images/2.jpg"></div>
    65                 <div class="face back"><h3>卡布奇诺</h3></div>
    66             </div>
    67             <div class="picbox">
    68                    <div class="face front"><img src="images/3.jpg"></div>
    69                 <div class="face back"><h3>拿铁</h3></div>
    70             </div>
    71             <div class="picbox">
    72                 <div class="face front"><img src="images/4.jpg"></div>
    73                 <div class="face back"><h3>摩卡</h3></div>
    74             </div>
    75         </div>
    76     </div>
    77 </body>
    78 </html>

     

    效果图如下:

     

     ★  当前的图片和文字已经设置好,而且鼠标悬停在上面也有渐进翻转的效果,但是有两个问题:

       ⑴图片和文字的关系没有形成正反面的关系;

       ⑵当鼠标悬停在上面的时候,会发现背面的文字已经被翻转过来,相当于反着写的字。

    ★我们最后要实现的效果是当前没有翻转的效果,那么如何做到这一点呢?

       将背面的文字初始状态下就先翻转一下,当鼠标停留在上面的时候,它又被翻转回来,那么就形成正常字序的文字了。

     

    ㈢完整效果代码

        设置层定位。需要在父元素,也就是父容器里面设置它的层定位的方式,将父元素设置成相对定位,子元素无论是正面还是背面,它都应该是一个绝对定位,再将背面设置成初始状态就是翻转的,那么让初始状态下翻转180度。

         

    完整的代码如下面所示:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Document</title>
     6     <style>
     7         *{
     8             padding: 0;
     9             margin: 0;
    10         }
    11         body{
    12             background-color:#0D3462;
    13         }
    14         /*舞台*/
    15         #piclist{  
    16             width:760px; /*170*4+10*8*/
    17             height: 220px;/*190+边框*/
    18             margin: 100px auto;
    19         }
    20         /*容器*/
    21         .picbox{
    22             float: left;
    23             position: relative;
    24             width: 170px;
    25             height: 190px;
    26             margin: 10px;
    27             /*3d——双面效果*/
    28             transform-style:preserve-3d;
    29             transition:1.5s;
    30         }
    31         /*舞台鼠标悬停,就翻转,
    32         正面背面互换*/
    33         .picbox:hover{
    34             transform:rotateY(180deg);
    35         }
    36         .face{
    37             position: absolute;
    38             width:170px;
    39             height:190px;
    40         }
    41         .front{
    42             border:2px solid #4b2518;
    43         }        
    44         .back{
    45             /*让它成为背面,开始只显示正面*/
    46             transform:rotateY(180deg);    
    47             background-color: #4b2518;
    48             border:2px solid #fff;
    49         }
    50         .back h3{
    51             color:white;
    52             text-align:center;
    53         }
    54     </style>
    55 </head>
    56 <body>
    57     <div id="container">
    58         <div id="piclist">
    59             <div class="picbox">
    60                    <div class="face front"><img src="images/1.jpg"></div>
    61                 <div class="face back"><h3>浓缩咖啡</h3></div>
    62             </div>
    63             <div class="picbox">
    64                    <div class="face front"><img src="images/2.jpg"></div>
    65                 <div class="face back"><h3>卡布奇诺</h3></div>
    66             </div>
    67             <div class="picbox">
    68                    <div class="face front"><img src="images/3.jpg"></div>
    69                 <div class="face back"><h3>拿铁</h3></div>
    70             </div>
    71             <div class="picbox">
    72                 <div class="face front"><img src="images/4.jpg"></div>
    73                 <div class="face back"><h3>摩卡</h3></div>
    74             </div>
    75         </div>
    76     </div>
    77 </body>
    78 </html>

     

    效果图如下:

     

           由于用了层定位,那么父元素是相对定位,两个子元素都是相对于父元素的一个绝对定位,所以意味着两个子元素原有文档流的位置丢失,那么它们就会层叠在一起,而且初始状态下,我们就已经将文字翻转180度,那么光标停留在上面的时候,它又被翻转回来,就形成了最终的效果。 

    以上就是css3中3D变换的示例——鼠标悬停在图片上翻转背面的文字说明的全部代码和效果图。希望有所帮助。

  • 相关阅读:
    Oracle 10g AND Oracle 11g手工建库案例--Oracle 11g
    第十七篇:实例分析(1)--初探WDDM驱动学习笔记(八)
    Git权威指南学习笔记(二)Git暂存区
    C++11多线程教学II
    c++ 11 多线程教学(1)
    C++11 多线程 基础
    C++11下的线程池以及灵活的functional + bind + lamda
    intel线程库tbb的使用
    TBB入门
    TTB 基本
  • 原文地址:https://www.cnblogs.com/shihaiying/p/11354387.html
Copyright © 2020-2023  润新知