rpx
小程序运行在手机移动端,宿主环境是微信,因为手机尺寸的不一致,在写 CSS
样式时,开发者需要考虑到手机设备的屏幕会有不同的宽度和设备像素比,会采用一些技巧来算像素单位从而实现页面的适配。而 WXSS
在底层支持新的尺寸单位 rpx
,开发者可以免去换算的烦恼,只要交给小程序底层来换算即可。
rpx
: 小程序新增的拓展单位,可以根据屏幕宽度进行自适应,小程序规定任何型号手机:屏幕宽都为 750 rpx。
代码:
pages/index/index.wxml
<!-- 需求:绘制一个盒子,让盒子的宽度占据屏幕的一半 -->
<!-- view 是小程序提供的组件,是容器组件,类似于 div,也是一个块级元素,占据一行 -->
<!-- 如果想实现需求,不能使用 px,px 使固定单位,不能实现自适应,需要使用小程序提供的 rpx -->
<!-- 微信小程序规定,不管是什么型号的手机,屏幕的宽度都是 750rpx -->
<!-- rpx 单位能够实现自适应的 -->
<view class="box">尚硅谷</view>
pages/index/index.wxss
/* 通过演示使用 css 作为单位,px 是不具有响应式的 */
/* image {
width: 375px;
height: 600px;
background-color: lightgreen;
} */
.box {
width: 375rpx;
height: 600rpx;
background-color: lightgreen;
}
组件
了解全部组件请点击跳转官方文档
下面展示几种常用的组件
swiper 组件
在进行网页开发的时候,实现轮播图的时候,我们通常先使用 HTML 、CSS 实现轮播图的样式结构,然后使用 JS 控制轮播图的效果,或者直接使用插件实现轮播图的功能,而在小程序中实现小程序功能则相对简单很多。
在小程序中,提供了 swiper
和 swiper-item
组件实现轮播图:
swiper
:滑块视图容器,常用来实现轮播图,其中只可放置 swiper-item 组件,否则会导致未定义的行为swiper-item
:仅可放置在swiper组件中,宽高自动设置为100%,代表swiper
中的每一项
我们可以使用 swiper
组件提供的属性,实现轮播图的订制,常见属性如下:
属性 | 说明 | 类型 |
---|---|---|
indicator-dots | 是否显示面板指示点 | boolean (默认 false) |
indicator-color | 指示点颜色 | color (默认:rgba(0, 0, 0, .3)) |
indicator-active-color | 当前选中的指示点颜色 | color (默认:#000000) |
autoplay | 是否自动切换 | boolean (默认 false) |
interval | 自动切换时间间隔 | number (默认 5000) |
circular | 是否采用衔接滑动 | boolean (默认 false) |
其他属性… |
代码:
➡️ pages/index/index.wxml
<!-- 轮播图区域 -->
<view class="swiper">
<!-- swiper 组件实现轮播图区域的绘制 -->
<!-- swiper 组件,滑块视图容器 -->
<swiper
circular
autoplay
indicator-dots
interval="2000"
indicator-color="#efefef"
indicator-active-color="#ccc"
>
<!-- swiper 组件内部不能写其他组件或内容 -->
<!-- 在 swiper 组件内部只能写 swiper-item 组件 -->
<!-- swiper-item 组件只能放到 swiper 组件中,宽高自动设置为 100% -->
<swiper-item>
第一张轮播图
</swiper-item>
<swiper-item>
第二张轮播图
</swiper-item>
<swiper-item>
第三张轮播图
</swiper-item>
</swiper>
</view>
➡️ pages/index/index.scss
page {
height: 100vh;
background-color: #efefef !important;
}
swiper {
swiper-item {
// 在 Sass 拓展语言中,& 符号表示父选择器的引用。它用于在嵌套的选择器中引用父选择器
// 下面这段代码在编译以后,生成的代码是 swiper-item:first-child
&:first-child {
background-color: skyblue;
}
&:nth-child(2) {
background-color: lightcoral;
}
&:last-child {
background-color: lightseagreen;
}
}
}
image 组件
在小程序中没有 img 标签,添加图片需要使用小程序提供的image
组件,image
组件的语法如下:
<!-- src:图片资源地址 -->
<!-- mode:图片裁剪、缩放的模式 -->
<!-- lazy-load:图片懒加载,在即将进入一定范围(上下三屏)时才开始加载 -->
<image src="/assets/tom.png" mode="heightFix" lazy-load=”{{ true }}“ />
代码
➡️ pages/index/index.wxml
<!-- 轮播图区域 -->
<view class="swiper">
<swiper
circular
autoplay
indicator-dots
interval="2000"
indicator-color="#efefef"
indicator-active-color="#ccc"
>
<swiper-item>
<!-- 在小程序中图片不能使用 img 标签,使用后不会生效 -->
<!-- <img src="../../assets/banner/banner-1.png" alt=""/> -->
<!-- 需要使用 images 组件 -->
<!-- image 组件不给 src 属性设置默认值,也占据宽和高 -->
<!-- image 默认具有宽度,宽是 320px 高度是 240px -->
<!-- mode 属性:用来设置图片的裁切模式、纵横比例、显示的位置 -->
<!-- show-menu-by-longpress 属性:长按转发给朋友、收藏、保存图片 -->
<image src="../../assets/banner/banner-1.png" mode="aspectFill" show-menu-by-longpress />
</swiper-item>
<swiper-item>
<image src="../../assets/banner/banner-2.png" />
</swiper-item>
<swiper-item>
<image src="../../assets/banner/banner-3.png" />
</swiper-item>
</swiper>
</view>
➡️ pages/index/index.scss
/** index.wxss **/
page {
height: 100vh;
background-color: #efefef !important;
}
swiper {
height: 360rpx;
swiper-item {
image {
width: 100%;
height: 100%;
}
// 在 Sass 拓展语言中,& 符号表示父选择器的引用。它用于在嵌套的选择器中引用父选择器
// 下面这段代码在编译以后,生成的代码是 swiper-item:first-child
// &:first-child {
// background-color: skyblue;
// }
// &:nth-child(2) {
// background-color: lightcoral;
// }
// &:last-child {
// background-color: lightseagreen;
// }
}
}
text 组件
1.内联文本只能用 text 组件,不能用 view,如
2.新增 span 组件用于内联文本和图片,如
<view class="info">
<!-- text 是文本组件,类似于 span,是行内元素 -->
<!-- user-select:文本是否可选 -->
<!-- space:是否连续展示空格 -->
<!-- <text user-select space="ensp">1 2</text> -->
<text>3</text>
</view>
navigator跳转
在网页开发中,如果想实现页面的跳转需要使用 a 标签,在小程序中如果想实现页面的跳转则需要使用 navigator 组件,语法如下:
<!-- url:当前小程序内的跳转链接 -->
<navigator url="/../..">
在小程序中,如果需要进行跳转,需要使用 navigation 组件,常用的属性有 2 个:
-
url :当前小程序内的跳转链接
-
open-type :跳转方式
- navigate:保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面
- redirect: 关闭当前页面,跳转到应用内的某个页面。但不能跳转到 tabbar 页面
- switchTab:跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面
- reLaunch:关闭所有页面,打开到应用内的某个页面
- navigateBack:关闭当前页面,返回上一页面或多级页面
📌 注意事项:
路径后可以带参数。参数与路径之间使用 ? 分隔,参数键与参数值用 = 相连,不同参数用 & 分隔
例如:/list?id=10&name=hua
,在onLoad(options)
生命周期函数 中获取传递的参数属性
open-type="switchTab"
时不支持传参
scroll-view 横向滚动
使用横向滚动时,需要添加 scroll-x 属性,然后通过 css 进行结构绘制,实现页面横向滚动
代码:
➡️ pages/index/index.wxml
:
<!-- 商品推荐区域 -->
<view class="hot">
<scroll-view class="scroll-x" scroll-x>
<view>1</view>
<view>2</view>
<view>3</view>
</scroll-view>
</view>
➡️ pages/index/index.wxss
:
.hot {
margin-top: 16rpx;
.scroll-x {
width: 100%;
white-space: nowrap;
background-color: lightblue;
view{
display: inline-block;
width: 50%;
height: 80rpx;
&:last-child{
background-color: lightseagreen;
}
&:first-child{
background-color: lightpink;
}
}
}
}
scroll-view 纵向滚动
落地代码:
➡️ pages/index/index.wxml:
<!-- 商品推荐区域 -->
<view class="hot">
<scroll-view class="scroll-x" scroll-x>
<view>1</view>
<view>2</view>
<view>3</view>
</scroll-view>
<scroll-view class="scroll-y" scroll-y>
<view>1</view>
<view>2</view>
<view>3</view>
</scroll-view>
</view>
➡️ pages/index/index.wxss
:
.hot {
margin-top: 16rpx;
.scroll-x {
width: 100%;
white-space: nowrap;
background-color: lightblue;
view{
display: inline-block;
width: 50%;
height: 80rpx;
&:last-child{
background-color: lightseagreen;
}
&:first-child{
background-color: lightcoral;
}
}
}
+ .scroll-y {
+ height: 400rpx;
+ background-color: lightsalmon;
+ margin-top: 60rpx;
+
+ view {
+ height: 400rpx;
+
+ &:nth-child(odd) {
+ background-color: lightseagreen;
+ }
+
+ &:nth-child(even) {
+ background-color: lightcoral;
+ }
+ }
+ }
}
背景图片的使用
当编写小程序的样式文件时,我们可以使用 background-image
属性来设置一个元素的背景图像,但是小程序的 background-image
不支持本地路径。
在使用了本地资源图片以后,微信开发者工具提供的提示:
本地资源图片无法通过 WXSS 获取,可以使用网络图片,或者 base64,或者使用<image/>标签
.image {
width: 100%;
height: 400rpx;
/* 本地资源图片无法通过 WXSS 获取 */
/* background-image: url('../../static/微信.jpg'); */
/* 使用网络图片 */
/* background-image: url('http://8.131.91.46:6677/TomAndJerry.jpg'); */
/* 使用 base64 格式展示图片 */
/* base64 编码的文件很长,这个地址老师在这边进行了简写,在测试的时候,需要自己将这里转成完成的 64 编码 */
background-image: url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAeAB4AAD/.....")
background-position: center;
background-size: cover;
}