Bootstrap

网站部署及CSS剩余模块

CSS3 2D转换

转换是CSS3中具有颠覆性的特征之一,可以实现元素的位移,旋转,缩放等效果

转换可以理解为变形:缩放、旋转、移动

移动

2D移动数2D这个样哑巴中的一种功能,可以改变元素在页面中的位置,类似于定位

语法是这样:

transform:translate(x,y);
transform:translateX(n);
transform:translateY(n);
div{
    width: 200px;
    height: 200px;
    background-color: pink;
    transform: translate(100px,100px);
}

 translate最大的优点是不会影响到其他元素的位置

translate的百分比单位是相对于自身元素的translate

我们可以用这个特点实现子盒子在父盒子的中央位置

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>天菜</title>
    <style>
        div{
            position: relative;
            width: 500px;
            height: 500px;
            background-color: pink;
        }
        p{
            position: absolute;
            top:50%;
            left: 50%;;
            width: 200px;
            height: 200px;
            background-color:aqua;
            transform: translate(-50%,-50%);
        }
    </style>
</head>
<body>
    <div>
        <p></p>
    </div>
</body>
</html>

对行内标签是没有效果的

旋转

旋转是指元素在二维平面内顺时针或者逆时针旋转

这是基本的语法:

transform:rotate(度数)

 rotate里面跟度数,单位是deg,比如rotate(45deg)

角度为正的时候,顺时针

负的时候是逆时针

默认的旋转的中心点是元素的中心点

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            width: 300px;
            height: 300px;   
        }
        div img{
            width: 100%;
            height: 100%;
            border-radius: 50px;
        }
        div:hover img{
            transform: rotate(360deg);
            transition: all 0.7s;
        }
    </style>
</head>
<body>
    <div>
        <img src="./1714915128_new_IMG-20240503-WA0094.jpg" alt="">
    </div>
</body>
</html>

真是盖了帽了 

旋转可以给我们做出三角形

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            position: relative;
            width: 249px;
            height: 35px;
            border: 1px solid red;
        }
        div::after{
            content: "";
            position: absolute;
            top: 0;
            right: 0;
            width: 15px;
            height: 15px;
            border-right: 1px solid skyblue;
            border-bottom: 1px solid seagreen;
            transform: rotate(45deg);
        }
    </style>
</head>
<body>
    <div>

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

三角和旋转配合起来就可以有动画的效果

我们可以设置我们元素转换的中心点:transform-origin

transform-origin: x y;
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            overflow: hidden;
            width: 200px;
            height: 200px;
            border: 1px solid palegreen;
            margin: 100px auto;
        }
        div::before{
            content: "喜欢";
            display: block;
            width: 100%;
            height: 100%;
            background-color: hotpink;
            transform: rotate(180deg);
            transform-origin: left bottom;
            transition: all 0.4s;
        }
        div:hover::before{
            transform: rotate(0deg);
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

 旋转效果可爱捏

缩放

缩放的语法:

transform: scale(x,y);

里面的数字如果不跟单位的话就是倍数的意思

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            width: 200px;
            height: 200px;
            background-color: pink;
            margin: 100px auto;
        }
        div:hover{
            transform: scale(2,2);
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

 scale缩放最大的优势:可以设置转换中心点缩放,默认以中心点缩放,而且不影响其他盒子

分页按钮
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        li{
            float: left;
            width: 30px;
            height: 30px;
            border: 1px solid pink;
            margin: 10px;
            text-align: center;
            line-height: 30px;
            list-style: none;
            border-radius: 7px;
            transition: all 0.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>

2D转换有综合的写法,是同时使用多个转换,空格隔开即可

顺序会影响转换的效果

当我们同时拥有位移和其他属性的时候,记得要将位移放到最前面 

CSS3 动画

动画是CSS3中具有颠覆性的特征之一,可以通过多个结点控制一个或一组动画,常用来实现复杂的动画效果

动画可以实现更多的变化,控制,连续自动播放等效果

先定义再调用

@keyframes 动画名称{
     0%{
           width:100px;
      }
      100%{
            width:200px;
        }
}

这是定义动画

这是使用动画:

div{
    height: 300px;
    width: 300px;
    border-color: aqua;
    animation-name: move;
    animation-duration: 5s;
}

 动画可以实现很多效果

动画可以改变任意多的样式任意多的次数

可以用百分比规定变化发生的时间,或者用关键词from to,等同于0和100

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        @keyframes move{
            0%{
                transform: translate(0px);
            }
            25%{
                transform: translate(1000px,0);
            }
            50%{
                transform: translate(1000px,500px);
            }
            75%{
                transform: translate(0,500px);   
            }
            100%{
                transform: translate(0px);
            }
        }
        div img{
            height: 200px;
            width: 300px;
            background-color: aqua;
            animation-name: move;
            animation-duration: 3s;
        }
    </style>
</head>
<body>
    <div>
        <img src="./pp.jpg" alt="">
    </div>
</body>
</html>

 还挺炫酷的

这是各种可以设置的属性

动画结束之后的状态是backwards

动画简写就是animation:动画名称,持续时间,运动曲线,何时开始,播放次数,是否反方向,动画起始或者结束的状态 

我用动画做了537的发光眼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .map{
            position: relative;
            width: 550px;
            height: 550px;
            background-image: url(./537.jpg);
        }
        .city{
            position: absolute;
            top: 141px;
            right: 105px;
        }
        .dotted{
            width: 8px;
            height: 8px;
            background-color: rgb(0, 255, 76);
            border-radius: 50%;
        }
        .city div[class^="pulse"]
        {
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%,-50%);
            width: 8px;
            height: 8px;
            box-shadow: 0 0 12px #5dfd00;
            border-radius: 50%;
            animation: pulse 1.2s linear infinite;
        }
        .map .city .pulse2{
            animation-delay: 0.4s;
        }
        .map .city .pulse3{
            animation-delay: 0.8s;
        }
        @keyframes pulse{
            0%{

            }
            70%{
                width: 40px;
                height: 40px;
                opacity: 1;
            }
            100%{
                width: 70px;
                height: 70px;
                opacity: 0;
            }
        }    
</style>
</head>
<body>
    <div class="map">
        <div class="city">
            <div class="dotted"></div>
            <div class="pulse1"></div>
            <div class="pulse2"></div>
            <div class="pulse3"></div>
        </div>
    </div>
</body>
</html>

然后关于速度曲线有细节,具体看这张表:

这个步长是一步一步走的

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            width: 0;
            height: 30px;
            background-color: pink;
            animation: w 4s steps(10) forwards;
        }

        @keyframes w{
            0%{
                width: 0;
            }
            100%{
                width: 200px;
            }
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

我们可以拿这个实现打字效果 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            overflow: hidden;
            width: 0;
            height: 30px;
            white-space: nowrap;
            background-color: pink;
            animation: w 4s steps(11) forwards;
        }

        @keyframes w{
            0%{
                width: 0;
            }
            100%{
                width: 180px;
            }
        }
    </style>
</head>
<body>
    <div>西安邮电你是杀不死我的</div>
</body>
</html>

嘻嘻

我是不会放过你们的

给我等着吧

这个肉像是有蛆爬过去一样

西安邮电还在输出

而且我还吃了大半碗才发现这件事

案例:奔跑的蓝色米老鼠

CSS3 3D转换

我们的生活环境是3D的,照片就是3D物品在2D平面中呈现的例子

它近大远小

且物体后面遮挡不可见

我们3D转换所用到的三维坐标系是立体空间,是由三个轴共同组成的

3D位移

这是语法:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            width: 200px;
            height: 200px;
            background-color: pink;
            /* transform: translateX(100px) translateY(100px) translateZ(100px); */
            transform: translate3d(100px,100px,100px);
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

而xyz都是不能省略的,如果没有的话就写0 

要在2D平面产生近大远小视觉立体的效果只是二维的

透视

如果想要产生3D效果的话需要透视(3D投影在2D平面)

模拟人类的视觉位置,可以认为是只安排一只眼睛去看

透视我们也称之为视距,视距就是人的眼睛到屏幕的距离

距离视觉点近的电脑平面成像越大,越远的越小

透视的单位是像素

透视是写在被观察元素的父盒子上面的

d是视距,是一个距离人的眼睛到屏幕的距离

z是z轴,物体距离屏幕的距离,越大我们看到的物体就越大

3D旋转

3D旋转可以让我们按照x轴y轴z轴或者自定义轴旋转

语法:

transform: rotateX(45deg);
transform: rotateY(45deg);
transform: rotateZ(45deg);
transform: rotate3d(x,y,z,deg);

这前面三个分别是沿着x,y,z正方向旋转45deg,第四个是沿着自定义轴旋转,deg是角度 

对于元素的旋转方向的判断,基于左手准则

左手手拇指指向x轴的正方向,其余手指的弯曲方向就是该元素沿着x轴旋转的方向

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body{
            /* 透视写到被观察的元素的父盒子上面 */
            perspective: 500px;
        }
        div{
            width: 200px;
            height: 300px;
            background-color: pink;
            transform: translate3d(100px,100px,100px);
            transform: translateZ(-300px);
            transition: all 0.5s;
            margin: 0 auto;
        }
        div img{
            width: 100%;
            height: 100%;
        }
        div:hover
        {
            transform: rotateX(180deg);
        }
    </style>
</head>
<body>
    <div>
        <img src="./王振1.jpg" alt="">
    </div>
</body>
</html>

这是沿着不同轴转动能实现的效果 

3D呈现

3D呈现是transform-style

它控制子元素是否开启三维立体环境

transform-style:flat子元素不开启3d立体空间,默认的

transform-style:preserve-3d,子元素开启立体空间

代码写给父级,影响的是子盒子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body{
            perspective: 500px;
        }
        .box{
            position: relative;
            width: 200px;
            height: 200px;
            margin: 100px auto;
            transition: all 1.1s;
            transform-style: preserve-3d;
        }
        .box:hover{
            transform: rotateY(60deg);
        }
        .box div{
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background-color: aquamarine;
        }
        .box div:last-child{
            background-color: purple;
            transform: rotateX(60deg);
        }
    </style>
</head>
<body>
    <div class="box">
        <div></div>
        <div></div>
    </div>
</body>
</html>

这就可以实现3D的立体效果

 两面旋转盒

我们首先需要搭建html结构

box父盒子里面包含前后两个子盒子

box是反转的盒子,front是前面的盒子,back是后面的盒子

我们反转的是盒子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body{
            perspective: 350px;
        }
        .box{
            position: relative;
            width: 250px;
            height: 300px;
            margin: 100px auto;
            /* 让背面的盒子保存立体空间 */
            transition: all 3s;
            transform-style: preserve-3d;
            backface-visibility: hidden;
        }
        .front,
        .back{
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            border-radius: 50%;
        }
        .front{
            z-index: 1;
        }
        .back{
            transform: rotateY(180deg);
        }
        .box:hover{
            transform: rotateY(180deg);
        }
    </style>
</head>
<body>
    <div class="box">
        <img src="./见见的狗.jpg" alt="" class="front">
        <img src="./王振2.jpg" alt="" class="back">
    </div>
</body>
</html>

这是我们实现的代码

旋转木马案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body{
            perspective: 800px;
        }
        @keyframes rotate{
            0%{
                transform: rotateY(0);

            }
            100%{
                transform: rotateY(360deg);
            }
        }
        section{
            position: relative;
            width: 400px;
            height: 400px;
            margin: 100px auto;
            transform-style: preserve-3d;
            animation: rotate 10s linear infinite;
            background: url(./王振1.jpg);
            background-size: cover;
        }
        section:hover{
            /* 鼠标放置暂停 */
            animation-play-state: paused;
        }
        section div{
            position: absolute;
            width: 100%;
            height: 100%;
            top: 0;
            left: 0;
            background: url(./见见的狗.jpg);
        }
        section div:nth-child(1){
            transform: translateZ(500px);
        }
        section div:nth-child(2){
            transform: rotateY(60deg) translateZ(500px);
        }
        section div:nth-child(3){
            transform: rotateY(120deg) translateZ(500px);
        }
        section div:nth-child(4){
            transform: rotateY(180deg) translateZ(500px);
        }
        section div:nth-child(5){
            transform: rotateY(240deg) translateZ(500px);
        }
        section div:nth-child(6){
            transform: rotateY(300deg) translateZ(500px);
        }
    </style>
</head>
<body>
    <section>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
    </section>
</body>
</html>

当然是要先旋转再移动啦 

说实话这个看久了头都晕了

浏览器私有前缀

浏览器有私有前缀,是为了兼容老版本的写法,比较新版本的浏览器都无需添加

这就是主要的属性

看完十日终焉的我:

;