微信小程序css篇----定位(position)

本文详细介绍了微信小程序中的元素定位机制,包括静态、相对、绝对及固定定位等不同方式,并解释了定位属性的具体作用。

昨天2017的微信公开课pro如期进行了,小程序将于2017年1月9日对个人开放,公司项目的demo版做了个大概,过程中花的时间最多的还是页面布局,所以后面将花一段时间将css的属性在小程序里过一篇,虽然小程序里面对于css支持,但没有说明支持到什么地步。今天就先来说说定位。

一.定位:position属性允许你对元素进行定位。

二.定位机制:有三种:普通流,浮动流,绝对定位。

三.定位属性值:static,relative,absolute,fixed,inherit,-ms-page,initial,unset(后面3个属性是小程序中有的,没看懂是什么样子)


1.static:元素框正常生成,块级元素生成一个矩形框,作为文档流的一部分,行内元素则会创建一个或者多个行框,置于其父元素中。

2.relative:元素框偏移某个距离。元素扔保持其未定位前的形状,它原来所占的空间扔保留。

3.absolute:元素框从文档流中删除,并相对于其包含块定位,包含快可能是文档中的另一个元素或者初始包含块。元素原先在正常文档流中所占的空间会关闭,就好像元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。

4.fixed:元素框的表现类似于将position 设置为absolute,不过其包含块是视窗本身。

5.inherit:继承父元素的position位置。----任何版本的IE都不支持属性值:inherit

6.-ms-page:位置取决于absolute的模式。

7.initial:将指定的值表示为属性的初始值。

8.unset:设置了“inherit”和“initial”,根据属性是否被继承。

四.top,right,bottom,left:定位元素,定义position不为static的元素。

1.取值:auto/直接数值/百分比

五.z-index 定义position不为static的元素。设置元素在当前上下文中的层叠级别。数值越大显示在上面,数值越小,则显示在下面。

六.clip:剪裁绝对元素定位。定义一个剪裁矩形,内容多出来的东西将根据overflow的值来处理。注意点:必须将position设置为absolute或者fixed的时候此属性才会生效

1.取值。shape/auto/inherit。

2.clip这个属性即将废弃,推荐使用 clip-path







好的,让我们开始微信小程序实战-个人中心、订单制作的教程。 ## 1. 创建个人中心页面 首先,我们需要在小程序中创建一个个人中心页面。可以在 app.json 中添加一个 tab 标签,在 pages 数组中添加个人中心页面的路径: ```json { "tabBar": { "list": [ { "pagePath": "pages/index/index", "text": "首页" }, { "pagePath": "pages/personal/personal", "text": "个人中心" } ] }, "pages": [ "pages/index/index", "pages/personal/personal" ] } ``` 接下来,在 pages 文件夹中创建 personal 文件夹,并创建 personal.wxml、personal.wxss、personal.js、personal.json 四个文件。在 personal.wxml 文件中添加以下代码: ```html <view class="personal"> <view class="avatar"> <image class="avatar-img" src="{{avatarUrl}}"></image> <text class="nickname">{{nickname}}</text> </view> <view class="order"> <view class="order-item" bindtap="goToOrder"> <image class="order-icon" src="/images/personal/order.png"></image> <text class="order-text">我的订单</text> <image class="order-arrow" src="/images/personal/arrow.png"></image> </view> </view> </view> ``` 这里我们创建了一个包含头像、昵称、我的订单等模块的页面。其中,头像和昵称是从后端接口获取的数据。 ```javascript // personal.js Page({ data: { avatarUrl: '', nickname: '' }, onLoad: function () { // 从后端接口获取用户信息 wx.request({ url: 'https://example.com/userinfo', success: (res) => { this.setData({ avatarUrl: res.data.avatarUrl, nickname: res.data.nickname }) } }) }, goToOrder: function () { // 跳转到订单页面 wx.navigateTo({ url: '/pages/order/order' }) } }) ``` 在 personal.js 文件中,我们编写了 onLoad 和 goToOrder 两个函数。onLoad 函数用于从后端接口获取用户信息并在页面上显示,goToOrder 函数用于跳转到订单页面。 ## 2. 创建订单页面 接下来,我们需要创建一个订单页面。在 pages 文件夹中创建 order 文件夹,并创建 order.wxml、order.wxss、order.js、order.json 四个文件。在 order.wxml 文件中添加以下代码: ```html <view class="order"> <view class="order-header"> <text class="order-title">我的订单</text> <text class="order-more">查看更多</text> </view> <view class="order-list"> <view class="order-item" wx:for="{{orders}}" wx:key="index"> <image class="order-img" src="{{item.imgUrl}}"></image> <view class="order-info"> <text class="order-name">{{item.name}}</text> <text class="order-price">¥{{item.price}}</text> </view> </view> </view> </view> ``` 这里我们创建了一个包含订单标题、订单列表等模块的页面。其中,订单列表是从后端接口获取的数据。 ```javascript // order.js Page({ data: { orders: [] }, onLoad: function () { // 从后端接口获取订单列表 wx.request({ url: 'https://example.com/orders', success: (res) => { this.setData({ orders: res.data }) } }) } }) ``` 在 order.js 文件中,我们编写了 onLoad 函数用于从后端接口获取订单列表并在页面上显示。 ## 3. 页面样式 最后,我们需要编写页面的样式。在 app.wxss 中添加以下代码: ```css .tab-bar { position: fixed; bottom: 0; left: 0; width: 100%; height: 50rpx; background-color: #fff; border-top: 1rpx solid #e5e5e5; box-shadow: 0 -2rpx 6rpx rgba(0, 0, 0, 0.05); } .tab-bar-item { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100%; font-size: 20rpx; color: #8a8a8a; } .tab-bar-item.active { color: #007aff; } .personal { display: flex; flex-direction: column; align-items: center; justify-content: center; margin-top: 20rpx; } .avatar { display: flex; flex-direction: column; align-items: center; justify-content: center; } .avatar-img { width: 80rpx; height: 80rpx; border-radius: 50%; } .nickname { margin-top: 10rpx; font-size: 24rpx; font-weight: bold; } .order { margin-top: 20rpx; } .order-item { display: flex; flex-direction: row; align-items: center; justify-content: space-between; width: 90%; height: 80rpx; background-color: #fff; border-radius: 10rpx; box-shadow: 0 2rpx 6rpx rgba(0, 0, 0, 0.05); padding: 20rpx; margin-bottom: 20rpx; } .order-icon { width: 40rpx; height: 40rpx; } .order-text { font-size: 28rpx; font-weight: bold; } .order-arrow { width: 20rpx; height: 20rpx; } ``` 在 order.wxss 中添加以下代码: ```css .order { margin-top: 20rpx; } .order-header { display: flex; flex-direction: row; align-items: center; justify-content: space-between; padding: 20rpx; background-color: #fff; border-radius: 10rpx; box-shadow: 0 2rpx 6rpx rgba(0, 0, 0, 0.05); margin-bottom: 20rpx; } .order-title { font-size: 32rpx; font-weight: bold; } .order-more { font-size: 24rpx; color: #007aff; } .order-list { display: flex; flex-direction: column; align-items: center; justify-content: center; } .order-item { display: flex; flex-direction: row; align-items: center; justify-content: space-between; width: 90%; height: 120rpx; background-color: #fff; border-radius: 10rpx; box-shadow: 0 2rpx 6rpx rgba(0, 0, 0, 0.05); padding: 20rpx; margin-bottom: 20rpx; } .order-img { width: 80rpx; height: 80rpx; border-radius: 10rpx; } .order-info { display: flex; flex-direction: column; align-items: flex-start; justify-content: center; margin-left: 20rpx; } .order-name { font-size: 28rpx; font-weight: bold; } .order-price { margin-top: 10rpx; font-size: 24rpx; color: #007aff; } ``` 至此,我们完成了微信小程序实战-个人中心、订单制作的教程。希望对你有所帮助!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值