CSS3

205 阅读12分钟

CSS3 新增选择器

子级选择器

语法: element1>element2
注意: 如果element2不是element1的直接子级,则不会被选中。“>”前后必须是直接父级和直接子级。

兄弟选择器

语法: 
    element1 + element2
    element1 ~ element2
注意:
    1. 选中的是后面相邻的同级元素
    2. 只能选中紧邻后面一个元素
    3. 两元素有相同父级
    4. “+”符号前后壳有空格

结构伪类选择器

可以匹配父元素中的首个、最后一个子元素,也可以匹配指定的子元素; 也可以根据类型匹配,匹配方法同子元素。

选择器:                    描述:
    E:first-child               匹配父元素中第一个子元素E
    E:last-child                匹配父元素中最后一个子元素E
    E:nth-child(n)              匹配父元素中第n个子元素E。 同时满足两个条件(选中第n个子元素且是E类型的标签)。
    E:first-of-type             指定类型E第一个
    E:last-of-type              指定类型E最后一个
    E:nth-of-type(n)            指定类型E第n个。 匹配同来性中的第n个同级兄弟元素E,忽视同级中其他类型的元素。

    注意:选择器中的“n”,可以是数字,关键字,公式。
             - 数字嗲表选中第几个;
             - 关键字如奇数odd、偶数even
             - 公式:
                 - 2n:偶数;
                 - 2n+1:奇数;
                 - 5n:5 10 15...
                 - n+5:从第五个(包含5)开始到最后,5 6 7 8 9 ...
                 - -n+5:前五个(包含5),5 4 3 2 1 0

伪元素选择器

选择器:            描述:
E::befor            在E元素内部的前面插入一个元素
E::after            在E元素内部的后面插入一个元素
E::first-letter     选中E容器内部的第一个字母
E::first-line       选中E容器内部的第一行文本

注意:伪元素只能给双标签添加; 伪元素冒号前不能有空格; 伪元素里面必须写属性content:"";

属性选择器

选择器:            描述:
E[att]              选中具有att属性的E元素
E[att="val"]        选中具有att属性且属性值等于val的E元素
E[att^="val"]       选中具有att属性且属性值以val开头的E元素
E[att$="val"]       选中具有att属性且属性值以val结尾的E元素
E[att*="val"]       选中具有att属性且属性值包含val的E元素

!选择器权重总结:

  • 基础选择器:id选择器 > 类选择器 > 标签选择器 > *
  • 伪类选择器、属性选择器的权重等于类选择器
  • 伪元素选择器权重等于标签选择器

CSS3 盒模型

box-sizing属性,来指定和模型,饿哦们就可以设置如何计算一个元素的总宽度和总高度。

属性值:
        content-box: 标准盒模型,盒模型外扩。
        border-box:  怪异模式, 盒模型内减。

    标准模式:
            content-box: 默认的, 标准模式。 定义了在盒子的widthheight之外绘制元素的内边距和边框。 也就是给盒子添加paddingborder属性值时,盒子内部的内容区域大小widthheight不会发生变化。
                    standard模式: 标准模式中,盒子总体大小为width(height)+padding+border,内容区域是widthheight。
        
    怪异模式:
            border-box: 为元素指定的任何内边距和边框都将在已设定的width和height内进行绘制。
                    Quirks模式:  怪异模式中,定义盒子总体大小为width和height,添加padding和border属性后,宽高不变,内容区减小。  

CSS3新增属性

边框圆角属性

作  用:
        设置边框的圆角。 美化样式。
属性名:
        border-radius
属性值: 
        - 像素值: 以x像素值为半径画圆的弧度作为圆角。
        - 百分比: 以自身宽或高的百分比数值大小为半径画圆的弧度作为椭圆角。

语法格式有以下几种:
        border-radius:x-radius/y-radius;     
        表示水平方向x的属性值和垂直方向y的属性值。  
        
        如果x、y属性值相同,可以简化写一个值去定义: 
        border-radius:30px;定义了四个角都是一样的属性值。

        单一属性的写法:
                border-top-left-radius: 
                border-top-right-radius: 
                border-bottom-right-radius: 
                border-bottom-left-radius: 

                注意:书写格式先写上下,后下左右。

        综合写法:
                border-radius: 四个角相同;    定义一个属性值时。
                border-radius: 左上角 右上角 右下角 左下角;   定义四个属性值时
                border-radius: 左上角  右上角/左下角 右下角;   定会三个属性值时
                border-radius: 左上角/右下角  右上角/左下角;   定义两个属性值时

       “/” 的属性值写法:
                border-radius 属性值中出现了/斜线, /前面可以定义水平方向的四种值写法,/后面可以设置垂直方向的四种值写`法。/ 前后可以按需搭配组合。
                例: border-radius50% 20% 30% / 20% 10%;

文字阴影

作用:
        通过 text-shadow 属性可向文本定义阴影。 其属性值可以规定水平方向、垂直方向、模糊距离、阴影颜色等。
属性值:
        h-shadow: 必选值(像素值)。 水平方向的阴影位置。 允许负值。
        v-shadow: 必选值(像素值)。 垂直方向的阴影位置。 允许负值。
        blur:     可选值(像素值)。 模糊距离。
        color:    可选值(颜色值)。 阴影颜色。
语法格式:
        text-shadow: 水平位置  垂直位置  模糊程度  颜色;
        text-shadow: 3px 3px 3px #666;

多层阴影:也可以定义多层阴影效果

        可以用逗号隔开单个定义的属性值。 多层阴影有压盖问题,先写的压盖后些的。
        例: p {
                text-shadow: 3px 3px 3px #666,
                             4px 4px 4px #666,
                             5px 5px 5px #666;
            }

盒子阴影

作  用:
        box-shadow 属性给盒子的边框添加阴影。
属性值:
        h-shadow: 必选值(像素值)。 水平方向的阴影位置。 允许负值。
        v-shadow: 必选值(像素值)。 垂直方向的阴影位置。 允许负值。
        blur:     可选值(像素值)。 模糊距离。
        color:    可选值(颜色值)。 阴影颜色。
        spead:    可选值(像素值)。 阴影的尺寸。
        inset:    可选值。 将外部阴影改为内部阴影。
语法格式:
        box-shadow: 水平位置 垂直位置 模糊程度 扩展大小 颜色 是否内边框阴影;
        box-shadow: 3px 3px 3px 30px #666 inset;

        注意:扩展大小: 定义将盒子宽高变大多少px
             是否内边框阴影: 默认外边框阴影。 添加inset属性值定义内边框阴影

 多层阴影:
        实现方式同文本阴影格式。

        可以用逗号隔开单个定义的属性值。 多层阴影有压盖问题,先写的压盖后些的。
        例: div {
                border: 1px solid #333;
                box-shadow: 3px 3px 3px 3px #666,
                             4px 4px 4px 4px #666,
                             5px 5px 5px 5px #666;
            }

CSS3 过度属性

属性名:
        transition
作用: 
        使用 transition 属性可以实现补间动画(过渡效果),并且当前元素只要属性发生变化时即存在两种状态(AB代指),那么AB之间就可以实现平滑过度的动画效果。
语法格式:(综合写法)
        transition:过度属性  过度时间  运动曲线  延时时间;

属性:
   - transition: 简写的属性。 后面可以定义四个过度属性。

   - 过度属性: transition-property: 过度的css属性名。
       属性值:
               - none: 没有属性过度。
               - all:   所有变化的属性都过度。
               - 属性名:具体的属性名,定义多个属性可用逗号隔开
               
   - 过渡时间: transition-duration: 定义过度时间。 默认值0。
       属性值:
               数值。 单位s秒 。

   - 过渡曲线: transition-timing-function: 过度曲线。 默认值“ease”。
       属性值:
               - linear: 匀速过度效果。 规定以相同速度开始至结束。
               - ease: 规定慢速开始、速度变快、慢速结束的过度效果。
               - ease-in: 规定慢速开始。
               - ease-out: 规定慢速结束。
               - ease-in-out: 规定慢速开始、慢速结束。
               - cubic-bezier(x1,y1,x2,y2): 函数曲线(贝塞尔曲线)。x1、x2取值0-1;y1、y2取值任意数值,四个数值表示拉扯的点的两个坐标。
   - 延时时间: transition-delay: 延时时间。 过度开始的时间。 默认值。
       属性值:
               数值。 单位s秒 。

2D 转换

属性名:
        transform  转换属性
作用:
        css3可以通过 transform 属性对元素进行移动、缩放、旋转、拉伸、拉长效果。 配合过度和动画知识可以取代flash才可以实现的动画效果。

位移 translate()

transform 属性的属性值为 translate() 时,可以实现元素位移效果。

语法格式:
        transform: translate(x,y);
        x水平方向位移距离,y垂直方向位移距离。 xy取值可以是px像素值或百分比。 区分正负。  当translate(x)只写一个值时,定义水平方向的位移。
属性值:
        多种转换方法的属性值可以实现不同的转换效果。

        - translate(x,y)   定义位移

缩放 scale()

transform 属性的属性值为 scale() 时,可以实现元素缩放效果。

语法格式:
        transform: scale(x,y);
        注意:定义元素以元素中心点为中心点根据xy数值大小以倍数缩放。

属性值:
        - scale(x,y)  定义了分别改变元素的宽度高度的倍数
        - scale(n)    定义宽高同事缩放n倍
        - scaleX(n)   改变元素的宽度  
        - scaleY(n)   改变元素的高度  

旋转 rotate()

transform 属性的属性值为 rotate() 时,可以实现元素旋转效果。

语法格式:
        transform: rotate(数值deg);
        注意:deg为单位:度数。 正数表示顺时针旋转,负数逆时针旋转。 2D中旋转只有一个属性值。  元素旋转后坐标轴也跟着发生变化。 因此多个属性值同时设置给 transform 时,书写顺序不同导致的旋转效果有差异。

倾斜 skew()

transform 属性的属性值为 skew() 时,可以实现元素倾斜效果。

语法格式:
        transform: skew(数值deg,数值deg);
        注意:deg为单位:度数。 两个数值分别表示XY轴方向倾斜的角度,属性值区分正负。 默认数值为0。 

        只写一个数值时,元素以x水平方向倾斜。 正数代表向x轴正方向倾斜,负数代表向x轴负方向倾斜;y数值同理。

基准点 transform-origin属性

作用:2D转换中多属性位移会造成元素原点发生变化, 通过 transform-origin 属性可以调整元素的水平和垂直方向的位置。     就是定义元素的原点, 规定以哪个点为原点旋转。

语法格式:
        transform-origin: x y;
        注意:属性值包含两个值,中间用空格隔开。

属性值:
        x: 定义x轴的原点在何处。可能值:left、center、right、像素、百分比
        y: 定义y轴的原点在何处。可能值:top、center、bottom、像素、百分比

3D 转换

3D透视&旋转

坐标轴:X轴、Y轴、Z轴。
       - X轴:电脑屏幕左上角为原点,向右水平方向为X轴正方向,左为负方向。
       - Y轴:电脑屏幕左上角为原点,向下垂直方向为Y轴正方向,上为负方向。
       - Z轴:电脑屏幕左上角为原点,垂直XY水平面正面方向为Z轴正方向,反为负方向。
       
透视: 
     透视将2D平面在转换的过程中呈现出3D效果。
作用:
     设置在z轴的实现焦点的观察位置,从而实现3D查看效果。
特点: 
     近大远小。
属性:
     perspective: 透视 
属性值:
     像素值。数值越大代表观察点距离z轴原点越远,图形效果越完整且接近原始尺寸。
     - rotateX(angle)   定义沿着X轴进行3D旋转。正数值顺时针旋转,负数值逆时针旋转
     - rotateY(angle)   定义沿着Y轴进行3D旋转。正数值顺时针旋转,负数值逆时针旋转
     - rotateZ(angle)   定义沿着Z轴进行3D旋转。正数值顺时针旋转,负数值逆时针旋转
注意:
     透视属性 perspective:1000px; 要设置给3D变化元素的父级。
     3D变化元素设置旋转效果: transform: rotateX(30deg);
实现:
        .fu{
            perspective:1000px;
        }
        .zi img{
            transition:img 1s ease;
        }
        .zi img:hover{
            transform: rotateX(30deg);
        }

3D位移

属性值:
     - translateX(x)   设置X轴的位移值。
     - translateY(y)   设置Y轴的位移值。
     - translateZ(z)   定义3D位移,设置Z轴的位移值。
     属性值可以为像素值或百分比,正负值代表位移方向。正数向对应轴的正方向移动,负值向对应轴的负方向移动。

CSS3 动画

CSS3创建动画分两步: 创建动画、绑定动画。

创建动画

关键字:
     @keyframes 规则: 用于创建动画。

功能:
     在 @keyframes 中规定某项CSS样式。 可以创建从一种样式逐渐变化为另一种样式效果。可以人一多样式和改变次数。

语法格式:
     @keyframes 动画名称{
         动画过程,可以写任意在百分比过程的动画细节。
     }

绑定动画

背景:
    需要把 @keyframes 创建的动画绑定到某个选择器上,否则不会产生动画效果。
属性:
     animation
单一属性:
     - animation-name     规定 @keyframes 动画名称
     - animation-duration  规定完成一个动画周期的时间秒或毫秒。 默认0
     - animation-timing-function   规定动画的曲线。 默认是“ease”。
     - animation-delay   规定动画多久开始。 默认0
     - animation-iteration-count   规定动画播放次数。 默认1。 infinite表示无限次数播放


作用:
     animation 属性用于对动画进行绑定。
语法结构:
     div{
         animation: 动画名称  过渡时间  速度曲线  动画次数 延时时间;
     }

     其中必须设置动画名称和过度时间,其他属性按需设置。