微信小程序开发与运营
2024-05-16 16:30:00 0 举报
AI智能生成
微信小程序是一种轻量级的移动应用程序,它基于微信平台开发,为用户提供了一种全新的交互方式。通过微信小程序,用户可以实现各种功能,如购物、点餐、阅读等。微信小程序开发与运营主要包括以下几个步骤:首先,需要申请一个微信小程序账号,并创建一个新的微信小程序项目。接着,使用微信官方提供的开发工具进行代码编写,实现所需的功能。然后,将编写好的代码上传到微信服务器,进行审核和发布。最后,通过运营推广,吸引更多的用户使用小程序。在开发过程中,我们需要遵循微信小程序的开发规范和设计原则,保证用户体验的流畅性和一致性。同时,还需要关注微信小程序的运营数据,持续优化和改进,提高小程序的活跃度和用户粘性。
作者其他创作
大纲/内容
API应用
案例分析——景德镇乐平
小程序后端开发
小程序运营
微信小程序概论
认识微信小程序
小程序简介
微信是腾讯公司于2011年1月21日推出的一款智能终端提供及时通信服务的应用程序
微信小程序是不需要下载,触手可得。小程序,订阅号,企业微信,服务号是微信小程序的四大生态系统
小程序的四大特征
无需安装
触手可及
用完即走
无需卸载
小程序应用场景的特点
简单业务逻辑
低频度的使用场景
微信小程序开发流程
注册小程序账号
开发环境准备
微信开发工具的下载及安装
创建第一个小程序项目
运行及发布小程序
微信小程序开发者工具界面功能介绍
工具栏
模拟区
编辑区
目录文件区
调试区
微信小程序开发基础
小程序的基本目录结构
app.js
小程序逻辑文件,主要用来注册小程序全局实例
app.json
小程序公共设置文件,配置小程序全局变量
app.wxss
小程序主样式表文件
页面文件
.js文件 页面逻辑文件,用javaScript来编写代码控制页面的逻辑
.wxml文件 页面结构文件,用于设计页面的布局、数据绑定等
.wxss文件,页面样式表文件 ,用于定义本页面中用到的各类样式表
.json文件 页面配置文件
小程序的开发框架
视图层
视图层是由框架设计的标签语言wxml(描述页面结构)和组件样式wxss(页面样式)
逻辑层
逻辑层是MINA框架的服务中心
数据层
页面临时数据或缓存
文件存储
网络存储与调用
配置文件
全局配置文件
pages
window
tabBar
networkTimeout
debug
逻辑层文件
设置初始数据
onLoad 页面加载函数
onShow 页面显示函数
onReady 页面数据绑定函数
onHide 页面隐藏函数
onUnload 页面卸载函数
页面结构文件
数据绑定
简单绑定 {{}} 将变量包起来,在页面中直接作为字符串输简单绑定可以作用于内容、组件属性、控制属性等的输出。
【注意】简单绑定作用于组件属性、控制属性时,双大括号外应添加双引号。
【注意】简单绑定作用于组件属性、控制属性时,双大括号外应添加双引号。
//.wxml
<view>姓名:{{name}}</view><view>年龄:{{age}}</view>
<view>出生日期:
{{birthday[0].year}}年
{{birthday[1].month}}月
{{birthday[2].date}}日
</view>
<view>姓名:{{name}}</view><view>年龄:{{age}}</view>
<view>出生日期:
{{birthday[0].year}}年
{{birthday[1].month}}月
{{birthday[2].date}}日
</view>
// .js
data: { name:'xjx',age:30,
num:100,
birthday:[{year:2035},{month:5},{date:15}],//数组
}
data: { name:'xjx',age:30,
num:100,
birthday:[{year:2035},{month:5},{date:15}],//数组
}
运算
算术运算
<view>算术运算:{{age+num}}</view>
逻辑运算
<view>逻辑运算:{{age==34}}</view>
三元运算
<view>三元运算:{{3==4?2:8}}</view>
<view>三元运算:{{age==4?2:num}}</view>
<view>三元运算:{{age==4?2:num}}</view>
字符运算
条件数据绑定
条件数据绑定就是根据绑定表达式的逻辑值来判断是否数据绑定当前组件。
wx:if条件数据绑定
wx:if条件数据绑定是指使用wx:i这个属性来判断是否数据绑定当前组件。
wx:if条件数据绑定
wx:if条件数据绑定是指使用wx:i这个属性来判断是否数据绑定当前组件。
<view wx:if="{{age>40}}">条件语句:1</view>
<view wx:elif="{{age==40}}">条件语句:2 elseif==elif </view>
<view wx:else>条件语句:3</view>
<view wx:elif="{{age==40}}">条件语句:2 elseif==elif </view>
<view wx:else>条件语句:3</view>
列表数据绑定
block wx:for
<block wx:for="{{students}}">
<text>姓名:{{item.nickname}}</text>
<text>身高:{{item.height}}</text>
<text>体重:{{item.weight}}</text>
</block>
<text>姓名:{{item.nickname}}</text>
<text>身高:{{item.height}}</text>
<text>体重:{{item.weight}}</text>
</block>
block wx:if
模板
定义模板
<template name="stu">
<view wx:for="{{students}}">
<text>姓名:{{item.nickname}}</text>
<text>身高:{{item.height}}</text>
<text>体重:{{item.weight}}</text>
</view>
</template>
<view wx:for="{{students}}">
<text>姓名:{{item.nickname}}</text>
<text>身高:{{item.height}}</text>
<text>体重:{{item.weight}}</text>
</view>
</template>
调用模板
<template is="stu" data="{{students}}"></template>
import, include 引用页面文件
页面样式文件
页面组件
view
view组件是块级组件,没有特殊功能,主要用于布局展示,相当于HTML中的div,是布局中最基本的用户界面(UserInterace,UI)组件,通过设置view的CSS属性可以实现各种复杂的布局。
<view style="text-align:center">默认flex布局</view>
<view style="display: flex;">
<view style="border: 1px solid #f00;flex-grow: 1">1</view>
<view style="border: 1px solid #f00;flex-grow: 1">2</view>
<view style="border: 1px solid #f00;flex-grow: 1">3</view>
</view>
<view style="text-align: center;">上下混合布局</view>
<view style="display: flex;flex-direction: column">
<view style="border: 1px solid #f00;">1</view>
<view style="display: flex;">
<view style="border: 1px solid #f00;flex-grow: 1">2</view>
<view style="border: 1px solid #f00;flex-grow: 2">3</view>
</view>
</view>
<view style="text-align: center">左右混合布局</view>
<view style="display: flex;">
<view style="border: 1px solid #f00;flex-grow: 1;">1</view>
<view style="display: flex;flex-direction: column;flex-grow: 1;">
<view style="border: 1px solid #f00;flex-grow: 1">2</view>
<view style="border: 1px solid #f00;flex-grow: 2">3</view>
</view>
</view>
<view style="display: flex;">
<view style="border: 1px solid #f00;flex-grow: 1">1</view>
<view style="border: 1px solid #f00;flex-grow: 1">2</view>
<view style="border: 1px solid #f00;flex-grow: 1">3</view>
</view>
<view style="text-align: center;">上下混合布局</view>
<view style="display: flex;flex-direction: column">
<view style="border: 1px solid #f00;">1</view>
<view style="display: flex;">
<view style="border: 1px solid #f00;flex-grow: 1">2</view>
<view style="border: 1px solid #f00;flex-grow: 2">3</view>
</view>
</view>
<view style="text-align: center">左右混合布局</view>
<view style="display: flex;">
<view style="border: 1px solid #f00;flex-grow: 1;">1</view>
<view style="display: flex;flex-direction: column;flex-grow: 1;">
<view style="border: 1px solid #f00;flex-grow: 1">2</view>
<view style="border: 1px solid #f00;flex-grow: 2">3</view>
</view>
</view>
scroll-view
通过设置scrol-view组件的相关属性可以实现滚动视图的功能
注意 !!!!我们在使用竖向滚动时,如果需要给scroll -view组件设置一个固定高度,可以通过WXSS设置height来完成。请勿在scroll-view组件中使用textarea、map、canvas、video组件。
scroll-into-view属性的优先级高于scroll-top。由于在使用scroll-view组件时会阻止页面回弹,所以在scroll-view组件滚动时无法触发onPullDownRefresh。如果要实现页面下拉刷新,请使用页面的滚动,而不是设置scroll-view组件。这样做,能通过单击顶部状态栏回到页面顶部。
scroll-into-view属性的优先级高于scroll-top。由于在使用scroll-view组件时会阻止页面回弹,所以在scroll-view组件滚动时无法触发onPullDownRefresh。如果要实现页面下拉刷新,请使用页面的滚动,而不是设置scroll-view组件。这样做,能通过单击顶部状态栏回到页面顶部。
<view class="container"style="padding:0rpx">
<scroll-view scroll-top="{{scrollTop}}"scroll-y="true" style="height: {{scrollHeight}} px;" class="list" bindscrolltolower="bindDownLoad"bindscrolltoloupper="topLoad"bindscroll="scroll">
<view class="item" wx:for="{{list}}">
<image class="img"src="{{item.pic_url}}"></image>
<view class="text">
<text class="title">{{item.name}}</text>
<text class="description">{{item.short_description}}</text>
</view>
</view>
</scroll-view>
<view class="body-view">
<loading hidden="{{hidden}}"bindchange="loadingChange">加载中...</loading>
</view>
</view>
<scroll-view scroll-top="{{scrollTop}}"scroll-y="true" style="height: {{scrollHeight}} px;" class="list" bindscrolltolower="bindDownLoad"bindscrolltoloupper="topLoad"bindscroll="scroll">
<view class="item" wx:for="{{list}}">
<image class="img"src="{{item.pic_url}}"></image>
<view class="text">
<text class="title">{{item.name}}</text>
<text class="description">{{item.short_description}}</text>
</view>
</view>
</scroll-view>
<view class="body-view">
<loading hidden="{{hidden}}"bindchange="loadingChange">加载中...</loading>
</view>
</view>
var url ="http://www.imooc.com/course/ajaxlist";
var page =0;
var page_size=5;
var sort = "last";
var is_easy = 0;
var lange_id=0;
var pos_id=0;
var unlearn=0;
var loadMore = function(that){
that.setData({
hidden:false
});
wx.request({
ur1:ur1,
data:{
page:page,
page_size:page_size,
sort:sort,
is_easy:is_easy,
lange_id:lange_id,
pos_id:pos_id,
unlearn:unlearn
},
success:function(res){
var list =that.data.list;
for(var i=0;i<res.data.list.length;i++){
list.push(res.data.list[i]);
}
that.setData({
list:list
});
page ++;
that.setData({
hidden:true
});
}
});
}
Page({
data:{
hidden:true,
list:[],
scrollTop:0,
scrollHeight:0
},
onLoad:function(){
var that =this;
wx.getSystemInfo({
success:function(res){
that.setData({
scrollHeight:res.windowHeight
});
}
});
loadMore(that);
},
bindDownLoad:function(){
var that = this;
loadMore(that);
console.log("lower");
},
scroll:function(event){
this.setData({
scrollTop:event.datail.scrollTop
});
},
topLoad:function(event){
page = 0;
this.setData({
list:[],
scrollTop:0
});
loadMore(this);
console.log("lower");
}
})
var page =0;
var page_size=5;
var sort = "last";
var is_easy = 0;
var lange_id=0;
var pos_id=0;
var unlearn=0;
var loadMore = function(that){
that.setData({
hidden:false
});
wx.request({
ur1:ur1,
data:{
page:page,
page_size:page_size,
sort:sort,
is_easy:is_easy,
lange_id:lange_id,
pos_id:pos_id,
unlearn:unlearn
},
success:function(res){
var list =that.data.list;
for(var i=0;i<res.data.list.length;i++){
list.push(res.data.list[i]);
}
that.setData({
list:list
});
page ++;
that.setData({
hidden:true
});
}
});
}
Page({
data:{
hidden:true,
list:[],
scrollTop:0,
scrollHeight:0
},
onLoad:function(){
var that =this;
wx.getSystemInfo({
success:function(res){
that.setData({
scrollHeight:res.windowHeight
});
}
});
loadMore(that);
},
bindDownLoad:function(){
var that = this;
loadMore(that);
console.log("lower");
},
scroll:function(event){
this.setData({
scrollTop:event.datail.scrollTop
});
},
topLoad:function(event){
page = 0;
this.setData({
list:[],
scrollTop:0
});
loadMore(this);
console.log("lower");
}
})
.userinfo-avatar{
width: 128rpx;
height: 128rpx;
margin: 20rpx;
border-radius: 50%;
}
.userinfo-nickname{
color: #aaa;
}
.usermotto{
margin-top: 200px;
}
.scroll-view{
width: 100%;
}
.item{
width: 90%;
height: 300rpx;
margin: 20rpx auto;
background: brown;
overflow: hidden;
}
.item .img{
width: 430rpx;
margin-right:20rpx;
float: left;
}
.title{
font-size: 30rpx;
display: block;
margin: 30rpx auto;
}
.description{
font-size: 26rpx;
line-height: 15rpx;
}
width: 128rpx;
height: 128rpx;
margin: 20rpx;
border-radius: 50%;
}
.userinfo-nickname{
color: #aaa;
}
.usermotto{
margin-top: 200px;
}
.scroll-view{
width: 100%;
}
.item{
width: 90%;
height: 300rpx;
margin: 20rpx auto;
background: brown;
overflow: hidden;
}
.item .img{
width: 430rpx;
margin-right:20rpx;
float: left;
}
.title{
font-size: 30rpx;
display: block;
margin: 30rpx auto;
}
.description{
font-size: 26rpx;
line-height: 15rpx;
}
swiper
swiper 组件可以实现轮播图、图片预览、滑动页面等效果。一个完整的swiper组件由<swiper/ >和<swiper-item/ >两个标签组成,它们不能单独使用。<swiper/ >中只能放置一个或多个<swiper-item/ >,若放置其他组件则会被删除;<swiper-item/ >内部可以放置任何组件,默认宽高自动设置为100%
<swiper indicator-dots='true'autoplay='true' interval='5000'duration='1000'>
<swiper-item>
<image src="/img/gg.jpg" style="width: 100%;"></image>
</swiper-item>
<swiper-item>
<image src="/img/hb.jpg" style="width: 100%;"></image>
</swiper-item>
<swiper-item>
<image src="/img/hbcp.jpg" style="width: 100%;"></image>
</swiper-item>
</swiper>
<swiper-item>
<image src="/img/gg.jpg" style="width: 100%;"></image>
</swiper-item>
<swiper-item>
<image src="/img/hb.jpg" style="width: 100%;"></image>
</swiper-item>
<swiper-item>
<image src="/img/hbcp.jpg" style="width: 100%;"></image>
</swiper-item>
</swiper>
icon
icon组件即图标组件,通常用于表示一种状态,如success、info、warn、waiting、cancel等。
<view>icon类型:
<block wx:for="{{iconType}}">
<icon type="{{item}}"/>{{item}}
</block>
</view>
<view>icon大小:
<block wx:for="{{iconSize}}">
<icon type="success" size="{{item}}"/>{{item}}
</block>
</view>
<view>icon颜色:
<block wx:for="{{iconColor}}">
<icon type="success" size="30" color="{{item}}"/>{{item}}
</block>
</view>
<block wx:for="{{iconType}}">
<icon type="{{item}}"/>{{item}}
</block>
</view>
<view>icon大小:
<block wx:for="{{iconSize}}">
<icon type="success" size="{{item}}"/>{{item}}
</block>
</view>
<view>icon颜色:
<block wx:for="{{iconColor}}">
<icon type="success" size="30" color="{{item}}"/>{{item}}
</block>
</view>
Page({
data:{
iconType:["success","success_on_circle","info","warn","waiting","cancel","download","search","clear"],
iconSize:[10,20,30,40],
iconColor:['#f00','#0f0','#00f']
}
})
data:{
iconType:["success","success_on_circle","info","warn","waiting","cancel","download","search","clear"],
iconSize:[10,20,30,40],
iconColor:['#f00','#0f0','#00f']
}
})
text
text组件用于展示内容,类似HTML中的<span >, text组件中的内容支持长按选中,支持转义字符“\”,属于行内元素。
<block wx:for="{{x}}" wx:for-item="x">
<view class="aa">
<block wx:for="{{25-x}}"wx:for-item="x">
<text decode="{{true}}" space="{{true}}"> </text>
</block>
<block wx:for="{{y}}" wx:for-item="y">
<block wx:if="{{y<=2*x-1}}">
<text>*</text>
</block>
</block>
</view>
</block>
<block wx:for="{{x}}"wx:for-item="x">
<view class="aa">
<block wx:for="{{19+x}}"wx:for-item="x">
<text decode="{{true}}"space="{{true}}"> </text>
</block>
<block wx:for="{{y}}"wx:for-item="y">
<block wx:if="{{y<=11-2*x}}">
<text>*</text>
</block>
</block>
</view>
</block>
<view class="aa">
<block wx:for="{{25-x}}"wx:for-item="x">
<text decode="{{true}}" space="{{true}}"> </text>
</block>
<block wx:for="{{y}}" wx:for-item="y">
<block wx:if="{{y<=2*x-1}}">
<text>*</text>
</block>
</block>
</view>
</block>
<block wx:for="{{x}}"wx:for-item="x">
<view class="aa">
<block wx:for="{{19+x}}"wx:for-item="x">
<text decode="{{true}}"space="{{true}}"> </text>
</block>
<block wx:for="{{y}}"wx:for-item="y">
<block wx:if="{{y<=11-2*x}}">
<text>*</text>
</block>
</block>
</view>
</block>
Page({
data:{
x:[1,2,3,4,5],
y:[1,2,3,4,5,6,7,8,9]
}
})
data:{
x:[1,2,3,4,5],
y:[1,2,3,4,5,6,7,8,9]
}
})
progress
progress组件用于显示进度状态,如资源加载、用户资料完成度、媒体资源播放进度等。progress组件属于块级元素 。
<view>显示百分比</view>
<progress percent="80"show-info='80'></progress>
<view>改变宽度</view>
<progress percent="50"stroke-width='2'></progress>
<view>自动显示进度条</view>
<progress percent="80"active></progress>
<progress percent="80"show-info='80'></progress>
<view>改变宽度</view>
<progress percent="50"stroke-width='2'></progress>
<view>自动显示进度条</view>
<progress percent="80"active></progress>
button
button
button组件用来实现用户和应用之间的交互,同时按钮的颜色起引导作用。一般来说,在一个程序中一个按钮至少有3种状态:默认点击(default)、建议点击(primary)、谨慎点击(warn)。
在构建项目时,应在合适的场景使用合适的按钮,当<button>被<form/ >包裹时,可以通过设置form-type属性来触发表单对应的事件。
button组件用来实现用户和应用之间的交互,同时按钮的颜色起引导作用。一般来说,在一个程序中一个按钮至少有3种状态:默认点击(default)、建议点击(primary)、谨慎点击(warn)。
在构建项目时,应在合适的场景使用合适的按钮,当<button>被<form/ >包裹时,可以通过设置form-type属性来触发表单对应的事件。
radio
单选框用来从一组选项中选取一个选项。在小程序中,单选框由<radio-group/ >(单项选择器)和<radio/ >(单选项目)两个组件组合而成,一个包含多个 <radio/ >的<radio-group/ >表示一组单选项,在同一组单选项中<radio/ >是互斥的,当一个按钮被选中后,之前选中的按钮就变为非选。
<view>选择您喜爱的城市:</view>
<radio-group bindchange="citychange">
<radio value="西安">西安</radio>
<radio value="北京">北京</radio>
<radio value="上海">上海</radio>
<radio value="广州">广州</radio>
<radio value="深圳">深圳</radio>
</radio-group>
<view>你的选择:{{city}}</view>
<view>选择您喜爱的计算机语言:</view>
<radio-group class="radio-group" bindchange="radiochange">
<label class="radio"wx:for="{{radios}}">
<radio value="{{item.value}}"checked="{{item.checked}}"/>{{item.name}}
</label>
</radio-group>
<view>你的选择:{{lang}}</view>
<radio-group bindchange="citychange">
<radio value="西安">西安</radio>
<radio value="北京">北京</radio>
<radio value="上海">上海</radio>
<radio value="广州">广州</radio>
<radio value="深圳">深圳</radio>
</radio-group>
<view>你的选择:{{city}}</view>
<view>选择您喜爱的计算机语言:</view>
<radio-group class="radio-group" bindchange="radiochange">
<label class="radio"wx:for="{{radios}}">
<radio value="{{item.value}}"checked="{{item.checked}}"/>{{item.name}}
</label>
</radio-group>
<view>你的选择:{{lang}}</view>
Page({
data:{
radios:[{name:'java',value:'JAVA'},
{name:'python',value:'Python',checked:'true'},
{name:'php',value:'PHP'},
{name:'swif',value:'Swif'},
],
city:'',
lang:''
},
citychange:function(e){
this.setData({city:e.detail.value});
},
radiochange:function(event){
this.setData({lang:event.detail.value});
console.log(event.detail.value)
}
})
data:{
radios:[{name:'java',value:'JAVA'},
{name:'python',value:'Python',checked:'true'},
{name:'php',value:'PHP'},
{name:'swif',value:'Swif'},
],
city:'',
lang:''
},
citychange:function(e){
this.setData({city:e.detail.value});
},
radiochange:function(event){
this.setData({lang:event.detail.value});
console.log(event.detail.value)
}
})
checkbox
复选框用于从一组选项中选取多个选项,小程序中复选框由 <checkbox -group/ >(多项选择器)和<checkbox/ >(多选项目)两个组件组合而成。一个<checkbox-group/ >表示一组选项,可以在一组选项中选中多个选项。
<view>选择您想去的城市:</view>
<checkbox-group bindchange="cityChange">
<label wx:for="{{citys}}">
<checkbox value="{{item.value}}" checked="{{item.checked}}">
{{item.value}}
</checkbox>
</label>
</checkbox-group>
<view>您的选择是:{{city}}</view>
<checkbox-group bindchange="cityChange">
<label wx:for="{{citys}}">
<checkbox value="{{item.value}}" checked="{{item.checked}}">
{{item.value}}
</checkbox>
</label>
</checkbox-group>
<view>您的选择是:{{city}}</view>
Page({
city:'',
data: {
citys:[
{name:'km',value:'昆明'},
{name:'sy',value:'三亚'},
{name:'zh',value:'珠海',checked:'true'},
{name:'dl',value:'大连'}
]
},
cityChange:function(e){
console.log(e.detail.value);
var city=e.detail.value;
this.setData({city:city})
}
})
city:'',
data: {
citys:[
{name:'km',value:'昆明'},
{name:'sy',value:'三亚'},
{name:'zh',value:'珠海',checked:'true'},
{name:'dl',value:'大连'}
]
},
cityChange:function(e){
console.log(e.detail.value);
var city=e.detail.value;
this.setData({city:city})
}
})
switch
switch组件的作用类似开关选择器。
<view>
<switch bindchange="sw1">{{var1}}</switch>
</view>
<view>
<switch checked bindchange="sw2">{{var2}}</switch>
</view>
<view>
<switch type="checkbox" bindchange="sw3">{{var3}}</switch>
</view>
<switch bindchange="sw1">{{var1}}</switch>
</view>
<view>
<switch checked bindchange="sw2">{{var2}}</switch>
</view>
<view>
<switch type="checkbox" bindchange="sw3">{{var3}}</switch>
</view>
Page({
data:{
var1:'关',
var2:'开',
var3:'未选'
},
sw1:function(e){
this.setData({var1:e.detail.value?'开':'关'})
},
sw2:function(e){
this.setData({var2:e.detail.value?'开':'关'})
},
sw3:function(e){
this.setData({var3:e.detail.value?'已选':'未选'})
}
})
data:{
var1:'关',
var2:'开',
var3:'未选'
},
sw1:function(e){
this.setData({var1:e.detail.value?'开':'关'})
},
sw2:function(e){
this.setData({var2:e.detail.value?'开':'关'})
},
sw3:function(e){
this.setData({var3:e.detail.value?'已选':'未选'})
}
})
slider
slider组件为滑动选择器,可以通过滑动来设置相应的值。
<view>默认min=0 max=100 step=1</view>
<slider></slider>
<view>显示当前值</view>
<slider show-value></slider>
<view>设置min=20 max=200 step=10</view>
<slider min='0'max='200'step='10'show-value></slider>
<view>背景条红色,已选定颜色绿色</view>
<slider color="#f00" selected-color='#0f0'></slider>
<view>滑动改变icon的大小</view>
<icon type="success" size='{{size}}'></icon>
<slider></slider>
<view>显示当前值</view>
<slider show-value></slider>
<view>设置min=20 max=200 step=10</view>
<slider min='0'max='200'step='10'show-value></slider>
<view>背景条红色,已选定颜色绿色</view>
<slider color="#f00" selected-color='#0f0'></slider>
<view>滑动改变icon的大小</view>
<icon type="success" size='{{size}}'></icon>
Page({
data:{
size:'20'
},
sliderchange:function(e){
this.setData({size:e.detail.value})
}
})
data:{
size:'20'
},
sliderchange:function(e){
this.setData({size:e.detail.value})
}
})
picker
picker组件为滚动选择器,当用户点击picker组件时,系统从底部弹出选择器供用户选择。picker组件目前支持5种选择器,分别是:selector(普通选择器)、multiSelector(多列选择器)、time(时间选择器)、date(日期选择器)、region(省市选择器)。
<view>----range为数组---</view>
<picker range="{{array}}"value="{{index}}" bindchange="arrayChange">
当前选择:{{array[index1]}}
</picker>
<view>----range为数组---</view>
<picker
bindchange="objArrayChange" value="{{index2}}" range-key="name" range="{{objArray}}">
当前选择:{{objArray[index2].name}}
</picker>
<picker range="{{array}}"value="{{index}}" bindchange="arrayChange">
当前选择:{{array[index1]}}
</picker>
<view>----range为数组---</view>
<picker
bindchange="objArrayChange" value="{{index2}}" range-key="name" range="{{objArray}}">
当前选择:{{objArray[index2].name}}
</picker>
picker-view
picker-view组件为嵌入页面的滚动选择器。相对于picker组件,picker-view组件的列的个数和列的内容由用户通过<picker-view-column/ >自定义设置。
<view>当前日期:{{year}}年{{month}}月{{day}}日</view>
<picker-view indicator-style="height:50px;" style="width: 100%;height: 300px;"value="{{value}}"bindchange="bindChange">
<picker-view-column>
<view wx:for="{{years}}"style="line-height:50px">{{item}}年</view>
</picker-view-column>
<picker-view-column>
<view wx:for="{{months}}"style="line-height:50px">{{item}}月</view>
</picker-view-column>
<picker-view-column>
<view wx:for="{{days}}"style="line-height:50px">{{item}}日</view>
</picker-view-column>
</picker-view>
<picker-view indicator-style="height:50px;" style="width: 100%;height: 300px;"value="{{value}}"bindchange="bindChange">
<picker-view-column>
<view wx:for="{{years}}"style="line-height:50px">{{item}}年</view>
</picker-view-column>
<picker-view-column>
<view wx:for="{{months}}"style="line-height:50px">{{item}}月</view>
</picker-view-column>
<picker-view-column>
<view wx:for="{{days}}"style="line-height:50px">{{item}}日</view>
</picker-view-column>
</picker-view>
input
input组件为输入框,用户可以输入相应的信息。
<input placeholder="这是一个可以自动聚集的 input"auto-focus/>
<input placeholder="这个只有在按钮点击的时候才聚集"focus="{{focus}}"/>
<button bindtop="bindButtonTap">使得输入框获取焦点</button>
<input maxlength="10" placeholder="最大输入长度为10"
/>
<view class="section_title">你输入的是:{{inputValue}}</view>
<input bindinput="bindKayInput" placeholder="输入同步view中"/>
<input bindinput="bindReplaceInupt" placeholder="连续的两个1会变成2"/>
<input password type="number"/>
<input password type="text "/>
<input type="digit" placeholder="带小数点的数字键盘"/>
<input type="idcard" placeholder="身份证输入键盘"/>
<input placeholder-style="color:red" placeholder="占位符字体是红色的"/>
<input placeholder="这个只有在按钮点击的时候才聚集"focus="{{focus}}"/>
<button bindtop="bindButtonTap">使得输入框获取焦点</button>
<input maxlength="10" placeholder="最大输入长度为10"
/>
<view class="section_title">你输入的是:{{inputValue}}</view>
<input bindinput="bindKayInput" placeholder="输入同步view中"/>
<input bindinput="bindReplaceInupt" placeholder="连续的两个1会变成2"/>
<input password type="number"/>
<input password type="text "/>
<input type="digit" placeholder="带小数点的数字键盘"/>
<input type="idcard" placeholder="身份证输入键盘"/>
<input placeholder-style="color:red" placeholder="占位符字体是红色的"/>
textarea
textarea组件为多行输入框文件,可以实现多行内容的输入。textarea组件的属性如下表所示。
<textarea bindblur="bindTextAreaBlur" auto-height placeholder="自动变高"/>
<textarea placeholder="placeholder 颜色是红色的" placeholder-style="color:red;"/>
<textarea placeholder="这是一个可以自动聚焦的textarea"auto-focus/>
<textarea placeholder="这个只有在按钮点击的时候才聚焦"focus="{{focus}}"/>
<button bindtap="bindButtonTap">使得输入框获取焦点</button><form bindsubmit="bindFormSubmit">
<textarea placeholder="from中的textarea" name="textarea"/>
<button form-type="submit">提交</button>
</form>
<textarea bindblur="bindTextAreaBlur" auto-height placeholder="自动变高"/>
<textarea placeholder="placeholder 颜色是红色的" placeholder-style="color:red;"/>
<textarea placeholder="这是一个可以自动聚焦的textarea"auto-focus/>
<textarea placeholder="这个只有在按钮点击的时候才聚焦"focus="{{focus}}"/>
<button bindtap="bindButtonTap">使得输入框获取焦点</button><form bindsubmit="bindFormSubmit">
<textarea placeholder="from中的textarea" name="textarea"/>
<button form-type="submit">提交</button>
</form>
label
label组件为标签组件,用于提升表单组件的可用性。label组件支持使用for属性找到对应的id,或者将控件放在该标签下,当点击label组件时,就会触发对应的控件。for属性的优先级高于内部控件,内部有多个控件的时候默认触发第一个控件。目前,label组件可以绑定的控件有<button/ >、<checkbox/ >、<radio/>、<switch/ >。
<view><checkbox></checkbox>中国</view>
<view><label><checkbox></checkbox>中国</label></view>
<checkbox-group bindchange="cityChange">
<label wx:for="{{citys}}">
<checkbox value="{{item.value}}"checked='{{item.checked}}'>
{{item.value}}
</checkbox>
</label>
</checkbox-group>
<view>您的选择是:{{city}}</view>
<view><checkbox></checkbox>中国</view>
<view><label><checkbox></checkbox>中国</label></view>
<checkbox-group bindchange="cityChange">
<label wx:for="{{citys}}">
<checkbox value="{{item.value}}"checked='{{item.checked}}'>
{{item.value}}
</checkbox>
</label>
</checkbox-group>
<view>您的选择是:{{city}}</view>
form
form组件为表单组件,用来实现将组件内的用户输入信息进行提交。当<form/ >表单中formType为submit的<button/ >组件时,会将表单组件中的value值进行提交。
<form bindsubmit="formSubmit" bindreset="formReset">
<view>姓名:
<input type="text" name="xm"/>
</view>
<view>性别:
<radio-group name="xb">
<label>
<radio value="男"checked/>男</label>
<label>
<radio value="女"checked/>女</label>
</radio-group>
</view>
<view>爱好:
<checkbox-group name="hobby">
<label wx:for="{{hobbies}}">
<checkbox value="{{item.value}}" checked='{{item.checked}}'>{{item.value}}</checkbox>
</label>
</checkbox-group>
</view>
<button formType='submit'>提交</button>
<button formType='reset'>重置</button>
</form>
<form bindsubmit="formSubmit" bindreset="formReset">
<view>姓名:
<input type="text" name="xm"/>
</view>
<view>性别:
<radio-group name="xb">
<label>
<radio value="男"checked/>男</label>
<label>
<radio value="女"checked/>女</label>
</radio-group>
</view>
<view>爱好:
<checkbox-group name="hobby">
<label wx:for="{{hobbies}}">
<checkbox value="{{item.value}}" checked='{{item.checked}}'>{{item.value}}</checkbox>
</label>
</checkbox-group>
</view>
<button formType='submit'>提交</button>
<button formType='reset'>重置</button>
</form>
image
image组件为图像组件,与HTML中的 <img/ >类似,系统默认image组件的宽度为300 px、高度为2250 px。
image组件中的mode属性有13种模式,其中缩放模式有4种,裁剪模式有9种。
缩放模式
1. scaleToFill不保持纵横比缩放图片,使图片的宽高完全拉伸至填满image元素。
2.aspectFit保持纵横比缩放图片,使图片的长边能完全显示出来。也就是说,可以将图片完整地3.显示出来。
3.aspectFill保持纵横比缩放图片,只保证图片的短边能完全显示出来。也就是说,图片通常只在水平或垂直方向是完整的,在另一个方向将会发生截取。
4.widthFix宽度不变,高度自动变化,保持原图宽高比不变。
缩放模式
1. scaleToFill不保持纵横比缩放图片,使图片的宽高完全拉伸至填满image元素。
2.aspectFit保持纵横比缩放图片,使图片的长边能完全显示出来。也就是说,可以将图片完整地3.显示出来。
3.aspectFill保持纵横比缩放图片,只保证图片的短边能完全显示出来。也就是说,图片通常只在水平或垂直方向是完整的,在另一个方向将会发生截取。
4.widthFix宽度不变,高度自动变化,保持原图宽高比不变。
<block wx:for="{{modes}}">
<view>当前照片的模式是:{{item}}</view>
<image mode="{{tiem}}"src="/img/yb.jpeg" style="width: 100%,height:10px"/>
</block>
<view>当前照片的模式是:{{item}}</view>
<image mode="{{tiem}}"src="/img/yb.jpeg" style="width: 100%,height:10px"/>
</block>
裁剪模式
top 不缩放图片,只显示图片的顶部区域。
bottom 不缩放图片,只显示图片的底部区域。
center 不缩放图片,只显示图片的中间区域。
left 不缩放图片,只显示图片的左边区域。
right 不缩放图片,只显示图片的右边区域。
top_left 不缩放图片,只显示图片的左上边区域。
top_right 不缩放图片,只显示图片的右上边区域。
bottom_left 不缩放图片,只显示图片的左下边区域。
bottom_right 不缩放图片,只显示图片的右下边区域。
top 不缩放图片,只显示图片的顶部区域。
bottom 不缩放图片,只显示图片的底部区域。
center 不缩放图片,只显示图片的中间区域。
left 不缩放图片,只显示图片的左边区域。
right 不缩放图片,只显示图片的右边区域。
top_left 不缩放图片,只显示图片的左上边区域。
top_right 不缩放图片,只显示图片的右上边区域。
bottom_left 不缩放图片,只显示图片的左下边区域。
bottom_right 不缩放图片,只显示图片的右下边区域。
audio
audio组件用来实现音乐播放、暂停等。
video
video组件用来实现视频的播放、暂停等。视频的默认宽度为300飘向,高度为225px。
<video src="{{src}}"controls></video>
<view class="btn-area">
<button bindtap="bindButtonTap">获取视频</button>
</view>
<view class="btn-area">
<button bindtap="bindButtonTap">获取视频</button>
</view>
camera
camera组件为系统相机组件,可以实现拍照或录像功能。在一个页面中,只能有一个camera 组件。在开发工具中运行时,使用电脑摄像头实现拍照或录像;在手机中运行时,使用手机前后摄像头实现拍照或录像。
<camera device-position="back" flash="off"binderror="error"
style="width: 100%;height: 350px;"> </camera>
<button type="primary" bindtap="takePhoto">拍照</button>
<view>浏览</view>
<image mode="widthFix" src="{{src}}"></image>
style="width: 100%;height: 350px;"> </camera>
<button type="primary" bindtap="takePhoto">拍照</button>
<view>浏览</view>
<image mode="widthFix" src="{{src}}"></image>
Page({
takePhoto(){
const ctx=wx.createCameraContext()
ctx.takePhoto({
quality:'high',
success:(res)=>{
this.setData({
src:res.tempImagePath
})
}
})
},
error(e){
console.log(e.detail)
}
})
takePhoto(){
const ctx=wx.createCameraContext()
ctx.takePhoto({
quality:'high',
success:(res)=>{
this.setData({
src:res.tempImagePath
})
}
})
},
error(e){
console.log(e.detail)
}
})
map
map组件用于在页面中显示地图或路径,常用于LBS(基于位置服务)或路径指引,功能相对百度地图、高德地图较简单,目前具备绘制图标、路线、半径等能力,不能在croll-view、swiper、picker-view、movable-view组件中使用。
<map id="map"
longitude="108.9200"
latitude="34.1550"
scale="14"
controls="{{controls}}"
bindcontroltap="controltap"
markers="{{markers}}"
bindmarkertap="markertap"
polyline="{{polyline}}"
bindregionchange="regionchange"
show-location
style="width: 100%;height: 300px;">
</map>
longitude="108.9200"
latitude="34.1550"
scale="14"
controls="{{controls}}"
bindcontroltap="controltap"
markers="{{markers}}"
bindmarkertap="markertap"
polyline="{{polyline}}"
bindregionchange="regionchange"
show-location
style="width: 100%;height: 300px;">
</map>
canvas
canvas组件用来绘制图形,相当于一块无色透明的普通图布。canvas组件本身并没有绘图能力,仅仅是图形容器,通过绘图API实现绘图功能。
实现步骤如下:
1.创建一个canvas绘图上下文。
var context=wx.createCanvasContext('myCanvas')
2使用canvas绘图上下文进行绘图描述。
context.setFilStyle('green')
context.fillRect(10,10,200,100)
3.画图
context.draw()
案件代码如下:
在.wxml中写入的代码:
<canvas canvas-id="myCanvas" style="border: 1px solid red;"/>
在.js中代码:
Page({
onLoad:function(options){
var ctx =wx.createCanvasContext('myCanvas')
ctx.setFillStyle('green')
ctx.fillRect(1,0,300,200)
ctx.draw()
}
})
1.创建一个canvas绘图上下文。
var context=wx.createCanvasContext('myCanvas')
2使用canvas绘图上下文进行绘图描述。
context.setFilStyle('green')
context.fillRect(10,10,200,100)
3.画图
context.draw()
案件代码如下:
在.wxml中写入的代码:
<canvas canvas-id="myCanvas" style="border: 1px solid red;"/>
在.js中代码:
Page({
onLoad:function(options){
var ctx =wx.createCanvasContext('myCanvas')
ctx.setFillStyle('green')
ctx.fillRect(1,0,300,200)
ctx.draw()
}
})
小程序框架为开发者提供了容器视图、基础内容、表单、导航、多媒体、地图、画布开放能力等8类(30多个)基础组件。
每一个组件都由一对标签组成,有开始标签和结束标签,内容置在开始标签和结束标签之间,内容也可以是组件。组件的语法格式如下:
<标签名 属性名=”属性值”>内容…< /标签名>
组件通过属性来进一步细化。不同的组件可以有不同的属性,但它们也有一些共用属性,如id、class、style ,hidden、data - *、bind * /catch * 等 。
id 组件的唯一表示,保持整个页面唯一,不常用。
class 组件的样式类,对应 WXSS 中定义的样式。
style 组件的内联样式,可以动态设置内联样式。
hidden 组件是否显示,所有组件默认显示。
data-* 自定义属性,组件触发事件时,会发送给事件处理函数。事件处理函数通过传人参数对象的 currentTarget.dataset方式来获取自定义属性的值。
每一个组件都由一对标签组成,有开始标签和结束标签,内容置在开始标签和结束标签之间,内容也可以是组件。组件的语法格式如下:
<标签名 属性名=”属性值”>内容…< /标签名>
组件通过属性来进一步细化。不同的组件可以有不同的属性,但它们也有一些共用属性,如id、class、style ,hidden、data - *、bind * /catch * 等 。
id 组件的唯一表示,保持整个页面唯一,不常用。
class 组件的样式类,对应 WXSS 中定义的样式。
style 组件的内联样式,可以动态设置内联样式。
hidden 组件是否显示,所有组件默认显示。
data-* 自定义属性,组件触发事件时,会发送给事件处理函数。事件处理函数通过传人参数对象的 currentTarget.dataset方式来获取自定义属性的值。
容器视图组件是能容纳其他组件的组件,是构建小程序页面布局的基础组件,主要包括view、scroll -view和 swiper 组件。
基础内容组件包括icon、text和progress,主要用于在视图页面中展示图标、文本和进度条等信息。
多媒体组件包括image(图像)、audio(音频)、video(视频)、camera(相机)组件,使用这些组件,可以让页面更具有吸引力。
其他组件,在小程序中,除了前面介绍的组件以来,map组件和canvas组件比较常用。
页面布局
盒子模型就是我们在页面设计中经常用到的-种思维模型。在CSS中,一个独立的盒子模型由内容(content)、内边距(padding)、边框(border)和外边距(margin)4个部分组成,如图下图所示。
padding、border 和 margin 可以进一步细化为上、下、左、右4个部分,在 CSS中可以分别进行设置,如下图所示。
块级元素与行内元素
元素按照显示方式分为块级元素、行内元素和行内块元素,它们显示方式都是由display属性控制。
块级元素
块级元素默认占一1行高度,一行内通常只有一个块级元素(浮动后除外),添加新的块级元素时,会自动换行,块级元素一般作为盒子出现。
块级元素默认占一1行高度,一行内通常只有一个块级元素(浮动后除外),添加新的块级元素时,会自动换行,块级元素一般作为盒子出现。
块级元素的特点如下:
总是新行开始:块级元素总是从新行开始,其后的元素也只能另起一行,不能与前一个块级元素共用一行。
高度、行高及边距可控制:块级元素的高度、行高以及外边距和内边距都可以通过CSS进行设置。
宽度默认是容器的100%:如果块级元素的宽度没有设置,它将默认为其父元素的宽度。
可以包含内联元素和其他块级元素:块级元素不仅可以容纳文本,还可以包含其他块级元素。
块级元素的宽度、高度、外边距及内边距都可以自定义设置。
总是新行开始:块级元素总是从新行开始,其后的元素也只能另起一行,不能与前一个块级元素共用一行。
高度、行高及边距可控制:块级元素的高度、行高以及外边距和内边距都可以通过CSS进行设置。
宽度默认是容器的100%:如果块级元素的宽度没有设置,它将默认为其父元素的宽度。
可以包含内联元素和其他块级元素:块级元素不仅可以容纳文本,还可以包含其他块级元素。
块级元素的宽度、高度、外边距及内边距都可以自定义设置。
//wxml
<view style="border: 1px solid #f00">块级元素</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>
<view style="border: 1px solid #f00">块级元素</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>
行内元素,不必从新一行开始,通常会与前后的其他行内元素显示在同一行中,它们不古有独立的区域,仅靠自身内容支撑结构,一般不可以设置大小,常用于控制页面中文本的样式。将一个元素的 display 属性设置为inline后,该元素即被设置为行内元素。
行内元素(diaplay:inline)特点总结:
1、和其他非块级元素在同一行
2、盒子模型中高度、宽度、上下margin、上下padding设置无效,只能设置左右的margin和左右的padding
3、宽度就是文字或图片的宽度,不可改变
4、行内元素的宽度和高度都不能直接设置
5、行内元素只能容纳文本或其他行内元素,在行内元素中放置其他的块级元素会引起不必要的混乱
1、和其他非块级元素在同一行
2、盒子模型中高度、宽度、上下margin、上下padding设置无效,只能设置左右的margin和左右的padding
3、宽度就是文字或图片的宽度,不可改变
4、行内元素的宽度和高度都不能直接设置
5、行内元素只能容纳文本或其他行内元素,在行内元素中放置其他的块级元素会引起不必要的混乱
//wxml
<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 #0f0;display: inline;">块级元素设置为行内元素</view>一行显示不全,自动换行显示</view>
<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 #0f0;display: inline;">块级元素设置为行内元素</view>一行显示不全,自动换行显示</view>
行内块元素
当元素的display 属性被设置为inline--block时,元素被设置为行内块元素。行内块元素可以被设置高度、宽度、内边距和外边距。
当元素的display 属性被设置为inline--block时,元素被设置为行内块元素。行内块元素可以被设置高度、宽度、内边距和外边距。
行内块元素(display:inline-block)的特点:
行内块元素可以设置宽、高、内外边距,可以简单理解为行内块元素就是把块级元素以行的形式展示,保留了块级元素对宽、高、内外边距的设置。
行内块元素可以设置宽、高、内外边距,可以简单理解为行内块元素就是把块级元素以行的形式展示,保留了块级元素对宽、高、内外边距的设置。
浮动与定位
浮动
元素浮动就是指设置了浮动属性的元素会脱离标准文档流的控制,移到其父元素中指定位置的过程。在css中,通过float属性来定义浮动,其基本格式如下:{float:none|left|right;}
元素浮动就是指设置了浮动属性的元素会脱离标准文档流的控制,移到其父元素中指定位置的过程。在css中,通过float属性来定义浮动,其基本格式如下:{float:none|left|right;}
none:默认值,表示元素不浮动
left:元素左浮动
right: 元素右浮动
left:元素左浮动
right: 元素右浮动
box1,box2,box3 没有浮动,在.wxml中打如下代码:
<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,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>
元素box1左浮动
在.wxml中打如下代码:
<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>
在.wxml中打如下代码:
<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>
元素box1右浮动
在.wxml中打如下代码:
<view>box1 右浮动 </view>
<view style="border: 1px solid #f00;padding: 5px;">
<view style="float:right;border:1px solid #0f0">box1</view>
<view style="border: 1px solid #0f0">box2</view>
<view style="border: 1px solid #0f0">box3</view>
</view>
在.wxml中打如下代码:
<view>box1 右浮动 </view>
<view style="border: 1px solid #f00;padding: 5px;">
<view style="float:right;border:1px solid #0f0">box1</view>
<view style="border: 1px solid #0f0">box2</view>
<view style="border: 1px solid #0f0">box3</view>
</view>
清除浮动
通过上面浮动案例可以发现,当box3左浮动时,父级元素的边框没有包裹住box3元素。因为浮动元素不再占用原文档流的位置,因此它会对页面中其他元素的排列产生影响。在css中,clear属性用于清除浮动,同理在微信小程序中也是这个属性,基本格式如下:
{clear:left|right|both|none}
none:不清除浮动
left:清除元素左浮动
right: 清除元素右浮动
both:清除元素左右浮动
通过上面浮动案例可以发现,当box3左浮动时,父级元素的边框没有包裹住box3元素。因为浮动元素不再占用原文档流的位置,因此它会对页面中其他元素的排列产生影响。在css中,clear属性用于清除浮动,同理在微信小程序中也是这个属性,基本格式如下:
{clear:left|right|both|none}
none:不清除浮动
left:清除元素左浮动
right: 清除元素右浮动
both:清除元素左右浮动
box3清除左浮动
方法一运用clear属性
在.wxml中代码如下所示
<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>
方法一运用clear属性
在.wxml中代码如下所示
<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="clearfloat">
<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>
在父元素外添加一个空元素,实现父元素包裹浮动元素。
在.wxml中的代码如下
<view>box1 box2 box3 左浮动 在父元素后添加一个空元素</view>
<view style="border: 1px solid #f00;padding: 5px" class="clearfloat">
<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>
元素定位
浮动布局虽然灵活,但无法对元素的位置进行精确的控制。在CSS中,通过position属性可以实现对页面元素的精确定位。
基本格式如下:
{position:static |relative |absolute |fixed}
static:默认值,该元素按照标准流进行布局。
relative: 相对定位,相对于它在原文档流的位置进行定位,它后面的盒子仍以标准流relative方式对待它。
absolute: 绝对定位,相对于其上一个已经定位的父元素进行定位,绝对定位的盒子absolute从标准流中脱离,它对其后的兄弟盒子的定位没有影响。
fixed: 固定定位,相对于浏览器窗口进行定位。
浮动布局虽然灵活,但无法对元素的位置进行精确的控制。在CSS中,通过position属性可以实现对页面元素的精确定位。
基本格式如下:
{position:static |relative |absolute |fixed}
static:默认值,该元素按照标准流进行布局。
relative: 相对定位,相对于它在原文档流的位置进行定位,它后面的盒子仍以标准流relative方式对待它。
absolute: 绝对定位,相对于其上一个已经定位的父元素进行定位,绝对定位的盒子absolute从标准流中脱离,它对其后的兄弟盒子的定位没有影响。
fixed: 固定定位,相对于浏览器窗口进行定位。
没有定位
.wxml代码如下:
<!--三个元素匀未定位 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>
.wxml代码如下:
<!--三个元素匀未定位 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>
相对定位
在.wxml中代码如下所示
<view>relative</view>
<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>
在.wxml中代码如下所示
<view>relative</view>
<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>
绝对定位
在.wxml中代码如下所示
<view>absolute</view>
<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>
在.wxml中代码如下所示
<view>absolute</view>
<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>
固定定位
在.wxml中代码如下所示
<view>absolute</view>
<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>
在.wxml中代码如下所示
<view>absolute</view>
<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>
子绝父相
在一个布局中定位必须遵循子绝父相。子组件是绝对定位 ,父组件是相对定位
flex布局
fex布局是万维网联盟(World WideWebConsortium,W3C)在2009年提出的一种新局方案,该布局可以简单快速地完成各种可以伸缩的设计,以便很好地支持响应式布局flex是flexible box的缩写,意为弹性盒子模型,可以简便、完整、响应式地实现各种页面布局。
flex布局主要由容器和项目组成,采用flex布局的元素称为flex容器(flex container),flex布局的所有直接子元素自动成为容器的成员,称为flex项目(flex item)。
容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end; 交叉轴的开始位置叫做 cross start,结束位置叫做 cross end。
项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。
容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end; 交叉轴的开始位置叫做 cross start,结束位置叫做 cross end。
项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。
即速应用
收藏
0 条评论
下一页