前言:

如下图,商品标题内容字数不限,最多显示两行,多余省略。

展示上,标题显示一行和两行,图片右侧的文本部分的总高度是不一样的,而且在整个父层盒子中垂直居中(注:不是text-align:center,那是水平居中)。

解决方案:

1.使用 vertical-align 样式实现:

这种方法就比较简单了,不过需要注意的是这个属性只对行内样式有效,请先看该样式的说明:

vertical-align 属性设置元素的垂直对齐方式。

该属性定义行内元素的基线相对于该元素所在行的基线的垂直对齐。

允许指定负长度值和百分比值。这会使元素降低而不是升高。

在表单元格中,这个属性会设置单元格框中的单元格内容的对齐方式。

如上所述,如果你使用的是 float 进行的布局,那么这个样式可能会无效,所以先要保证左边图片和右边文本盒子都要是行内样式(可以使用display:inline-block)。

还有一点需要注意的是,弹性盒子貌似不支持这个样式,行内元素在弹性盒子中,该样式无效。

示例代码如下:

{{item.goods_name}}

{{item.expire_time}}

其中,elipsis_mul为app.wxss公共样式文件中定义的显示两行省略文本的公共类样式。

/*----公共样式----*/

/*文本省略--2行*/.ellipsis_mul{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-height:1.5;

}

/*----页面样式----*/.good_img{width:204rpx;height:204rpx;margin:8rpx 20rpx;vertical-align:middle;

}.good_info{width:430rpx;overflow:hidden;padding-right:16rpx;vertical-align:middle;display:inline-block;

}.good_name{font-size:32rpx;line-height:42rpx;margin-bottom:12rpx;word-break:break-all; /*数字字母换行*/

}

注:文本如果需要换行,需要加下  word-break: break-all; 不然,会出现的情况就是汉字是可以正常换行,但是数字和字母并没有换行。

2.使用js计算文本所占总宽度,与文本盒子宽度比较追加不同类样式进行调整:

结合js计算商品标题所占的总宽度,如果文本总宽度大于文本盒子宽度,那么就显示两行,否则显示一行。

1) 给文本盒子动态添加类样式以调整垂直位置:

{{item.goods_name}}

{{item.expire_time}}

其中 item.titleStyle 为根据文本内容添加的不同类样式。

2)确定汉字、字母、数字及符号所占的宽度:

js 部分,需要先获取单个汉字、字母和数字所占的宽度,这个宽度跟文本所设置的字体大小有关,汉字的宽度等于字体大小,字母和数字及符号的宽度约大于半个字体宽度。

经验证,字母和符号所占的宽度差不多,所以统一取字母的宽度,这样就剩下字母和数字两种字符的宽度需要确定了。

先写一个用来计算的文本标签:

1

a

页面onload生命周期中,编写下面代码获取单个字符的宽度:

/**

* 生命周期函数--监听页面加载*/onLoad:function(options) {this.getWrodWidth(".computed")

},

getWrodWidth:function(selecter){var query = wx.createSelectorQuery().in(this)

query.selectAll(selecter).boundingClientRect(function(res) {

res.forEach(item=>{

console.log(item.width)

})

}).exec()

},

控制台输出结果如下:

根据上边得出的字符宽度封装函数计算商品标题的总宽度:

/**

* 获取文本总宽度的方法*/getTextWidth:function(val) {var width = 0,

wChinese= 16,

wNnum= 9.375,

wLetter= 8.84375;for (var i = 0; i < val.widthgth; i++) {var a =val.charAt(i);if (a.match(/[^\x00-\xff]/ig) != null) {//中文

width +=wChinese;

}else if (a.match(/\d/) != null){//数字

width +=wNnum;

}else{//字母和符号

width +=wLetter;

}

}returnwidth;

}

数据列表中进行如下处理:

/**

* 获取卡券列表*/getCouponList:function() {var self = this;

http.orderList().then(data=>{if (data &&data.order_list) {var order_list =data.order_list//遍历列表,并根据商品标题宽度给不同的订单项文本盒子添加不同的类样式

order_list.forEach(item=>{var textWidth =self.getTextWidth(item.goods_name)if (textWidth>251){//多行展示

item.titleStyle ="ellipsis_mul "}else{//单行展示

item.titleStyle = "ellipsis"}

})

self.setData({

orderList: data.order_list

})

}

})

},

样式部分,图片和文本盒子采用的是float定位,文本垂直方向的位置主要是通过padding和margin来调整:

.good_img{width:204rpx;height:204rpx;margin:8rpx 20rpx;float:left;

}.good_info{width:430rpx;float:right;overflow:hidden;padding:39rpx 16rpx 39rpx 0;

}.good_name.ellipsis{margin-top:20rpx;

}.good_name{font-size:32rpx;line-height:42rpx;margin-bottom:12rpx;word-break:break-all;/*数字字母换行*/

}

注:第二种方法比较麻烦,需要获取单个不同字符所占的宽度,然后计算文本所占总宽度,再根据总宽度与盒子宽度进行对比,然后再根据不同的比较结果进行样式微调,以此实现垂直居中。该方法是非正规的方法的,需要进行大量的验证求证和计算,代码量多了不少,对页面渲染也有一定影响。原则上不建议使用,但是感兴趣的可以研究下,说不定以后就用到了呢。

扩展——使用vertical-align:middle实现不限行数全展示垂直居中:

前边说的都是商品标题限定显示行数,在一些列表类的界面布局中,为了列表的美观,往往都是会限制某些文字显示的行数,以求所有列表显示的统一。但是对于某些列表没有没有下级详情页面或者对于一些详情页有此类布局的,大部分文本内容还是完全显示的好。

如上,虽然界面看起来有点不太美观,但有些时候还是很有必要的。

代码层面,可设计如下:

html:

  • 商品标题不限字数完全展示

    有效日期:2019年10月10日

    由此进入行使权益

  • 商品标题不限字数完全展示

    有效日期:2019年10月10日

    由此进入行使权益

    ......

css:

img{width:1.3rem;height:1.3rem;display:inline-block;vertical-align:middle;

}div{width:4.26rem;padding-left:.2rem;display:inline-block;vertical-align:middle;

}......

需要注意的是,该方法不能使用弹性盒子以及float布局,只能在正常的盒子模型中使用行内元素(inline-block)。然后就是不需限制行数展示的文本设置好行高,不设置高度就好了。

使用弹性盒子布局:

如果弹性盒子用的比较好,那么使用弹性盒子实现这个也是挺简单的。

可以直接定义一个垂直居中的样式:

1 .vc_flex{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;}

给文本的父容器使用这个样式:

商品名称,字数不限,可能一样,也可能2行,但是父容器高度固定

如此,可以实现固定容器,不同行数文字的展示,

同样,也可以针对前边的横向多个元素垂直居中布局。

wps垂直排列标题与文本_如何让商品标题类文本根据内容长度垂直居中相关推荐

  1. js 获取元素文本_可能是最全的“文本溢出截断省略”方案合集

    前言 在我们的日常开发工作中,文本溢出截断省略是很常见的一种需考虑的业务场景细节.看上去 "稀松平常" ,但在实现上却有不同的区分,是单行截断还是多行截断?多行的截断判断是基于行数 ...

  2. python如何把二进制转文本_在python3中如何把文本转换为二进制

    在python3中如何把文本转换为二进制 在python3中把文本转换为二进制的方法:首先修改dirroot为要读取的文件夹的路径:然后遍历所有的文件夹,读取txt文件:最后更改newdirroot为 ...

  3. php 随机在文章中添加锚文本_页面SEO优化的锚文本优化概念

    SEO优化分为结构优化和页面优化,页面的SEO优化中其中一个重点是锚文本的建设.锚文本的概念就是网站的内部链接,较为常见的就是将文章中的关键词作为锚文本. 但在具体建设当中,很多网站对锚文本的处理出现 ...

  4. java 接收前台富文本_前后端分离ueditor富文本编辑器的使用-Java版本

    最近在写一个自己的后台管理系统(主要是写着玩的,用来熟悉后端java的知识,目前只是会简单的写点接口),想在项目中编写一个发布新闻文章的功能,想到了使用百度的ueditor富文本编辑器,网上找了很多j ...

  5. creator html富文本_小程序之HTML富文本解析

    开发小程序的某些详情时候,经常会遇到后台返回的HTML富文本编辑的内容,小程序无法正常解析,这时候我们常用的做法就是采用一些插件来完成页面的渲染. 微信小程序插件wx-parse 插件地址:https ...

  6. linux 全选 编辑文本_强烈推荐:Linux终端文本编辑器Micro

    一般来说Linux老手们用的编辑器都是vi或vim,但是vim等的操作方式对新人超级不友好的. VS Code作为编辑器也不错,但是并不是每个服务器都装了WM和DM. 于是一般都得苦哈哈的用nano. ...

  7. 打印表格留标题怎么设置_打印如何添加标题?内容一页打不下?—关于Excel文档打印的那些事-excel打印区域怎么设置...

    很多情况下,我们制作的Excel电子表格最终是要以纸面形式打印出来的.所以,关于表格打印,你还是要知道以下几个方面,不能让工作卡在最后一关. 一.为Excel文档打印添加标题 当Excel表格有多页内 ...

  8. python离线语音转文本_使用Python将语音转换为文本的方法

    使用Python将语音转换为文本的方法,语音,转换为,文本,您的,麦克风 使用Python将语音转换为文本的方法 易采站长站,站长之家为您整理了使用Python将语音转换为文本的方法的相关内容. 语音 ...

  9. polygon 填充文本_如何创建(动画)文本填充

    polygon 填充文本 View demo 查看演示 Download Source 下载源 I like to think that the future is already here. We ...

最新文章

  1. 一、MySql优化的基础介绍
  2. 解决mac找不到隐藏的local文件夹
  3. freetype-go学习
  4. iview 使用笔记
  5. mybatis使用全注解的方式案例(包含一对多关系映射)
  6. Schrödinger's Knapsack ZOJ - 4019 线性DP
  7. flex gallery / 产品展示
  8. CSharp设计模式读书笔记(3):抽象工厂模式(学习难度:★★★★☆,使用频率:★★★★★)...
  9. 开发用的一些工具(更新中)
  10. 【电脑帮助】解决Win10系统电脑开机速度慢的问题
  11. Android 开发环境配置问题
  12. YUV格式详解【全】
  13. Rational Rose 2007安装使用教程
  14. 编程计算三角形的面积和周长。要求如下: (1)、设计一个接口InterfaceShape,其中有计算三角形的面积和周长的抽象方法; (2)、设计一个点类Point,其中有必要的构造方法和一般的访问器方
  15. 开源的免费听音乐程序
  16. 计算机安全模式还原系统,Win10电脑安全模式怎么还原系统?Win10电脑安全模式还原系统方法步骤...
  17. css实现圆形进度条加载动画
  18. 菜鸡教程(1):简易游戏每周推荐小程序制作
  19. CCS 2022 极客少年挑战赛 writeup
  20. 互联网+时代,是更加开放还是封闭

热门文章

  1. halcon 数字转字符串实现循环读取图片
  2. 【签名】点击按钮弹出签名框,保存成图片,并显示出来
  3. 树莓派2B安装TP-Link usb无线wifi驱动
  4. mysql里COALESCE_MySQL 技巧:COALESCE 函数的使用
  5. 虹科案例 | 丝芙兰xDomo:全球美妆巨头商业智能新玩法
  6. 什么是股票程序化接口?
  7. 制作GitHub README 徽章
  8. c语言单链表的创建展示
  9. jq富文本_10个免费的jQuery富文本编辑器
  10. Github代理服务,解决github文件下载克隆难题