css文本垂直居中的实现
本案例已经有新的比较简便的解决方案,可以直接采用 vertical-align:middle 样式对行内元素进行垂直居中布局,详见:
微信小程序开发——如何让商品标题类文本根据内容长度垂直居中。
以下方案涉及到操作dom,需要进行计算,总归是会对页面渲染会有一定影响的,不建议使用,仅供学习研究。
前言:
对于文本居中,CSS样式中有text-align:center来实现文本的水平对齐居中(也就是垂直居中),但是并没有垂直方向的居中样式。
通常来说,对于文本的展示要不就是全部展示,要不就是指定行数省略展示。
对于指定行数省略展示,展示不同行数就需要设置不同的高度。但是如果文本容器高度固定,需要根据文本内容展示一行或两行,又要做到垂直方向居中,那这个单纯依靠CSS是无法做到的了:


如上图,商品标题部分有固定宽高的背景图片,所以商品标题的高度也就是固定的了。需求有点变态,但变态的需求也是技术进步的一大动力。
解决方案:
使用原生js获取文本容器的高度,然后根据容器高度调整容器样式,这样就能实现垂直方向居中了。
示例代码:
定义需要使用的样式——根据需求,确定文本最多显示2行,再多就进行省略隐藏:
/*需要显示两行文本的样式*/
.ellipsis_mul {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp:;
padding-top: 10px !important;
height:50px;
}
文本容器:
<span>1元购买</span>{{goods_name}}
</p>
注:文本容器中有其他标签,但是不影响(前同事写法,文本内容建议直接放到标签中,尽量不要和标签同级编写)
<p id="goodTitleBox">
脚本(vue框架):
export default {
name: "goodsDetail",
......
updated() {
var ele = document.getElementById("ellipsis_mul")
if(ele.clientHeight > 60 && ele.className.indexOf("ellipsis_mul") < 0) {
ele.className = 'ellipsis_mul'
}
}
......
}
注:
- 文本内容是动态获取的,所以需要在页面渲染之后才能获取文本容器高度,因此需要在 vue 的 updated 生命周期中进行容器高度判断及样式调整;
- 对于文本容器 clientHeight 的临界值需要根据页面实地获取,可依次对一行或两行进行验证获取容器高度,本例中1行60,2行80,大部分浏览器都相同。这个临界值可能会根据不同大小屏幕而有所不同,所以最好使用谷歌浏览器的模拟器多多验证。特殊情况需要做兼容处理。
- 对文本容器进行样式调整后,又会触发 updated ,所以在对容器高度判断的同时还要确保容器没有进行调整过。
后记:
本例中的方法属于非正式的方法,所以要多进行测试验证,尽可能的做好兼容。
css文本垂直居中的实现的更多相关文章
- CSS 文本垂直居中对齐
文本垂直居中对齐是一个很常见的问题,这里总结一下. 一.容器高度固定,单行文本垂直居中对齐 height:20px; line-height:20px; overflow:hidden; 二.容器高度 ...
- css文本垂直居中
1,一般flexca 2,行高 3,行高加边框或者透明边框
- CSS文本垂直居中显示
<style> .sty1 { width: 300px; height: 200px; background-color: black; text-align: center; colo ...
- css 文本和div垂直居中方法汇总
https://blog.csdn.net/u014607184/article/details/51820508 https://blog.csdn.net/liuying1802028915/ar ...
- css样式设置高度不定文本垂直居中
使用css实现文本垂直居中,对于支持display: table的浏览器来说,是比较容易实现的,只需要对外层div设置为table,内层div设置为table-cell,并设置文本垂直居中即可.但对于 ...
- CSS元素和文本垂直居中
div居中 1.使用绝对定位和负外边距让块级元素垂直居中 要点:必须提前知道被居中块级元素的尺寸,否则无法准确实现垂直居中. <div id="box"> <di ...
- 把简单做好也不简单-css水平垂直居中
44年前我们把人送上月球,但在CSS中我们仍然不能很好实现水平垂直居中. 作者:Icarus 原文链接:http://xdlrt.github.io/2016/12/15/2016-12-15 水平垂 ...
- 五种方法让CSS实现垂直居中
利用 CSS 来实现对象的垂直居中有许多不同的方法,比较难的是选择那个正确的方法.我下面说明一下我看到的好的方法和怎么来创建一个好的居中网站. 使用 CSS 实现垂直居中并不容易.有些方法在一些浏览器 ...
- CSS实现垂直居中的5种方法
利用 CSS 来实现对象的垂直居中有许多不同的方法,比较难的是选择那个正确的方法.我下面说明一下我看到的好的方法和怎么来创建一个好的居中网站. 使用 CSS 实现垂直居中并不容易.有些方法在一些浏览器 ...
随机推荐
- JSON 序列化与反序列化, 与XML相互转换.
方式一: 使用于 JavaScriptSerializer类 适用于普通场景, Excel导入导出, 前台传输查询参数直接处理等. JavaScriptSerializer serializer = ...
- Linux 的文件软链接如何删除
Linux 的文件软链接如何删除创建软链接即用 ln -s 原始文件或文件夹 目标文件或文件夹 举例:[root@recover test]# pwd/test[root@recover test]# ...
- Redis单线程架构
参考链接: http://blog.csdn.net/qqqqq1993qqqqq/article/details/77538202 单线程模型: redis中的数据结构并不全是简单的kv,还有lis ...
- 自定义panel实现,并实现item更改和移除动画。
原地址:https://www.cnblogs.com/yk250/p/10043694.html 无图无真相: 1,重写panel类(模拟实现一个竖直方向排列的panel,相当于默认的StackP ...
- Python for循环之图像练习
矩形 # 控制行 for i in range(1,5): # 控制列 for j in range(1,8): # 用end在末尾传入空格串,这样print函数就不会自动换行了 print('*', ...
- Python基础之字符串拼接简单介绍
字符串拼接: %s表示可以传任意类型的值,%d表示只能传数字 test = "my name is %s,age %d" %("xyp",19) print(t ...
- 艾奇学院:66个信息流广告和SEM学习网址资源大放送!
01.CNZZ-UDplus 网址:udplus.umeng.com 说明:基于用户行为的精细化分析.运营平台,去研究研究,很多料! 02.黑眼圈管理后台 网址:www.not3.com 说明:二类电 ...
- 稀疏矩阵 part 2
▶ 各种稀疏矩阵数据结构之间的转化 ● MAT ←→ CSR CSR * MATToCSR(const MAT *in) // MAT 转 CSR { checkNULL(in); CSR * out ...
- kettle删除移动文件
- Oracle降低高水位先(转载)
Oracle 降低高水位线的方法 高水位(HIGH WARTER MARK,HWM)好比水库中储水的水位,用于描述数据库中段的扩展方式.高水位对全表扫描方式有着至关重要的影响.当使用DELETE删除 ...