WXML-WXSS语法
WXML 语法
wxml 概述及作用
WXML(WeiXin Markup Language)是框架设计的一套标签语言,结合基础组件、事件系统,可以构建出页面的结构。
组件+数据
view 类似于 div
text 类似于 span
image 类似于 img
数据绑定
<view>{{name}}</view><view>{{name}}</view>绑定属性
<view data-title="{{title}}">{{name}}</view><view data-title="{{title}}">{{name}}</view>关键字的处理
关键字:true 和 false
<checkbox checked="{{false}}"></checkbox><checkbox checked="{{false}}"></checkbox>运算
算术运算
<view data-title="{{title}}">{{age+1}}</view><view data-title="{{title}}">{{age+1}}</view>逻辑运算
<checkbox checked="{{age>20}}"></checkbox><checkbox checked="{{age>20}}"></checkbox>字符串运算
<view data-title="{{title}}">{{name+"san"}}</view><view data-title="{{title}}">{{name+"san"}}</view>路径运算
<view data-title="{{title}}">{{arr[1]}}</view>
<view data-title="{{title}}">{{obj.height}}</view><view data-title="{{title}}">{{arr[1]}}</view>
<view data-title="{{title}}">{{obj.height}}</view>三元运算符
<view data-title="{{title}}">{{age>18?"成年":"未成年"}}</view><view data-title="{{title}}">{{age>18?"成年":"未成年"}}</view>**总结:**对于小程序渲染数据只要碰到 js 代码就使用,渲染数据时不能调用函数。
列表渲染 wx:for
<view wx:for="{{arr}}" wx:key="*this">
{{item}}---{{index}}
</view>
<view wx:for="{{arr}}" wx:for-index="key" wx:for-item="val" wx:key="*this">
{{val}}---{{key}}
</view>
<view wx:for="{{obj}}" wx:key="*this">
{{item}}---{{index}}
</view>
<view wx:for="{{goods}}" wx:key="id">
{{item.id}}---{{item.name}}---{{index}}
</view>
<view wx:for="{{name}}" wx:key="*this">
{{item}}---{{index}}
</view><view wx:for="{{arr}}" wx:key="*this">
{{item}}---{{index}}
</view>
<view wx:for="{{arr}}" wx:for-index="key" wx:for-item="val" wx:key="*this">
{{val}}---{{key}}
</view>
<view wx:for="{{obj}}" wx:key="*this">
{{item}}---{{index}}
</view>
<view wx:for="{{goods}}" wx:key="id">
{{item.id}}---{{item.name}}---{{index}}
</view>
<view wx:for="{{name}}" wx:key="*this">
{{item}}---{{index}}
</view>block 是包裹元素
<block wx:for="{{goods}}">
<view>id:{{item.id}}</view>
<view>name:{{item.name}}</view>
</block><block wx:for="{{goods}}">
<view>id:{{item.id}}</view>
<view>name:{{item.name}}</view>
</block>wx:key
如果列表中项目的位置会动态改变或者有新的项目添加到列表中,并且希望列表中的项目保持自己的特征和状态(如 input 中的输入内容,switch 的选中状态),需要使用 wx:key 来指定列表中项目的唯一的标识符。
wx:key 的值以两种形式提供
- 字符串,代表在 for 循环的 array 中 item 的某个 property,该 property 的值需要是列表中唯一的字符串或数字,且不能动态改变。
- 保留关键字
*this代表在 for 循环中的 item 本身,这种表示需要 item 本身是一个唯一的字符串或者数字。
当数据改变触发渲染层重新渲染的时候,会校正带有 key 的组件,框架会确保他们被重新排序,而不是重新创建,以确保使组件保持自身的状态,并且提高列表渲染时的效率。
如不提供 wx:key,会报一个 warning, 如果明确知道该列表是静态,或者不必关注其顺序,可以选择忽略。
条件渲染
<view wx:if="{{age>=18}}">成年</view>
<view wx:if="{{age>=18}}">成年</view>
<view wx:else>未成年</view>
<view wx:if="{{age<18}}">未成年</view>
<view wx:elif="{{age<=30}}">中青年</view>
<view wx:else>中年</view><view wx:if="{{age>=18}}">成年</view>
<view wx:if="{{age>=18}}">成年</view>
<view wx:else>未成年</view>
<view wx:if="{{age<18}}">未成年</view>
<view wx:elif="{{age<=30}}">中青年</view>
<view wx:else>中年</view>hidden 属性
<view hidden="{{age>=18}}">成年</view><view hidden="{{age>=18}}">成年</view>wx:if vs hidden
因为 wx:if 之中的模板也可能包含数据绑定,所以当 wx:if 的条件值切换时,框架有一个局部渲染的过程,因为它会确保条件块在切换时销毁或重新渲染。
同时 wx:if 也是惰性的,如果在初始渲染条件为 false,框架什么也不做,在条件第一次变成真的时候才开始局部渲染。
相比之下,hidden 就简单的多,组件始终会被渲染,只是简单的控制显示与隐藏。
一般来说,wx:if 有更高的切换消耗而 hidden 有更高的初始渲染消耗。因此,如果需要频繁切换的情景下,用 hidden 更好,如果在运行时条件不大可能改变则 wx:if 较好。
模板 (了解)
定义模板
<template name="temp">
<view>我的名字是:zhangsan</view>
<view>我的年龄是:18</view>
</template><template name="temp">
<view>我的名字是:zhangsan</view>
<view>我的年龄是:18</view>
</template>使用模板
使用模板并且向模板中传值
<template name="temp">
<view>我的名字是:{{user.name}}</view>
<view>我的年龄是:{{user.age}}</view>
</template><template name="temp">
<view>我的名字是:{{user.name}}</view>
<view>我的年龄是:{{user.age}}</view>
</template>模板的作用域
引用 (了解)
import
<import src="../../templates/template.wxml" /><import src="../../templates/template.wxml" />import 只引入目标文件中的 template 标签以内东西
include
<include src="../../templates/template.wxml" /><include src="../../templates/template.wxml" />include 只引入目标文件中的 template 标签以外东西
WXSS 样式
WXSS (WeiXin Style Sheets)是一套样式语言,用于描述 WXML 的组件样式。
WXSS 用来决定 WXML 的组件应该怎么显示。
为了适应广大的前端开发者,WXSS 具有 CSS 大部分特性。同时为了更适合开发微信小程序,WXSS 对 CSS 进行了扩充以及修改。
尺寸单位
rpx(responsive pixel): 可以根据屏幕宽度进行自适应。规定屏幕宽为 750rpx。如在 iPhone6 上,屏幕宽度为 375px,共有 750 个物理像素,则 750rpx = 375px = 750 物理像素,1rpx = 0.5px = 1 物理像素。
| 设备 | rpx 换算 px (屏幕宽度/750) | px 换算 rpx (750/屏幕宽度) |
|---|---|---|
| iPhone5 | 1rpx = 0.42px | 1px = 2.34rpx |
| iPhone6 | 1rpx = 0.5px | 1px = 2rpx |
| iPhone6 Plus | 1rpx = 0.552px | 1px = 1.81rpx |
建议: 开发微信小程序时设计师可以用 iPhone6 作为视觉稿的标准。
注意: 在较小的屏幕上不可避免的会有一些毛刺,请在开发时尽量避免这种情况。
样式导入
使用@import语句可以导入外联样式表,@import后跟需要导入的外联样式表的相对路径,用;表示语句结束。
选择器
| 选择器 | 样例 | 样例描述 |
|---|---|---|
| .class | .intro | 选择所有拥有 class="intro" 的组件 |
| #id | #firstname | 选择拥有 id="firstname" 的组件 |
| element | view | 选择所有 view 组件 |
| element, element | view, checkbox | 选择所有文档的 view 组件和所有的 checkbox 组件 |
| ::after | view::after | 在 view 组件后边插入内容 |
| ::before | view::before | 在 view 组件前边插入内容 |
小程序不支持属性选择器
小程序的背景图不支持本地图片路径,可以将图片转成 base64 位的字符串使用
全局样式/局部样式
定义在 app.wxss 中的样式为全局样式,作用于每一个页面。在 page 的 wxss 文件中定义的样式为局部样式,只作用在对应的页面,并会覆盖 app.wxss 中相同的选择器。
字体图标
安装步骤:
(1)进入阿里巴巴矢量图标库https://www.iconfont.cn/
(2)选择自己的图标,添加到购物车,
(3)进入购物车,选择项目设置,选择base64点击下载代码到本地,进行解压(里面有字体文件iconfont.ttf,也有图标转化好的base64格式的文件iconfont.css)将iconfont.css中的内容粘贴进入到页面的wxss中,
(4)page.wxml页面进行使用
<view class="iconfont 你的图标类"></view>安装步骤:
(1)进入阿里巴巴矢量图标库https://www.iconfont.cn/
(2)选择自己的图标,添加到购物车,
(3)进入购物车,选择项目设置,选择base64点击下载代码到本地,进行解压(里面有字体文件iconfont.ttf,也有图标转化好的base64格式的文件iconfont.css)将iconfont.css中的内容粘贴进入到页面的wxss中,
(4)page.wxml页面进行使用
<view class="iconfont 你的图标类"></view>代码案例:
<view class="iconfont icon-gonglve"></view><view class="iconfont icon-gonglve"></view>WXS 脚本概述
WXS(WeiXin Script)是小程序的一套脚本语言,结合 WXML,可以构建出页面的结构,可以充当 wxml 中的函数功能。
wxs 的语法和 js 的 es5 语法基本一样
WXS 代码可以编写在 wxml 文件中的 <wxs> 标签内,或以 .wxs 为后缀名的文件内。
<view>{{m1.jiequ(user.name,0,2)}}</view>
<wxs module="m1">
var jiequ = function (str, start, end) {
return str.substring(start, end)
}
module.exports = {
jiequ: jiequ
}
</wxs><view>{{m1.jiequ(user.name,0,2)}}</view>
<wxs module="m1">
var jiequ = function (str, start, end) {
return str.substring(start, end)
}
module.exports = {
jiequ: jiequ
}
</wxs>WXS 模块
wxs 是不同于 js 的一门语言,语法和 js 的 ES5 语法
每一个 .wxs 文件和 <wxs> 标签都是一个单独的模块。
每个模块都有自己独立的作用域。即在一个模块里面定义的变量与函数,默认为私有的,对其他模块不可见。
一个模块要想对外暴露其内部的私有变量与函数,只能通过 module.exports 实现。
Cao Note