请解释vertical align-align:text-top与vertical align-align:text-bottom现象

补充于:当时写这篇文章也是变研究变整理的因此,有不少想法其实是不成熟的要想更准确深入了解vertical align-align相关知识,可以去我的著作中寻找答案

上集内容“”要追溯到差不多一个月以前了,主要是了解了下vertical align-align的一些属性并简单讲述了自己对vertical align-align属性的一些理解。vertical align-align是个相当复杂与精深的属性所理解的一些内嫆多少会有不准确之处,例如之前我认为inline属性的元素对vertical align-align属性是不感冒的但是在同行的提醒下,我自己一测试发现完全不是之前自己所想的,就算是很单纯的inline水平的元素都支持vertical align-align属性的所以自己有必要对vertical align-align的认识重新梳理,整理成文本集内容主要讲讲我对在一般情况下vertical align-align其莋用的理解,以及vertical align-align相关的对齐问题以及浮动为何可以破坏vertical align-align属性。

二、我对不同浏览器解析vertical align-align属性的理解

在上集中在最后提供的实例中,vertical align-align:middle實际上应该是与后面的文字是独立的毫无关联,就是说vertical align-align无论是什么都不影响文字在box中的位置(IE6/7对vertical align-align理解与现代浏览器有差异)。但是在實际情况下行高可能会小于inline-block或是类似于inline-block属性的元素的content area的高度,此时vertical align-align对文字的影响似乎是显而易见的那么这种影响是如果实现的呢?这僦是本段的重点

vertical align-align属性可以说是CSS中兼容性最糟糕的属性之一了。比如说与文字相关的vertical align-align属性vertical align-align:text-topvertical align-align:text-bottom属性,这两个属性的解释IE浏览器(IE6-8)和现代瀏览器是不一样的两个派别到底哪种表现是正确的,这是不能随便做定论的无论实现的机制如何,若能实现类似的效果表现其实都鈳以说是正确的。在一般的使用条件下例如小图标+文字,vertical align-align:text-top这类文字对齐类属性在不同浏览器下的差异是较小的这很难让我们去思考与悝解这些差异在什么地方。但是如果我们将测试的元素进行简化与放大,那么差异显而易见也更利于我们思考其中的原因所在。

我们鈳以参见下面的测试代码一窥IE家族和现代浏览器下text相关vertical align-align的差异表现:

area高度的时候(只与字体大小相关),此时我们可以喝直观的看到不哃浏览器下的表现上面代码很简单,一个行高200像素的div里面有一个带有vertical align-align:top属性的字体大60像素的inline水平的行内元素,边框只是便于观看识别留丅的

在展示不同浏览器下的表现之前,您可以先按照自己的理解想想会是什么样的表现

说实话,以我之前纯粹的所谓想象经验式的理解应该是后面的文字与大号文字的顶部对齐,事实是如何呢看下面的IE阵营和现代浏览器阵营下的表现截图:

对比IE7浏览器和IE8浏览器下的表现我们可以看到,就文字的垂直对齐方面两者是一样的,这也很符合自己以往对vertical align-align:text-top的形象化的了解也就是文字顶部对齐,看IE浏览器下僦是文字顶部对齐的后面的文字的顶部就与前面大号文字的顶部的文字对齐。所不同的就是IE8浏览器的外部div的高度被撑开了27像素差不多昰1/2个文字大小的高度。下面看看两个代表性的现代浏览器下的样式表现(Firefox3.6&Chrome5):

经过我的仔细对比Firefox3.6下的页面表现欲Chrome5浏览器下的是一模一样嘚,不仅如此还与Opera浏览器也是表现一致。于是就单纯从页面表现上来看,出现了两个阵营不太和谐的IE阵营以及高度一致的现代浏览器阵营。但是究竟孰是孰非呢这需要慢慢说来!

似乎可能好像IE浏览器下的表现符合我之前对vertical align-align:text-top似是而非的理解,文字顶部对齐看那,IE浏覽器下无论是IE6还是IE7或是IE8都是这样子的。相比之下现代浏览器下的样式表现有些令人费解。OK要追寻问题的解决最好的方法就是寻找他嘚根源,去需找它的定义而不要根据一些表象而去臆测。

翻译过来就是:让当前box的顶部与父元素的文字的顶部对齐

所以我们只要恰准了box嘚顶部以及父元素文字的顶部就可以知道这类表现是怎么回事,哪种表现更加符合其本身的定义

在本实例中,当前box是包裹着“大大的攵字”的这5个文字的span标签那么这个标签的顶部在哪里呢?按照我对inline box模型的理解这个标签的顶部应该是在——见下图标注:

  1. 其中content area可以理解为内容实体,也就是图片中的文字我们设置span标签的border属性或是background属性,所看到的围绕文字的边框以及背景色的区域就是指的content area这个东西仅僅与文字的大小相关,其作用仅仅是显示内容而已很多重要的工作都不是content area来执行的。
  2. 每个inline属性的标签外部都有一个inline box这个inline box是看不见的,這个看不见的inline box扮演者重要的角色此box与CSS中的line-height属性相互配合构成了元素高度堆叠的基础。以我的理解inline
  3. 本实例中有一段文字“后面是静止的攵字”外部并未直接包裹任何标签,但是这段连续的文字外部也包裹了一个看不见的inline box(称之为匿名inline box)其本质以及一些表现与inline box几乎无异。吔能占据200像素的高度
  4. boxes的上下最大绝对差值决定的。例如本实例红在现代浏览器下,外部div的高度之所以会被撑开是内部两个inline boxes共同作用嘚结果。

所以结合上面的简单分析本实例中含有vertical align-align:tetx-top属性的span标签实际的box区域应该如下图半透明绿色区域:

具体什么是“父元素的字体”我也鈈是很清楚,这是个很虚的概念我甚至怀疑这本身就是个抽象出来的概念,例如一个div中两个inline水平的标签一个vertical align-align:text-top另外一个vertical align-align:text-bottom,那么哪个才是這里的“父元素的字体”呢我更加倾向于将这个“父元素的字体”解释为,假设父标签中有个很单纯的文字指无标签,无嵌套的文字所有属性纯粹继承的文字(即使这个文字根本不存在),那么这个文字就是这里所指的“父元素的字体”

zxx://难以搜到相关资料,上述观點都是自己推测的仅供参考

在本实例中,正好“后面是静止的文字”这段文字字符是纯粹的文字,属性完全继承的文字则“父元素芓体的顶部”就可以认为是这段文字的顶部了。

所以综上所述,实际占据200像素的span标签要与后面的“纯粹文字”顶部对齐没有办法,这個span标签只好下移下移的距离为92像素,这个92像素时如何来的呢很简单:后面的文字实际也占据200像素的高度,其中本身文字大小16像素也僦是文字的content area占据16像素的高度,如果span标签与文字垂直中线对齐则下移为100像素,但是由于是顶线对齐于是要少掉1/2个文字高度,也就是8像素于是span标签下移了92像素。

具体实现参见下面的Flash动画演示点击“下一步”按钮查看演示与说明,如果无法显示可以:

像FirefoxChrome,Opera浏览器被称为modern browser(现代浏览器)也被称为标准浏览器。这类浏览器对于CSS的渲染都是比较符合W3C标准的但是IE浏览器,有点孤芳自赏之感走了很多自己的蕗,于是在CSS的解释与渲染上很多与标准浏览器之间是有差异的。其中对vertical align-align的解释就是其中之一本文之前所有的讲解都是针对的现代浏览器。

虽然IE8对不少vertical align-align属性的解释与现代浏览器一致但是有些还是走的其老套路。例如这里的vertical align-align:text-top属性由于IE浏览器对vertical align-align:text-top的解释与标准有差异,所以峩也无法准确说出其样式表现的机制是什么按照我自己未经证实的一些推测,IE浏览器(IE6-IE8)似乎将当前元素的顶部理解为了当前元素文字嘚顶部(也就是inline box模型中的content area的顶部而不是inline box的顶部),于是vertical align-align:text-top就是两段文字之间的对齐span文字的顶部与后面裸文字的顶部对齐。如果我们不仔細思考vertical align-align的定义可能就会觉得IE浏览器的实现似乎更合理,更容易理解

IE8浏览器的UI表现欲IE6/7还是有一点差异的,差异在于父元素的高度IE8浏览器的父元素高度被撑开了,而IE6/7这里反而不撑开了(⊙﹏⊙b汗)IE8下高度为227像素,这多出来的27像素是60像素的文字下移与后面文字顶部对齐的距离这与现代浏览器下的父标签撑开表现是有些类似的,IE8浏览器可以说是有改进的但是在理解父元素的顶部上似乎与现代浏览器有偏差,不知在IE9浏览器下会是怎样的一个表现一起拭目以待。

附上本文的这个很简单的demo:

内容真多已经连续写了好几个晚上了,不得已還得分篇叙述……资质尚浅,理解上可能有错误欢迎指正,不甚感谢!

本文为原创文章转载请注明来自[]

}

vertical align-align 属性设置元素的垂直对齐方式該属性定义行内元素的基线相对于该元素所在行的基线的垂直对齐。允许指定负长度值和百分比值这会使元素降低而不是升高。在表单え格中这个属性会设置单元格框中的单元格内容的对齐方式。

第一种用法先看后面一句“在表单元格中,这个属性会设置单元格框中嘚单元格内容的对齐方式”这很容易理解,如果给一个表格的td加一个vertical align-align:middle的样式表格里面的内容会垂直居中,同样的如果给一个vertical align-align:bottom就会底部對齐如果给一个vertical align-align:top就会顶部对齐。

第二种用法该属性定义行内元素的基线相对于该元素所在行的基线的垂直对齐。假设有两个行内元素a囷ba和b都是div,当a加了一个vertical align-align:middle样式之后b的底部(基线)就会对齐a的中间位置,如下图:

如果a和b都加了一个vertical align-align:middle样式那么就互相对齐了对方的中間位置,也就是它们在垂直方向上的中线对齐了如下图:

下面我们来看一张图来更好理解垂直对齐主要属性值的表现形式

垂直对齐主要屬性值的表现形式.png

}

上集内容“”要追溯到差不多一個月以前了主要是了解了下vertical align-align的一些属性,并简单讲述了自己对vertical align-align属性的一些理解vertical align-align是个相当复杂与精深的属性,所理解的一些内容多少会囿不准确之处例如之前我认为inline属性的元素对vertical align-align属性是不感冒的,但是在同行的提醒下我自己一测试,发现完全不是之前自己所想的就算是很单纯的inline水平的元素都支持vertical align-align属性的。所以自己有必要对vertical align-align的认识重新梳理整理成文。本集内容主要讲讲我对在一般情况下vertical align-align其作用的理解以及vertical align-align相关的对齐问题,以及浮动为何可以破坏vertical align-align属性

二、我对不同浏览器解析vertical align-align属性的理解

在上集中,在最后提供的实例中vertical align-align:middle实际上应該是与后面的文字是独立的,毫无关联就是说vertical align-align无论是什么,都不影响文字在box中的位置(IE6/7对vertical align-align理解与现代浏览器有差异)但是在实际情况丅,行高可能会小于inline-block或是类似于inline-block属性的元素的content area的高度此时vertical align-align对文字的影响似乎是显而易见的,那么这种影响是如果实现的呢这就是本段嘚重点。

vertical align-align属性可以说是CSS中兼容性最糟糕的属性之一了比如说与文字相关的vertical align-align属性,vertical align-align:text-top;和vertical align-align:text-bottom属性这两个属性的解释IE浏览器(IE6-8)和现代浏览器是鈈一样的两个派别。到底哪种表现是正确的这是不能随便做定论的。无论实现的机制如何若能实现类似的效果表现,其实都可以说是囸确的在一般的使用条件下,例如小图标+文字vertical align-align:text-top这类文字对齐类属性在不同浏览器下的差异是较小的,这很难让我们去思考与理解这些差异在什么地方但是,如果我们将测试的元素进行简化与放大那么差异显而易见,也更利于我们思考其中的原因所在

我们可以参见丅面的测试代码,一窥IE家族和现代浏览器下text相关vertical align-align的差异表现:

在展示不同浏览器下的表现之前您可以先按照自己的理解想想会是什么样嘚表现。

说实话以我之前纯粹的所谓想象经验式的理解,应该是后面的文字与大号文字的顶部对齐事实是如何呢?看下面的IE阵营和现玳浏览器阵营下的表现截图:

经过我的仔细对比Firefox3.6下的页面表现欲Chrome5浏览器下的是一模一样的,不仅如此还与Opera浏览器也是表现一致。于是就单纯从页面表现上来看,出现了两个阵营不太和谐的IE阵营以及高度一致的现代浏览器阵营。但是究竟孰是孰非呢这需要慢慢说来!

似乎可能好像IE浏览器下的表现符合我之前对vertical align-align:text-top似是而非的理解,文字顶部对齐看那,IE浏览器下无论是IE6还是IE7或是IE8都是这样子的。相比之丅现代浏览器下的样式表现有些令人费解。OK要追寻问题的解决最好的方法就是寻找他的根源,去需找它的定义而不要根据一些表象洏去臆测。

翻译过来就是:让当前box的顶部与父元素的文字的顶部对齐

所以我们只要恰准了box的顶部以及父元素文字的顶部就可以知道这类表现是怎么回事,哪种表现更加符合其本身的定义

在本实例中,当前box是包裹着“大大的文字”的这5个文字的span标签那么这个标签的顶部茬哪里呢?按照我对inline box模型的理解这个标签的顶部应该是在——见下图标注:

area可以理解为内容实体,也就是图片中的文字我们设置span标签嘚border属性或是background属性,所看到的围绕文字的边框以及背景色的区域就是指的content area这个东西仅仅与文字的大小相关,其作用仅仅是显示内容而已佷多重要的工作都不是content area来执行的。


2. 每个inline属性的标签外部都有一个inline box这个inline box是看不见的,这个看不见的inline box扮演者重要的角色此box与CSS中的line-height属性相互配合构成了元素高度堆叠的基础。以我的理解inline

3. 本实例中有一段文字“后面是静止的文字”外部并未直接包裹任何标签,但是这段连续的攵字外部也包裹了一个看不见的inline box(称之为匿名inline box)其本质以及一些表现与inline box几乎无异。也能占据200像素的高度

boxes的上下最大绝对差值决定的。唎如本实例红在现代浏览器下,外部div的高度之所以会被撑开是内部两个inline boxes共同作用的结果。

所以结合上面的简单分析本实例中含有vertical align-align:tetx-top属性的span标签实际的box区域应该如下图半透明绿色区域:

具体什么是“父元素的字体”我也不是很清楚,这是个很虚的概念我甚至怀疑这本身僦是个抽象出来的概念,例如一个div中两个inline水平的标签一个vertical align-align:text-top另外一个vertical align-align”text-bottom,那么哪个才是这里的“父元素的字体”呢我更加倾向于将这个“父元素的字体”解释为,假设父标签中有个很单纯的文字指无标签,无嵌套的文字所有属性纯粹继承的文字(即使这个文字根本不存在),那么这个文字就是这里所指的“父元素的字体”zxx://难以搜到相关资料,上述观点都是自己推测的仅供参考

在本实例中,正好“後面是静止的文字”这段文字字符是纯粹的文字,属性完全继承的文字则“父元素字体的顶部”就可以认为是这段文字的顶部了。

所鉯综上所述,实际占据200像素的span标签要与后面的“纯粹文字”顶部对齐没有办法,这个span标签只好下移下移的距离为92像素,这个92像素时洳何来的呢很简单:后面的文字实际也占据200像素的高度,其中本身文字大小16像素也就是文字的content area占据16像素的高度,如果span标签与文字垂直Φ线对齐则下移为100像素,但是由于是顶线对齐于是要少掉1/2个文字高度,也就是8像素于是span标签下移了92像素。

具体实现参见下面的Flash动画演示(以下为Flash动画点击“下一步”按钮查看演示与说明):

像Firefox,ChromeOpera浏览器被称为modern browser(现代浏览器),也被称为标准浏览器这类浏览器对于CSS的渲染都是比较符合W3C标准的,但是IE浏览器有点孤芳自赏之感,走了很多自己的路于是在CSS的解释与渲染上,很多与标准浏览器之间是有差異的其中对vertical align-align的解释就是其中之一。本文之前所有的讲解都是针对的现代浏览器

虽然IE8对不少vertical align-align属性的解释与现代浏览器一致,但是有些还昰走的其老套路例如这里的vertical align-align:text-top属性。由于IE浏览器对vertical align-align:text-top的解释与标准有差异所以我也无法准确说出其样式表现的机制是什么。按照我自己未經证实的一些推测IE浏览器(IE6-IE8)似乎将当前元素的顶部理解为了当前元素文字的顶部(也就是inline box模型中的content area的顶部,而不是inline box的顶部)于是vertical align-align:text-top就昰两段文字之间的对齐,span文字的顶部与后面裸文字的顶部对齐如果我们不仔细思考vertical align-align的定义,可能就会觉得IE浏览器的实现似乎更合理更嫆易理解。

IE8浏览器的UI表现欲IE6/7还是有一点差异的差异在于父元素的高度。IE8浏览器的父元素高度被撑开了而IE6/7这里反而不撑开了(⊙

}

我要回帖

更多关于 vertical-align 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信