微信小程序入门教程之二:页面样式
这个系列的上一篇教程,教大家写了一个最简单的 Hello world 微信小程序。
但是,那只是一个裸页面,并不好看。今天接着往下讲,如何为这个页面添加样式,使它看上去更美观,教大家写出实际可以使用的页面。
所有示例的完整代码,都可以从 GitHub 的代码仓库下载。

一、总体样式
微信小程序允许在顶层放置一个app.wxss
文件,里面采用 CSS 语法设置页面样式。这个文件的设置,对所有页面都有效。
注意,小程序虽然使用 CSS 样式,但是样式文件的后缀名一律要写成.wxss
。
打开上一篇教程的示例,在项目顶层新建一个app.wxss
文件,内容如下。
page {
background-color: pink;
} text {
font-size: 24pt;
color: blue;
}
上面代码将整个页面的背景色设为粉红,然后将<text>
标签的字体大小设为 24 磅,字体颜色设为蓝色。
开发者工具导入代码之后,得到了下面的渲染结果。

可以看到,页面的背景色变成粉红,文本字体变大了,字体颜色变成了蓝色。
实际开发中,直接对<text>
标签设置样式,会影响到所有的文本。一般不这样用,而是通过class
属性区分不同类型的文本,然后再对每种class
设置样式。
打开pages/home/home.wxml
文件,把页面代码改成下面这样。
<view>
<text class="title">hello world</text>
</view>
上面代码中,我们为<text>
标签加上了一个class
属性,值为title
。
然后,将顶层的app.wxss
文件改掉,不再直接对<text>
设置样式,改成对class
设置样式。
page {
background-color: pink;
} .title {
font-size: 24pt;
color: blue;
}
上面代码中,样式设置在 class 上面(.title
),这样就可以让不同的class
呈现不同的样式。修改之后,页面的渲染结果并不会有变化。
这个示例的完整代码,可以到代码仓库查看。
二、Flex 布局
各种页面元素的位置关系,称为布局(layout),小程序官方推荐使用 Flex 布局。不熟悉这种布局的同学,可以看看我写的《Flex 布局教程》。
下面演示如何通过 Flex 布局,将上面示例的文本放置到页面中央。
首先,在pages/home
目录里面,新建一个home.wxss
文件,这个文件设置的样式,只对 home 页面生效。这是因为每个页面通常有不一样的布局,所以页面布局一般不写在全局的app.wxss
里面。
然后,home.wxss
文件写入下面的内容。
page {
height: 100%;
width: 750rpx;
display: flex;
justify-content: center;
align-items: center;
}
开发者工具导入项目代码,页面渲染结果如下。

下面解释一下上面这段 WXSS 代码,还是很简单的。
(1)height: 100%;
:页面高度为整个屏幕高度。
(2)width: 750rpx;
:页面宽度为整个屏幕宽度。
注意,这里单位是rpx
,而不是px
。rpx
是小程序为适应不同宽度的手机屏幕,而发明的一种长度单位。不管什么手机屏幕,宽度一律为750rpx
。它的好处是换算简单,如果一个元素的宽度是页面的一半,只要写成width: 375rpx;
即可。
(3)display: flex;
:整个页面(page)采用 Flex 布局。
(4)justify-content: center;
:页面的一级子元素(这个示例是<view>
)水平居中。
(5)align-items: center;
:页面的一级子元素(这个示例是<view>
)垂直居中。一个元素同时水平居中和垂直中央,就相当于处在页面的中央了。
这个示例的完整代码,可以到代码仓库查看。
三、WeUI
如果页面的所有样式都自己写,还是挺麻烦的,也没有这个必要。腾讯封装了一套 UI 框架 WeUI,可以拿来用。
手机访问 weui.io,可以看到这套 UI 框架的效果。

这一节就来看看,怎么使用这个框架的小程序版本 WeUI-WXSS,为我们的页面加上官方的样式。
首先,进入它的 GitHub 仓库,在dist/style
目录下面,找到weui.wxss
这个文件,将源码全部复制到你的app.wxss
文件的头部。
然后,将page/home/home.wxml
文件改成下面这样。
<view>
<button class="weui-btn weui-btn_primary">
主操作
</button>
<button class="weui-btn weui-btn_primary weui-btn_loading">
<i class="weui-loading"></i>正在加载
</button>
<button class="weui-btn weui-btn_primary weui-btn_disabled">
禁止点击
</button>
</view>
开发者工具导入项目代码,页面渲染结果如下。

可以看到,加入 WeUI 框架以后,只要为按钮添加不同的 class,就能自动出现框架提供的样式。你可以根据需要,为页面选择不同的按钮。
这个示例中,<button>
元素使用了下面的class
。
weui-btn
:按钮样式的基类weui-btn_primary
:主按钮的样式。如果是次要按钮,就使用weui-btn_default
。weui-btn_loading
:按钮点击后,操作正在进行中的样式。该类内部需要用<i>
元素,加上表示正在加载的图标。weui-btn_disabled
:按钮禁止点击的样式。
WeUI 提供了大量的元素样式,完整的清单可以查看这里。
这个示例的完整代码,可以到代码仓库查看。
四、加入图片
美观的页面不能光有文字,还必须有图片。小程序的<image>
组件就用来加载图片。
打开home.wxml
文件,将其改为如下代码。
<view>
<image src="[https://picsum.photos/200](https://picsum.photos/200)"></image>
</view>
开发者工具加载项目代码,页面的渲染结果如下,可以显示图片了。

<image>
组件有很多属性,比如可以通过style
属性指定样式。
<view>
<image
src="[https://picsum.photos/200](https://picsum.photos/200)"
style="height: 375rpx; width: 375rpx;"
></image>
</view>
默认情况下,图片会占满整个容器的宽度(这个例子是<view>
的宽度),上面代码通过style
属性指定图片的高度和宽度(占据页面宽度的一半),渲染结果如下。

当然,图片样式不一定写在<image>
组件里面,也可以写在 WXSS 样式文件里面。
这个示例的完整代码,可以到代码仓库查看。
五、图片轮播
小程序原生的<swiper>
组件可以提供图片轮播效果。

上面页面的图片上面,有三个提示点,表示一共有三张图片,可以切换显示。
它的代码很简单,只需要改一下home.wxml
文件即可。
<view>
<swiper
indicator-dots="{{true}}"
autoplay="{{true}}"
style="width: 750rpx;">
<swiper-item>
<image src="[https://picsum.photos/200](https://picsum.photos/200)"></image>
</swiper-item>
<swiper-item>
<image src="[https://picsum.photos/250](https://picsum.photos/250)"></image>
</swiper-item>
<swiper-item>
<image src="[https://picsum.photos/300](https://picsum.photos/300)"></image>
</swiper-item>
</swiper>
</view>
上面代码中,<swiper>
组件就是轮播组件,里面放置了三个<swiper-item>
组件,表示有三个轮播项目,每个项目就是一个<image>
组件。
<swiper>
组件的indicator-dots
属性设置是否显示轮播点,autoplay
属性设置是否自动播放轮播。它们的属性值都是一个布尔值,这里要写成{{true}}
。这种{{...}}
的语法,表示里面放置的是 JavaScript 代码,这个放在下一次讲解。
这个示例的完整代码,可以到代码仓库查看。
页面样式就讲到这里,下一篇教程讲解怎么在微信小程序里面加入 JavaScript 脚本,跟用户互动。
(完)
微信小程序入门教程之二:页面样式的更多相关文章
- 微信小程序中 input组件影响页面样式的问题
input组件有个默认的宽高,好像是不能清除的,在使用flex布局的时候,发现会影响到页面的布局,以为是flex布局的问题,改为float布局试了下也是同样的问题,试着把input标签换成别的标签,问 ...
- 天河微信小程序入门《三》:打通任督二脉,前后台互通
原文链接:http://www.wxapp-union.com/forum.php?mod=viewthread&tid=505&extra=page%3D1 天河君在申请到https ...
- 从零开始的微信小程序入门教程(一)
之前说要和同事一起开发个微信小程序项目,现在也在界面设计,功能定位等需求上开始实施了.所以在还未正式写项目前,打算在空闲时间学习下小程序.本意是在学习过程中结合实践整理出一个较为入门且不是很厚的教程, ...
- 微信小程序入门教程之三:脚本编程
这个系列教程的前两篇,介绍了小程序的项目结构和页面样式. 今天,接着往下讲,教大家为小程序加入 JavaScript 脚本,做出动态效果,以及如何跟用户互动.学会了脚本,就能做出复杂的页面了. 本篇的 ...
- 天河微信小程序入门《四》:融会贯通,form表单提交数据库
天河在阔别了十几天之后终于又回来了.其实这篇文章里的demo是接着(天河微信小程序入门<三>)后面就做了的,但是因为最近在做别的项目,所以就偷懒没有发出来.放到今天来看,从前台提交数据到数 ...
- 天河微信小程序入门:阿里云tomcat免费配置https
天河君在第一时间通过了微信小程序验证,开启了我的微信小程序之旅.因为天河君之前是一名后端狗,对前端不是很了解,所以几乎可以认为是从零开始学做微信小程序.也希望有志在微信小程序方向做点事情的朋友能够和我 ...
- 我的微信小程序入门踩坑之旅
前言 更好的阅读体验请:我的微信小程序入门踩坑之旅 小程序出来也有一段日子了,刚出来时也留意了一下.不过赶上生病,加上公司里也有别的事,主要是自己犯懒,就一直没做.这星期一,赶紧趁着这股热乎劲,也不是 ...
- 微信小程序入门篇
微信小程序入门篇: 准备工作 IDE搭建 就不多说了,没有内测码去下载个破解版吧,我用了一下,学习完全够了!IDE破解版+安装教程 图片发自简书App 知识准备 JavaScrip还是要看看的,推荐教 ...
- 微信小程序动态生成保存二维码
起源:最近小程序需要涉及到一些推广方面的功能,所以要写一个动态生成二维码用户进行下载分享,写完之后受益良多,特此来分享一下: 一.微信小程序动态生成保存二维码 wxml: <view class ...
随机推荐
- 【Android开发】问答机器人,聊天类App的开发制作过程记录
缘起 很久没写项目了,所以单纯的想练练手,正好看到有问答机器人的接口,想到之前也做过聊天项目,为什么不实验一下呢.当然也是简单调用接口的项目,并没有真正的完成问答的算法等等.业余项目,功能不齐全,只实 ...
- 【九度OJ】题目1191:矩阵最大值 解题报告
[九度OJ]题目1191:矩阵最大值 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1191 题目描述: 编写一个程序输入一个mXn的 ...
- 【LeetCode】851. Loud and Rich 解题报告(Python)
[LeetCode]851. Loud and Rich 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http:// ...
- 【剑指Offer】二叉搜索树的后序遍历序列 解题报告(Python)
[剑指Offer]二叉搜索树的后序遍历序列 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervi ...
- 【LeetCode】789. Escape The Ghosts 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 使用.NET 6开发TodoList应用(10)——实现DELETE请求以及HTTP请求幂等性
系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 先说明一下关于原本想要去更新的PATCH请求的文章,从目前试验的情况来看,如果是按照.NET 6的项目结构(即只使用一个Pro ...
- [object_detect]使用MobileNetSSD进行对象检测
使用MobileNetSSD进行对象检测 1.单帧图片识别 object_detection.py # 导入必要的包 import numpy as np import argparse import ...
- CS5210完全替代AG6202|HDMI转VGA不带音频输出的芯片+原理图|替代兼容AG6202
CS5210完全替代AG6202|HDMI转VGA不带音频输出的芯片+原理图|替代兼容AG6202 安格AG6202是一个HDMI转VGA不带音频解决方案,用于实现HDMI1.4高分辨率视频转VGA转 ...
- Android studio 报错 Unable to resolve dependency for ‘:app@releaseUnitTest/compileClasspath‘:
出现报错: Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath': Could not find any ...
- IIS部署.net core项目
1.安装AspNetCoreModule模块 与ASP.NET时代不同,ASP.NET Core不再是由IIS工作进程(w3wp.exe)托管,而是使用自托管Web服务器(Kestrel)运行,中间最 ...