02 css3

沈宫新 2020-04-30

# 1. css3选择器 #
## 1.1 css3属性选择器 ##

    选择符            简介
    E[att]            选择具有att属性的元素
    E[att= "val"]    选择具有att属性且属性值等于val的E元素
    E[att^="val"]    匹配具有att属性、且值以val开头的E元素
    E[att$="val"]    匹配具有at属性、且值以val结尾的E元素
    E[att*="val"]    匹配具有att属性、且值中含有val的E元

类选择器、属性选择器、伪类选择器  权重为10


## 1.2 css3结构伪类选择器 ##

用法

    选择符            简介
    E:first-child    匹配父元素中的第一个子元素E
    E:last-child    匹配父元素中最后一个E元素
    E:nth-child(n)    匹配父元素中的第n个子元素E
    E:first-of-type    指定类型E的第一个
    E:last-of-type    指定类型E的最后一个
    E:nth-of-type(n)指定类型E的第n个
代码演示

    

/* 只选择第一个子标签元素 */
    
    ul li:first-child {
        background-color: pink;
    }
    /* 匹配最后一个子元素 */
    
    ul li:last-child {
        background-color: skyblue;
    }
    /* 匹配第n个子元素 */
    
    ul li:nth-child(2) {
        background-color: black;
    }
    /* 匹配偶数元素 */
    /* n可以是关键词  even是偶数 odd基数*/
    
    ul li:nth-child(even) {
        background-color: aqua;
    }
    /* n可以是公式,但是n从0开始计算 */
    
    ul li:nth-child(2n+1) {
        background-color: yellowgreen;
    }
    /* of - type 指定类型的元素 */
    
    ul span:first-of-type {
        background-color: violet;
    }
    
    ul span:last-of-type {
        background-color: violet;
    }
    
    ul span:nth-child(2n) {
        background-color: gold;
    }


nth-child:

- 但是第 0 个元素或者超出了元素的个数会被忽略
-  选择父元素里面的第几个子元素,不管是第几个类型
-  本质上就是选中第几个子元素


## 1.3伪元素选择器 ##

    选择符        介绍
    ::before     在元素内部的前面插入内容
    ::after        在元素内部的后面插入内容

必须都有content属性

before 和 after 创建一个元素,但是属于行内元素,行内元素无大小

伪元素和标签选择器一样,权重为1

# 2.  2D转换 ##
## 2.1 二维坐标系 ##

x轴 水平向右
y轴 垂直向下 

1.  `2D` 转换

   - `2D` 转换是改变标签在二维平面上的位置和形状

   - 移动: `translate`
   - 旋转: `rotate`
   - 缩放: `scale`

2.  `translate` 语法
    
       - x 就是 x 轴上水平移动
       - y 就是 y 轴上水平移动
    

css
     
    transform: translate(x, y)
    transform: translateX(n)
    transfrom: translateY(n)

重点

- 沿着xy轴移动元素
- translate最大的优点:不会影响到其他元素的位置
- translate中的百分比单位是相对于自身元素translate:(50%,50%);
- 对行内标签没有效果

## 2.3 2D旋转 ##

1. rotate 旋转

   - `2D` 旋转指的是让元素在二维平面内顺时针或者逆时针旋转

2.  `rotate` 语法

   ```css
   /* 单位是:deg */
   transform: rotate(度数) 
   ```

3.  重点知识点
   - `rotate` 里面跟度数,单位是 `deg`
   -  角度为正时,顺时针,角度为负时,逆时针
   - 默认旋转的中心点是元素的中心点

4.  代码演示

   ```css
   img:hover {
     transform: rotate(360deg)
   }
   ```

设置旋转中心点
    
     

div {
            width: 200px;
            height: 200px;
            background-color: pink;
            margin: 100px auto;
            transition: all 1s;
            /* 跟方位名词 
            也可以是百分比  默认是50% 50% 等价于center center */
            /* transform-origin: left bottom;*/
            /* 可以是px */
            transform-origin: 50px 50px;
        }
        
    div:hover {
        transform: rotate(360deg);
    }



## 2.4 2D转换之缩放scale ##

1. `scale` 的作用

   - 用来控制元素的放大与缩小

2. 语法

   ```css
   transform: scale(x, y)
   ```

3. 知识要点
   - 注意,x 与 y 之间使用逗号进行分隔
   - `transform: scale(1, 1)`: 宽高都放大一倍,相当于没有放大
   - `transform: scale(2, 2)`: 宽和高都放大了二倍
   - `transform: scale(2)`: 如果只写了一个参数,第二个参数就和第一个参数一致
   - `transform:scale(0.5, 0.5)`: 缩小
   - `scale` 最大的优势:可以设置转换中心点缩放,默认以中心点缩放,而且不影响其他盒子

4. 代码演示

    ```css
        

div:hover {
           /* 注意,数字是倍数的含义,所以不需要加单位 */
           /* transform: scale(2, 2) */
       
           /* 实现等比缩放,同时修改宽与高 */
           /* transform: scale(2) */
       
           /* 小于 1 就等于缩放*/
           transform: scale(0.5, 0.5)
       }


    ```

## 2.5 2D转换综合写法 ##



1.  知识要点

   - 同时使用多个转换,其格式为 `transform: translate() rotate() scale()`
   - 顺序会影响到转换的效果(先旋转会改变坐标轴方向)
   - 但我们同时有位置或者其他属性的时候,要将位移放到最前面


css


  

div {
            width: 200px;
            height: 200px;
            background-color: pink;
            transition: all .5s;
        }
        
    div:hover {
        /* 顺序影响效果 */
        transform: translate(50px, 50px) rotate(180deg) scale(1.2);
    }



# 3.动画 #
## 3.1 动画基本使用 ##

1. 什么是动画

   - 动画是 `CSS3` 中最具颠覆性的特征之一,可通过设置多个节点来精确的控制一个或者一组动画,从而实现复杂的动画效果

2. 动画的基本使用
   - 先定义动画
   - 在调用定义好的动画

3. 语法格式(定义动画)

   ```css
    

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


   ```


4.  语法格式(使用动画)

   ```

div {
       /* 调用动画 */
       animation-name: 动画名称;
        /* 持续时间 */
        animation-duration: 持续时间;
   }


   ```


5. 动画序列

   - 0% 是动画的开始,100 % 是动画的完成,这样的规则就是动画序列
   - 在 @keyframs 中规定某项 CSS 样式,就由创建当前样式逐渐改为新样式的动画效果
   - 动画是使元素从一个样式逐渐变化为另一个样式的效果,可以改变任意多的样式任意多的次数
   - 用百分比来规定变化发生的时间,或用 `from` 和 `to`,等同于 0% 和 100%

6. 代码演示

css


   

<style>
       div {
         width: 100px;
         height: 100px;
         background-color: aquamarine;
         animation-name: move;
         animation-duration: 0.5s;
       }
   
       @keyframes move{
         0% {
           transform: translate(0px)
         }
         100% {
           transform: translate(500px, 0)
         }
       }
     </style>



## 3.2 动画序列 ##

根据节点(实际动画完成这步所需时间)来设置 动画使用顺序 
如 25% 50% 75%等 

## 3.3 动画常用属性 ##


    属性                            描述
    @keyframes                    规定动画。
    animation                    所有动画属性的简写属性,除了animation-play-state属性。
    animation-name                规定@keyframes动画的名称。( 必须的)
    animation-duration            规定动画完成一个周期所花费的秒或毫秒 ,默认是0。 (必须的 )
    animation-timing-function    规定动画的速度曲线,默认是"ease"
    animation-delay                规定动画何时开始,默认是0。animation-iteration-count    规定动画被播放的次数,默认是1,还有infinite
    animation-direction            规定动画是否在下一-周期逆向播放,默认是"normal ",alternate逆播放
    animation-play-state        规定动画是否正在运行或暂停。默认是"running" ,还有"pause"。
    animation-fill-mode            规定动画结束后状态,保持forwards回到起始backwards


    /* 简写属性 动画名称 持续时间 运动曲线 何时开始 播放次数 是否反方向 动画起始和结束 */
    animation: move 3s ease-in 1s infinite alternate forwards;

简写属性里不包含 animation-play-state 
暂停动画 :animation-play-state:paused;  和鼠标经过和其他配合使用
想要动画走回来而不是调回来 animation-direction :alternate


    值            描述
    linear        动画从头到尾的速度是相同的。匀速
    ease        默认。动画以低速开始,然后加快,在结束前变慢。
    ease-in        动画以低速开始。
    ease-out    动画以低速结束。
    ease-in-out    动画以低速开始和结束。
    steps()        (指定了时间函数中的间隔数量(步长)

# 3. 3D转换 #

## 3.1 三维坐标系 ##

- x轴:水平向右     右边正值
- y轴:垂直向下    下面正值
- z轴:垂直屏幕    往外面是正值 

## 3.2 3D位移 translate3d(x,y,z) ##


比2D移动多了一个可以移动的反向

就是 z 轴方向

   - `transform: translateX(100px)`:仅仅是在 x 轴上移动
   - `transform: translateY(100px)`:仅仅是在 y 轴上移动
   - `transform: translateZ(100px)`:仅仅是在 z 轴上移动
   - `transform: translate3d(x, y, z)`:其中x、y、z 分别指要移动的轴的方向的距离
   - **注意:x, y, z 对应的值不能省略,不需要填写用 0 进行填充**

 css
        
     

div {
        width: 200px;
        height: 200px;
        background-color: pink;
        /* transform: translateX(100px); */
        /* transform: translateY(100px); */
        /* 沿着z轴移动 后边单位一般都px translateZ(100px) 向外移动100px*/
        /* transform: translateX(100px) translateY(100px) translateZ(100px); */
        /* 简写 xyz不能省略 没有就写0*/
        transform: translate3d(100px, 100px, 100px);
    }


## 3.3 透视 perspective ##

透视写在被观察元素的父盒子上
距离视觉点越近的电脑平面成像越大,越远成像越小

- d:就是视距,视距就是指人的眼睛到屏幕的距离

- z:就是 z 轴,z 轴越大(正值),我们看到的物体就越大

## 3.4 旋转 rotate3d ##
3D 旋转指可以让元素在三维平面内沿着 x 轴、y 轴、z 轴 或者自定义轴进行旋转

1. 语法
   - `transform: rotateX(45deg)` -- 沿着 x 轴正方向旋转 45 度
   -  `transform: rotateY(45deg)` -- 沿着 y 轴正方向旋转 45 度
   -  `transform: rotateZ(45deg)` -- 沿着 z 轴正方向旋转 45 度
   - `transform: rotate3d(x, y, z, 45deg)` -- 沿着自定义轴旋转 45 deg 为角度

rotate3d

- `transform: rotate3d(x, y, z, deg)` -- 沿着自定义轴旋转 deg 为角度
- x, y, z 表示旋转轴的矢量,是标识你是否希望沿着该轴进行旋转,最后一个标识旋转的角度
 - `transform: rotate3d(1, 1, 0, 180deg)` -- 沿着对角线旋转 45deg
 - `transform: rotate3d(1, 0, 0, 180deg)` -- 沿着 x 轴旋转 45deg


transform-style

-  控制子元素是否开启三维立体环境
- `transform-style: flat`  代表子元素不开启 `3D` 立体空间,默认的
- `transform-style: preserve-3d` 子元素开启立体空间
-  代码写给父级,但是影响的是子盒子

相关推荐