项目2--移动Web开发常见布局

--学习目标/Target

--项目说明/Summary

在移动Web开发中,可以通过流式布局弹性盒布局Rem适配布局来制作移动端页面。此外,我们还可以将上述三大布局与媒体查询结合起来创建响应式页面,实现一个页面同时兼容PC端和移动端。为了提高CSS样式代码的编写效率,我们可以使用SassLess编写复用性更优的CSS代码。在掌握了这些技术后,就已经可以编写响应式页面了。

1 移动端页面常用布局

[目标] 了解移动端页面常用布局,能够说出移动端页面常用的布局方式

移动端页面的常用布局方法包括:

  1. 流式布局(百分比布局)
  2. 弹性盒布局(flex)
  3. rem适配布局
  4. 响应式布局(bootstrap)

1.1 流式布局

流式布局也称为百分比自适应布局,它是一种等比例缩放的布局方式,也是移动Web开发中比较常见的布局方式。在CSS代码中需要使用百分比来设置盒子的宽高,例如,把盒子的宽度设置成百分比,网页就会根据浏览器的宽度和屏幕的大小来自动调整显示效果。

【课堂演示】——固定布局转换为百分比布局

01-01-1

 

1.2 弹性盒布局

弹性盒布局CSS3中的一种新布局模式,可以轻松地创建响应式网站布局。该弹性盒布局为盒模块增加了灵活性,可以让人们告别浮动(float),完美地实现垂直居中。目前它得到几乎所有主流浏览器的支持。

【课堂演示】——弹性盒布局

01-01-2

1.3 Rem适配布局

Rem适配布局一般采取Less+Rem+媒体查询来实现响应式布局设计。使用媒体查询可以根据不同的设备按比例设置页面的字体大小,然后在页面中使用rem单位,可以通过修改html里面的文字大小来改变页面中的元素的大小从而进行整体控制。remCSS3中新增的一种相对长度单位。当使用rem单位时,根节点<html>的字体大小(font-size)决定了rem的尺寸。

 

小提示

流式布局弹性盒布局Rem适配布局方式并不是独立存在的,在实际开发过程中往往是相互结合使用的,多种方式融合在一起实现移动端的屏幕适配的方法,称之为混合布局,目前很多公司会采取这种布局方式。

 

1.4 bootstarp响应式布局

【课堂演示】——响应式布局

 

【小结】

 

2 流式布局(百分比布局)

【目标】 能够使用百分比布局开发网页

在PC端进行网页制作时,经常使用固定像素的网页布局,但这种布局方式对小屏幕的设备不友好。为了适应小屏幕的设备,在移动设备和跨平台(响应式)网页开发过程中,多数使用流式布局。

流式布局是一种等比例缩放布局方式,在CSS代码中使用百分比来设置宽度,所以也称百分比自适应布局。流式布局实现方法是,将CSS固定像素宽度换算为百分比宽度,其换算公式如下。

 

2.1 【课堂案例1】

——固定布局和百分比布局的区别

01-01-1

 

2.2 【课堂案例2】

——京东移动端首页底部

01-04

技术:固定定位+流式布局

HTML参考代码:

CSS参考代码:

【小结】

 

3 Flex 弹性盒布局(重点)

[目标] 能够使用Flex布局模型灵活、快速的开发网页

3.1 Flex 布局-体验

02-03-01 (2)

【课堂演示】先用标准流来实现一下:

在浏览器移动端模似器上的效果

02-03-02

现在用浮动和间距来实现一下:

02-03-03

如果把父级高度去掉,会怎么样??

02-03-04

Flex布局能够实现浮动解决的问题,且没有脱标的问题。

现在我们用Flex布局来看一下效果:

02-03-05

现在:把子元素的高度|宽度去掉,给父级元素定义高度,然后再观察结果。

3.2 Flex 布局-简介

使用弹性盒布局(Flexible Box)可以轻松地创建响应式网页布局,为盒状(块)模型增加了灵活性。弹性盒改进了块模型,既不使用浮动,也不会合并弹性盒容器与其内容之间的外边距。它是一种非常灵活的结构化布局方法,就像几个小盒子放在一个大盒子里一样,相对独立,容易设置。

Flex布局/弹性布局优势:

弹性盒模型可以用简单的方式满足很多常见的且复杂的布局需求,它的优势在于开发人员只是声明布局应该具有的行为,而不需要给出具体的实现方式。浏览器会负责完成实际的布局。不需要考虑浏览器的兼容性问题

iOS SafariAndroid BrowserIEOperaChromeFirefox
7.0+4.4+11+12.1+21+22+

https://caniuse.com/ (搜哪些技术的浏览器兼容性)

02-03-07

3.3 Flex布局模型构成

Flex弹性布局是由容器项目构成。

02-03-09

 

注意!!!

  1. 容器中所有的子元素默认情况下都是沿着主轴方向显示的
  2. 方向:默认主轴从左向右,默认侧轴从上到下
  3. 主轴和侧轴并不是固定不变的,通过flex-direction可以互换

 

3.4 Flex布局常用属性

3.4.1 display(定义弹性容器)

display属性用于指定元素容器的类型,常用的属性值有:

4-1

 

弹性盒子容器与项目的属性:(前6个为容器的属性,后3个为项目的属性)

 

属性名属性值含义
flex-directionrow(默认)、row-reversecolumncolumn-reverse主轴的方向,即项目的排列方向
flex-wrapnowrap(默认)、wrapwrap-reverse如果一行放不下,是否换行
flex-flow简写属性flex- directionflex- wrap的简写属性
justify-contentflex-start(默认)、flex-endcenterspace-betweenspace-aroundspace-evenly项目在主轴上的对齐方式
align-itemsstretch(默认)、flex-startflex-endcenterbaseline项目在交叉轴上的对齐方式
align-contentflex-start(默认)、flex-endcenterspace-betweenspace-aroundspace-evenly元素换行后设置多行对齐方式,容器必须设置flex-wrap换行
align-selfalign-items定义单独项目如何没着纵轴排列
flex默认为0,表示不伸缩 1表示扩展定义项目的伸缩比例
order默认为0,数值越小,排列越靠前定义项目的排列顺序

 

3.4.2 flex-flow(=方向+拆行)

当使用flex-flow时,其值是flex-direction的值和flex-wrap的值的组合。

3.4.2.1 flex-direction设置主轴方向

目标:使用flex-direction改变元素排列方向

02-03-11

取值描述
row弹性盒子元素按横轴方向顺序排列(默认值)
row-reverse弹性盒子元素按横轴方向逆序排列
column弹性盒子元素按纵轴方向顺序排列
column-reverse弹性盒子元素按纵轴方向逆序排列

4-2

4-3

3.4.2.2 flex-wrap(是否拆行)

目标:使用flex-wrap实现弹性盒子多行排列效果

4-3-2

 

取值描述
nowrap容器为单行,该情况下flex子项可能会溢出容器。该值是默认属性值,不换行
wrap容器为多行,flex子项溢出的部分会被放置到新行(换行),第一行显示在上方
wrap-reverse反转wrap排列(换行),第一行显示在下方
3.4.2.3 flex-flow(=方向+拆行)

 

3.4.3 justify-content(主轴对齐方式)

【目标】使用justify-content调节元素在主轴方向的对齐方式

描述白话文
flex-start(默认值)项目位于容器的开头让子元素从父容器的开头开始排序,但是盒子顺序不变
flex-end项目位于容器的结尾让子元素从父容器的后面开始排序,但是盒子顺序不变
center项目位于容器的中心让子元素在父容器中间显示
space-between项目位于各行之间留有空白的容器内左右的盒子贴近父盒子,中间的平均分布空白间距
space-around项目位于各行之前、之间、之后都留有空白的容器内相当于给每个盒子添加了左右margin外边距
space-evenly弹性盒子沿主轴均匀排列 弹性盒子与容器之间间距相等均匀分布

4-4

 

02-03-10

【练一练】:10’

3.4.4 align-items( 侧轴对齐方式)

目标:使用align-items调节元素在侧轴上的对齐方式

属性值描述白话文
stretch默认值 项目被拉伸以适应容器让子元素的高度拉伸适用父容器(子元素不给高度的前提下)
center项目位于容器的中心垂直居中
flex-start项目位于容器的开头垂直对齐开始位置 上对齐
flex-end项目位于容器的结尾垂直对齐结束位置 底对齐

4-5

3.4.5 align-self(项目侧轴对齐方式)

4-6

【思考】这个效果怎么实现?

02-03-11

03-flexbox

3.4.6 order(排列顺序)

order控制子项目的排列顺序,正序方式排序,数值越小,排列将会越靠前,默认为0。

 

3.4.7 flex(增长与收缩)

flex属性是flex-grow(扩展比率)、flex-shrink(收缩比率)和flex-basis(宽度,像素值)的简写形式,能够设置子元素的伸缩性。

4-8

此知识点重在理解,要明确找出主轴、侧轴、方向,各属性对应的属性值

需要注意的是,在使用弹性盒布局时,以下属性不起作用。

1.多列布局中的column-*属性对弹性子元素无效。

2.floatclear对弹性子元素无效。使用float会导致display属性计算为block

3.vertical-align属性对弹性子元素的对齐无效。

【综合案例】——确认订单页面

03-100

 

4. 媒体查询(重点)

4.1 什么是媒体查询

CSSMedia Query媒体查询(也称为媒介查询)用来根据窗口宽度、屏幕比例和设备方向等差异来改变页面的显示方式。使用媒体查询能够在不改变页面内容的情况下,为特定的输出设备制定显示效果。

媒体查询由媒体类型条件表达式组成。常用的媒体查询属性如下。

@media媒体查询可以针对不同的屏幕尺寸设置不同的样式,能够判断设备尺寸进行不同样式的切换,是响应式布局的基础

语法:

媒体类型:

媒体属性:

4.2 媒体查询的使用方法

4.2.1 内嵌式

下面利用媒体查询实现当文档宽度大于640px 时,对CSS样式进行修改。内联式是直接在CSS中使用

4.2.2 外联式

是作为单独的CSS文件从外部引入

 

4.3 响应式布局容器

响应式网站中使用布局容器来实现控制页面中每个元素的大小和布局变化,需要一个父级元素作为布局容器,来配合子级元素实现变化效果。

常见的响应式布局容器尺寸划分

设备划分尺寸区间宽度设置
超小设备(手机)<576px100%
平板≥576px540px
桌面显示器≥768px720px
大桌面显示器≥992px960px
超大桌面显示器≥1200px1140px

[课堂案例]——根据屏幕不同宽度设置布局容器宽度及背景颜色

Video_2022-09-23_020626

 

5 rem适配布局(重点)

使用rem适配布局,可以实现根据不同设备的情况,按比例设置页面的字体大小。在页面中,元素使用rem尺寸单位,当页面字体大小变化时,元素的宽度和高度也会发生变化,从而达到等比缩放的适配效果。

5.1 rem单位

remCSS3中新增的一种相对长度单位。当使用rem单位时,根节点<html>的字体大小(font-size)决定了rem的尺寸。

rem单位类似于em单位,em单位表示父元素字体大小,不同之处在于,rem的基准是相对于<html>根节点的字体大小。

通过代码对比rem单位和em单位的区别,具体使用代码如下。

5.2 混合应用

利用媒体查询和rem单位,可以实现元素大小的动态变化。其开发思路是:

【课堂演示】——Rem+Less+媒体查询

比如:

比如:my.less 生成 my.css

比如:rem-demo.less 生成rem-demo.css

 

6 其它布局(了解)

6.1 网格布局(了解)

6.1.1 简介

grid网格布局是一个二维的基于网格的布局系统,它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。

6.1.2 常用属性

先设置容器为网格布局display:grid;,然后设置网格布局的相关属性

样式名属性值含义
grid-template-columnspx、%、auto、fr、repeat()、auto-fill定义每一列的列宽
grid-template-rowspx、%、auto、fr、repeat()、auto-fill定义每一列的行高
grid-column-gappx列与列的间隔
grid-row-gappx行与行的间隔
justify-itemsstart、end、center、stretch(默认)单元格内容的水平对齐
align-itemsstart、end、center、stretch(默认)单元格内容的垂直对齐
justify-contentstart(默认)、end、center、space-between、space-around、 space-evenly整个网格在容器中的水平对齐
align-contentstart(默认)、end、center、space-between、space-around、space-evenly整个网格在容器中的垂直对齐
grid-auto-flowrow(默认)、column自动放置元素的顺序
grid-column-start/grid-column-end简写属性:grid-column列的开始和结束
grid-row-start/grid-row-end简写属性:grid-row行的开始和结束

 

6.1.3 grid布局和flex布局的区别:

grid 布局与 flex 布局有一定的相似性,都可以指定容器内部多个项目的位置。

 

6.2 多列布局(了解)

6.2.1 简介

多列布局是CSS3新增的属性,就是创建多个列来对文本进行布局,其实就是将文本分成多列进行展示,就像报纸排版那样,也有点像word当中的分栏。

6.2.2 常用属性

属性名属性值含义
column‐widthpx列的宽度
column‐count整数值列的数量
columns简写属性column-width 和 column-count的简写属性
column‐fillbalance(默认)、auto列的填充方式
column‐gappx列之间的间隔
column‐rule类似于border属性的设置列之间分隔线的宽度、样式、颜色
column‐span1(默认)、all元素是否横跨多列

如:6-2

 

【历年真题】