前端系列-CSS02

1、动画效果

1、过渡动画(transition)

位置:添加到发生变化的标签的最初位置(即不是添加到标签的点击事件重中)

方式1:

        对标签的所有样式都添加动画效果         transition: all 1s;

方式2:

        对部分样式添加动画效果        transition: width 1s , box-shadow 5s;

时间的单位可以是s也可以是ms

例如下面的代码:
<style>
        #box{
            height: 200px;
            width: 200px;
            background-color: pink;
            /* transition: all 1s; */
            transition: width 1s , box-shadow 5s;
        }
        /* 添加鼠标悬浮事件 */
        #box:hover{
            width: 500px;
            /* 阴影向右偏移量,阴影向下偏移量,阴影范围,重阴影范围,阴影颜色 */
            box-shadow: 5px 6px 30px 10px rgba(19, 29, 226, 0.5);
        }
</style>

2、仿射变换(transform)

transform属性在CSS中用于应用2D和3D转换效果,如旋转、缩放、平移等。它主要有以下几个属性值:

1、translate():移动元素的位置。(数值可以是正数或负数,单位px)

                transform: translateX(50px);        X轴正方向(向右)平移50px

                transform: translateY(50px);        Y轴正方向(向下)平移50px

                transform: translateZ(50px);        Z轴正方向平移50px

                transform: translate(50px,20px);        向右50px,向下20px

2、rotate():旋转元素。其参数为rotate(angle),angle表示旋转角度,正值为顺时针,负值为逆时针。

            transform: rotateX(90deg);        沿X轴顺时针旋转90度

            transform: rotateY(90deg);        沿Y轴顺时针旋转90度

            transform: rotateZ(90deg);        沿Z轴顺时针旋转90度

            transform: rotate(20deg);        沿Z轴顺时针旋转90度


3 、scale():参数小于1缩小,参数大于1放大。

            transform: scaleX(0.5);        水平方向上缩小

            transform: scaleY(0.5);        水平方向上缩小

            transform: scaleZ(0.5);        水平方向上缩小

            transform: scale(0.5);        整体缩小

4、skew():倾斜元素。

            transform: skew(20deg);        水平方向上倾斜20度

            transform: skewX(20deg);        水平方向上倾斜20度

            transform: skewY(20deg);        垂直方向上倾斜20度

            transform: skew(20deg,50deg);        水平方向倾斜20度,垂直方向倾斜50度

5、perspective():设置元素的透视效果。其参数为perspective(distance),distance表示观察者与元素的距离,值越大,透视效果越明显。例如,perspective(500px)表示设置元素与观察者相距500像素时的透视效果。

相关属性

transform-origin属性表示在对元素进行变换的时候,设置围绕哪个点进行变化的。

transform-origin属性有如下用法:

  1. 水平方向有left | center | right三个值。
  2. 垂直方向有 top | center | bottom 三个值。

所以transform-origin属性一共有九个值,可以根据实际需要设置。

transform-origin: 100px 200px; 旋转点距离元素左边100px,距离元素上边200px
transform-origin: left 200px; 旋转点在左边,距离元素上边200px
transform-origin: center center; 旋转点在元素正中心
transform-origin: right bottom; 旋转点在元素右下方
transform-origin: left; 旋转点在左边(默认左边框中间)

3、关键帧动画

视频都是一帧一帧的,通过设置每一帧的状态,产生动画的效果

@keyframes 规则名{  }用来定义动画规则,确定每一帧的状态。

在产生动画的标签样式中添加 animation 属性,并设置相应的属性值。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>关键帧动画</title>
    <style>
        .box{
            height: 500px;
            width: 500px;
            border: 1px solid black;
            margin: 0 auto;
            margin-top: 100px;
            background-color: aquamarine;
        }
        .box>.nei{
            height: 300px;
            width: 100px;
            margin: 0 auto;
            margin-top: 100px;
            background-color: rgb(215, 91, 91);
            /* 关键帧动画:规则名称为AAA 动画时长为1s 无限循环 匀速 */
            animation: AAA 5s infinite linear;
        }

        /* 定义动画规则 */
        @keyframes AAA{
            /* 动画初始的时候的状态 */
            0%{
                transform: rotateZ(0deg);
            }
            /* 动画执行25%的时候的状态 */
            25%{
                transform: rotateZ(90deg);
            }
            /* 动画执行完的时候的状态 */
            100%{
                transform: rotateZ(360deg);
            }
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="nei">
            你好
        </div>

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

上述代码的运行效果如下:

2、响应式布局

根据浏览器窗口或设备的大小调整页面结构

        1、流式布局:百分比布局,单位为%,一般参考父标签转换像素。

        2、视口布局:vw(view width)        vh(view height),

                        把当前窗口的宽度分成100等份,1vw就是一份;

                        把当前窗口的高度分为100等分,1vh就是一份。

        3、媒体查询+em+rem:媒体查询用于监听屏幕大小,

                        1em = 父标签字体大小(父亲没有看爷爷,一层一层往上找)

                        1rem = html标签字体的大小

                        注意:1、当em用在非font-size,会参考当前标签的字体大小(例如:当前

                                        div宽度设置为2em,则就是当前div所对应的字体大小的2倍)

                                   2、当rem用在非font-size,依旧会参考html的字体大小

        4、栅格布局:bootsrtrap.css库

        5、网格布局:display:grid

        6、弹性布局:移动端的神器

        7、传统布局(盒模型+浮动+定位)

2.1、媒体查询

将样式填写在@media内,当浏览器窗口满足后面的条件的时候,会采用对应的样式。

格式:@media screen and (条件1) and (条件2){ }

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>媒体查询</title>
    <style>
        span{
            color: red;
            font-size: 100px;
        }
        /* 当浏览器窗口小于等于1200的时候 */
        @media screen and (max-width:1200px){
            span{
                color: blue;
                font-size: 50px;
            }
        }
        /* 当浏览器窗口小于等于1000的时候,大于等于900的时候 */
        @media screen and (max-width:1000px) and (min-width:900px){
            span{
                color: rgb(226, 29, 184);
                font-size: 50px;
            }
        }
        /* 当浏览器窗口小于等于800的时候 */
        @media screen and (max-width:800px){
            span{
                color: rgb(0, 255, 4);
                font-size: 25px;
            }
        }

    </style>
</head>
<body>
    <span>你好</span>
</body>
</html>

上述代码运行结果如下:

3、伪元素选择器

伪元素选择器,用CSS去伪装标签

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>伪元素选择器</title>
    <style>
        .box{
            width: 300px;
            height: 300px;
            background-color: pink;
        }
        .box::before{
            /* 向标签中填充内容 */
            content: "111111";
        }
        .box::after{
            content: "222222";
            color:green;
            font-size: 25px;
        }
    </style>
</head>
<body>
    <div class="box">
        这是box
    </div>
</body>
</html>

上述代码运行效果如下:

4、弹性布局

1、使用Flex布局后,子元素不再需要自己控制其在父元素中的位置,而是由父元素的Flex

     布局属性来控制。

2、flex布局改变的不是自身,而是自己内部的子元素。也就是说,定义时要将flex定义在

      父元素,把父元素当做‘容器’,然后改变内部子元素的排列方式。

3、在Flex布局中,子元素的float、clear都失效了。也就是说,使用Flex布局后,子元素就

      不需要再使用float属性进行浮动,父元素也不需要再使用clear属性来清除浮动。同

      时,设置了flex的元素,子元素会“块状化”,即父元素使用了display:flex其子元素都会

      变成块级元素。

语法:对需要设置成弹性容器的标签添加 display:flex 样式

1、弹性容器内容有两个轴:主轴、交叉轴(另一个轴)

        主轴:默认 从左到右

        交叉轴:默认 从上到下

2、弹性容器中的子标签(子代亲儿子标签),叫弹性子元素

3、弹性容器的所有样式,仅仅对弹性子元素有效(即仅对亲儿子有效)

如果标签设置为弹性容器:

        1、所有弹性子元素会按主轴的方向排列。

        2、如果弹性子元素的标签没有设置高度,会撑满父元素高度。

        3、如果弹性子元素的总宽度大于父元素的宽度,那么弹性容器会自动计算分配给弹性子元素的宽度,进行重新分配(即不会自动换行,会挤压)

1、将当前容器设置成弹性布局
        display: flex;

2、改变主轴方向
        flex-direction: column;  主轴为垂直方向(从上到下)
        flex-direction: row;  默认值,主轴为水平方向(从左到右)

3、主轴上的排布方式
        justify-content: ;

4、另一个轴上面(交叉轴)的排布方式 
        align-content: ;  多行
        align-items: ;   主要设置单行(也可设置多行)

        /* 4.1、主轴方向上 */
            justify-content: center;    /* 紧凑居中排列 */
            justify-content: end;    /* 从末尾处排列 */
            justify-content: start;    /* 从开始处排列 */
            justify-content: space-around;    /* 间隔:121 */
            justify-content: space-between;    /* 间隔:010 */
            justify-content: space-evenly;    /* 间隔:111 */

        /* 4.2、交叉轴方向上-单行 */
            align-items: center;    /* 居中(多行时不紧凑) */
            align-items: end;    /* 紧靠末尾处(多行时不紧凑) */
            align-items: start;    /* 紧靠开始处(多行时不紧凑) */

        /* 4.3、交叉轴方向上-多行 */
            align-content: center;    /* 紧凑居中 */
            align-content: end;    /* 紧凑紧靠末尾处 */
            align-content: start;    /* 紧凑紧靠开始处 */
            align-content: space-around;    /* 间隔:121 */
            align-content: space-between;    /* 间隔:010 */
            align-content: space-evenly;    /* 间隔:111 */

5、换行
        flex-wrap: nowrap;  不允许换行,默认值
        flex-wrap: wrap;    允许换行
        flex-wrap: wrap-reverse;  允许换行,但是换行后的弹性子容器排列相反,变成从右到左或从下到上

6、让弹性子元素会占据剩余的全部空间(设置在弹性子容器的样式里)
        方式1:flex-grow: 1;    (代表只有flex-grow为1)
        方式2:flex: 1; (代表flex-grow为1,flex-shrink为1,flex-basis为0)

7、弹性子元素在挤压的时候是否会缩小(设置在弹性子容器的样式里)
        flex-shrink:0    表示不允许缩小
        flex-shrink:1    表示允许缩小

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值