设置text-overflow: ellipsis后引起的文本对齐问题

最近在做网页的时候用到了文本溢出隐藏的功能,但是出现了一些小问题,下面先放上示例代码吧。
<p>
<span class="left">Hello Hello Hello</span>
<span class="right">xhaha</span>
</p>
p{
width: 40%;
margin: 20px auto;
font-size: 50px;
}
span{
display: inline-block;
}
.left{
width:40%;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.right{
/* overflow: hidden; */
}

查看DEMO

按以上代码最后得到的显示效果是,span.leftspan.right没有对齐。右边的会沉下去点,这个在demo里面可以看到。

然后我就想这是什么原因造成的,在调试器里勾选掉.leftoverflow: hidden后,就显示正常了(当然,省略号儿也没了),然后我就捉摸着这是不是BFC的问题,因为平时自己清除浮动什么的,都喜欢用overflow:hidden来触发BFC,以便包裹元素的来着。当然了,给.right设置overflow: hidden或者float: right之后,也确实会显示正常(float: right会让文字右浮动,不过对齐的效果确实是达到了),之后我就在BFC的问题上纠结了好久,因为MDN上说了,inline-block元素本身就是会触发BFC的,那么前面所说的和BFC有关,就不那么准确了。

后来在stackoverflow上得到了答案,对span加上一个vertical-align: top然后就会对齐了。

至于原因,是因为inline-block元素默认的对齐方式是基线对齐,那么基线是什么呢? 

如果一个inline-block盒子是空的,或者说他的overflow属性不为visible, 那么他的基线就是其下边距边缘,

否则的话,就是其内部最后一个内联元素的基线(文字就是内联元素咯。。)

如下所示:

The baseline of an ‘inline-block’ is the baseline of its last line box in the normal flow, unless it has either no in-flow line boxes or if its ‘overflow’ property has a computed value other than ‘visible’, in which case the baseline is the bottom margin edge.

那么,span.left的基线就是那个背景色的最下边,而右边span.right的基线,就是字符x的底部,基线对齐的意思,就是这两条线是在同一水平线上的,所以,右边的元素为了对齐,就要往下沉咯。现在我们目测的话,也是这两条线貌似也确实是在一条水平线上的。

所以,设置了vertical-align: top之后,改变了其默认对齐方式,所以就对齐咯。

然后使用右浮动之后,因为浮动会使盒子的display属性变为block,所以就不是inline-block元素,自然就不会受到前面的规则的影响了。

之后是使用overflow: hidden,这个属性使得inline-block元素的基线发生了改变,变得和左边元素一样,所以也能对齐。

最后来个小总结吧: 好的文章一定要多读几遍,每一遍都会有所收获。

参见:

stackoverflow- inline-block元素垂直对齐问题

张鑫旭-CSS深入理解vertical-align和line-height的基友关系

设置text-overflow文本溢出隐藏时的对齐问题的更多相关文章

  1. css文本溢出隐藏显示省略号(单行+多行)

    文本超出若干行就换行,这个功能几乎每个文本浏览网站都会用到,实现它的办法也有很多,今天简单的介绍一下实现它的方法.  一. 单行文本不换行,并将超出文本隐藏 .box-content{     ove ...

  2. css 文本换行 文本溢出隐藏用省略号表示剩下内容

    正常文本的显示 <style> p{ width: 300px; box-shadow: 0 0 10px #ccc; padding: 0 20px; margin: 20px 100p ...

  3. CSS之 元素显示隐藏,用户界面样式,文本溢出隐藏,精灵技术,三角形

    元素的显示与隐藏 display 显示 display 设置或检索对象是否及如何显示 display: none; 隐藏对象 display: block; 除了转换为块级元素, 同时还有显示元素的意 ...

  4. text-overflow文本溢出隐藏“...”显示

    一.文本溢出省略号显示 1.文本溢出是否“...”显示属性:text-overflow:clip(不显示省略标记)/ellipsis(文本溢出时“...”显示) 定义此属性有四个必要条件:1)须有容器 ...

  5. CSS之文本溢出隐藏,不定宽高元素垂直水平居中、禁止页面文本复制

    1.如何让不固定元素宽高的元素垂直水平居中 .center { position: absolute; top: 50%; left: 50%; background-color: #000; wid ...

  6. 关于overflow:hidden的作用(溢出隐藏,清除浮动,解决外边塌陷等等)

    1.overflow:hidden  溢出隐藏 给一个元素中设置overflow:hidden ,那么该元素的内容若超出了给定的宽度和高度属性,那么超出的部分将会被隐藏,不占位. 代码如下: 运行结果 ...

  7. CSS和JS实现文本溢出显示省略号

    本文记录实现文本溢出显示省略号的几种方式. 单行文本 三行CSS代码实现: overflow: hidden; // 文本溢出隐藏 text-overflow: ellipsis; // 显示省略号 ...

  8. Centos7 设置vim 显示文本不同颜色

    Centos7 设置vim 显示文本不同颜色 本人在查找设置 centos7 vim 文本显示颜色时, 学习了作者: luffy5459 (博客连接:https://blog.csdn.net/fei ...

  9. css_文本溢出

    1.单行文本溢出隐藏,显示省略号 2.多行文本溢出隐藏,显示省略号 1.只针对用webkit内核浏览器渲染页面才会有效果 2.(多行文本溢出隐藏,显示省略号)通用方法

随机推荐

  1. WebAPI 2.x中如何扩展Identity Store

    ASP.NET WebAPI 中引入了新的一套身份验证和授权的机制,官方的叫法是ASP.NET Identity,有关这个概念的细节,感兴趣的同学可以参考 http://www.asp.net/ide ...

  2. CSDN 论坛招聘区是不是有潜规则?在Cnblog招个人试试...

    CSDN 论坛招聘区是不是有潜规则? 在招聘区发了两个招聘贴都被删掉了... 而且没有任何提示和原因,或者站内短信提示.... 虽然csdn现在很水...不过在那边之前待了几年还是有点感情的 想顺便内 ...

  3. PHP的学习--生成器Generators

    生成器总览 (PHP 5 >= 5.5.0, PHP 7) 生成器提供了一种更容易的方法来实现简单的对象迭代,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大大降低. 生成器允 ...

  4. 给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV

    这次博客园的排版彻底残了..高清版请移步: https://zhuanlan.zhihu.com/p/24425116 本篇是前面两篇教程: 给深度学习入门者的Python快速教程 - 基础篇 给深度 ...

  5. [New Portal]Windows Azure Virtual Machine (13) 在本地使用Hyper-V制作虚拟机模板,并上传至Azure (3)

    <Windows Azure Platform 系列文章目录> 本章介绍的内容是将本地Hyper-V的VHD,上传到Azure数据中心,作为自定义的虚拟机模板. 注意:因为在制作VHD的最 ...

  6. oracle创建表相关

    --创建表 create table person( id number primary key, name ), birth date ); --创建序列 create sequence perso ...

  7. ASP.NET MVC WEB API必知必会知识点总结

    一.理解WEB API:提供基于RESTful架构的WEB服务,通过HTTP请求方法(GET, PUT, POST, DELETE)映射到服务器端相应的ACTION方法(CRUD). RESTful架 ...

  8. 使用Nodejs+Protractor搭建测试环境

    Protractor是一个end-to-end的测试框架,从网络上得到的答案是Protractor是作为Angular JS应用程序的测试框架.它的构建基于Selenium WebDriver之上,且 ...

  9. 试试用有限状态机的思路来定义javascript组件

    本文是一篇学习性的文章,学习利用有限状态机的思想来定义javascript组件的方法,欢迎阅读,后续计划会写几篇专门介绍自己利用有限状态机帮助自己编写组件的博客,证明这种思路对于编程实现的价值,目前正 ...

  10. 如果你恨一个程序员,忽悠他去做iOS开发

    如果你恨一个程序员,忽悠他去做iOS开发.不管他背景是cobel还是 java,送他一本iOS开发的书.这种书最好是国人写的,容易以偏概全一点,相比洋鬼子的书,更容易学到皮毛.这叫舍不得孩子套不着狼, ...