6,前端学习-css-04

1. 过渡动画

  • 一:过渡属性的解释:表示元素从初始状态变化到结束状态(状态是一直存在),不能使用在display:none和block

  • 二:过渡属性的使用

    • 1.表示参加过渡的属性

      • 属性:transition-property

      • 属性值

        • 可以在后面书写参加的属性,多个属性值用空格隔开

        • 使用英文单词all 表示全部都参与过渡

        • 默认all可以不写 表示设置的属性都可以参与过渡

    • 2.过渡使用的时间

      • 属性:transition-duration(持续时间)

      • 属性值

        • css中时间使用可以秒(s)或者毫秒(ms)

        • 用户体验最佳的时间是0.8s

    • 3.过渡的延迟

      • 属性:transition-delay

      • 属性值: 秒数s

    • 4.过渡运动的方式

      • 属性:transition-timing-function

      • 属性值

        • 法定的属性值:linear、ease、ease-in、ease-out、ease-in-out

        • 贝塞尔曲线 http:cubic-bezier.com

    • 5.过渡的简写方式

      • 属性:transition

      • 属性值:过渡的属性 过渡的时间 延迟时间 运动方式

        • 写法 transition:all 0.8s;

  • 三:过渡使用的注意点

    • 过渡的属性设置在改变的元素本身上,不可以放在hover里面

    • 在过渡中只要设置了时间就可以触发过渡

    • 过渡的默认运动方式是ease

 

    <style>
        div{
            width: 100px;
            height: 100px;
            background: red;
            /* transition-property: all; */
            transition-duration: 5s;
            /* transition-delay: 3s; */
            transition-timing-function: cubic-bezier(.08,1.62,.42,-0.73)
        }
        div:hover{
            width: 1000px;
            height: 100px;
            background: pink;
        }
    </style>

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

2. 动画

  • 一.帧动画的解释:控制元素移动位置

  • 二:帧动画的要素

    • 1.需要声明动画

      • 在CSS样式表中创建

      • 关键字 @keyframes 帧动画的名字{设置动画的运动方式}

    • 2.需要调用动画

      • 调用执行动画就是使用CSS属性(控制哪个元素运动就给哪个元素添加属性即可)

      • 设置动画的时候需要添加定位属性,并且定位的属性要设置相同

  • 三:动画的使用方式(只要给动画设置了名字和时间,动画就可以运动起来)

    • 1.动画的声明/创建的注意点

      • 使用关键字,不要写错了

      • 动画的名字建议使用语义化的英文单词,不要设置中文、特殊符号

      • 运动方式有两种

        • 单次运动 from...to 表示开始到结束

        • 多次运动 百分比 表示将当前的容器分成多少份进行运动

    • 2.如何去调用关键帧动画(使用动画的属性)

      • animation-name 表示动画的名字 动画就可以被选择

      • animation-duration 表示动画运动的时间 s/ms

      • animation-timing-function 动画的运动方式

      • animation-iteration-count:infinite 无限循环

      • animation-direction 动画的方向 normal(顺时针) reverse(反向的) alternate(先正反后)

    • 3.简写方式 属性:animation 属性值:动画的名字 动画的时间 动画的方式;

    <style>
        section{
            width: 500px;
            height: 500px;
            border: 1px solid #000;
            margin: 200px auto;
            position: relative;
        }
        div{
            width: 100px;
            height: 100px;
            background: red;
            position: absolute;
            /* 动画的名字 */
            animation-name: divMove;
            /* 动画的时间 */
            animation-duration: 3s;
            /* 动画运动的次数 */
            animation-iteration-count: infinite;
            /* 运动的方向 */
            animation-direction: reverse
        }
        /* 创建动画 */
        @keyframes divMove{
            0%{left: 0;top: 0}
            25%{left: 400px;top: 0}
            50%{left: 400px;top:400px}
            75%{left: 0;top:400px}
            100%{left: 0;top: 0}
        }
    </style>

<body>
    <section>
        <div></div>
    </section>
</body>

 

3. 2D/3D

3.1 css3中的变形属性:transform

CSS3中的2D属性设置

  • translate() 移动、平移 单位是px

  • scale() 缩放 默认值是1

  • rotate() 旋转 单位是deg

  • skew() 倾斜 单位是deg

  • perspective() 景深、视距 单位是px

3.2 css3中的位移的使用

  • 1.属性:transform

  • 2.属性值:translate(设置位移的距离)

    • translateX() 位移方向X

    • translateY() 位移方向Y

  • 3.注意

    • 当需要设置两个方向的时候,可以把两个方向值写在一起 translate(x,y)

    • 还可以transform:translateX() translateY()

    • 位移不会脱离文档流

  • 我们经常使用定位和translate来使内容保持垂直居中

3.3 css3中缩放属性的使用

  • 属性值:scale(参数)

    • scaleX() 宽度缩放

    • scaleY() 高度缩放

    • scale(x,y) 如果x和y相等的时候,可以简写成一个参数

  • 缩放参数的情况

    • 默认值为1 表示不改变

    • 小于0 先缩小后放大倍数(颠倒的)

    • 等于0 消失/隐藏

    • 0~1 缩小倍数

    • 大于1 放大倍数

3.4 原点

所有的变形属性默认都是在元素的中心点开始进行变化的

  • 改变变形原点/基点:transform-origin

  • 属性值:top、right、bottom、left、center

    • 2D:x y

    • 3D:x y z

3.5 css3中的旋转属性

  • 1.CSS3中旋转属性的使用:transform

  • 2.属性值:rotate(角度值deg)

    • rotateX() 沿着X轴进行旋转 单杠运动

    • rotateY() 沿着Y轴进行旋转 钢管舞

    • rotate(只有一个参数) 默认是Z轴方向

  • 3.景深效果:远小近大(视距) 有两种表达方式

    • perspective:1200px 设置在父级元素

    • transform:perspective(1200px) 可以设置在子级元素上

    • 1200px是最佳的观察位置,建议设置在父级元素上

  • 4.注意点

    • 无论设置哪个轴向的旋转,永远都是在这个轴向的正值方向观察变化

    • 设置正值表示顺时针,负值就是逆时针

  • 5.倾斜属性值:skew(参数角度)

    • skewX() 沿着X轴倾斜

    • skewY() 沿着Y轴倾斜

    • skew(x,y)

3.6 3D属性

  • 一:HTML5+CSS3只能在高版本中使用

  • 二:CSS3中的3D属性

    • 1.形成3D空间(父级元素上设置)

      • 属性:transform-style

      • 属性值:flat(默认为2D空间)/preserve-3d(形成3D空间)

      • 注意:设置3D空间,浏览器不会发生任何变化,只是多了一条Z轴,可以在Z轴上设置变形属性

  • 三:3D中的变形属性设置

    • 1.位移属性

      • 2D:translate()、translateX()、translateY()

      • 3D:translateZ()、translate3D(x,y,z)

    • 2.缩放属性

      • 2D:scaleX()、scaleY()、scale()

      • 3D:scaleZ()、scale3D(x,y,z) 单独使用观察没有效果,需要一起使用

    • 3.旋转属性

      • 2D:roateX()、roateY()、rotate(默认就是Z轴)

      • 3D:roateZ()、rotate3D(x,y,z,角度值)

      • x,y,z表示开关 设置0和1

      • rotate3D(1,0,0,60deg) => rotateX(60deg)

      • rotate3D(1,1,0,60deg) => rotateX(60deg) rotateY(60deg)

      • rotate3D(1,1,1,60deg) => rotateX(60deg) rotateY(60deg) rotateZ(60deg)

    • 4.倾斜属性:没有Z轴上的变化

    • 5.多个属性一起使用时候的问题

      • 旋转和位移:建议先写位移后写旋转

      • 缩放和位移:建议先写位移后写缩放

    • 6.正方体的绘制:

4. 弹性盒

【重要】弹性盒的概念

  • 1.什么是弹性盒:控制子级元素在父级元素中的排列位置

  • 2.弹性盒的容器:设置弹性盒属性要在父级元素上,在弹性盒中会生成两条轴线(主轴和侧轴)

  • 3.设置方法 display:flex

  • 4.弹性盒的特点

    • 在弹性盒中默认主轴方向是X轴,侧轴是Y轴

    • 主轴和侧轴是相对的关系,不是绝对的,主轴可以修改

    • 在弹性盒中不考虑元素类型,所有的标签都可以直接设置宽高大小

    • 居中方式:给单个子级元素设置margin:auto

  • 5.弹性盒使用的注意点 - 不会脱离文档流,不会破坏布局,不存在高度塌陷 - 定位和盒模型可以正常使用 - 浮动属性没有效果(暂且忘记)

4.1 弹性盒可以设置在父级的属性

  • 一.修改弹性盒的主轴方向

    • 1.属性:flex-direction

    • 2.属性值:row 行 / column 列

  • 二:控制子级元素在父级元素的主轴上排列方式

    • 1.属性:justify-content

    • 2.属性值

      • flex-start 默认值 表示在主轴的开始位置

      • flex-end 表示在主轴的结束位置

      • center 表示在主轴的中间位置

      • space-between 两端对齐,其余空间自动分配

      • space-around 元素的左右间距都是相同的

      • space-evenly 所有的空间平分

  • 三:控制子级元素在父级元素的侧轴上排列方式

    • 1.属性:align-items

    • 2.属性值

      • 重要 flex-start/end/center

      • 了解 baseline 默认情况下和flex-start效果是一样的

      • stretch 拉伸

  • 四:弹性盒中换行属性(规定弹性盒子级元素大于父级元素默认是进行挤压的)

    • 1.属性:flex-wrap

    • 2.属性值

      • nowrap 默认值 不换行

      • wrap 换行

  • 五:控制换行之后行与行之间的间距

    • 1.属性:align-content

    • 2.属性值

      • flex-start 默认值 行与行在开始的位置显示 最常用

      • flex-end | center | space-between | space-around| space-evenly| stretch

4.2 弹性盒在子级的元素

  • 1.设置子级元素的排列优先级

    • 属性:order

    • 属性值:数字,数字越大越往后显示

  • 2.设置单个元素在侧轴上的对齐方式

    • 属性:align-self

    • 属性值:

      • 常用的:flex-start/flex-end/center

      • 了解的:auto表示默认,会继承父级的设置属性

4.3 flex为1

问题:在移动端的主体内容布局中,需要根据用的手机屏幕自适应并且当内容较多的时候又可以撑开 解决:设置flex为1即可

属性:flex
属性值:
    - 一个数字 1 2 3 4 表示当前占据几等份
    - 重要的属性值:1 占据主轴上剩下的空间,当内容较多的时候空间会自动撑开显示
    - 前提是一定要在弹性盒的环境下设置

  • 一.flex作为属性出现的时候是由flex-grow、flex-shrink、flex-basis三个属性复合形成

  • 二.三个属性的解释推算

    • 1.相对于其他元素进行扩展的量

      • 属性:flex-grow

      • 属性值

        • 0 表示元素是正常显示的

        • 1 自动分配空间

    • 2.相对于其他元素进行收缩的量

      • 属性:flex-shrink

      • 属性值

        • 0 改变主轴的宽高不会收缩

        • 1 改变主轴的宽高会收缩

    • 3.项目的长度(width作用类似)

      • 属性:flex-basis

      • 属性值:0%~100%

  • 三:总结三个属性的使用情况

    • 默认的属性值:0 1 auto

    • 重要的属性值:1 1 0% => 简写为flex:1

5. 圣杯布局

    <style>
        html,body{
            height: 100%;
        }
        body{
            display: flex;
            flex-direction: column;
        }
        header{
            height: 100px;
            background: pink;
        }
        main{
            flex: 1;
            background: skyblue;
            display: flex;
        }
        aside{
            width: 100px;
            height: 100%;
            background: red;
        }
        section{
            flex: 1
        }
        article{
            width: 100px;
            height: 100%;
            background: green;
        }
        footer{
            height: 100px;
            background: orange
        }
    </style>
    <body>
    <header></header>
    <main>
        <aside></aside>
        <section></section>
        <article></article>
    </main>
    <footer></footer>
</body>

6. 多列布局

使用在很多文字的时候

/* 列的数量 */
column-count: 5;
/* 列的宽度 */
column-width: 200px;
/* 列与列之间的间距 */
column-gap: 1px;
/* 列的边框 */
column-rule: 1px solid red

7. 媒体查询

媒体查询的使用

  • 1.概念:不是一个具体的属性或者属性值,只是一个概念(可以检测设备的特性从而设置不同的css样式)

  • 2.写法:@media 设备的类型 操作符号 (设备的特性){css样式}

    • @media 关键字 表示使用的是媒体查询(媒介)

    • 设备的类型:screen、all

    • 操作符号:and 连接符

    • (设备的特性) max-width/min-width

    • {css样式}

  • 3.媒体查询使用的注意点

    • 建议写在样式表的最下面

    • 媒体查询中每个英文单词之间都需要添加一个空格

    • 如果需要检测多个媒体的特性,可以设置多个and即可

    • 由于电脑厂商较多,电脑设备之间存在差异,所有有微小的误差是正常的

/* 考虑的是移动端的屏幕大小 */
        /* 第一种:小屏手机的代表 iphonese、iphone5 测试320px */
        @media all and (max-width:320px){
            html{
                font-size: 12px
            }
        }
        /* 第二种:中屏手机的代表 iphone6/7/8 测试375px */
        @media all and (min-width:321px) and (max-width:375px){
            html{
                font-size:14px
            }
        }
        /* 第三种:大屏手机的代表 iphone6/7/8plus 测试414px */
        @media all and (min-width:376px) and (max-width:414px){
            html{
                font-size: 16px
            }
        }
        /* 第四种:超大屏幕的手机代表 平板、折叠手机 */
        /* 考虑手机屏幕的问题,最后的媒体查询可以省略 */
        @media all and (min-width:415px){
            html{
                font-size: 16px
            }
        }

8. 移动端

8.1 视口的设置

<!-- 视口标签:移动端的时候约束比例 移动端布局中的必要条件 --> <meta name="viewport" content="width=device-width, initial-scale=1.0">

8.2 了解移动端的前提

一:了解移动端中的概念

        1.ppi 像素密度 苹果手机

        2.dpi 像素密度 安卓手机

二:网页中常用的单位有哪些

        1.px 像素,绝对值单位

        2.em 相对于父级计算的单位(首航缩进)

        3.% 百分比单位

        4.deg 角度值

三:引出移动端布局中重要的单位:rem

        1.rem单位是相对于根元素 font-size进行计算的(默认都是16px)

        2.如果设置盒子的大小是2rem,盒子的大小会根据屏幕的大小进行变化

        3.移动端的屏幕大小都是不一样的,文字大小也应该设置不一样大小

        4.考虑在不同的移动端下面设置不同的font-size

        5.媒体查询可以修改不同移动端下面的font-size

四:移动端单位rem的计算

        1.公式:dpr=物理像素/逻辑像素

        2.已知dpr和物理像素,需要算出逻辑像素的大小

        3.dpr的设置:设备像素比

                - 常见的设计图640px 终端320px dpr是2

                - 常见的设计图750px 终端375px dpr是2(重要)

        4.简单的运算

        - 设计图宽度是640px,导航的高度是88px,问在设置的时候需要给高度设置为多少? -                 88px/2=44px 固定值单位(物理像素/dpr = 逻辑像素),在每个移动上都是44px ?,移动端应该要跟随屏幕的大小进行改变

        - 设置媒体查询不同的font-size的值,44px需要改成相应的rem单位

                - 44px = ?rem => 44px/12px(html上的font-size的值) = 3.67rem

五:第一种移动端布局方式的总结

        1.如果设计图的宽度是640px的时候,dpr为

        2,运算方式:物理像素/2/相对应的font-size的值

        2.如果设计图的宽度是750px的时候,dpr为2,运算方式:物理像素/2/相对应的font-size的值

8.3 rem适配移动端总结

  • 一:第一种移动端的适配方式

    • 1.原理:媒体查询结合rem适配

    • 2.计算:

      • 公式:dpr=物理像素/逻辑像素

      • 依据:设计图的宽度进行决定 640px/750px => dpr为2

      • 计算:物理像素/2/font-size

    • 3.优缺点

      • 优点:简单、好理解

      • 缺点:计算麻烦、有误差、每一个移动端就需要设置一套合适的媒体查询

  • 二:第二种移动端的适配方式

    • 1.使用一个新的单位:vw(viewport width)视口的宽度

    • 2.1vw等于视口的百分之一()

    • 3.100vw和100%的大小是否相等?

      • 在pc端滚动条是占位置的,两者之间不相等

      • 在移动端滚动条不占位置,两者相等

      • 100%可以使用移动端布局,建议使用vw

  • 三:vw的推算过程(了解)

    • 第一种情况:当设计图的宽度是640px的时候,dpr为2,终端宽度就是320px

      • 表示在移动端中320px = 100vw

      • 100vw/设计图320px的大小=每一份的大小

    • 第二种情况:当设计图的宽度是750px的时候,dpr为2,终端宽度就是375px

      • 表示在移动端中375px = 100vw

      • 100vw/设计图375px的大小=每一份的大小

  • 四:转换vw和rem单位

    • 第一种种情况:当设计图的宽度是640px的时候,dpr为2,终端宽度就是320px

      • 100vw = 320px

      • 1vw = 3.2px

      • 1px = 0.3125vw(每px的占比)

      • 导航88px:88px/2=》44px*0.3125vw

      • 直接设置html{font-size:0.3125vw}

    • 第二种种情况:当设计图的宽度是750px的时候,dpr为2,终端宽度就是375px

      • 100vw = 375px

      • 1vw = 3.75px

      • 1px = 0.2667vw(每px的占比)

      • 导航88px:88px/2=44rem

      • 直接设置html{font-size:0.2667vw}

  • 五:vw单位使用的总结

    • 当设计图是640px,设置html{font-size:0.3125vw} 计算方式:物理像素/2=?rem

    • 当设计图是750px,设置html{font-size:0.2667vw} 计算方式:物理像素/2=?rem

      • 跟媒体查询没有任何关系

  • 6 第三种移动端布局方式:阿里淘宝前端团队(淘宝插件)

    • 1.自动的生成动态dpr,针对于750px的设计图而言

    • 2.使用方法

      • 第一步需要删除文档中的视口标签

      • 需要引入外部的js文件进行计算

      • 计算方式:物理像素/100=?rem

    • 3.优缺点

      • 优点:计算方便

      • 缺点:不稳定、在每个浏览器中自定义的dpr都不一样

8.4 移动端布局的总结

移动端布局的总结

  • 1.媒体查询+rem

    • 原理:检测屏幕大小 根据屏幕改变相对应的字体大小

    • 代码:@media all and (){}

    • 缺点:计算麻烦有误差

  • 2.vw+rem

    • 原理:根据屏幕的视口进行变化

    • 代码:font-size:0.2667vw(750px)

    • 缺点:误差较小

    • 拓展:vh、vmax、vmin 1080px=10.8vw

  • 3.flexible插件的使用

    • 阿里系软件使用的较多 不需要过多研究

  • 4.除了手写移动端还有一些其他方法实现:hotcss webApp

9 iframe

<iframe src="https://www.swiper.com.cn/demo/030-pagination.html" frameborder="0"></iframe>

<!-- 优先级不高、不要写很多个容易导致浏览器的阻塞 -->

在网站上有一些比较符合开发需求的效果,想办法拿下来变成自己的东西

        1.HTML中有一个框架标签:iframe 引入外部的资源

        2.右键查看源代码 ctrl+c/v

10. 网格布局

  • 1.弹性盒:可以将容器分成轴向(主轴和侧轴) 控制子级元素在父级元素中的排列位置

  • 2.网格布局:可以将容器分成行和列(X轴和Y轴) 控制子级元素在轴向的排列位置

    • 容器概念:设置了形成网格的属性就是容器

    • 项目概念:项目是容器的直接子级元素

  • 3.之前学习表格,在表格中学习到了合并,行列合并的弊端是当有一个实现合并了就不能再做其他的合并操作

  • 4.形成网格布局的属性 display:grid

10.1 用法

  • 1.设置display:grid之后,在浏览器的控制台中可以观察到网格 默认把容器分成网格

  • 2.设置网格中的宽高大小(有几行几列需要设置几个属性值)

    • grid-template-columns:列 表示宽度

    • grid-template-rows:行 表示高度

  • 3.设置区域划分(如何进行行列合并)

    • 父级元素:grid-template-areas 属性值需要设置成多个

    • 子级元素:gird-area 属性值需要和父级设置的相

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值