css3新增特性

news2024/10/6 10:28:17

1. 初始化

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 
        CSS3现状:
            1. 新增的CSS3特性有兼容性问题, ie9+才支持;
            2. 移动端支持由于PC端;
            3. 不断改进中;
            4. 应用相对广泛;
            5. 现阶段主要学习: 新增选择器 和 盒子模型 以及 其他特性;
                新增选择器:属性选择器, 结构伪类选择器, 伪元素选择器 (参考03_CSS选择器);  
     -->
</body>
</html>

2. css3盒子模型

2.1 css3盒子模型

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        CSS3中可以通过box-sizing来指定盒模型, 有两个值: content-box, border-box, 
        这样我们计算盒子大小的方式就发生了改变; 
        可以分为两种情况:
            (1) box-sizing: content-box; 盒子大小为: width + padding + border(这是默认的, 我们之前接触的都是这种) 
            (2) box-sizing: border-box;  盒子大小一直是初始指定的width(也即是padding, border是通过消耗自身原有的宽度来进行变化的)
     -->
     <style>
         * {
             margin: 0;
             padding: 0;
         }
         /* 1. 由于此种情况下, border和padding会影响盒子的实际大小, 所以将由 200*200 -> 280 * 280 */
         div {
             width: 200px;
             height: 200px;
             background-color: red;
             border: 20px solid green;
             padding: 20px;
             box-sizing: content-box;       /* 默认就是此值 */
         }

         /* 2. 此种情况下, 添加的border或padding都是通过消耗自身原有的宽度来完成的, 最终盒子大小和初始化时是一样大的! */
         #test {
             border-color: yellow;
             background-color: blue;
             box-sizing: border-box;
         }

         /* 3. p没有指定宽度, 则默认和父亲(body)一样宽; */
         /* 但是当其指定margin-left: 100px时, 会发现其宽度减少了100px; 因为这是外边距嘛! */
         /* 此时添加padding-left属性, 按道理应该会撑开盒子, 但是发现并没有撑开盒子, 而是在盒子自身的基础上进行炮制(与box-sizing: content-box/border-box没有关系); */
         p {
             height: 100px;
             background-color: skyblue;
             margin-left: 100px;
             padding-left: 300px;
         }
     </style>
</head>
<body>
    <!-- <div>HelloWorld</div> -->
    <!-- <div id="test">WorldHello</div> -->
    <p>little find</p>
</body>
</html>

在这里插入图片描述

2.2 盒子模型新发现

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    
    <style>
         /* div2并没有指定宽度, 则默认和父亲(div1)一样宽; */
         /* 但是当其指定margin-left: 20px时, 会发现其宽度减少了20px, 变成380px, 因为这是外边距嘛! */
         /* 此时给其添加padding-left属性, 按道理应该会撑开盒子, 但是发现并没有撑开盒子, 
            而是在盒子自身的基础上进行炮制(与box-sizing: content-box/border-box都没有关系); 
            好比说这个margin-left: 20px(div2), 就是与父盒子div1之间的距离, 好比说是div1将盒子div2推到了距离自己20px的位置处, 此时div2的宽度由与父亲等宽(400px)变成380px了;
            而padding-left: 20px(div2), 则是在div2的380px的基础之上消耗自身, 产生了内边距(此后div2仍保持380px,只不过是其含有30px的内边距); 
        */

        /* 
            重要结论:如果子盒子没有指定宽度, 则默认和父盒子一样宽;
                     当给子盒子添加margin-left时, 会影响子盒子的宽度;
                     而给子盒子添加padding-left属性时, 是在其自身炮制的, 与box-sizing属性没有一点关系; 
        */

        /* 
            此种现象在品优购项目中common.css中体现了:
                .dropdown .dd ul li {
                    height: 31px;
                    line-height: 31px;
                    margin-left: 2px;
                    padding-left: 10px;
                } 
        */
        #div1 {
            width: 400px;
            height: 200px;
            background-color: purple;
        }

        .div2 {
            height: 50px;
            background-color: red;
            margin-left: 20px;
            padding-left: 60px;
        }
    </style>
</head>

<body>
    <div id="div1">
        <div class="div2">hao</div>
    </div>
    <br>
    <div style="background-color: green;">jkljlk</div>
</body>

</html>

在这里插入图片描述

3. css3之filter属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        1. filter属性用来将模糊或颜色偏移等图形效果应用于元素; 
            filter:函数();
            eg: filter: blur(5px);     //blur值越大越模糊
        2. 
     -->
    <style>
        img {
            filter: blur(5px);
        }
        img:hover {
            filter: blur(0);
        }
    </style>
</head>
<body>
    <img src="./img.png" alt="">
</body>
</html>

在这里插入图片描述

4. calc函数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        1. calc()函数让你在声明CSS属性值时执行一些计算; 
     -->
     <style>
         .father {
            width: 300px;
            height: 200px;
            background-color: blue;
         }
         .son {
            width: calc(100% - 30px);       /* 表示在父盒子的宽度之上减去30px; */
            height: 30px;
            background-color: yellow;
         }
     </style>
</head>
<body>
    <div class="father">
        <div class="son"></div>
    </div>
</body>
</html>

在这里插入图片描述

5. css3之过渡属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        CSS3过渡:
        1. 过渡: 是CSS3中具有颠覆性的特征之一, 我们可以在不适用flash动画或JavaScript的情况下,
                在元素从一种样式变换为另一种样式时给元素添加效果;
        2. 过渡动画: 是从一个状态渐渐的过渡到另外一个状态;
        3. 虽然低版本浏览器不支持(ie9以下版本),但是不会影响页面布局;
        4. 现在通常和:hover一起搭配使用; 
        5. transition: 属性 持续时间 曲线 何时开始(延迟触发时间)(时间的单位都是s, 必须写单位);
            属性:      想要变化的CSS属性, 宽度, 高度 ,背景颜色, 内外边距都可以, 如果所有属性都变化过渡, 写一个all就可以;
            持续时间:  0.5秒可以简写为.5s; 必须写单位s;
            运动曲线:  默认是ease; 
            何时开始:  设置延迟触发时间, 默认是0s; 必须写单位s;
     -->
     <style>
         /* 
            以下案例:当鼠标悬浮时, div的某些属性将发生变化, 初始状态 -> hover时的状态;
            但是这种状态的切换是单调的(运行可知), 为了对该切换过程进行一个调节,
            我们可以添加一个过渡给该切换过程, 使其看起来不再像之前那样单调, 而是使其看起来更具动画效果;
            过渡:就是该某个切换过程添加一个过渡, 使其看起来更加趣味; 
         */
         div {
            width: 200px;
            height: 100px;
            background-color: green;
            /* 1. 延迟0.3s后触发 */
            /* transition: width 1s ease .3s;       */
            
            /* 2. 如果想要写多个属性, 中间需用逗号隔开; */
            /* transition: width .5s, height .5s; */

            /* 3. 直接写all来得更快; */
            /* transition: all .5s; */
         }
         div:hover {
             width: 400px;
             height: 200px;
             background-color: blue;
         }
     </style>
</head>
<body>
    <div>

    </div>
</body>
</html>

请添加图片描述

6. 进度条

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box {
            width: 150px;
            height: 15px;
            border: 1px solid red;
            border-radius: 7px;
            padding: 1px;
        }
        .bar {
            width: 50%;
            height: 100%;
            border-radius: 7px;
            background-color: red;
            transition: all .7s;
        }
        .box:hover .bar {
            width: 100%;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="bar"></div>
    </div>
</body>
</html>

请添加图片描述

7. css2-2D转换

7.1 translate

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 
            语法:transform: translate(x, y);
                转换是CSS3中具有颠覆性的特征之一, 可以实现元素的位移、旋转、缩放等效果;
                1. 移动:translate(x,y), translateX(), translateY(), translateZ(), translate3d();
                    (1) translate最大的优点就是:不会影响其他元素的位置; 
                    (2) traslate中的百分比单位是相对于自身来说的; (translate(50%, 50%))
                    (3) 对行内标签没有影响; 
                2. 旋转:rotate()
                3. 缩放:scale()
        */
        * {
            margin: 0;
            padding: 0;
        }
        div {
            width: 200px;
            height: 200px;
            background-color: red;
            /* transform: translate(100px, 100px); */
            /* transform: translateX(100px); */
        }

        /******************** translate特点(1)验证: *********************/
        div:first-child {
            transform: translate(30px, 30px);
        }
        div:last-child {
            background-color: purple;
        }

        /******************** translate特点(2)验证: *********************/
        div:last-child {
            transform: translateX(-50%);     /* 相当沿x轴负向移动自身宽度的50%距离 */
        }

        /******************** translate特点(3)验证: *********************/
        span {
            transform: translate(300px, 300px);
        }
    </style>
</head>
<body>
    <div></div>
    <div></div>
</body>
</html>

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        定位加合tranlate()实现盒子水平居中:子盒子居中显示在父盒子中; 
     -->
    <style>
        div {
            position: relative;
            width: 500px;
            height: 500px;
            background-color: purple;
        }
        p {
            position: absolute;
            top: 50%;
            left: 50%;
            width: 200px;
            height: 200px;
            background-color: blue;
            /* 1. 之前的写法 */
            /* margin-top: -100px; */
            /* margin-left: -100px; */
            /* 2. 现在 */
            transform: translate(-50%, -50%);
        }
    </style>
</head>
<body>
    <div>
        <p></p>
    </div>
</body>
</html>

在这里插入图片描述

7.2 rotate

7.2.1 rotate-1

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 
            语法: transform: rotate(度数); 
                (1) 单位是deg;[ rotate(deg) ]
                (2) 度数为正 -> 顺时针; 度数为负 -> 逆时针; 
                (3) 旋转中心是点是元素的中心; 
        */
        img {
            width: 150px;
            height: 150px;
            transform: rotate(45deg);
            border-radius: 50%;
            border: 5px solid green;
            transition: all .3s;
        }
        img:hover {
            transform: rotate(360deg);
        }
    </style>
</head>
<body>
    <img src="./pic.jpg" alt="">
</body>
</html>

请添加图片描述

7.2.2 rotate-2

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 
            transform-origin: x y;
            设置转换中心点;
                (1) x, y默认转换的中心点是元素的中心点(50%, 50%); 
                (2) 还可以给x, y设置像素 或者 方位名词(top, bottom, left, right, center); 
        */
        div {
            width: 200px;
            height: 200px;
            background-color: green;
            margin: 0 auto;
            transition: all .5s;
            /* transform-origin: left bottom; */
            transform-origin: 50px 50px;
        }
        div:hover {
            transform: rotate(360deg);
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

请添加图片描述

7.2.3 rotate应用1

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 1. 手动实现下三角 */
        div {
            position: relative;
            width: 250px;
            height: 35px;
            border: 1px solid #000;
        }
        div::after {
            content: '';
            position: absolute;
            top: 8px;
            right: 15px;
            width: 10px;
            height: 10px;
            border-right: 1px solid #000;
            border-bottom: 1px solid #000;
            transform: rotate(45deg);
            transition: all .2s;
        }
        div:hover::after {
            transform: rotate(225deg);
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

请添加图片描述

7.2.4 rotate应用2

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 旋转进入/淡出: */
        div {
            float: left;
            width: 200px;
            height: 200px;
            border: 1px solid red;
            margin: 10px;
            overflow: hidden;
        }
        div:before {
            content: 'Hello';
            display: block;
            width: 100%;
            height: 100%;
            background-color: green;
            transform: rotate(180deg);
            transform-origin: left bottom;
            transition: all .5s;
        }
        div:hover::before {
            transform: rotate(0deg);
        }
    </style>
</head>
<body>
    <div></div>
    <div></div>
    <div></div>
</body>
</html>

请添加图片描述

7.3 scale

7.3.1 scale

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 
            语法格式: transform: scale(x, y); 
                1. scale(1): 只写一个参数, 则第二个参数默认和第一个参数相同; 
                2. scale最大优势:默认是以中心点缩放, 可以设置中心点, 而且不影响其他盒子; 
        */
        div {
            width: 200px;
            height: 200px;
            background-color: green;
            margin: 0 auto;
            transform-origin: left bottom;
        }
        div:hover {
            transform: scale(2, 2);
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

请添加图片描述

7.3.2 scale应用1

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 图片放大案例: */
        div {
            float: left;
            border: 2px solid red;
            margin: 10px;
            overflow: hidden;
        }
        div img:hover {
            transform: scale(1.1);
            transition: all .3s;
        }
    </style>
</head>

<body>
    <div>
        <a href="#"><img src="./scale.jpg" alt=""></a>
    </div>
    <div>
        <a href="#"><img src="./scale.jpg" alt=""></a>
    </div>
    <div>
        <a href="#"><img src="./scale.jpg" alt=""></a>
    </div>
</body>

</html>

请添加图片描述

7.3.3 scale应用2

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 分页按钮案例: */
        li {
            float: left;
            width: 30px;
            height: 30px;
            margin: 10px;
            border: 1px solid green;
            border-radius: 50%;
            text-align: center;
            line-height: 30px;
            list-style: none;
            cursor: pointer;
            transition: all .4s;
        }
        li:hover {
            transform: scale(1.2);
        }
    </style>
</head>
<body>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
        <li>7</li>
    </ul>
</body>
</html>

请添加图片描述

7.4 注意

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 
            2D转换的连写:
                如果同时用有位移和其他属性, 那么需要把位移放到最前面; 
                否则可能与预期结果不一致;  
        */
        div {
            width: 200px;
            height: 200px;
            background-color: blue;
            margin: 0 auto;
            transition: all .5s;
        }

        div:hover {
            /* transform: rotate(180deg) translate(150px, 50px)  scale(1.2); error*/
            transform: translate(150px, 50px) rotate(180deg) scale(1.2);
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

8. css3动画

8.1 init

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style>
        /* 
            1. 动画:是CSS3中具有颠覆性的特征之一, 可通过设置多个节点来精确控制一个或一组动画, 常用来实现复杂的动画效果;
                相比较过渡, 动画可以实现更过变化, 更多控制, 连续自动播放等;  
            2. 使用动画三大步骤:
                 (1) 定义动画:@keyframes 动画名称 { ... };
                 (2) 调用动画: animation-name: 已定义的动画名称; 
                 (3) 持续时间:animation-time: 持续时间;  
        */

        /* 1. 定义动画 */
        @keyframes animation1 {
            0% {
                transform: translateX(0px);
            }
            100% {
                transform: translateX(1000px);
            }
        }
        div {
            width: 200px;
            height: 200px;
            background-color: green;
            /* 2. 调用动画 */
            animation-name: animation1;
            /* 3. 动画持续时间 */
            animation-duration: 3s;
        }
    </style>
</head>
<body>
     <div></div>
</body>
</html>

请添加图片描述

8.2 动画序列

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        动画序列:
            (1) 0%是动画的开始, 100%是动画的完成, 这样的规则就是动画序列; 
            (2) 使用百分比来规定变化发生的时间, 或用关键词"from"和"to", 等同于0% 和 100%;
     -->
    <style>
        @keyframes move {
            0% {
                transform: translate(0, 0);
            }
            25% {
                transform: translate(1000px, 0);
            } 
            50% {
                transform: translate(1000px, 500px);                
            }
            75% {
                transform: translate(0, 500px);                
            }
            100% {
                transform: translate(0, 0);
            }
        }
        div {
            width: 200px;
            height: 200px;
            background-color: green;
            animation-name: move;
            animation-duration: 10s;
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

请添加图片描述

8.3 动画属性

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        动画属性:
            (1)  @keyframes:                规定动画;
            (2)  animation:                 动画简写属性; 
            (3)  animation-name:            动画名; (必须的)
            (4)  animation-duration:        动画持续时间; (必须的)
            (5)  animation-timing-function: 动画速度曲线; (默认是ease)
            (6)  animation-delay:           动画延迟触发时间; (默认是0)
            (7)  animation-iteration-count: 动画播放次数; (默认是1, 还有infinite)
            (8)  animation-direction:       动画是否在下一周期逆向播放; (默认是normal, alternate逆向播放)
            (9)  animation-play-state:      动画是否正在运行或暂停; (默认是running, 还有pause)(经常hover等其他配合使用)
            (10) animation-fill-mode:       动画结束后的状态; (停留在结束状态forwards; 回到起始状态backwards(默认的))
     -->
    <style>
        @keyframes move {
            0% {
                transform: translate(0, 0);
            }
            100% {
                transform: translate(1000px, 0);
            }
        }

        div {
            width: 200px;
            height: 200px;
            background-color: green;
            animation-name: move;
            animation-duration: 3s;
            animation-iteration-count: infinite;
            /* animation-direction: alternate; */
            animation-fill-mode: backwards;
        }

        /* 鼠标经过时动画暂停 */
        div:hover {
            animation-play-state: paused;
        }
    </style>
</head>

<body>
    <div></div>
</body>

</html>

请添加图片描述

8.4 动画属性简写

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        animation: 动画名称 持续时间 运动曲线 何时开始 播放次数 是否反方向 动画起始或结束的状态(fill-mode);  
     -->
    <style>
        @keyframes move {
            0% {
                transform: translate(0, 0);
            }

            100% {
                transform: translate(1000px, 0);
            }
        }

        div {
            width: 200px;
            height: 200px;
            background-color: green;
            /* 前两个属性必须写 */
            animation: move 2s linear 0s infinite  forwards;
        }
    </style>
</head>

<body>

</body>
    <div></div>
</html>

8.5 案例1

map.png

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body {
            background-color: #333;
        }
        .map {
            position: relative;
            width: 747px;
            height: 616px;
            background: url(./map.png) no-repeat;
            margin: 0 auto;
        }
        .BJ {
            position: absolute;
            top: 227px;
            right: 174px;
        }
        .TB {
            top: 499px;
            right: 59px;
        }
        .GZ {
            top: 542px;
            right: 171px;
        }
        .dotted {
            width: 8px;
            height: 8px;
            background-color: #09f;
            border-radius: 50%;
        }
        .BJ div[class^="wave"] {                    /* 权重:21 */
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            width: 8px;
            height: 8px;
            box-shadow: 0 0 12px #009dfd;
            border-radius: 50%;
            animation: wave 1.2s linear infinite;
        }
        .BJ div.wave2 {                             /* 权重:21 */
            animation-delay: 0.4s;
        }
        .BJ div.wave3 {                             /* 权重:21, 因为在下面, 所以就替换了上述中的默认0s了 */
            animation-delay: 0.8s;
        }
        @keyframes wave {
            0% {

            }
            70% {
                width: 40px;
                height: 40px;
                opacity: 1;
            }
            100% {
                width: 70px;
                height: 70px;
                opacity: 0;
            }
        }
    </style>
</head>

<body>
    <div class="map">
        <div class="BJ">
            <div class="dotted"></div>
            <div class="wave1"></div>
            <div class="wave2"></div>
            <div class="wave3"></div>
        </div>
        <div class="BJ TB">
            <div class="dotted"></div>
            <div class="wave1"></div>
            <div class="wave2"></div>
            <div class="wave3"></div>
        </div>
        <div class="BJ GZ">
            <div class="dotted"></div>
            <div class="wave1"></div>
            <div class="wave2"></div>
            <div class="wave3"></div>
        </div>
    </div>
</body>

</html>

请添加图片描述

8.6 速度调节曲线

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        animation-timing-function: 动画的速度曲线, 默认是"ease" ;
            值                  描述
            linear             匀速
            ease               默认, 低速开始, 然后加快, 在结束前变慢
            ease-in            动画以低速开始
            ease-out           动画以低速结束
            ease-in-out        动画以低速开始和结束
            steps()            指定了时间函数中的间隔数量(步长)
     -->
    <style>
        @keyframes move {
            0% {
                width: 0;
            }
            100% {
                width: 200px;
            }
        }
        div {
            overflow: hidden;
            font-size: 20px;
            width: 0;
            height: 30px;
            background-color: green;
            white-space: nowrap;                    /* 让我们的文字强制一行内显示 */
            animation: move 4s steps(10) forwards;     /* 分10步来完成我们的动画 */
        }
    </style>
</head>

<body>
    <div>中华人民共和国成立了</div>
</body>

</html>

请添加图片描述

8.7 案例2
bear.png

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body {
            background-color: #ccc;
        }
        @keyframes bear {
            0% {
                background-position: 0 0;
            }
            100% {
                background-position: -1600px 0;
            }
        }
        @keyframes move {
            0% {
                left: 0;
            }
            100% {
                left: 50%;
                /* margin-left: -100px; */
                transform: translateX(-50%);
            }
        }
        div {
            position: absolute;
            width: 200px;
            height: 100px;
            background: url(./bear.png) no-repeat;
            animation: bear 1s steps(8) infinite, move 3s forwards;
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

请添加图片描述

9. css3-3D转换

9.1 3D移动

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        3D移动translate3d: 
            3D移动在2D移动的基础之上增加了一个可移动的方向, 就是z轴方向;
                transform: translateX(...);
                transform: translateY(...);
                transform: translateZ(100px);       (注意:translateZ一般用单位px)
                transform: translate3d(x, y, z);    
        透视:
            透视写在被观察元素的父盒子上面; 
            d: 视距, 就是一个距离人的眼睛到屏幕的距离;
            z: z轴, 物体距离屏幕的距离, z轴越大(正值), 我们看到的物体就越大;  
     -->
     <style>
         body {
             perspective: 200px;
         }
         div {
             width: 200px;
             height: 200px;
             background-color: green;
             margin: 100px auto;
             /* transform: translateX(0) translateY(100px) translateZ(100px); */
             /* transform: translate3d(0, 100px, 100px); */
             transform: translateZ(100px);
         }
     </style>
</head>
<body>
    <div></div>
</body>
</html>

在这里插入图片描述

9.2 3D旋转

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body {
            perspective: 300px; 
        }
        img {
            display: block;
            margin: 100px auto;
            transition: all 1s;
        }
        img:hover {
            /* transform: rotateX(360deg); */
            /* transform: rotateY(360deg); */
            /* transform: rotateZ(360deg); */
            transform: rotate3d(1, 0, 0 ,45deg);    /* 沿x轴旋转 */   
            transform: rotate3d(1, 1, 0, 45deg);    /* 沿对角线旋转(x, y轴合成方向) */
        }
    </style>
</head>
<body>
    <img src="./pig.jpg" alt="">
</body>
</html>

请添加图片描述

9.3 transform-style属性

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <!-- 
        3D呈现:transform-style:
            (1) 控制子元素是否开启三维立体环境;
            (2) transform-style: flat; 子元素不开启3D立体空间(默认的);
            (3) transform-style: preserve-3d; 子元素开启立体空间; 
            (4) 将此属性写在父级中, 但是控制的是子元素;
            (5) 这个属性很重要, 后面要用到; 
     -->
    <style>
        body {
            perspective: 500px;
        }
        
        .box {
            position: relative;
            width: 200px;
            height: 200px;
            margin: 100px auto;
            transition: all 2s;
            
           /* 让子元素保持3d立体空间环境 */
            transform-style: preserve-3d;       
        }
        
        .box:hover {
            transform: rotateY(60deg);
        }
        
        .box div {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background-color: pink;
        }
        
        .box div:last-child {
            background-color: purple;
            transform: rotateX(60deg);
        }
    </style>
</head>

<body>
    <div class="box">
        <div></div>
        <div></div>
    </div>
</body>

</html>

请添加图片描述

9.4 案例1

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        案例:硬币翻转; 
     -->
    <style>
        body {
            perspective: 300px;
        }
        .box {
            position: relative;
            width: 300px;
            height: 300px;
            margin: 0 auto;
            transition: all .6s;
            transform-style: preserve-3d;
        }
        .box:hover {
            transform: rotateY(180deg);
        }
        .front,
        .back {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            border-radius: 50%;
            font-size: 30px;
            text-align: center;
            line-height: 300px;
        }
        .front {
            background-color: red;
            z-index: 1;
        }
        .back {
            background-color: green;
            transform: rotateY(180deg);
        }
    </style>
</head>

<body>
    <div class="box">
        <div class="front">HelloWorld</div>
        <div class="back">你好,世界</div>
    </div>
</body>

</html>

请添加图片描述

9.5 案例2

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        案例:3D导航栏
     -->
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        ul {
            margin: 100px;
        }

        ul li {
            float: left;
            margin: 0 5px;
            width: 120px;
            height: 35px;
            list-style: none;
            perspective: 500px;
        }

        .box {
            position: relative;
            width: 100%;
            height: 100%;
            transform-style: preserve-3d;
            transition: all .3s;
        }

        .box:hover {
            transform: rotateX(90deg);
        }

        .front,
        .bottom {
            position: absolute;
            left: 0;
            top: 0;
            width: 100%;
            height: 100%;
        }

        .front {
            background-color: red;
            transform: translateZ(17.5px);
        }

        .bottom {
            background-color: green;
            /* 如果存在移动和其他样式, 必须将移动给写到前面; */
            transform: translateY(17.5px) rotateX(-80deg);
        }
    </style>
</head>

<body>
    <ul>
        <li>
            <div class="box">
                <div class="front">HelloWorld</div>
                <div class="bottom">你好世界</div>
            </div>
        </li>
        <li>
            <div class="box">
                <div class="front">HelloWorld</div>
                <div class="bottom">你好世界</div>
            </div>
        </li>
        <li>
            <div class="box">
                <div class="front">HelloWorld</div>
                <div class="bottom">你好世界</div>
            </div>
        </li>
        <li>
            <div class="box">
                <div class="front">HelloWorld</div>
                <div class="bottom">你好世界</div>
            </div>
        </li>
    </ul>
</body>

</html>

请添加图片描述
9.6 案例3

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        案例:旋转木马
     -->
    <style>
        body {
            perspective: 1000px;
        }
        @keyframes rotate {
               0% {
                   transform: rotateY(0);
               } 
               100% {
                   transform:  rotateY(360deg);
               }
            }
        section {
            position: relative;
            width: 300px;
            height: 200px;
            margin: 100px auto;
            transform-style: preserve-3d;
            animation: rotate 3s linear infinite;
            background: url(./pig.jpg) no-repeat;
        }
        section:hover {
            animation-play-state: paused;
        }
        section div {
            position: absolute;
            left: 0;
            top: 0;
            width: 100%;
            height: 100%;
            background: url(./dog.jpg) no-repeat;
        }
        section div:nth-child(1) {
            transform: translateZ(300px);
        }
        section div:nth-child(2) {
            transform: rotateY(60deg) translateZ(300px);    /* 先旋转好再移动 */
        }
        section div:nth-child(3) {
            transform: rotateY(120deg) translateZ(300px);   
        }
        section div:nth-child(4) {
            transform: rotateY(180deg) translateZ(300px);   
        }
        section div:nth-child(5) {
            transform: rotateY(240deg) translateZ(300px);   
        }
        section div:nth-child(6) {
            transform: rotateY(300deg) translateZ(300px);   
        }
    </style>
</head>

<body>
    <section>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
    </section>
</body>

</html>

请添加图片描述

10. 浏览器私有前缀

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        浏览器私有前缀是为了兼容老版本的写法, 比较新的版本浏览器无需添加; 
        -moz-:          Firefox浏览器的私有属性; 
        -ms-:           IE浏览器的私有属性; 
        -webkit-:       Safari, Chrome的私有属性; 
        -o-:            Opera的私有属性; 
     -->
     <!-- 
         示例:
            提倡的写法:
                -moz-border-radius:     10px;
                -webkit-border-radius:  10px;
                -o-border-radius:       10px;
                border-radius:          10px;
      -->
</head>
<body>
    
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/570102.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么通过ecs云服务器来给小程序发送消息

如果您想通过 ECS 云服务器向小程序发送消息&#xff0c;可以使用 WebSocket 技术。具体步骤如下&#xff1a; 1. 在 ECS 云服务器上搭建 WebSocket 服务器。您可以使用 Node.js、Java、Python 等编程语言来实现 WebSocket 服务器&#xff0c;具体实现方式可参考相关技术文档或…

Java笔记——KMP算法

KMP算法 文章目录 KMP算法KMP算法介绍主要逻辑Next数组KMP搜索代码解释生成next数组模式串匹配 源码展示 KMP算法介绍 KMP算法是一种串的模式匹配算法&#xff0c;用来求子串在主串的位置。是数据结构中比较难的一种算法。KMP算法的核心在于点在于如何利用子串生成next数组&am…

vim的使用、vim入门的三种常用模式、以及vim中常用的命令(超详细)

vim 入门的三种常用模式&#xff1a;分别是 1. 命令模式、2. 插入/编辑模式、3. 底行模式 1. 命令模式 控制屏幕光标的移动&#xff0c;字符、字或行的删除&#xff0c;移动复制某区段及进入Insert mode下&#xff0c;或者到 last line mode 如下&#xff0c;这个就是命令模式…

Numpy入门看这一篇就够了【史上入门最简单,开袋即食】

一边学习一边分享&#xff0c;好记性不如烂笔头 目录 一边学习一边分享&#xff0c;好记性不如烂笔头 NumPy问题思考&#xff1a; numpy是什么&#xff1f; 为什么要学习numpy&#xff1f; numpy是怎么组成的&#xff1f;特点是什么&#xff1f; numpy的应用场景有哪些&a…

css定位模式

1. 为什么需要定位&#xff1f; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"…

自动化专业求职方向与前景分析(合集)

自动化专业求职方向与前景分析 自动化专业求职方向 自动化专业是近几年高校教育改革中几个控制类专业合并后形成的宽口径专业&#xff0c;其实自动化就是搞控制的&#xff0c;用老师的话说就是控制一切可以控制的物理量&#xff0c;还说学自动化的人都要有控制的欲望。所谓控制…

Augmented Language Models(增强语言模型)

Augmented Language Models: A Survey 先上地址&#xff1a;https://arxiv.org/pdf/2302.07842.pdf 概率论难以支撑通用人工智能技术的诞生。—— Yann LeCun LLMs取得的巨大进展不再多说&#xff0c;它目前被诟病最多的问题是其会提供非事实但看似可信答案&#xff0c;即幻觉…

数组排序——从荷兰国旗问题到快速排序

本文首先将会介绍荷兰国旗问题&#xff0c;再讲述如何从该问题过渡到快速排序。 荷兰国旗问题 荷兰国旗问题&#xff08;Dutch National Flag Problem&#xff09;是由荷兰计算机科学家Edsger Dijkstra所提出&#xff0c;该问题的描述如下&#xff1a; 给定n个红、白、蓝三种颜…

JNDI学习笔记

最近在研究JNDI注入漏洞&#xff0c;就先浅浅的学习以下JNDI相关知识。 JNDI对各种目录服务的实现进行抽象和统一化。 在 Java 应用中除了以常规方式使用名称服务(比如使用 DNS 解析域名)&#xff0c;另一个常见的用法是使用目录服务作为对象存储的系统&#xff0c;即用目录服务…

SpringBoot --- 基础篇

一、快速上手SpringBoot 1.1、概述 SpringBoot开发团队认为原始的Spring程序初始搭建的时候可能有些繁琐&#xff0c;这个过程是可以简化的&#xff0c;那原始的Spring程序初始搭建过程都包含哪些东西了呢&#xff1f;为什么觉得繁琐呢&#xff1f;最基本的Spring程序至少有一…

大数据:VMware | Ubuntu | Hadoop | Spark | VMwaretools | Python 安装配置总结

一.环境概述 Linux发行版&#xff1a;Ubuntu虚拟机应用&#xff1a;VMware Workstation ProHadoop版本&#xff1a;3.1.3|伪分布式集群JDK版本&#xff1a;JDK1.8.0_162Spark版本:2.4.0Scala版本:2.12.8Python版本:3.6.8 | 3.7.16 二.Ubuntu 2.1 光盘文件 首先进入链接Down…

因为AI,我被裁了;MJ设计海报全流程;独立开发者每周收入2.3K美元;MJ常用参数超详细介绍 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 受 AI 影响&#xff0c;这 8 家公司开始裁员…… 为了搞清楚 AI 最近在影响哪些行业、哪些职业&#xff0c;作者花了三天事件找到了八…

基于SSM的网络在线考试系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 前言…

《Java并发编程实战》课程笔记(二)

可见性、原子性和有序性问题&#xff1a;并发编程 Bug 的源头 源头之一&#xff1a;缓存导致的可见性问题 在单核时代&#xff0c;所有的线程都是在一颗 CPU 上执行&#xff0c;CPU 缓存与内存的数据一致性容易解决。 因为所有线程都是操作同一个 CPU 的缓存&#xff0c;一个…

《面试1v1》ThreadLocal

我是 javapub&#xff0c;一名 Markdown 程序员从&#x1f468;‍&#x1f4bb;&#xff0c;八股文种子选手。 面试官&#xff1a; 你好&#xff0c;请问你对 ThreadLocal 有了解吗&#xff1f; 候选人&#xff1a; 您好&#xff0c;我知道 ThreadLocal 是一个 Java 中的类&a…

【坐标变换】坐标系坐标变换简单推导--未完待续

如图所示&#xff0c;假设已知坐标系 ( X , Y ) (X,Y) (X,Y)&#xff0c;旋转后的坐标系为 ( X ′ , Y ′ ) (X,Y) (X′,Y′)&#xff0c;旋转角度为 θ \theta θ&#xff0c;假设点p在 ( X , Y ) (X,Y) (X,Y)坐标系下为 ( x , y ) (x,y) (x,y)&#xff0c;坐标在旋转后的坐标…

速来!谷歌师兄的LeetCode刷题笔记开源了!

有小伙伴私聊我说刚开始刷LeetCode的时候&#xff0c;感到很吃力&#xff0c;刷题效率很低。我以前刷题的时候也遇到这个问题&#xff0c;直到后来看到这个谷歌师兄总结的刷题笔记&#xff0c;发现LeetCode刷题都是套路呀&#xff0c;掌握这些套路之后&#xff0c;就变得非常简…

kubernetes高可用+harbor高可用

kubernetes高可用harbor高可用 基于kubeadm安装kubernetes高可用集群全部主机环境初始化双主节点部署keepalive双主节点初始化kubeadm在k8smaster1节点上初始化k8s在k8smaster2节点上做扩容操作 harbor高可用集群初始化harbor1节点安装环境在另一台节点上配置使用私有harbor仓库…

初学QT:使用QtDesigner绘制一个简单的界面(Day01)

关于Qt 打算在这里记录我学习qt过程中遇见的问题的收获 今天是学习qt的第一天&#xff0c;首先找了一个界面打算照着这个界面写一个一样的 因为是第一天&#xff0c;所以我用的是qt designer写的 其中遇到的问题&#xff1a; 设置背景图片 首先不能直接添加图片到背景图片中…

如何在华为OD机试中获得满分?Java实现【分界线】一文详解!

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: Java华为OD机试真题&#xff08;2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…