移动端第三天(flex布局+动画)
动画
使用animation相关属性控制动画执行过程
animation:动画名称 动画时长 速度曲线 延迟时间 重复次数 动画方向 执行完毕状态
-
animatioin-name:move;动画名称
-
animation-duration:2s; 动画时长
-
animation-timing-function: steps(4);速度曲线
-
animation-delay:3s;延迟时间
-
animation-iteration-count: infinite; 重复次数
-
animation-direction: alternate-reverse; 动画方向
-
animation-fill-mode:both; 动画完毕状态
-
animation-play-state:pused;设置动画的暂停播放
代码块
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div{
width: 200px;
height: 200px;
background-color: blue;
/* 动画名称 */
animation-name: move;
/* 动画时间 */
animation-duration: 1s;
/* 动画延迟时间 */
animation-delay: 2s;
/* 设置动画延迟时间显示 第一个帧 backwards forwards both */
animation-fill-mode: both;
/* 设置动画的播放次数 2 */
animation-iteration-count: infinite;
/*
设置动画的播放的方向 animation-direction
1 默认值 normal 先正再正 常用
2 alternate 先正再反 常用
3 reverse 先反再反
4 alternate-reverse 先反再正
*/
animation-direction: alternate-reverse;
/* 设置动画播放或暂停 */
animation-play-state: paused;
}
</style>
</head>
<body>
<div>动画</div>
</body>
</html>
1,PC端和移动端有什么不同?
PC屏幕大固定版心,移动端小,网页宽度100%
移动端布局和pc端布局区别
pc端
-
定版心
-
页面中的元素宽度和高 几乎都是使用 px单位!! 定死大小
移动端
-
不会定版心
-
元素的大小 很少使用 px单位,都会使用 相对长度单位 百分比单位 rem vw vh(没有学过)
-
屏幕越大。元素也越大
早期移动端布局
百分比布局 也叫在 流式布局
早期布局方案 弊端
不够方便 一旦增加了 元素的方式 对应的 width的代码重新去计算
主流的移动端布局方案
flex布局 好用简单方便 都得要学会用它!!
2.如何显示边写代码边调试效果?
谷歌模拟器
3.屏幕尺寸概念?
硬件分辩率 软件分辩率
物理分辩率 是生产屏幕时就固定的,它是不可改变的
逻辑分辩率 是由软件(驱动)决定的
思考:制作网页先参考物理分辩率还是逻辑分辩率?
逻辑分辩率
.assets/屏幕分辩率.png)
视口
目标:使用meta标签设置视口宽度,制作适配不同设备宽度的网页
.assets/视口宽度.png)
手机屏幕尺寸都不同,网页宽度为100%
网页的宽度和逻辑分辩率尺寸相同。
思考:默认情况下,网页的宽度和逻辑分辩率相同吗?
不同,默认网页宽度是980px;
理想视口
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<!-- 视口标签:理想视口--保持视口宽度==设备宽度 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
div {
width: 100px;
height: 100px;
background-color: skyblue;
}
</style>
</head>
<body>
<div>看看我</div>
</body>
</html>
要网页宽度和设备宽度(分辩率)相同。
解决办法:添加视口标签。
视口:显示HTML网页的区域,用来约束HTML尺寸。
-
viewport:视口
-
width=device-width:视口宽度=设备宽度
-
inital-scale=1.0:缩放1倍(不缩放)
二倍图
目标:能够使用像素大厨软件测量
二倍图中尺寸
-
现阶段设置iPhone6/7/8,设备宽度375px产出设计稿。
-
二倍图设计稿尺寸:750px
.assets/图破那.png)
三倍图
.assets/3倍.png)
百分比布局
目标:
能够使用百分比布局开发网页
-
百分比布局
-
效果:宽度自适应 ,高度固定。
Flex布局
目标:能够使用Flex布局模型灵活、快速的网页
思考:多个盒子横向排列使用什么属性?
浮动
设置盒子的间距使用什么属性?
margin
需要注意什么问题?
浮动的盒子脱标。
Flex布局/弹性布局:
1.设置div变成flex 盒子 弹性 flex
2.div中的子元素 发生 一些改变
- 设置了flex的盒子 称之为 父项
- 盒子里面的子元素 称之为 子项
3.具体变化
1 不再区分什么 块级行内和行内块 全部都可以设置宽度和高
2.子项 默认的宽度和高度
宽度 由内容撑开
高度 等于父项的高
-
子项
使用浮动没有效果
使用定位、margin、transform 都有效的**
4.默认情况下 子项总宽度大于父项的宽
也不会换行!!! flex不会换行
只会压缩自身的宽度而已
Flex布局模型构成
目标: 能够使用Flex布局模型灵活、快速的开发网页
作用
-
基于flex精确灵活控制块级盒子布局方式,避免浮动布局中脱离文档流现象发生。
-
flex布局非常适合结构化布局
设置方式 父元素添加display:flex;,子元素可以自动的挤压或拉伸 组成部分 弹性容器 弹性盒子 主轴 侧轴/交叉轴
图片
.assets/flex布局方式.png)
主轴对齐方式
目标:使用justify-content调节元素在主轴的对齐方式
思考:网页中,盒子之间有距离吗?
答:有
在Flex布局模型中,调节主轴或侧轴的对齐方式来设置盒子之间的距离。
目标:使用justify-content调节元素在主轴的对齐方式
- 修改主轴对齐方式属性:justify-content
| 属性值 | 作用 |
|---|---|
| flex-start | 默认值,起点开始依次排列 |
| flex-end | 终点开始依次排列 |
| center | 终点开始依次排列 |
| space-around | 弹性盒子沿主轴均匀排列,空白间距均分在弹性盒子两侧 |
| space-between | 弹性盒子沿主轴均匀排列,空白间距均分在相领盒子之间 |
| space-evenly | 弹性盒子沿主轴均匀排列,弹性盒子与容器之间间距相等 |
设置主轴对齐方式
1.左对齐 flex-start
.assets/左对齐.png)
2.右对齐 flex-end
.assets/有对齐.png)
3.居中对齐 center
.assets/居中对齐.png)
4.先两侧对齐, 间隔存放 space-between;
.assets/2.png)
5.间隔存放 两侧空间小于中间 space-around;
.assets/23.png)
6.绝对平均 space0evenly
.assets/两侧对齐.png)
侧轴对齐方式
目标:使用align-items调节元素在侧轴的对齐方式
-
修改侧轴对齐方式属性:
-
align-items(添加到弹性容器)
-
align-self:控制某个弹性盒子在侧轴的对齐方式(添加到弹性盒子)
-
| 属性值 | 作用 |
|---|---|
| flex-start | 默认值,起点开始依次排列 |
| flex-end | 终点开始依次排列 |
| center | 终点开始依次排列 |
| stretch | 默认值,弹性盒子沿主轴线被拉伸至铺满容器 |
侧轴单行对方式
单行居中align-items:center;
单行上对齐align-items:flex-start;
.assets/单行左对齐方式.png)
单行下对齐algin-items:flex-end;
.assets/单行下对齐.png)
侧轴多行行对方式
align-content: flex-end;
align-content:flex-start;
align-content:center;
align-content:space-between;
align-content:space-around;
align-content:space-evenly;
| flex-end; | 右对齐 |
|---|---|
| flex-start; | 左对齐 |
| center | 居中对齐 |
| space-between | 两侧对齐 |
| space-around | 两侧小于中间间隔 |
| space-evenly | 两侧等于中间间隔 |
换行
flex-wrap:wrap:
-
flex不会换行的
-
当子元素的总宽度大于父元素的时候 不会换行
-
只会 挤压子元素的宽度
-
设置 换行属性
-
flex-wrap
-
flex-nowrap 不换行
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>换行</title>
<style>
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
div{
width: 400px;
height: 400px;
display: flex;
margin: 20px auto;
/* align-items: flex-start; */
/* justify-content: center; */
/* align-items: center; */
/* flex-wrap: nowrap; */
flex-wrap: wrap;
background-color: aqua;
}
span{
width: 100px;
height: 100px;
text-align: center;
line-height: 100px;
background-color: red;
}
/*
默认情况下
flex不会换行的
当子元素的总宽度大于父元素的时候 不会换行
只会 挤压子元素的宽度
设置 换行属性
flex-wrap
flex-nowrap 不换行
*/
</style>
</head>
<body>
<div>
<span>1</span>
<span>1</span>
<span>1</span>
<span>1</span>
<span>1</span>
<span>1</span>
</div>
</body>
</html>
效果图
.assets/换行图片.png)
单行换行
align-items:flex-end;
多行换行
align-content:flex-end;
/* 单行换行 */
align-items: flex-start;
.assets/换行图片.png)
/* 多行换行 */
align-content: flex-start;
.assets/多行换行.png)
设置主轴方向flex-direction
值:
| 属性 | 作用 |
|---|---|
| row | 默认值从左到右 |
| row-reverse | 右到左 |
| colum | 上到下 |
| colum-reverse | 下到上 |
flex 设置子项占父项宽度(高度)的比例
align-self 设置子项自己在侧轴上的对齐方式
| flex-start | 左对齐 |
|---|---|
| flex-end | 有对齐 |
| center | 居中对齐 |
| 属性 | 作用 |
子项有四个特点
默认的宽度等于内容撑开
默认的高度等于父项的高度
flex:1;设置子项的宽度
align-seft;设置 子项在侧轴上的对齐
主轴方向设置colum
默认的高度等于内容撑开
flex:1;设置子项的高度
align-seft;设置 子项在侧轴上的对齐(水平)
默认的宽度等于父项的宽度
伸缩比
目标:使用flex属性修改弹性盒子伸缩比
-
属性 flex:值
-
取值分类 数值(整数)
flex:1;
注意:只占用父盒子剩余尺寸
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no"
/>
<title>index.html</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.box {
width: 270px;
/*
谷歌和 edge 浏览器 没有效果
现在edge内核也是使用谷歌的!
ie和火狐有效果
谷歌浏览器对于 大图片的 结合背景效果的时候
不稳定 有bug!!
*/
height: 130px;
margin: 100px auto;
background-image: url(./baidu.png);
/* 64 大图片的宽度处于 盒子的宽度 */
animation: ani 3s steps(64) infinite;
}
@keyframes ani {
100% {
/* 图片的宽度 */
background-position-x: -17280px;
}
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
<!--
1 用到 动画 steps
2 背景图片的位置做变化
水平方向做变化 (图片多大)
3 steps 等于 大图中有几个圣诞老人
-->
谷歌和 edge 浏览器 没有效果
现在edge内核也是使用谷歌的!
ie和火狐有效果
谷歌浏览器对于 大图片的 结合背景效果的时候
不稳定 有bug!!