zoukankan      html  css  js  c++  java
  • CSS3 Hover 动画特效

    根据 奇舞团:http://www.75team.com/archives/807 做的demo 

    根据视频中跟着做的 demo1:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style type="text/css">
        *{margin:0;padding:0;}
        .box,.mask,.img,.border{ width: 200px; height: 200px;border-radius:50%; cursor:pointer;}
        .box{position:relative; }
        .mask,.border{position:absolute;left:0;top:0;}
        .border{border:10px solid red;border-bottom-color:green;border-right-color: green;transition:all 0.5s ease-in; box-sizing:border-box;}
        .mask{  background:rgba(0,0,0,0.2); opacity: 0;color:rgba(255,255,255,0);transition:all 0.5s ease-in;}
        .info{ text-align:center;  font-size: 24px; margin-top:50%; transform: translateY(-50%);}
        .img{ background-size:cover; background-position: 50% 50%;}
        .box:hover .border{ transform:rotateZ(90deg);}
        .box:hover .mask{ opacity:1;color:rgba(255,255,255,1);}
        </style>
    </head>
    <body>
        <div class="box">
            <div class="img" style="background-image:url(1.jpg)"></div>
            <div class="mask">
                <div class="info">小S</div>
            </div>
            <div class="border"></div>
        </div>
    </body>
    </html>

    跟着 做 “举一反三” 例子: demo2:

    发现一个小问题  .mask 的  transform 平移出没有透明度的其实鼠标还是能够hover上 触发box 的 hover,直接导致 hover 区域变大不准 ,最开始想直接 给 box 一个 overflow:hidden 后发现这个效果没用了,再想用伪类解决也没解决了,最后用js 在 #box mouseover时加个class 让他取消到hidden 同时 监听 .mask transition 结束时去掉  #box 上的class 始终保持#box 上hideen;

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style type="text/css">
        *{margin:0;padding:0;}
        #box,.mask,.img{ width: 200px; height: 200px;border-radius:50%; cursor:pointer;}
        #box{position:relative; overflow:hidden; }
        #box.active{ overflow:visible;}
        .mask{position:absolute;left:0;top:0;}
        .border{border:10px solid red;border-bottom-color:green;border-right-color: green;transition:all 0.5s ease-in; box-sizing:border-box;}
        .mask{  transform:translateX(200px); background:rgba(0,0,0,0.2); opacity: 0;color:rgba(255,255,255,0);transition:all 0.3s ease-in;}
        .info{ text-align:center;  font-size: 24px; margin-top:50%; transform: translateY(-50%);}
        .img{ background-size:cover; background-position: 50% 50%;transition:all 0.5s ease-in;}
        .img:after{ display:block; width:200px; height:200px; content:'';border-radius:50%; box-shadow: inset 0 0 0 16px rgba(255, 255, 255, 0.6), 0 1px 2px rgba(0, 0, 0, 0.3);}
        #box:hover {}
        #box:hover .img{ transform:rotateZ(30deg);}
        #box:hover .mask{ opacity:1;color:rgba(255,255,255,1);transform:translateX(0px);}
        
        </style>
        <script>
        window.onload = function(){
            
            var oBox = document.querySelector('#box'),
                oMask = document.querySelector('.mask');
    
            oBox.onmouseover = function(){
                this.className = 'active';
            }
            oBox.onmouseout = function(){
                this.className = 'active';
            }
    
            oMask.addEventListener("transitionend", myFunction);
    
            function myFunction(){
                oBox.className = ' ';
            }
            
        }
        </script>
    </head>
    <body>
        <div id="box" >
            <div class="img" style="background-image:url(http://g.hiphotos.baidu.com/image/pic/item/29381f30e924b899b787b0166c061d950a7bf661.jpg)"></div>
            <div class="mask">
                <div class="info">文字</div>
            </div>
        </div>
    </body>
    </html>

     演示:demo2

    待解决的问题: 想用伪类的选择器解决,但还是有点问题

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style type="text/css">
        *{margin:0;padding:0;}
        .box,.mask,.img,.test{ width: 200px; height: 200px;border-radius:50%; cursor:pointer;}
        .box{position:relative; }
        .mask,.test{position:absolute;left:0;top:0;}
        .border{border:10px solid red;border-bottom-color:green;border-right-color: green;transition:all 0.5s ease-in; box-sizing:border-box;}
        .mask{  transform:translateX(200px); background:rgba(0,0,0,0.2); opacity: 0;color:rgba(255,255,255,0);transition:all 0.3s ease-in;}
        .info{ text-align:center;  font-size: 24px; margin-top:50%; transform: translateY(-50%);}
        .img{ background-size:cover; background-position: 50% 50%;transition:all 0.5s ease-in;}
        .img:after{ display:block; width:200px; height:200px; content:'';border-radius:50%; box-shadow: inset 0 0 0 16px rgba(255, 255, 255, 0.6), 0 1px 2px rgba(0, 0, 0, 0.3);}
        .test:hover { }
        .test:hover  .img{ transform:rotateZ(30deg);}
        .test:hover + .mask{ opacity:1;color:rgba(255,255,255,1);transform:translateX(0px);}
        </style>
    </head>
    <body>
        <div class="box">
            <div class="img" style="background-image:url(1.jpg)"></div>
            <div class="test"></div>
            <div class="mask">
                <div class="info">文字</div>
            </div>
        </div>
    </body>
    </html>
  • 相关阅读:
    js获取当前时间日期
    js操作Cookie
    C#常用正则表达式
    jquery操作select、radio、checkbox表单元素
    js实现页面跳转的几种方式
    js获取页面宽高大小
    c++写一个类后编译发现class重定义
    vtkMultiThreader坑爹吗?
    vtkStandardNewMacro()出现错误的问题
    转:将CFormView嵌入到CDockablePane中
  • 原文地址:https://www.cnblogs.com/auok/p/4382589.html
Copyright © 2011-2022 走看看