开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节。css
解题不考虑兼容性,题目天马行空,想到什么说什么,若是解题中有你感受到生僻的 CSS 属性,赶忙去补习一下吧。html
不断更新,不断更新,不断更新,重要的事情说三遍。git
谈谈一些有趣的CSS题目(一)-- 左边竖条的实现方法github
谈谈一些有趣的CSS题目(二)-- 从条纹边框的实现谈盒子模型web
谈谈一些有趣的CSS题目(三)-- 层叠顺序与堆栈上下文知多少浏览器
谈谈一些有趣的CSS题目(四)-- 从倒影提及,谈谈 CSS 继承 inheritpost
全部题目汇总在个人 Github 。url
这题就厉害了个人哥。spa
题目就是如上要求,使用纯 CSS,完成单行文本居中显示文字,多行居左显示,最多两行超过用省略号结尾,效果以下:code
不肯看长篇大论的能够先看看效果:-webkit- 内核下 Demo 戳我
接下来就一步一步来实现这个效果。
居中须要用到 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 属性能够实现的,可是有些兼容性不大好。主要用到以下几个:
上述 3 条样式配合 overflow : hidden
和 text-overflow: ellipsis
便可实现 webkit
内核下的多行省略。好,咱们将上述说的一共 5 条样式添加给 p
元素
p { display: inline-block; text-align: left; 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 的问题,完美解决问题,再看看效果,和一开始的示意图同样:
是的,还有第二种方法......
上面咱们为了让第一行居中,使用了三层嵌套标签。
此次咱们换一种思路,只使用两层标签,可是咱们加多一行。结构以下:
<div class="container"> <h2> <p>我是单行标题居中</p> <p class="pesudo">我是单行标题居中</p> </h2> </div>
这里,新添加了一行 class 为 pesudo
的 p
标签,标签内容与文本内容一致,可是咱们限定死class="pesudo"
的 p
标签高度 height 与上面的 p
的行高 line-height
一致,并设置 overflow:hidden
,那么这个 p
标签最多只能能展现出一行文本,接下来使用绝对定位,定位到 h2
的顶部,再设置 text-align:center
以及背景色与 h2
背景色一致。
这样最多显示单行且样式为居中的 class="pesudo"
p 标签就重叠到了本来的 p
标签之上。表现为单行居中,多行时第一行则铺满,解决了咱们的问题。多行省略与方法一相同。CSS 以下:
<div class="container"> <h2> <p>我是单行标题居中</p> <p class="pesudo">我是单行标题居中</p> </h2> </div>
全部题目汇总在个人 Github ,发到博客但愿获得更多的交流。
到此本文结束,若是还有什么疑问或者建议,能够多多交流,原创文章,文笔有限,才疏学浅,文中如有不正之处,万望告知。