第一章
微信小程序概述
微信小程序是一种基于微信平台的应用程序,用户可以在微信中直接使用,无需下载安装。它提供了一种轻量级的应用开发和使用方式,用户可以随时随地在微信中打开和使用小程序。
微信小程序具有以下特点:
无需下载安装:用户可以直接在微信中打开小程序,无需下载和安装额外的应用程序。
轻量级应用:微信小程序相比于传统应用程序,体积较小,加载速度快,占用手机存储空间少。
便捷分享:用户可以通过微信分享小程序给朋友或者在朋友圈中分享,方便快捷。
多种应用场景:微信小程序可以涵盖生活服务、电商购物、社交娱乐等多个领域,满足用户的不同需求。
接口丰富:微信提供了丰富的接口和工具,方便开发者开发和优化小程序,提供更好的用户体验。
商业化变现:微信小程序支持广告、支付、会员等多种商业化手段,为开发者提供了变现的机会。
微信小程序的发展迅速,已经成为了中国最大的小程序平台之一,拥有庞大的用户群体和丰富多样的小程序。它为用户提供了便捷的应用体验,为开发者提供了广阔的发展空间。
第一个微信小程序
// index.js
const defaultAvatarUrl = 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0'
Page({
data: {
motto: 'Hello World',
userInfo: {
avatarUrl: defaultAvatarUrl,
nickName: '',
},
hasUserInfo: false,
canIUseGetUserProfile: wx.canIUse('getUserProfile'),
canIUseNicknameComp: wx.canIUse('input.type.nickname'),
},
bindViewTap() {
wx.navigateTo({
url: '../logs/logs'
})
},
onChooseAvatar(e) {
const { avatarUrl } = e.detail
const { nickName } = this.data.userInfo
this.setData({
"userInfo.avatarUrl": avatarUrl,
hasUserInfo: nickName && avatarUrl && avatarUrl !== defaultAvatarUrl,
})
},
onInputChange(e) {
const nickName = e.detail.value
const { avatarUrl } = this.data.userInfo
this.setData({
"userInfo.nickName": nickName,
hasUserInfo: nickName && avatarUrl && avatarUrl !== defaultAvatarUrl,
})
},
getUserProfile(e) {
// 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认,开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
wx.getUserProfile({
desc: '展示用户信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
success: (res) => {
console.log(res)
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}
})
},
})
HTML模块
<!--index.wxml-->
<scroll-view class="scrollarea" scroll-y type="list">
<view class="container">
<view class="userinfo">
<block wx:if="{{canIUseNicknameComp && !hasUserInfo}}">
<button class="avatar-wrapper" open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar">
<image class="avatar" src="{{userInfo.avatarUrl}}"></image>
</button>
<view class="nickname-wrapper">
<text class="nickname-label">昵称</text>
<input type="nickname" class="nickname-input" placeholder="请输入昵称" bind:change="onInputChange" />
</view>
</block>
<block wx:elif="{{!hasUserInfo}}">
<button wx:if="{{canIUseGetUserProfile}}" bindtap="getUserProfile"> 获取头像昵称 </button>
<view wx:else> 请使用2.10.4及以上版本基础库 </view>
</block>
<block wx:else>
<image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" mode="cover"></image>
<text class="userinfo-nickname">{{userInfo.nickName}}</text>
</block>
</view>
<view class="usermotto">
<text class="user-motto">{{motto}}</text>
</view>
</view>
</scroll-view>
CSS模块
/**index.wxss**/
page {
height: 100vh;
display: flex;
flex-direction: column;
}
.scrollarea {
flex: 1;
overflow-y: hidden;
}
.userinfo {
display: flex;
flex-direction: column;
align-items: center;
color: #aaa;
width: 80%;
}
.userinfo-avatar {
overflow: hidden;
width: 128rpx;
height: 128rpx;
margin: 20rpx;
border-radius: 50%;
}
.usermotto {
margin-top: 200px;
}
.avatar-wrapper {
padding: 0;
width: 56px !important;
border-radius: 8px;
margin-top: 40px;
margin-bottom: 40px;
}
.avatar {
display: block;
width: 56px;
height: 56px;
}
.nickname-wrapper {
display: flex;
width: 100%;
padding: 16px;
box-sizing: border-box;
border-top: .5px solid rgba(0, 0, 0, 0.1);
border-bottom: .5px solid rgba(0, 0, 0, 0.1);
color: black;
}
.nickname-label {
width: 105px;
}
.nickname-input {
flex: 1;
}
index.json模块
{
"usingComponents": {
}
}
运行结果
微信开发者工具界面功能介绍
如图所示,微信小程序开发界面分为五大区域:工具栏,模拟区,目录文件区,编辑区,调试区。
1.工具栏
在工具栏中可以实现多种功能,例如账号的切换,模拟区、编辑区,调试区的显示/隐藏,小程序的编译、预览,切换后台,清理缓存等。
2.模拟区
在模拟区中选择模拟手机的类型、显示比例、网络类型后,模拟器中会显示小程序的运行效果。
3.目录文件区
目录文件区用来显示当前项目的目录结构,单击左上角的“+”按钮可以进行目录和文件的创建,右键单击目录文件区中的文件或目录可以进行“硬盘打开”“重命名”“删除”等相关操作。
4.编辑区
编辑区用来实现对代码的编辑操作,编辑区中支持对.wxml、.wxss、.js及.json文件的操作,使用组合键能提高代码的编辑效率。
5. 调试区
调试区的功能是帮助开发者进行代码调试及排查有问题的区域。小程序系统为开发者提供了9个调试功能模块,分别是Console、Sources、Network、Security、Storage、AppData、 Wxml、Sensor和Trace。最右边的扩展菜单项“三个竖着的点”是定制与控制开发工具按钮。
第二章
微信小程序开发基础总结
以第一章新建的项目为参考,了解项目的基本结构,如图,在小程序的基本结构中,项目的主目录有两个子目录(pages和utils)和四个文件(app.json, app.less, app.ts, sitemap.json)。
pages目录中有两个子目录(index和logs)。每个子目录中保存着一个页面的相关文件。一般情况下包含四个扩展名(.wxml, .wxss, .js, .json),分别用于表示页面结构,页面样式文件,页面逻辑,页面配置文件。同一个页面的四个文件必须具有相同的路径和文件名。
主体文件
微信小程序主体由三个文件组成,三个文件必须放在项目的主目录,负责整体配置,名称固定。
app.js 小程序逻辑文件,主要用来注册小程序全局实例。在编译时,app·js文件会和其他页面的逻辑文件打包成一个JavaScript文件。该文件在项目中不可缺少。
app.json小程序公共设置文件,配置小程序全局设置。该文件在项目中不可缺少。
app.wxss小程序主样式表文件,类似HTML的.css文件。在主样式表文件中设置的样式在其他页面文件中同样有效。该文件在项目中不是必需的。
页面文件
小程序通常是由多个页面组成的,每个页面包含4个文件,同一页面的这4个文件必须具有相同的路径与文件名。当小程序被启动或小程序内的页面进行跳转时,小程序会根 app.json 设置的路径找到相对应的资源进行数据绑定。
.js文件 页面逻辑文件,在该文件中编写JavaScript代码控制页面的逻辑。该文件在每个小程序的页面中不可缺少。
.wxml文件 页面结构文件,用于设计页面的布局、数据绑定等,类似HTML页面中的.html文件。该文件在页面中不可缺少。
.wxss 文件页面样式表文件,用于定义本页面中用到的各类样式表。当页面中有样式表文件时,文件中的样式规则会层叠覆盖app.wxss中的样式规则;否则,直接使用 app.wxss 中指定的样式规则。该文件在页面中不可缺少。
.json 文件页面配置文件。该文件在页面中不可缺少。
全局配置文件
全局配置项
全局配置文件内容整体结构:
{
设置页面路径
"pages":[],
//设置默认页面的窗口表现
"window":{},
//设置底部 tab 的表现
"tabBar":{},
//设置网络请求API的超时时间值
"networkTimeout":{},
//设置是否开启 debug 模式
"debug":false
}
1.psges配置项
app.json文件配置
{
"pages": [
"pages/news/news",
"pages/logs/logs"
],
}
window配置项及其描述
在app.json中设置window配置项
"window": {
"navigationBarBackgroundColor": "#fff",
"navigationBarTextStyle": "black",
"navigationBarTitleText": "小程序window功能演示",
"backgroundColor": "#ccc",
"backgroundTextStyle":"light"
},
tabBar配置项及其描述
tabBar中list选项
在app.json文件设置tabBar配置
"tabBar": {
"color":"#666666",
"selectedColor":"#ff0000",
"borderStyle":"black",
"backgroundColor":"ffffff",
"list":[
{
"pagePath":"pages/logs/logs",
"iconPath": "images/6b2e7226deef74f675d79d6cf0f21a3.png",
"selectedIconPath": "images/84c52bdd9c1f0f077507bbf367b8019.jpg",
"text": "首页"
},
{
"pagePath":"pages/news/news",
"iconPath": "images/6b2e7226deef74f675d79d6cf0f21a3.png",
"selectedIconPath": "images/84c52bdd9c1f0f077507bbf367b8019.jpg",
"text": "新闻"
}
]
},
networkTimeout配置项
例如,为了提高网络效率,可以在app.json中使用下列超时设置
{
"networkTimeout":{
"request":20000,
"connectSocket":20000,
"uploadFile":20000,
"downloadFlie":20000
}
}
页面中的window配置只需写配置项,不用写window:
{
"navigationBarBackgroundColor": "#fff",
"navigationBarTextStyle": "black",
"navigationBarTitleText": "小程序window功能演示",
"backgroundColor": "#ccc",
"backgroundTextStyle":"light"
}
逻辑层文件
项目逻辑文件配置项
页面逻辑文件配置项
在Page()函数的参数中,可以定义当前页面的生命周期函数。页面的生命函数主要有onLoad,onShow,onReady,onHide,onUnload.
onLoad,页面加载函数,当页面加载完成后调用该函数,一个页面只会调用一次,该函数的参数可以获取wx.navigateTo和wx.redirectTo及<navigator/>
onShow,页面显示函数。当页面显示时调用该函数。每次打开页面都会调用一次
onReady,页面数据绑定函数。当页面初次数据绑定完成时调用该函数。一个页面只会调用一次,代表页面已经准备就绪,可以和视图层进行交互。
onHide,页面隐藏函数。当页面隐藏时及当navigateTo 或小程序底部进行tab 切换时调用该函数
onUnload,页面卸载函数。当页面卸载、进行navigateBack或redirectTo 操作时,调用该函数
data:{
name:'lwk',
age:30,
birthday:[{year:1988},{month:11},{data:18}],
object:{hobby:'computer'},
}
<view>姓名:{{name}}</view>
<view>年龄:{{age}}</view>
<view>出生日期:
{{birthday[0].year}}年
{{birthday[1].month}}月
{{birthday[2].data}}日
</view>
冒泡事件
WXSS常用属性
第三章
页面布局
盒子模型
盒子模型就是我们在更面设计中经常用到的一种思维模型。在CSS中,一个独立的盒子模型由内容(content)、内边距(padding)、边框(border)和外边距(margin)4个部分组成。
此外,对 padding、border和margin可以进一步细化为上、下、左、右4个部分,在css中可以分别进行设置
一个盒子实际所占有的宽度(高度)应该由“内容”+“内边距”+“边框”+“外边距”组成,例如:
.box{
width:70px;
padding:5px;
margin:10px;
}
此盒子所占宽度如图:
css中的布局都基于盒子模型,不同类型的元素对盒子模型的处理不同。
块级元素与行内元素
元素按显示方式分为块级元素,行内元素和行内块元素,他们的显示方式由display属性控制。
块级元素
块级元素默认占一行高度,一行内通常只有一个块级元素(浮动后除外),添加新的块级元素时,会自动换行,块级元素一般作为盒子出现。块级元素的特点如下:
(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="border: 1px solid #ccc"></view>
</view>
<view style="border: 1px solid #f00;width: 100px;background-color: #ccc;">
父级元素高度随内容决定,内容为文本</view>
显示效果:
行内元素
行内元素,不必从新一行开始,通常会与前后的其他行内元素显示在同一行中,它们不占有独立的区域,仅靠自身内容支撑结构,一般不可以设置大小,常用于控制页面中文本的样式。将一个元素的 display属性设置为inine后,该元素即被设置为行内元素。行内元素的特点如下:
(1)行内元素不能被设置高度和宽度,其高度和宽度由内容决定。
(2)行内元素内不能放置块级元素,只级容纳文本或其他行内元素。
(3)同一块内,行内元素和其他行内元素显示在同一行。
<texw/>组件默认为行内元素,使用<view/>及<text/>组件演示盒子模型及行内元素的示例代码如下:
<view style="padding: 20px;">
<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 #00f;display: inline;">块级元素设置为行内元素</view>一行显示不全,自动换行显示
</view>
显示效果:
行内块元素
当元素的 display 属性被设置为imline-bock时,元素被设置为行内块元素。行内块元素可以被设置高度、宽度、内边距和外边距。示例代码如下:
<view>元素显示方式的<view style="display: inline-block;border: 1px solid #f00;margin: 10px;padding: 10px;width: 200px;">块级元素和行内元素</view>三种类型
</view>
显示效果
元素浮动与清除
元素浮动就是设置了浮动属性的元素会脱离标准文档流的控制,移到其父元素指定位置的过程。在css里通过float属性定义浮动,基本格式为:
{
floa: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>box1 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 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>
运行效果:
通过案例发现,box3左浮动后,父元素边框未能包裹box3元素,这时可以通过清除浮动来解决
清除浮动基本格式为:
{
clear:left|right|both|none;
}
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;">box1</view>
<view style="float: left; border: 1px solid #0f0;">box2</view>
<view style="clear:left;border: 1px solid #0f0;">box3</view>
</view>
运行效果:
还可以在父元素外面添加一个空元素,实现父元素被包裹浮动元素,示例代码:
wxml
<view>box1 box2 box3左浮动 在父元素后面添加一个空元素</view>
<view style="border: 1px solid #f00;padding: 5px" class="clear-float">
<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>
wxss
.clearfloat::after{
display: block;
clear: both;
height: 0;
content: "";
}
运行效果
元素定位
在css中通过pisition属性可以实现对页面元素的精确定位。基本格式:
{
position:static|relative|absolute|fixed
}
static-默认值
relative-相对定位
absolute-绝对定位
fixed-固定定位
对box1,box2,box3进行元素静态定位,示例代码:
<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进行元素相对定位,示例代码:
<view style="border: 1px solid #0f0;width: 100px;height: 100px;">box1</view>
<view style="float: left; 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进行元素绝对定位,示例代码:
<view style="border: 1px solid #0f0;width: 100px;height: 100px;">box1</view>
<view style="float: left; 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进行元素固定定位,示例代码:
<view style="border: 1px solid #0f0;width: 100px;height: 100px;">box1</view>
<view style="float: left; border: 1px solid #0f0;width: 100px;height: 100px;position: fixed;left: 30px;top: 30px;">box2</view>
<view style="border: 1px solid #0f0;width: 100px;height: 100px">box3</view>
通过案例发现,绝对定位和固定定位效果相同。因为它们的父元素是page,没有定位。
如果将box1,box2,box3的父元素采用相对定位,将box2采用绝对定位,代码·:
<view style="position: relative;top: 50px;left: 50px;border: 1px solid #00f;">
<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>
</view>
运行效果
如果将box1,box2,box3的父元素采用相对定位,将box2采用固定定位,代码·:
<view style="position: relative;top: 50px;left: 50px;border: 1px solid #00f;">
<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: 30px;top: 30px;">box2</view>
<view style="border: 1px solid #0f0;width: 100px;height: 100px;">box3</view>
</view>
运行效果
flex布局
flex主要由容器和项目组成,采用flex布局的元素称为flex容器(flex container),flex布局的所有直接子元素自动成为容器的成员,称为flex项目(flex item)。
容器默认存在两根轴:水平的主轴(main axis),和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。
容器属性
flex容器支持的属性有七种,如图:
1.display用来指定元素是否为flex布局,语法格式为:
.box{
display:flex|inline|flex;
}
flex——块级flex布局,该元素变为弹性盒子;
inline-flex——行内flex布局,行内容器符合行内元素的特征,同时在容器内又符合flex的布局规范。
设置了flex布局后,子元素的float,clear,vertical-align属性将失效;
2. flex - direction
fex-direction用于设置主轴的方向,即项目排列的方向,语法格式为:
.box{
flex-direction:row|row-reverse|column|column-reverse;
}
其中,mw--主轴为水平方向,起点在左端,当元素设置为ex布局时,主轴默认为、
row-reverse--主轴为水平方向,起点在右端;column--主轴为垂直方向,起点在顶端;colunn -reverse--主轴为垂直方向,起点在底端。
如图所示为元素在不同主轴方向下的显示效果
3. flex - wrap
flex-wrap用来指定当项目在一根轴线的排列位置不够时,项目是否换行,其语法格式如下:
.box{
flex-wrap:nowrap|wrap|wrap -reverse;
}
其中,nowrap--不换行,默认值;
wrap--换行,第一行在上方;
wrap-reverse--换行,第一行在下方。
当设置换行时,还需要设置 aign-item属性来配合自动换行,但 align -item 的值不"stretch "
nex-wrap不同值的显示效果如图所示。
4. flex -flow
flex-flow是flex -direction 和 flex-wrap 的简写形式,默认值为 row nowrap。语法格式如下:
.box{
flex-flow:<flex-direction>||<flex-wrap>;
}
示例代码:
.box{flex-flow:row nowrap;}//水平方向不换行
.box{flex-flow:row-reverse wrap;}//水平方向逆方向换行
.box{flex-flow:column wrap-reverse;}//垂直方向逆方向换行
5. justify-content
justify-content用于定义项目在主轴上的对齐方式。语法格式如下:
.box{
justify-content:flex-start|flex-end|center|space -between|space-around;
}
其中,justify-content-
dex-sart--左对齐,默认值;
nex-end--右对齐;
center--居中;
space-between--两端对齐,项目之间的间隔都相等;space-around--每个项目两侧的间隔相等。
图3-15 所示为justify-content 不同值的显示效果。
6. align -items
dlipn-iiems用于指定项目在交叉轴上的对齐方式,语法格式如下:
.box{
align-items:flex-start|flex-end|center|baseline|stretch;
}
其中,align-iems--与交叉轴方向有关,默认交叉由上到下;
0ex-slar--交叉轴起点对齐;
nex-end--交叉轴终点对齐;
cenler--交叉轴中线对齐;
baseline--项目根据它们第一行文字的基线对齐;
streteh--如果项目未设置高度或设置为auto,项目将在交叉轴方向拉伸填充容器,此为默认值。
示例代码如下:
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>
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|fle -end|center|space -between|space-around|stretch
}
其中,space-between--与交叉轴两端对齐,轴线之间的间隔平均分布;space-around--每根轴线两侧的间隔都相等,轴线之间的间隔比轴线与边框间隔大倍。
其余各属性值的含义与align-items属性的含义相同。
如图所示为align-content不同值的显示效果
项目属性
容器内的项目支持六个属性,其功能和名称如图
1.order
order属性定义项目排列顺序,数值越小排列越靠前,默认为0,语法格式:
,item{
order:<number>;
}
示例代码:
<view class="cont1">
<view class="item">1</view>
<view class="item">2</view>
<view class="item">3</view>
<view class="item">4</view>
</view>
<view class="cont1">
<view class="item" style="order:1">1</view>
<view class="item" style="order:2">2</view>
<view class="item" style="order:3">3</view>
<view class="item">4</view>
</view>
运行效果:
2.flex-grow
nex-grow 定义项目的放大比例,默认值为0,即不放大。语法格式如下:
.item{
flex-grow:<number>;
}
示例代码:
<view class="cont1">
<view class="item">1</view>
<view class="item">2</view>
<view class="item">3</view>
<view class="item">4</view>
</view>
<view class="cont1">
<view class="item" style="flex-grow:1">1</view>
<view class="item" style="flex-grow:2">2</view>
<view class="item" style="flex-grow:3">3</view>
<view class="item">4</view>
</view>
运行效果:
3. nex -shrink
nex-shzink 用来定义项目的缩小比例,默认值为1,如果空间不足,该项目将被编小语法格式如下:
.item{
flex-shrink:<number>;
}
示例代码:
<view class="cont1">
<view class="item">1</view>
<view class="item">2</view>
<view class="item">3</view>
<view class="item">4</view>
</view>
<view class="cont1">
<view class="item" style="flex-shrink:1">1</view>
<view class="item" style="flex-shrink:2">2</view>
<view class="item" style="flex-shrink:1">3</view>
<view class="item" style="flex-shrink:4">4</view>
</view>
假定容器宽度为800px,4个元素的宽度分别为240px,元素宽度比容器多160px(即240 x4-800)。当flex-shrink 属性值为!时,由于空间不足,4 个项目将被等比例缩小,每个元素变为200px;当4个元素的缩小比例为1:2:1:4时,它们的宽度分别减少20px、40px、20p、80,它们的实际宽度变为220Px、200 P220 px、160 px。
4.flex- basis
flex-basis 属性用来定义伸缩项目的基准值,剩余的空间将按比例进行缩放,它的默认值为auto(即项目的本来大小)。语法格式如下:
.item{
flex-basis:<number>lauto;
}
示例代码:
<view class="cont1">
<view class="item">1</view>
<view class="item">2</view>
<view class="item">3</view>
<view class="item">4</view>
</view>
<view class="cont1">
<view class="item" >1</view>
<view class="item" style="flex-basis:100px">2</view>
<view class="item" style="flex-basis:200px">3</view>
<view class="item">4</view>
</view>
5. llex
flex属性是 flex-grow、flex-shrink 和flex-basis的简写,其默认值分别为0、1、auto.语法格式如下:
.item{
flex:<flex-grow>|<flex-shrink>|<flex-basis>;
}
实例代码:
.item{
flex:auto;
}
.item{
flex:none;
}
6.align-self
align-self属性用来指定单独的伸缩项目在交叉轴上的对齐方式。该属性会重写默认的对齐方式。语法格式如下:
.item{
align-self:auto|flex-start|flex-end|cengter|baseline|stretch;
}
在该属性值中,除了auto以外,其余属性值和容器align-items的属性值完全一致。auto 表示继承容器 align-ilems的属性,如果没有父元素,则等于stretch(默认值).