Day08_弹性盒子-布局
Day08_弹性盒子-布局
背景 : 目前鸿蒙生态系统开发的过程中 , 除了正常的布局方法之外, 我们在绝大部分项目开发的时候, 会使用弹性盒子做开发, 使用弹性盒子开发, 不仅能提高我们的开发效率, 还能简化我们开发的样式; 同样还能节约时间; 本节课我们就要开始慢慢接触弹性盒子的魅力所在;
今日学习目标
-
什么是弹性盒子, 弹性盒子作用
-
触发弹性盒子的方法及特点
-
弹性盒子基础概念
-
弹性盒子里面的属性
-
移动端布局
-
综合案例
1. 概念
含义 : 什么是弹性盒子 , 弹性盒子属于移动端的布局的方式之一; 除了能使用响应式完成移动端布局, 弹性盒子更适合完成移动端布局
作用 : 通过使用弹性盒子布局 , 我们可以改变元素的排列方式 ; 让原本纵向排列的元素横向显示; 弹性盒子属于轴线布局的一种 ( 也被称之为一维布局 ) , 布局的时候要么按照主轴形式布局, 要么按照侧轴形式进行布局
2. 方法及特点
如何触发弹性盒子
使用 : display : flex ; 完成触发弹性盒子
触发弹性盒子带来的特点 :
a) 切记添加属性应该添加到父元素上面
b) 触发弹性盒子之后 , 所有子元素横向显示
c) 触发弹性盒子之后 , 如果子元素原来是行内元素, 此时行内元素会变成块级元素
d) 触发弹性盒子之后 , 如果只有一个子元素, 给子元素添加margin:auto; 会让子元素实现水平垂直正居中
e) 触发弹性盒子之后 , 只会影响子元素的排列方式, 不会影响孙子辈的排列方向
3. 基础概念
-
容器 : 最大的盒子 , 也就是我们最外层的父元素
-
项目 : 小的盒子, 父元素里面的子元素,
-
水平轴 : 就是我们所谓的X轴 ;
-
垂直轴 : 就是我们所谓的Y轴 ;
-
主轴 : 触发弹性盒子之后 , 子元素的排列方向 , 排列方向所在的轴线被称之为主轴;
-
侧轴 : 与主轴对立的方向 , 也被称之为交叉轴 , 交叉轴与主轴垂直;
4. 弹性盒子里面的属性
1) 容器上面的属性
a) 触发弹性盒子
含义 : 触发弹性盒子必备属性, 没有这个属性后面的所有的属性均不可使用
基本语法 : display : flex;
案例 :
<style>
/*容器*/
.bigbox{
width:600px;
height:600px;
border:10px solid gray;
margin:100px auto;
/*1)触发弹性盒子*/
display:flex;
}
/*项目*/
.bigbox>div{
width:50px;
height:50px;
border:2px dashed red;
text-align:center;
line-height:50px;
}
</style>
<div class="bigbox">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
</div>
b) 修改主轴方向
含义 : 触发弹性盒子之后, 默认主轴在横向 ; 修改主轴的排列方向
基本语法 : flex-direction : row / row-reverse / column / column-reverse
释义 :
row; == 代表的是主轴在横向 , 默认值
row-reverse; == 代表主轴在横向 , 但是为反方向排列
column; == 代表的是主轴在纵向 ;
column-reverse; == 代表的是主轴在纵向 , 但是为反方向排列
案例 :
<style>
/*容器*/
.bigbox{
width:600px;
height:600px;
border:10px solid gray;
margin:100px auto;
/*1) 触发弹性盒子*/
display:flex;
/*2) 调整主轴方向*/
flex-direction:column;
}
/*项目*/
.bigbox>div{
width:50px;
height:50px;
border:2px dashed red;
text-align:center;
line-height:50px;
}
</style>
<div class="bigbox">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
c) 调整主轴上面对其方式
情景 : 默认情况下 , 所有项目 , 位于主轴上面的挨在一起显示, 如何调整间距, 就需要使用调整主轴上面的对其方式
基本语法 : justify-content : flex-start / flex-end / center / space-around / space-between / space-evenly
释义 :
flex-start ; == 主轴的开始位置 , 默认值 , 项目之间并没有分开
flex-end ; == 主轴的结束位置, 项目之间并没有分开
center ; == 主轴的居中位置, 项目之间并没有分开
space-around ; == 主轴项目两端环绕; 项目与项目之间的距离是首尾项目距离父元素之间距离的2倍
space-between ; == 主轴项目两端对其; 首尾项目贴边显示
space-evenly ; == 主轴项目间距平分, 项目与项目之间的距离, 与首尾项目距离父元素之间距离是一致的;
案例 :
<style>
/*容器*/
.bigbox{
width:600px;
height:600px;
border:10px solid gray;
margin:100px auto;
/*1) 触发弹性盒子*/
display:flex;
/*3) 主轴对其方式*/
justify-content:space-between;
}
/*项目*/
.bigbox>div{
width:50px;
height:50px;
border:2px dashed red;
text-align:center;
line-height:50px;
}
</style>
<div class="bigbox">
<div>1</div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
d) 调整侧轴上面对其方式
情景 : 主轴上面的对其方式已经调整完毕, 接下来要调整侧轴上面的对其方式 ;
基本语法 : align-items : flex-start / flex-end / center / stretch
释义 :
flex-start ; == 侧轴的开始位置显示
flex-end ; == 侧轴的结束位置显示
center; == 侧轴的居中位置
stretch ; == 侧轴拉伸显示; 主轴在横向, 如果项目不设置高度默认高度已经撑满容器; 主轴在纵向,如果不设置宽度可以撑满容器宽度
案例 :
<style>
/*容器*/
.bigbox{
width:600px;
height:600px;
border:10px solid gray;
margin:100px auto;
/*1) 触发弹性盒子*/
display:flex;
/*4) 调整侧轴上面对其方式*/
align-items:flex-end;
}
/*项目*/
.bigbox>div{
width:50px;
height:50px;
border:2px dashed red;
text-align:center;
line-height:50px;
}
</style>
<div class="bigbox">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
</div>
e) 折行属性
情景 : 如果项目放置的数量比较多 , 默认的情况是所有的项目均会在一行中显示 , 如果想要折行显示的话 , 我们需要触发折行属性完成
基本语法 : flex-wrap : wrap / no-wrap;
释义 :
wrap; == 折行
no-wrap; == 不折行
案例 :
<style>
/*容器*/
.bigbox{
width:600px;
height:600px;
border:10px solid gray;
margin:100px auto;
/*1) 触发弹性盒子*/
display:flex;
/*5) 折行属性*/
flex-wrap:wrap;
}
/*项目*/
.bigbox>div{
width:50px;
height:50px;
border:2px dashed red;
text-align:center;
line-height:50px;
}
</style>
<div class="bigbox">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
<div>10</div>
<div>11</div>
<div>12</div>
<div>13</div>
<div>14</div>
<div>15</div>
</div>
f) 调整行间距
情景 : 元素拥有自身的高度 , 折行之后 , 会有一个比较大的行间距 , 如何调整行间距呢 ?
基本语法 : align-content :
释义 :
flex-start ; == 侧轴的开始位置 , 默认值 , 行与行之间并没有分开
flex-end ; == 侧轴的结束位置, 行与行之间并没有分开
center ; == 侧轴的居中位置, 行与行之间并没有分开
space-around ; == 侧轴项目两端环绕; 行与行之间的距离是首尾行距离父元素之间距离的2倍
space-between ; == 侧轴项目两端对其; 首尾行贴边显示
space-evenly ; == 侧轴项目间距平分, 行与行之间的距离, 与首尾行距离父元素之间距离是一致的;
案例
<style>
/*容器*/
.bigbox{
width:600px;
height:600px;
border:10px solid gray;
margin:100px auto;
/*1) 触发弹性盒子*/
display:flex;
/*5) 折行属性*/
flex-wrap:wrap;
/*6) 调整行间距*/
align-content:flex-start
}
/*项目*/
.bigbox>div{
width:50px;
height:50px;
border:2px dashed red;
text-align:center;
line-height:50px;
}
</style>
<div class="bigbox">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
<div>10</div>
<div>11</div>
<div>12</div>
<div>13</div>
<div>14</div>
<div>15</div>
</div>
2) 项目上面的属性
a) 调整显示顺序
情况 : 触发弹性盒子之后 , 默认主轴在横向 , 元素从左向右显示 , 如何调整显示顺序
基本语法 : order : number;
注意事项 : 取值越大越靠后面;
案例 :
<style>
/*容器*/
.bigbox{
width:600px;
height:600px;
border:10px solid gray;
margin:100px auto;
/*1) 触发弹性盒子*/
display:flex;
}
/*项目*/
.bigbox>div{
width:50px;
height:50px;
border:2px dashed red;
text-align:center;
line-height:50px;
}
/*属性应用于项目中, 应用于子元素中*/
.bigbox>:nth-child(1){
order:100;
}
.bigbox>:nth-child(2){
order:50
}
</style>
<div class="bigbox">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
</div>
b) 占剩余宽度剩余高度
情景 : 再app移动端项目开发的时候, 共计有三个区域, 两个区域拥有自己的高度, 想要实现,剩下的一块区域占剩余高度的所有;
基本语法 : flex : 1;
注意 : 主轴在横向, 实现的是占剩余看宽度所有; 主轴在纵向, 实现的是占剩余高度所有 ; 应用场景 :
案例 :
<style>
*{margin:0;padding:0}
html,body{height:100%}
body{display:flex;flex-direction:column}
header{height:100px;background-color:red}
/*这里的 flex:1 */
/*该属性应用于项目中, 也就是应用于子元素中*/
section{flex:1;background-color:orange}
footer{height:100px;background-color:blue}
</style>
<body>
<header>头部区域</header>
<section>主体区域</section>
<footer>尾部</footer>
</body>
c) 不挤压不折行
情景 : 如果容器项目过多, 触发弹性盒子之后, 所有的项目并不会折行, 而且剩余空间不够的时候, 默认项目是被挤压的 ; 如何不让项目挤压, 并且不折行;
基本语法 : flex-shrink : 0 / 1
释义 :
0 : 代表的是不挤压, 不折行
1 : 代表的是挤压, 默认值
应用场景 : 横向的导航栏
案例 :
<style>
/*容器*/
.bigbox{
width:600px;
height:600px;
border:10px solid gray;
margin:100px auto;
/*1) 触发弹性盒子*/
display:flex;
overflow:auto;
}
/*项目*/
.bigbox>div{
width:50px;
height:50px;
border:2px dashed red;
text-align:center;
line-height:50px;
/* 主要应用于:横向导航栏; */
flex-shrink:0
}
</style>
<div class="bigbox">
<div>推荐</div>
<div>首页</div>
<div>关注</div>
<div>年货节</div>
<div>本地</div>
<div>喜欢</div>
<div>历史记录</div>
<div>音乐</div>
<div>电影</div>
<div>电视剧</div>
</div>
d) 调整项目单独对其方式
情景 : 前面我们使用了align-items是将所有的项目都一起在侧轴上面进行调整的; 如何实现单独调整一个项目的对其方式
基本语法 : align-self : flex-start / flex-end / center / stretch
案例 :
<style>
/*容器*/
.bigbox{
width:600px;
height:600px;
border:10px solid gray;
margin:100px auto;
/*1) 触发弹性盒子*/
display:flex;
}
/*项目*/
.bigbox>div{
width:50px;
height:50px;
border:2px dashed red;
text-align:center;
line-height:50px;
/*主要应用于*/
}
.bigbox>:nth-child(1){
align-self:flex-start;
}
.bigbox>:nth-child(2){
align-self:center;
}
.bigbox>:nth-child(3){
align-self:flex-end;
}
.bigbox>:nth-child(4){
align-self:stretch;
}
</style>
<div class="bigbox">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
</div>
5. 移动端布局
1) 移动端含义
可以移动得设备被称之为移动端,手机,平板,手表,都可以称之为移动端设备 ; 目前来看,做开发得时候,手机==手机界面app界面
2) 移动端页面,项目查看
需要在手机上面查看,设备模拟器切换不同得手机屏幕型号,观看你写的对应得页面效果
右键----检查----找到设备模拟器切换窗口进行切换
3) 设备模拟器里面内容介绍
iphone678======手机型号
375*667========手机屏幕得分辨率
75%============理解成:最佳观看比例
旋转小图标======切换横屏和竖屏
右上角三个圆点===
capture screenshot 截取手机屏幕得相关设计稿(短图)
capture full size screenshot 截取手机屏幕相关设计稿(带有滚动条区域得所有)
4) 手机型号屏幕大小
以iphone手机为例
iphone4========320-480
iphone5========320-568
iphone678======375-667
iphone678s=====414-736
5) 设备像素比
设备像素比:是一个固定的比值
设备像素比(dpr)=物理像素/CSS像素
**物理像素:**设备像素(物理像素),顾名思义,显示屏是由一个个物理像素点组成的,通过控制每个像素点的颜色,使屏幕显示出不同的图像,屏幕从工厂出来那天起,它上面的物理像素点就固定不变了,单位pt
**CSS像素:**又称为虚拟像素、设备独立像素或逻辑像素。CSS 像素是 Web 编程的概念,指的是 CSS 样式代码中使用的逻辑像素。
换个角度去理解:物理像素设计稿;CSS像素开发时候的宽度高度
6) 视口
**布局视口:**布局视口是指网页的宽度,一般移动端浏览器都默认设置了布局视口的宽度。根据设备的不同,布局视口的默认宽度有可能是768px、980px或1024px等,


视觉视口: 视觉视口是指用户正在看到的网站的区域,这个区域的宽度等同于移动设备的浏览器窗口的宽度,下面通过图2演示什么是视觉视口。


理想视口: 理想视口是指对设备来讲最理想的视口尺寸。采用理想视口的方式,可以使网页在移动端浏览器上获得最理想的浏览和阅读的宽度。


7) 理想视口
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<!--
name="viewport" 代表的是设备视口为理想视口;
content="" 代表的是视口内容的设置;
width=device-width; 代表的是宽度等于设备的宽度;啥
initial-scale=1.0; 代表的是初始缩放比例为1.0;
minimum-scale=1.0; 代表的是最小缩放比例为1.0;
maximum-scale=1.0; 代表的是最大缩放比例为1.0;
user-scalable=no; 代表的是不允许用户缩放;
-->
8) 移动端开发的步骤
1、确定你得设计稿出自于哪一个屏幕
就是为了确定dpr确定设备像素比
2、根据设备像素得比值,确定CSS像素
CSS像素=物理像素/dpr
可以这样理解:css像素=测量得距离/2
3、引入理想视口 meta标签引入
4、引入icon图标,引入自己得CSS样式
link引入
link引入
5、编写移动端布局
HTML部分
<body>
<header>头部</header>
<section>主体</section>
<footer>尾部</footer>
</body>
CSS部分
*{margin:0;padding:0}
ul{list-style:none}
img{vertival-align:middle}
a{text-decoration:none}
input{outline:none}
/*万能清楚法*/
/*窗口自适应*/
html,body{
height:100%
}
body{
display:flex;
flex-direction:column
}
6. 综合案例
案例1
案例2
案例3
更多推荐



所有评论(0)