单行居中显示文字,多行居左显示,最多两行超过用省略号结尾

本文介绍如何使用CSS实现文本单行居中,多行左对齐,以及如何在超过两行时自动添加省略号。通过嵌套使用不同display属性和text-align属性,结合WebKit特定的多行省略属性,实现复杂布局。

转——https://www.cnblogs.com/vanstrict/p/5923633.html

 

首先是单行居中,多行居左

居中需要用到 text-align:center,居左是默认值也就是text-align:left。如合让两者结合起来达到单行居中,多行居左呢?这就需要多一个标签,假设一开始我们定义如下:

<h2>单行居中,多行居左</h2>

现在,我们在 h2 中间,嵌套多一层标签 p

<h2><p>单行居中,多行居左</p></h2>

我们让内层 p 居左 text-align:left,外层 h2 居中 text-align:center,并且将 p 设置为 display:inline-block ,利用 inline-block元素可以被父级 text-align:center 居中的特性,这样就可以实现单行居中,多行居左,CSS 如下:

p {
    display: inline-block;
    text-align: left;
}

h2{
    text-align: center;
}

得到的效果如下:
单行居中,多行居左

超出两行省略

完成了第一步,接下来要实现的是超出两行显示省略符号。

多行省略是有专门的新 CSS 属性可以实现的,但是有些兼容性不大好。主要用到如下几个:

  • display: -webkit-box; // 设置display,将对象作为弹性伸缩盒子模型显示
  • -webkit-line-clamp: 2; // 限制在一个块元素显示的文本的行数
  • -webkit-box-orient: vertical; // 规定框的子元素应该被水平或垂直排列

上述 3 条样式配合 overflow : hidden 和 text-overflow: ellipsis 即可实现 webkit 内核下的多行省略。好,我们将上述说的一共 5 条样式添加给 p 元素

p {
    display: inline-block;
    text-align: left;
    overflow : hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
}

h2{
    text-align: center;
}

看看效果如下:

多行省略效果

(在 -webkit- 内核浏览器下)发现,虽然超出两行的是被省略了,但是第一行也变回了居左,而没有居中。

看回上面的 CSS 中的 p 元素,原因在于我们第一个设置的 display: inline-block ,被接下来设置的 display: -webkit-box 给覆盖掉了,所以不再是 inline-block 特性的内部 p 元素占据了一整行,也就自然而然的不再居中,而变成了正常的居左展示。

记得上面我们解决单行居中,多行居左时的方法吗?上面我们添加多了一层标签解决了问题,这里我们再添加多一层标签,如下:

<h2><p><em>单行居中,多行居左<em></p></h2>

这里,我们再添加一层 em 标签,接下来,

  • 设置 em 为 display: -webkit-box
  • 设置 p 为 inline-block
  • 设置 h2 为 text-align: center

通过再设置多一层标签,解决 display 的问题,完美解决问题,再看看效果:

å¤è¡æå­å±ç¤º

实现单行内容居中多行内容可以通过以下几种常见方法: ### 行内块元素法 原理是当子元素宽度小于父元素宽度时,父盒子设置居中对齐,子元素作为行内块元素会整体居中;当子元素宽度达到多行时,第二行开始应用对齐。 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> .father { height: 300px; margin: 0 auto; border: 1px solid red; text-align: center; } .text { display: inline-block; text-align: left; } </style> </head> <body> <div class="father"> <div class="text">测试单行文字居中多行文本对齐。测试单行文字居中多行文本对齐。</div> </div> </body> </html> ``` 这种方法利用了文本对齐和行内块元素的特性,父元素 `text-align: center` 使子元素整体居中,子元素 `text-align: left` 使文本内容对齐 [^1]。 ### table布局法 使用 `table` 布局结合 `margin: 0 auto` 实现。 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> .father { height: 300px; margin: 0 auto; border: 1px solid red; } .text { display: table; margin: 0 auto; } </style> </head> <body> <div class="father"> <div class="text">测试单行文字居中多行文本对齐。测试单行文字居中多行文本对齐。</div> </div> </body> </html> ``` 将子元素设置为 `display: table`,然后通过 `margin: 0 auto` 使其在父元素中水平居中 [^1]。 ### flex布局法 使用 `flex` 布局结合 `justify-content: center` 实现。 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> .father { height: 300px; margin: 0 auto; border: 1px solid red; } .text { display: flex; justify-content: center; } </style> </head> <body> <div class="father"> <div class="text">测试单行文字居中多行文本对齐。测试单行文字居中多行文本对齐。</div> </div> </body> </html> ``` 通过 `display: flex` 将子元素设置为弹性容器,`justify-content: center` 使其内容在主轴上居中 [^1]。 ### grid布局法 使用 `grid` 布局结合 `justify-items: center` 实现。 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> .text { display: grid; justify-items: center; } </style> </head> <body> <div class="text">测试单行文字居中多行文本对齐。测试单行文字居中多行文本对齐。</div> </body> </html> ``` 将子元素设置为网格容器,`justify-items: center` 可以使内容在水平方向上居中 [^1]。 ### 另一种简单示例 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> div{ text-align: center; } p{ display: inline-block; text-align: left; } </style> </head> <body> <div> <p>内容展示!!!</p> </div> </body> </html> ``` 父元素设置 `text-align: center` 实现整体居中,子元素作为行内块元素并设置 `text-align: left` 实现内容对齐 [^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值