复习总结(1-3)

第一章

1. 认识微信小程序

微信(WeChat)是腾讯公司于2011年1月21日推出的一款为智能终端提供即时通信(Instant Messaging,IM)服务的应用程序

小程序的特征和场景

优势:1.无需安装  2.触手可及  3.用完即走  4.无需卸载

应用场景特点:简单的业务逻辑     使用频率低

微信小程序开发流程

微信小程序开发流程为:第1步,在微信公众平台上注册小程序账号;第2步,下载开发者工具进行编码;第3步,通过开发者工具提交代码,待通过审核后便可以发布。

微信小程序开发者工具界面功能介绍

1:工具栏
在工具栏中可以实现多种功能,例如账号的切换,模拟区、编辑区、调试区的显示/隐
藏,小程序的编译、预览,切换后台,清理缓存等。

2:模拟区
在模拟区中选择模拟手机的类型、显示比例、网络类型后,模拟器中会显示小程序的运
行效果。

3:目录文件区
目录文件区用来显示当前项目的目录结构,单击左上角的“+”按钮可以进行目录和文件
的创建,右键单击目录文件区中的文件或目录可以进行“硬盘打开”“重命名”“删除”等相
关操作。

4:编辑区
编辑区用来实现对代码的编辑操作,编辑区中支持对.wxml、wxss、.js及.json文件的
操作,使用组合键能提高代码的编辑效率。

5:调试区的功能是帮助于代码调试及排查有问题的区域。

。小程序系统为开发者提供了9个调试功能模块,分别是Console、Sources、Network、Security、Storage、AppData、Wxml、Sensor和Trace

1.Console面板:
Comsole面板是调试小程序的控制而板,当代码执行出现错误时,错误信息将显示Consoke面板中,便于开发者排查错误,如图1-25所示。另外,在小程中,开发者可通过console.loe语句将信息输出到Console面板中。此外,开发者可以在 Console 面板直接轮人代码并调试

2.Sources面板:
Sourees面板是源文件调试信息页,用于显示当前项目的脚本文件,如图1-26所示调试区左侧显示的是源文件的目录结构,中间显示的是选中文件的源代码,右侧显示的是调试相关按钮,Sources面板中显示的代码是经过小程序框架编译过的脚本文件,开发者的代码会被包含在defne 函数中。对于Page 代码,在文件尾部通过require 函数主动调用

3.Network面板:
Network面板是网络调试信息页,用于观察和显示网络请求request和socket 等网络相关的详细信息

4.Security面板:
Security面板是安全认证信息页,开发者可以通过该面板调试当前网页的安全和认证等问题。如果设置安全论证,则会显示“The security of this page is unknown.”

5.Storage面板:
Storage 面板是数据存储信息页,开发者可以使用wx.setStorage或者wx.setStorageSyne 将数据存储到本地存储,存储在本地存储中的变量及值可以在Sorage 面板中显示

6.AppData面板:
AppDala面板是实时数据信息页,用于显示项目中被激活的所有页面的数据情况。开发者在这里不仅可以查看数据的使用情况,还可以更改数据。编辑器会实时地将数据的变更情况反映到前端界面

7.Wxml面板:
Wxml面板是布局信息页,主要用于调试Wxm】组件和相关CSS样式,显示Wxm转化后的界面。Wxml面板调试区的左侧部分是Wxm代码,右侧部分是该选择器的CSS样式

8.Sensor面板:
Sensor 面板是重力传感器信息页,开发者可以在这里选择模拟地理位置来模拟移动设备表现,用于调试重力感应 API

9.Trace面板:
Trace面板是路由追踪信息页,开发者在这里可以追踪连接到电脑中的安卓(Android)设备的路由信息

10.扩展菜单项:
最右边的扩展菜单项“:”主要包括开发工具的一些定制与设置,开发者可以在这里设置相关信息

第二章

2. 微信小程序开发基础

2.1 基本目录结构:

在微信下程序的基本目录结构中,项目主目录下有2个子目录(pages和utils)和4个文件(app.js、app.json、app.wxss和project.config.json)

在主目录中3个以“app”开头的文件是微信下程序框架的主描述文件,是应用程序级别的文件

project.config.json文件是项目配置文件,包含项目名称、AppID等相关信息

2.1.1主页文件

微信小程序的主体部分由3 个文件组成, 这3 个文件必须放在项目的主目录中, 负责小程序的整体配置, 它们的名称是固定的。

(1)app.js:小程序逻辑页面,主要用来注册小程序全局实例。

(2)app.json:小程序公共配置文件,配置小程序全局设置。

(3)app.wxss:小程序主样式表文件,类似的HTML的.CSS文件

2.1.2页面文件
小程序通常是由多个页面组成的, 每个页面包含4 个文件, 同一页面的这4 个文件必须具有相同的路径与文件名。 当小程序被启动或小程序内的页面进行跳转时, 小程序会根据app.json设置的路径找到相对应的资源进行数据绑定。

(1).js文件:页面逻辑文件,在该文件中编写JavaScript代码控制页面的逻辑。
(2).wxml:页面结构文件,用于设计页面的布局、数据绑定等。
(3).wxss:页面样式表文件,用于定义本页面中用到的各类样式表。
(4).json:页面配置文件,该文件在页面中不可缺少。

2.2 小程序开发框架

整个系统分为视图层和逻辑层,数据层

1.视图层:

由WXML与WXSS编写,由组件来进行展示。视图层所有 .wxml文件与 .wxss文件的集合:.wxml文件用于描述页面结构;.wxss文件用于描述页面样式。组件是视图的基本组成单元。

2.逻辑层:

用于处理事务逻辑。是所有.js脚本文件的集合。微信小程序在逻辑层将数据处理后发送给视图层,同时接受视图层的事件反馈。

逻辑层是采用Javascrpt编写的。在JavaSeript 的基础上,对应的值做了适当修改,以便提高开发小程序的效率。

(1)增加app()和Page()方法,进行程序和页面的注册
使用数据
(2)提供丰富的 API,如扫一扫、支付等微信特有的能力。
(3)每个页面有独立的作用域,并提供模块化能力。

3.数据层

数据层在逻辑上包括页面临时数据或缓存、文件存储(本地存储)和网络存储与调用

1.页面临时数据或缓存
在Page()中,使用setData函数将数据从逻辑层发送到视图层,同时改变对应的
this. data 的值。setData()函数的参数接收一个对象,以(key,value)的形式表示将key在this. data中对应的值改变成value。
2.文件存储(本地存储)
使用数据API接口,如下:
wx.getStorage 获取本地数据缓存
设置本地数据缓存。wx, setStorage
wx.clearStorage 清理本地数据缓存,
3.网络存储与调用
上传或下载文件 API接口,如下:
wx.request 发起网络请求。
wx.uploadFile 上传文件。
wx.downloadFile 下载文件
调用 URL的 API接口,如下:
wx.navigateTo 新窗日打开页面
wx.redirectTo 原窗口打开页面。

2.3 创建小程序页面:

在pages目录下新建一个dd目录,并在dd目录下新建dd.js、dd.json、dd.wxml、dd.wxss空文件

代码:

dd.wxml

dd.json

{
  
}

dd.js

page({
)}

运行结果

2.4 配置文件

程序的配置文件按其作用范围可以分为全局配置文件(app.json)和页面配置文件(*.json)。全局配置文件作用于整个小程序,页面配置文件只作用于当前页面。由于页面配置文件的优先级高于全局配置文件的优先级,因此,当全局配置文件与页面配置文件有相同配置项时,页面配置文件会覆盖全局配置文件中的相同配置项内容

2.4.1 全局配置文件

小程序的全局配置保存在全局配置文件(app.json) 中, 使用全局配置文件来配置页面文件(pages) 的路径、设置窗口(window) 表现、设定网络请求API 的超时时间值(netwoekTimeout) 以及配置多个切换页(tabBar) 等

1.pages配置项:

设置Pages配置时要注意以下三点:

(1)数组的第一项用于设定小程序的初始页面

(2)在小程序新准则或减少页面时,都需要对数组进行修改

(3)文件名不需要写文件扩展名

2.widow配置项

widow配置项负责设置小程序状态栏、导航栏、窗口背景等系统样式

3.tabBar配置项

当需要在程序顶部或底部设置菜单栏时,可以通过taBar配置项来实现

其中taBar配置项中list选项

4.networkTimeout配置项

小程序中各种网络请求API的超时时间值只能通过networkTimeout配置项统一设置,不能单独在API中设置,显示颜色就近原则

5.debug配置项

用于开发者工具的调试模式,默认为false.

2.4.2页面配置文件

页面配置文件(*.json) 只能设置本页面的窗口表现, 而且只能设置window配置项的内容。 在配置页面配置文件后, 页面中的window配置值将覆盖全局配置文件(app.json) 中的配置值。

2.5逻辑文件
2.5.1.项目逻辑文件

项目逻辑文件app.js中可以通过App()函数注册小程序生命周期函数、全局属性和全局方法, 已注册的小程序实例可以在其他页面逻辑文件中通过getApp()获取。

2.5.2页面逻辑文件

页面逻辑文件的主要功能有: 设置初始数据; 定义当前页面的生命周期函数; 定义事件处理函数等。 每个页面文件都有一个相应的逻辑文件, 逻辑文件是运行在纯javaScrict引擎中。 因此, 在逻辑文件中不能使用浏览器提供的特有对象(document、window) 及通过操作DOM改变页面, 只能采用数据绑定和事件响应来实现

(1)设置初始数据

设置初始数据是对页面的第一次数据绑定。

(2)定义当前页面的生命周期函数

在Page() 函数的参数中, 可以定义当前页面的生命周期函数。在Page() 函数的参数中, 可以定义当前页面的生命周期函数。 页面的生命周期函数主要有onload、onShow、onReady、onHide、onUnload。

■ onload 页面加载函数。 当页面加载完成后调用该函数。 一个页面只会调用一次。

■ onShow 页面显示函数。 当页面显示时调用该函数。 每次打开页面都会调用一次。

■ onReady页面数据绑定函数。 当页面初次数据绑定完成时调用该函数。 一个页面只会调用一次, 代表页面已经准备就绪, 可以和视图层进行交互。 

■ onHide 页面隐藏函数。 当页面隐藏时及当navigateTo 或小程序底部进行tab 切换时,调用该函数。

■ onUnload页面卸载函数。 当页面卸载、进行navigateBack 或redirectTo 操作时, 调用该函数。
代码例子:

dd.js

Page({
  //页面的初始数据
  data:{
  name:'qq',//字符串
  age:20,//数字
  birthday:[{year:2004},{month:11},{ date:18 }],//数组object:{hobby:'computer'}//对象
  }
})

dd.wxml

<view>姓名:{{name}}</view>
<view>年龄:{{age}}</view>
<view>出生日期:
{{birthday[0].year}}年
{{birthday[1].month}}月
{{birthday[2].date}}日
</view>

运行结果:

(3)定义事件处理函数

开发者在Page() 中自定义的函数称为事件处理函数。 视图层可以在组件中加入事件绑定, 当达到触发事件时, 小程序就会执行Page() 中定义的事件处理函数。

4.使用setData跟新数据

小程序在Page对象中封装了一个名为setData() 的函数, 用来更新data中的数据。

2.6页面文件

页面结构文件(WXML) 是框架设计的一套类似HTML的标签语言, 结合基础组件、事件系统, 可以构建出页面的结构, 即.wxml 文件。 在小程序中, 类似HTML的标签被称为组件, 是页面结构文件的基本组成单元。 WXML还具有数据绑定、条件数据绑定、列表数据绑定、模板、引用页面文件、页面事件等能力

2.6.1.数据绑定

 小程序在进行页面数据绑定时,框架会将WXML文件与逻辑文件中的data 进行动态绑定,在页面中显示 data中的数据。小程序的数据绑定使用Mustache语法(H)将变量或运算规则包起来。

1.简单绑定

简单绑定是指使用双大括号({{}})将变量包起来, 在页面中直接作为字符串输出使用。简单绑定可以作用于内容、组件属性、控制属性等的输出。

2.运算

在{{}} 内可以做一些简单的运算(主要有算术运算、逻辑运算、三元运算、字符串运算等), 这些运算均应符合JavaScript 运算规则。

2.6.2条件数据绑定

概念:条件数据绑定就是根据绑定表达式的逻辑值来判断是否数据绑定当前组件。

1.wx:if条件数据绑定wx:if条件数据绑定是指使用wx:if 这个属性来判断是否数据绑定当前组件。 当需要添加多个分支块时, 可以使用wx:elif、wx:else属性。 当控制表达式为true 时,数据绑定一个分支; 当控制表达式为false 时, 数据绑定另一个分支。

2.block:wx:if 条件数据绑定

2.6.3列表数据绑定

概念:列表数据绑定用于将列表中的各项数据进行重复数据绑定

1.wx:for 在组件上, 可以使用wx:for  控制属性绑定一个数组, 将数据中的各项数据循环进行数据绑定到该组件, 格式如下:

<view wx.for="{{items}}">
{{index}}:{{item}}
</view>
2.6.4 模板

概念:在小程序中, 如果要经常使用几个组件的组合(如“登录” 选项), 通常把这几个组件结合定义为一个模板, 以后在需要的文件中直接使用这个模板

1.定义模板

< template = "模板名" >

相关组件代码为: </template> 其中, < template> 为模板标签, name 属性用于定义模板的名称。

2.调用模板

将模板定义后, 就可以对其进行调用了。 调用模板的格式为:

<template is="模版名称"data=="{{传入的数据}}"/>
2.6.5 引用页面文件

在WXML文件中, 不仅可以引用模板文件, 还可以引用普通的页面文件。 WXML 提供了两种方式来引用其他页面文件。

1.import方式:如果在要引用的文件中定义了模板代码,则需要用import方式引用

2.Include方式:include方式可以将源文件中除模板之外的其他代码全部引人,相当于将源文件中的代码复制到include 所在位置。

2.6.6 页面事件

简单来说, 小程序中的事件是用户的一种行为或通信方式。 在页面文件中, 通过定义事件来完成页面与用户之间的交互, 同时通过事件来实现视图层与逻辑层的通信。 我们可以将事件绑定到组件上, 当达到触发条件时, 事件就会执行逻辑层中对应的事件处理函数。

   (1)定义事件函数

   概念:在.js文件中定义事件函数来实现相关功能, 当事件响应后就会执行事件处理代码。
   (2)调用事件 

   概念:调用事件也称为注册事件。

(3)冒泡事件

    概念:冒泡事件是指某个组件上的事件被触发后, 事件会向父级元素传递, 父级元素再向其父级元素传递, 一直到页面的顶级元素。

(4)非冒泡事件

   概念: 非冒泡事件是指某个组件上的事件被触发后, 该事件不会向父节点传递。

2.7 页面样式文件

1.尺寸单位

由于CSS原有的尺寸单位在不同尺寸的屏幕中得不到很好的呈现,WXSS在此基础上增加了尺寸单位rps (respnesivepixel)。 WXSS规定屏幕宽度为750rps, 在系统数据绑定过程中rpx会按比例转化为px。

2.样式导入

为了便于管理WXSS文件, 我们可以将样式存放于不同的文件中。 如果需要在某个文件中引用另一个样式文件, 使用@import语句导入即可。

3.选择器

目前,WXSS 仅支持CSS中常用的选择器, 如.class、#id、element、beforee、aftert等。

4.WXSS常用属性

 第三章

页面布局总结

3.1 盒子模型

概念:微信小程序的视图层由WXML 和WXSS组成。 其中, WXSS (WeiXINStyleSheets) 是基于CSS 拓展的样式语言, 用于描述WXML 的组成样式, 决定WXML的组件如何显示。WXSS 具有CSS的大部分特性, 因此, 本章将重点讲解CSS 中的布局相关内容。、

在页面设计中, 只有掌握了盒子模型以及盒子模型的各个属性和应用方法, 才能轻松控制页面中的各个元素。 盒子模型就是我们在页面设计中经常用到的一种思维模型。 在CSS 中, 一个独立的盒子模型由内容(content)、内边距(padding)、边框(border)和外边距(margin) 4 个部分组成, 如图3-1所示。

此外, 对padding、border 和margin 可以进一步细化为上、下、左、右4 个部分, 在CSS可以分别进行设置, 如图3-2所示。

 图中各元素的含义如下:

■ width 和height 内容的宽度和高度。

■ padding-top、padding-right、padding-bottom 和padding-left 上内边距、右内边距、底内边距和左内边距。

■ padding-top、padding-right、padding-bottom 和padding-left 上边框、右边框、底边框和左边框。

■ margin -top、margin -right、margin-bottom 和margin_left:上外边距、外边距底外边距和左外边距

因此,一个盒子实际所占有的宽度(高度)应该由“内容”+“内边距”+“边框+“外边距”组成

3.2 块元素与行内元素

概念:块级元素默认占一行高度, 一行内通常只有一个块级元素(浮动后除外), 添加新的块级元素时, 会自动换行, 块级元素一般作为盒子出现。

3.2.1 块级元素

(1) 一个块级元素占一行。

(2) 块级元素的默认高度由内容决定, 除非自定义高度。

(3) 块级元素的默认宽度是父级元素的内容区宽度, 除非自定义宽度。

(4) 块级元素的宽度、高度、外边距及内边距都可以自定义设置。

(5) 块级元素可以容纳块级元素和行内元素。 < view/ > 组件默认为块级元素, 使用<view/ > 组件演示盒子模型及块级元素的示例代码如下:

<view style="border: 1px solid #f00">块级元素1</view>
<view style="border: 1px solid #0f0;margin:15px;padding:20px">块级元素2</view>
<view style="border: 1px solid #00f;width:200px;height:80px">块级元素3</view>
<view style="border: 1px solid #ccc">
  <view style="height:60px">块级元素4</view>
</view>
<view style="border: 1px solid #f00;width: 100px;background-color: #ccc;">
  父级元素高度随内容决定,内容为文本
</view>

运行结果:

3.2.2 行内元素 

概念:行内元素, 不必从新一行开始, 通常会与前后的其他行内元素显示在同一行中, 它们不占有独立的区域, 仅靠自身内容支撑结构, 一般不可以设置大小, 常用于控制页面中文本的样式。 将一个元素的display 属性设置为inline 后, 该元素即被设置为行内元素。

< text/ > 组件默认为行内元素, 使用< view/ > 及< text/ > 组件演示盒子模型及行内元素的示例代码如下:

<viw style="padding: 40px;">
  <text style="border: 1px solid #f00;">文本1</text>
  <text style="border: 1px solid #0f0;margin: 10px;padding: 5px;">文本2</text>
  <view style="border: 1px solid #0f0;display: inline;">
    块级元素设置为行内元素
  </view>一行显示不全,自动换行显示
</viw>

运行结果:

3.2.3 行内块元素

概念:当元素的display 属性被设置为inline-block时, 元素被设置为行内块元素。 行内块元素可以被设置高度、宽度、内边距和外边距。代码如下:

<view>
  元素显示方式的<view style="display: inline-block;border: 1px solid #f00;margin: 10px;padding: 10px;width: 200px;">
  块级元素、行内元素和行内块元素
  </view>三种类型
</view>

运行结果:

3.3 浮动与定位
3.3.1 元素浮动与清除

概念:元素浮动就是指设置了浮动属性的元素会脱离标准文档流的控制, 移到其父元素中指定位置的过程。 在CSS中, 通过float 属性来定义浮动, 其基本格式如下:

{float:none|left|right;}

其中

        none——默认值,表示元素不浮动;
        left——元素向左浮动;
        right——元素向右浮动。
在下面的示例代码中,分别对box1、box2、box3元素左浮动:

<!--元素浮动与清除-->
<view>box1,box2,box3 没浮动</view>
<view style="border: 1px solid #f00;padding: 5px;">
  <view style="border: 1px solid #0f0;">box1</view>
  <view style="border: 1px solid #0f0;">box2</view>
  <view style="border: 1px solid #0f0;">box3</view>
</view>
<view>box1 左浮动</view>
<view style="border: 1px solid #f00;padding: 5px;">
  <view style="float: left;border: 1px solid #0f0;">box1</view>
  <view style="border: 1px solid #0f0;">box2</view>
  <view style="border: 1px solid #0f0;">box3</view>
</view>
<view>box2 左浮动</view>
<view style="border: 1px solid #f00;padding: 5px;">
  <view style="float: left;border: 1px solid #0f0;">box1</view>
  <view style="float: left;border: 1px solid #0f0;">box2</view>
  <view style="border: 1px solid #0f0;">box3</view>
</view>
<view>box3 左浮动</view>
<view style="border: 1px solid #f00;padding: 5px;">
  <view style="float: left;border: 1px solid #0f0;">box1</view>
  <view style="float: left;border: 1px solid #0f0;">box2</view>
  <view style="float: left;border: 1px solid #0f0;">box3</view>
</view>

运行结果:

例如:分别对box1、box2、box3元素右浮动 

代码:

<view>box1,box2,box3没浮动</view>
<view style="border: 1px solid #f00;padding:5px;">
  <view style="float: none; border: 1px solid #0f0;padding:5px;">box2</view>
<view style="float: none; border: 1px solid #0f0;padding:5px;">box2</view>
<view style="float: none; border: 1px solid #0f0;padding:5px;">box3</view>
</view>
<view>box1</view>
<view style="border: 1px solid #f00;padding:5px;">
  <view style="float: none; border: 1px solid #0f0;padding:5px;">box1</view>
<view style=" float: none; border: 1px solid #0f0;padding:5px;">box2</view>
<view style="float: none; border: 1px solid #0f0;padding:5px;">box3</view>
</view>
<view>box2</view>
<view style=" border: 1px solid #f00;padding:5px;">
  <view style="float: none; border: 1px solid #0f0;padding:5px;">box1</view>
<view style="float: none;border: 1px solid #0f0;padding:5px;">box2</view>
<view style="float: none; border: 1px solid #0f0;padding:5px;">box3</view>
</view>
<view> box1 box2  box3</view>
<view style=" border: 1px solid #f00;padding:5px;">
  <view style="float: none; border: 1px solid #0f0;padding:5px;">box1</view>
<view style="float: none; border: 1px solid #0f0;padding:5px;">box2</view>
<view style="float: none; border: 1px solid #0f0;padding:5px;">box3</view>
</view>

运行结果:

在CSS 中,clear 属性用于清除浮动元素对其他元素的影响, 其基本格式如下:

left———清除左边浮动的影响, 也就是不允许左侧有浮动元素;

right———清除右边浮动的影响, 也就是不允许右侧有浮动元素;

both———同时清除左右两侧浮动的影响;

none———不清除浮动。

代码:

<view> box1 box2 左浮动 box3 清除左浮动</view>
<view style=" border: 1px solid #f00;padding:5px;">
  <view style=" float: left;border: 1px solid #0f0;padding:5px;">box1</view>
<view style="float: left; border: 1px solid #0f0;padding:5px;">box2</view>
<view style=" clear: left;border: 1px solid #0f0;">box3</view>
</view>
 

运行结果:

除此之外,还可以在父元素外添加个空元素

例如:在父元素添加一个空元素,实现父元素包裹浮动元素

代码:

dd.wxml

<view> box1 box2  box3左浮动 在父元素后添加一个空元素</view>
<view style=" border: 1px solid #f00;padding:5px;"class="clearfloat">
  <view style="float: left; border: 1px solid #0f0;padding:5px;">box1</view>
<view style="float: left; border: 1px solid #0f0;padding:5px;">box2</view>
<view style="float: left; border: 1px solid #0f0;padding:5px;">box3</view>
</view>

dd.wxss

.clearfloat::after{
display: block;clear: both;height: 0;content: ""
  }

运行结果:

3.3.2元素定位

概念:浮动布局虽然灵活, 但无法对元素的位置进行精确的控制。 在CSS 中, 通过position属性可以实现对页面元素的精确定位。

基本格式如下:

{position:static|relative|absolute|fixed}

static———默认值, 该元素按照标准流进行布局;

relative———相对定位, 相对于它在原文档流的位置进行定位, 它后面的盒子仍以标准流方式对待它; 

absoulute———绝对定位, 相对于其上一个已经定位的父元素进行定位, 绝对定位的盒子从标准流中脱离, 它对其后的兄弟盒子的定位没有影响;

fixed———固定定位, 相对于浏览器窗口进行定位

对 box1、box2、box3 进行元素静态定位,示例代码如下:

<!-- 三个元素均为定位static -->
  <view style=" border: 1px solid #0f0;width: 100px;height: 100px;">box1</view>
<view style=" border: 1px solid #0f0;width: 100px;height: 100px;">box2</view>
<view style=" border: 1px solid #0f0;width: 100px;height: 100px;">box3</view>
 

运行结果:

对 box1、box2、box3 进行元素相对定位,示例代码如下:

<!--box2元素相对定位Relative top:30px left:30px-->
<view style="border: 1px solid #0f0;width: 100px;height: 100px;">box1</view>
<view style="border: 1px solid #0f0;width: 100px;height: 100px;position: relative;left: 30px;top: 30px;">box2</view>
<view style="border: 1px solid #0f0;width: 100px;height: 100px;">box3</view>

运行结果:

对 box1、box2、box3 进行元素绝对定位,示例代码如下:

<!--box2元素绝对定位absolute top:30px left:30px-->
<view style="border: 1px solid #0f0;width: 100px;height: 100px;">box1</view>
<view style="border: 1px solid #0f0;width: 100px;height: 100px;position: absolute;left: 30px;top: 30px;">box2</view>
<view style="border: 1px solid #0f0;width: 100px;height: 100px;">box3</view>

运行结果:

对 box1、box2、box3 进行元素固定定位,示例代码如下:

<!--box2元素固定定位fixed top:30px left:100px-->
<view style="border: 1px solid #0f0;width: 100px;height: 100px;">box1</view>
<view style="border: 1px solid #0f0;width: 100px;height: 100px;position: fixed;left: 150px;top: 30px;">box2</view>
<view style="border: 1px solid #0f0;width: 100px;height: 100px;">box3</view>

运行结果:

3.4 flex布局

概念:flex 布局是万维网联盟(WoeldWideWebConsortium,W3C) 在2009 年提出的一种新布局方案, 该布局可以简单快速地完成各种可以伸缩的设计, 以便很好地支持响应式布局。flex 是flexiblebox 的缩写, 意为弹性盒子模型, 可以简便、完整、响应式地实现各种页面布局。

布局:flex 布局主要由容器和项目组成, 采用flex 布局的元素称为flex容器(flexcontainer),flex 布局的所有直接子元素自动成为容器的成员, 称为flex项目(flexitem)。

容器默认存在两根轴: 水平的主轴和垂直的交叉轴。 主轴的开始位置(与边框的交叉点) 叫做mainstart, 结束位置叫做mained; 交叉轴的开始位置叫做crosstart, 结束位置叫做crossend。 项目默认沿主轴排列。 单个项目占据的主轴空间叫做mainsize, 占据的交叉轴空间叫做crossize。 flex 布局模型如图所示。

设置display 属性可以将一个元素指定为flex布局, 设置flex-direction属性可以指定主轴方向。 主轴既可以是水平方向, 也可以是垂直方向。

3.4.1 容器属性

flex容器支持的属性又七种,如图所示:

(1)display

display用来指定元素是否为flex 布局, 语法格式为:

.box{display:flex|inline-flex;}

 flex———块级flex布局, 该元素变为弹性盒子;

inline-flex———行内flex 布局, 行内容器符合行内元素的特征, 同时在容器内又符合flex 布局规范。 

设置了flex布局之后, 子元素的float、clear 和vertical-align属性将失效。

(2)flex-direction

用于设置主轴的方向, 即项目排列的方向, 语法格式为:

.box{flex-direction:row|row-reverse|column|column-reverse;}

row———主轴为水平方向, 起点在左端, 当元素设置为 flex布局时, 主轴默认为row;

row-reverse———主轴为水平方向, 起点在右端; 

column———主轴为垂直方向, 起点在顶端;

column-reverse———主轴为垂直方向, 起点在底端

3)flex-wrap

用来指定项目在一根轴线的排列位置不够时,项目是否换行,其语法格式为:

.box{flex-wrap:nowrap|wrap|wrap-reverse;}

(4) flex-flow

flex-flow是flex-direction 和flex-wrap 的简写形式, 默认值为row nowrap。 语法格式如下:

.box{flex-flow:<flex-direction>||<flex-wrap>;}

 (5)justify-content

justify-content 用于定义项目在主轴上的对齐方式。 语法格式如下:

.box{justify-content:flex-start|flex-end|center|space-between|space-around;}

justify-content———与主轴方向有关, 默认主轴水平对齐, 方向从左到右;

flex-start———左对齐, 默认值;

flex-end———右对齐; 

center———居中;

space-between———两端对齐, 项目之间的间隔都相等;

space-around———每个项目两侧的间隔相等。

如图所示为justify-content不同值的显示效果

(6)align-items

align-items用于指定项目在交叉轴上的对齐方式, 语法格式如下:

.box{align-items:flex-start|flex-end|center|baseline|stretch;}

align-items———与交叉轴方向有关, 默认交叉由上到下;

flex-start———交叉轴起点对齐;

flex-end———交叉轴终点对齐;

center———交叉轴中线对齐;

baseline———项目根据它们第一行文字的基线对齐;

stretch———如果项目未设置高度或设置为auto, 项目将在交叉轴方向拉伸填充容器, 此为默认值。 

示例代码如下:

dd.wxml

<view class="cont1">
<view class="item">1</view>
<view class="item item2">2</view>
<view class="item item3">3</view>
<view class="item item4">4</view>
</view>

dd.wxss

/* wxss文件 */
.cont1{
 display: flex;
 flex-direction: row;
 align-items: baseline;
}
.item{
  background-color: #ccc;
  border: 1px solid #f00;
  height: 100px;
  width: 50px;
  margin: 2px;
}
.item2{
  height: 80px;
}
.item3{
  display: flex;
  height: 50px;
  align-items: flex-end;
}
.item4{
  height: 120px;
}

运行结果:

(7)align-content

align-content 用来定义项目有多根轴线(出现换行后) 在交叉轴上的对齐方式, 如果只有一根轴线, 该属性不起作用。 语法格式如下:

.box{align-content;flex-start|flex-end|center|space-between|space-around|stretch}

apace-between——与交叉轴两端对齐, 轴线之间的间隔平均分布;

space-around——每根轴线两侧的间隔都相等, 轴线之间的间隔比轴线与边框间隔大一倍。 其余各属性值的含义与align-items属性的含义相同。

下图所示为 align-content 不同值的显示效果

3.4.2 项目属性

容器内的项目支持六个属性,如图所示:

1)order

order属性定义项目的排列顺序, 数值越小, 排列越靠前, 默认值为0。 语法格式如下:

.item{order:<number>;}

代码如下

dd.wxml

<view class="cont1">
<view class="item">1</view>
<view class="item item2">2</view>
<view class="item item3">3</view>
<view class="item item4">4</view>
</view>
<view class="cont1">
<view class="item" style="order: 1;">1</view>
<view class="item "style="order: 3;">2</view>
<view class="item "style="order: 2;">3</view>
<view class="item item4">4</view>
</view>

dd.wxss

.cont1{
  display: flex;
  flex-direction: row;
  align-items: baseline;
}
.item{
  background-color: #ccc;
  border: 1px solid#f00;
  height: 100px;
  width: 50px;
  margin: 2px;
}
.item2{
  height: 80px;
}
.item3{
  display: flex;
  height: 80px;
  align-items:flex-start ;
}
.item4{
  height: 120px;
}

运行结果:

(2)flex-grow 

 定义项目的放大比例, 默认值为0, 即不放大。 语法格式如下:

.item{flex-grow:<number>;}

代码如下:

dd.wxml

<view class="cont1">
<view class="item">1</view>
<view class="item item2">2</view>
<view class="item item3">3</view>
<view class="item item4">4</view>
</view>
<view class="cont1">
<view class="item">1</view>
<view class="item "style="flex-grow:1">2</view>
<view class="item "style="flex-grow:2">3</view>
<view class="item">4</view>
</view>

dd.wxss

.cont1{
  display: flex;
  flex-direction: row;
  align-items: baseline;
}
.item{
  background-color: #ccc;
  border: 1px solid#f00;
  height: 100px;
  width: 50px;
  margin: 2px;
}
.item2{
  height: 80px;
}
.item3{
  display: flex;
  height: 80px;
  align-items:flex-start ;
}
.item4{
  height: 120px;
}

运行结果:

3)flex-shink

  用来定义项目的缩小比例, 默认值为1, 如果空间不足, 该项目将被缩小。语法格式如下:

.item{flex-shink:<number>;}

代码如下:

dd.wxml

<view class="cont1">
<view class="item">1</view>
<view class="item item2">2</view>
<view class="item item3">3</view>
<view class="item item4">4</view>
</view>
<view class="cont1">
<view class="item">1</view>
<view class="item "style="flex-shrink:1">2</view>
<view class="item "style="flex-shrink:2">3</view>
<view class="item"style="flex-shrink:3">4</view>
</view>

dd.wxss

.cont1{
  display: flex;
  flex-direction: row;
  align-items: baseline;
}
.item{
  background-color: #ccc;
  border: 1px solid#f00;
  height: 100px;
  width: 50px;
  margin: 2px;
}
.item2{
  height: 80px;
}
.item3{
  display: flex;
  height: 80px;
  align-items:flex-start ;
}
.item4{
  height: 120px;
}

运行结果:

(4)flex-basis

属性用来定义伸缩项目的基准值, 剩余的空间将按比例进行缩放, 它的默认值为auto (即项目的本来大小)。 语法格式如下:

.item{flex-basis:<numner>|auto;}

代码:

dd.wxml

<view class="cont1">
<view class="item">1</view>
<view class="item item2">2</view>
<view class="item item3">3</view>
<view class="item item4">4</view>
</view>
<view class="cont1">
<view class="item">1</view>
<view class="item "style="flex-basis:1">2</view>
<view class="item "style="flex-basis:2">3</view>
<view class="item"style="flex-basis:3">4</view>
</view>

dd.wxss

.cont1{
  display: flex;
  flex-direction: row;
  align-items: baseline;
}
.item{
  background-color: #ccc;
  border: 1px solid#f00;
  height: 100px;
  width: 50px;
  margin: 2px;
}
.item2{
  height: 80px;
}
.item3{
  display: flex;
  height: 80px;
  align-items:flex-start ;
}
.item4{
  height: 120px;
}

运行结果:

 (5)flex

属性是flex-grow、flex-shrink 和flex-basis 的简写, 其默认值分别为0、1、auto。语法格式如下:

.item{<flex-grow>|<flex-shrink>|<flex-basis>;}

6)align-self

属性用来指定单独的伸缩项目在交叉轴上的对齐方式。 该属性会重写默认的对齐方式。 语法格式如下:

.item{aligin-self:auto|flex-start|flex-end|center|baseline|stretch;}

在该属性值中,除了auto以外,其余属性值和容器align-items的属性值完全一致

auto表示继承容器align-items的属性,如果没有元素,则等于stretch(默认值)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值