CSS3

1. CSS3 属性选择器

属性选择器的权重是10
在这里插入图片描述

2. CSS3结构伪类选择器

在这里插入图片描述

ul li:nth-child(2) {
            background-color: pink;
        }
-----------------------------------------------------------------
<ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
    </ul>

注意:E: nth-child(内容):
1)内容为数字:指的是第几个标签
2)内容为 even:奇数 ; odd:偶数
3)内容公式:从0开始
4)第0个元素和超出的元素 的个数不计
在这里插入图片描述

-nth-child() 和 nth-of-type() 的区别:
-nth-child()选择父元素里的 第n个孩子,他不管里面的孩子是否同一类型。 nth-of-type() 有类型要求。
ul里面 我们只允许放li标签,所以他们这两个类选择器作用一样。

在这里插入图片描述

3. 伪元素选择器

在这里插入图片描述
在这里插入图片描述

4. CSS3 2D转换

转换(transform):实现图片位置的偏移
语法:
transform:translate(x, y);或者分开写
transform:translateX(n);
transform:translateY(n);

注意:
定义2D转换中的移动,沿着X和Y轴移动元素
translate最大的优点:不会影响到其他元素的位置
translate中的百分比单位是相对于自身元素的translate:(50%, 50%)
对行内标签没有效果。

使盒子移动有三种方法:margin 定位 转换
父盒子内的盒子相对于父盒子水平垂直居中

<!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>
    <style>
        .one {
            width: 300px;
            height: 300px;
            background-color: pink;
            position: relative;
            margin: auto;
        }
        
        .one .tow {
            width: 100px;
            height: 100px;
            background-color: rgb(109, 50, 50);
            transform: translate(-50%, -50%);
            position: absolute;
            top: 50%;
            left: 50%;
        }
    </style>
</head>

<body>
    <div class="one">
        <div class="tow"></div>
    </div>
</body>

</html>

2D转换之旋转rotate

2D 旋转是让元素在2维平面内顺时针或者逆时针进行旋转
transform:rotate(30deg);

img {
            width: 150px;
            height: 150px;
            border-radius: 50%;
            border: 5px solid pink;
            transition: all 6s; /*过渡*/
        }
        
        img:hover {
            transform: rotate(60deg); /*偏移*/
        }

使用tranform:rotate()还可以制作下拉图标在这里插入图片描述
方法:在一个盒子内加一个伪元素,伪元素这个黑子只留右边和底边,然后旋转45度 在调样式即可。

<!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>
    <style>
        div {
            width: 210px;
            height: 30px;
            border: 1px solid #000;
            position: relative;
        }
        
        div::after {
            content: "";
            width: 12px;
            height: 12px;
            border-right: 1px solid #000;
            border-bottom: 1px solid #000;
            transform: rotate(45deg);
            position: absolute;
            top: 5px;
            right: 12px;
            transition: all 0.3s;
        }
        
        div:hover::after {
            transform: rotate(225deg);
        }
    </style>
</head>

<body>
    <div>

    </div>
</body>

</html>

2D转换中心点transform-origin默认中心旋转(即50%);
语法:transform-origin:x y;
注意后面的参数x和y用空格隔开
x y 默认转换的中心点是元素的中心点(50%, 50%)
还可以给x y 设置像素或者方位名词(top bottom left right center)

2D 转换值缩放scale

语法:transform:scale(x, y)//里面写的数字,不跟单位,就是倍数的意思;大于1 放大 小于1 缩小



scale优势:不影响其他盒子, 而且可以设置缩放的中心

2D转换综合写法
格式:transform:translate() rotate() scale()…等
上面属性的顺序会影响转换效果(先旋转会改变坐标轴的方向)

同时有位移和其他属性的时候,位移要写在最前面
5. CSS 3D动画

5.1 动画

动画的基本使用步骤:

 1)先定义动画;
> 语法:

 @keyframes  变量名name { 
 	0%{....}
	100%{....}
  } ```

> 2)使用动画
 语法:
 /*动画名词*/
 animation-name:变量名name;
 
 /持续时间*/
 animation-duration: n s;

动画序列: 0%是动画的开始,100%是动画的完成,这样的 规则就是动画序列;

动画序列中间添加各个时间段:25% 50% 等,动画里面的百分比就是总的时间的划分。

@keyframes move {
            0% {
                transform: translate(0, 0);
            }
            25% {
                transform: translate(1000px, 0);
            }
            50% {
                transform: translate(1000px, 200px);
            }
            75% {
                transform: translate(0, 200px);
            }
            100% {
                transform: translate(0, 0);
            }
        }

动画常用属性:

在这里插入图片描述
在这里插入图片描述
name 和 duration一定要写。
 c
在这里插入图片描述
小熊动起来代码:

<!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>
    <style>
        body {
            background-color: #ccc;
        }
        
        div {
            /* 1)根据图片上熊的个数来设置父盒子的宽高;  */
            overflow: hidden;
            position: absolute;
            width: 200px;
            height: 120px;
            background: url("images/bear.png") no-repeat;
            /* 3)使用动画,由于简写 所以注意各个位置是什么; */
            animation: bear .5s steps(8) infinite, move 3s forwards;
            /*5)引用动画*/
        }
        /* 2)定义动画序列,初始位置设定图片从最左开始、终点位置应该要回到初始位置,所以设置为图片的长度的负值; */
        
        @keyframes bear {
            0% {
                background-position: 0 0;
            }
            100% {
                background-position: -1600px 0;
            }
        }
        /* 4)为使熊走一段路程,然后停止在原地做动作,需要重新设置一个新的动画函数; */
        
        @keyframes move {
            0% {
                left: 0;
            }
            100% {
                left: 50%;
            }
        }
    </style>
</head>

<body>
    <div></div>
    <!-- 小熊动起来的思路: -->


</body>

</html> 
6.CSS 3D转换

在这里插入图片描述
3D位移:translate3d

语法:transform:translate3d(x, y, z)
xyz不能省略,如果没有则为0 它们的单位都是px.

透视 perspective
在这里插入图片描述
注意:透视写到被观察的父盒子上面;

在这里插入图片描述
在这里插入图片描述
translageZ(数值) 正数越来越大,负数越来越小,它也是可以起到透视的效果,只是主要在子盒子上设置。
在这里插入图片描述

3D旋转 rotate3d

在这里插入图片描述
左手准则判断 X:手背朝着自己,四指伸直,拇指与四指垂直,其他四指弯曲,弯曲的方向为旋转的正方向。
Y:手背向自己,四指向右弯曲,拇指朝下,四指弯曲的方向为旋转的正方向。

3D呈现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>
    <style>
        .box {
            width: 300px;
            height: 300px;
            background-color: #ccc;
            position: relative;
            margin: 20px auto;
            perspective: 200px;
            transform-style: preserve-3d;
        }
        
        .box:hover {
            transform: rotateX(180deg);
            transition: all 10s;
        }
        
        .box .one {
            width: 100px;
            height: 100px;
            background-color: pink;
            position: absolute;
            top: 34%;
            left: 33%;
        }
        
        .box .tow {
            width: 100px;
            height: 100px;
            background-color: skyblue;
            position: absolute;
            top: 34%;
            left: 33%;
            transform: rotateX(45deg);
        }
    </style>
</head>

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

</html>
7. 浏览器私有前缀

浏览器私有前缀是为了兼容老版写法,比较新的版本的浏览器无需添加。
在这里插入图片描述
综合案例:旋转木马

<!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>
    <style>
        body {
            perspective: 1000px;
        }
        
        section {
            position: relative;
            width: 300px;
            height: 400px;
            margin: 100px auto;
            transform-style: preserve-3d;
            animation: rotas 4s linear infinite;
        }
        
        section:hover {
            animation-play-state: paused;
        }
        
        @keyframes rotas {
            0% {
                transform: rotateY(0deg);
            }
            100% {
                transform: rotateY(360deg);
            }
        }
        
        section div {
            width: 100%;
            height: 100%;
            position: absolute;
            top: 0;
            left: 0;
            background: url("images/circle0.jpg") no-repeat;
        }
        
        section div:nth-child(1) {
            transform: rotateY(0deg) 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>
    <!-- 旋转木马思路:
    1)准备一个盒子,里面放六个小盒子;
    2)大盒子设置宽高,小盒子相对于大盒子设置定位问题,并且设置背景图片;
    3)六张图片分别旋转不一样的角度,360/6=60;由于一开始图片都是在坐标轴原点,所以需要设置往前(也就是z轴)一定的距离,注意每个盒子往前走的距离要保持一致;
    4)前面做完后,由于子元素默认不开启3d立体空间,所以需要在父盒子添加 transform-style: preserve-3d;还需要添加透视;
    5)为了显示出动画的效果,需要添加动画,实现动画效果。 -->
    <section>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
    </section>
</body>

</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值