css属性之vertical-align详解
inline-block
该值会让元素生成一个内联级块容器(inline-level block container)。一个inline-block的内部会被格式化成一个块盒,而该元素本身会被格式化成一个原子内联级盒
原子内联级盒
不属于内联盒的内联块级盒(例如,可替换内联级元素,inline-block元素和inline-table元素)被称为原子内联级盒(atomic inline-level boxes),因为它们作为单一的不透明盒(opaque box)参与其内联格式化上下文。
line-height
- 对于一个内容由内联级元素组成的块容器元素,'line-height'指定了元素内行盒的最小高度。这个最小高度包含基线上方的最小高度和下方的最小深度,就像每个行盒以一个具有该元素的字体和行高属性的0宽内联盒开始。
- 对于不可替换的内联元素,'line-height'指定了用来计算行盒高度的高度。
vertical-align
该属性会影响由一个内联级元素生成的盒的行盒内部的竖直定位。
Percentage: 决定于元素自身的line-height。
行盒:line-box
定义:在一个内联格式化上下文中,盒是一个接一个水平放置的,从包含块的顶部开始。这些盒之间的水平margin,border和padding都有效。盒可能以不同的方式竖直对齐:以它们的底部或者顶部对齐,或者以它们里面的文本的基线对齐。包含来自同一行的盒的矩形区域叫做行盒。
line-box的宽: 由包含块和浮动状况来决定。(包含块指:一般把生成的盒作为后代盒的包含块,我们说一个盒为其后代“建立”了包含块。“一个盒的包含块”表示“盒所在的包含块”,而不是它生成的包含块)
line-box的高:
- 计算行盒中每个内联级盒的高度时,对于可替换元素,inline-block 元素和inline-table元素,这个值就是其margin box的高度;对于内联盒,这个值是其line-height
- 内联级盒是根据其vertical-align属性竖直对齐的。如果它们是'top'或者'bottom'对齐,它们必须对齐得让行盒高度最小化。如果这样的盒足够高,存在多个解,而CSS 2.1没有定义行盒基线的位置
- 行盒高度是最高的盒的top与最低的盒的bottom之间的距离
vertical-aligh可选值分析
baseline:把盒的基线与父级盒的基线对齐。如果该盒没有基线,就把bottom margin边和父级的基线对齐。(为默认值)这里我们需要知道什么是baseline,baseline在不同的盒子里有什么样的表现。

基线就是小写x的底部挨着的那条线。基线与文字密切相关。
上代码
<p>
xX
<span class="s sp">xX</span>
<span class="s s1">baseline s1</span>
<span class="s sm">middle x</span>
<span class="s s2">text-top s2</span>
<span class="s sp">xX</span>
<span class="s s3">text-bottom s2</span>
<span class="s sp">xX</span>
<span class="b">xX</span>
<span class="s sp2"></span>
<span class="s sp2">xX</span>
<span class="s block">xX</span>
<span class="s block"></span>
</p>
删除了一些不是重点的css
p{font-size:30px;}
.s{ font-size:40px;}
.sm{vertical-align: middle;}
.s1{vertical-align:baseline;}
.s2{vertical-align:text-top;}
.s3{vertical-align:text-bottom}
.sp{vertical-align:baseline;font-size: 30px;}
.b{font-size: 60px;}
.block{display: inline-block;vertical-align: baseline;margin-bottom: 10px;}
.sp2{padding: 10px;vertical-align: baseline;}

我们知道字母的基线是x底部的那一条线,那么在一个盒子里,这个盒子的基线在哪里?(css2.1规范没有明确规定行盒基线的位置,他引入了一个假想盒strut的概念。具体的可以去规范查看。)
看图,1号为p标签内的文本,无其他标签包裹。2号为span标签内vertical-align值为baseline的文本。而baseline的定义为将该盒的基线与父盒的基线对齐。可以看到我画出的那一条红线(x底部),由此得出这个由p标签创建的块盒的基线就是标签内文字x底部的线。2号与3号仅字体大小不同。
middle:把该盒的竖直中点和父级盒的基线加上父级的半x-height对齐
4号为vertical-align值为middle的span标签。他的竖直中点应于1号的小写x的中心点在同一水平线上。同样我也画了一条红线。
text-top:把该盒的top和父级的内容区(content area)的top对齐
5号为vertical-align值为text-top的span标签。6号与2号相同,放在旁边用来做对比,我们可以看出,5号和6号的top其实是对齐的。
为什么不用5号与1号对比呢?首先,无法给1号这个匿名盒子局部上色,没法让大家看到他的top在哪里。其次6号与1号baseline对齐,且字号相同,可以用它来替代1号与其他作对比。
为什么5号的top不与他的父元素p的top对齐呢?我认为,规范所讲的父级的内容区,应当是指如1号一样的匿名盒区域。
在张鑫旭的博文里指出,该盒的top是由line-height决定,line-height越大,此盒真正的高度约高,虽然不显示出来。(为inline属性的盒)
若盒为block,他的top就是显示出来的顶部。
所以在使用这个值的时候,要明白什么才是真正对齐的目标。
text-bottom:把该盒的bottom和父级的内容区的bottom对齐。
看7号与8号的比较。与text-top基本相同。
9号,10号,12号,13号的表现
9号是为了展示行盒的高度是由一行内的所有盒子的最高值与最低值决定的,无其他意思。
10号与11号对比,展示了,inline属性的盒子若为空,不影响他的vertical-align属性,和有内容时表现行为相同。
12号展示了,当inline-block属性的盒子不为空时,他的vertical-align属性不受影响,与inline盒子表现相同。
13号展示了,当inline-block属性的盒子为空时,vertical-align的值baseline的表现为,该盒子的marginbox与父元素的baseline对齐。
'inline-block'(盒)的基线是它的最后一个常规流中的行盒的基线,除非它没有流内行盒或者它的'overflow'属性的计算值不为'visible',此时基线是bottom margin边.
一个盒子只有一条基线吗?

如上所示,我只改变了p标签的宽度,其他属性均未改变。由此截图可得出,一个盒子有多少条基线,应当取决于他有多少个行盒。我们之前所讲的基线应当指的是行盒的基线。
所以由此得出,不论是block盒,inline盒,还是inline-block盒,基线都是他们盒内的行盒的基线。这三者并无区别。
css属性之vertical-align详解的更多相关文章
- position属性absolute与relative 详解
最近一直在研究javascript脚本,熟悉DOM中CSS样式的各种定位属性,以前对这个属性不太了解,从网上找到两篇文章感觉讲得很透彻,收藏下来,唯恐忘记.一.解读absolute与relative ...
- CSS系列 (05):浮动详解
浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止.由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样. -- W3C 文字环绕 float可以 ...
- springboot快速入门(二)——项目属性配置(日志详解)
一.概述 application.properties就是springboot的属性配置文件 在使用spring boot过程中,可以发现项目中只需要极少的配置就能完成相应的功能,这归功于spring ...
- ie浏览器css中的行为expression详解
CSS中的行为——expression (ie only) 最近对CSS中的行为比较感兴趣,虽然是不符合标准的也只有ie才能识别,但是他确实给css的功能扩展了不少.下面是摘自互联网上的文字和例子,因 ...
- CSS样式----浮动(图文详解)
标准文档流 宏观地讲,我们的web页面和photoshop等设计软件有本质的区别:web页面的制作,是个"流",必须从上而下,像"织毛衣".而设计软件,想往哪里 ...
- 【css】CSS3 Media Queries 详解【转】
说起CSS3的新特性,就不得不提到 Media Queries .最近 Max Design 更新的一个泛读列表里,赫然就有关于 Media Queries 的文章.同时位列其中的也有前天我刚刚翻译的 ...
- CSS3动画效果——js调用css动画属性并回调处理详解
http://www.jb51.net/css/258407.html 这篇文章主要详细介绍了CSS3动画效果回调处理,需要的朋友可以参考下 我们在做js动画的时候,很多时候都需要做回调处理,如在一个 ...
- PHP.8-HTML+CSS(二)-HTML详解
HTML+CSS HTML参考手册[http://www.w3school.com.cn/tags/index.asp] 0.HTML主体标记 代码分为三部分编写 <html> 是网页文件 ...
- CSS图片翻转动画技术详解
因为不断有人问我,现在我补充一下:IE是支持这种技术的!尽管会很麻烦.需要做的是旋转front和back元素,而不是旋转整个容器元素.如果你使用的是最新版的IE,可以忽略这一节.IE10+是支持的,I ...
- css负边距之详解
自从1998年CSS2作为推荐以来,表格的使用渐渐退去,成为历史.正因为此,从那以后CSS布局成为了优雅代码的代名词. 对于所有设计师使用过的CSS概念,负边距作为最少讨论到的定位方式要记上一功.这就 ...
随机推荐
- 重复造轮子感悟 – XLinq性能提升心得
曾经的两座大山 1.EF 刚接触linq那段时间,感觉这家伙好神奇,语法好优美,好厉害.后来经历了EF一些不如意的地方,就想去弥补,既然想弥补,就必须去了解原理.最开始甚至很长一段时间都搞不懂IQue ...
- 异步socket大并发实现
using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.So ...
- [BZOJ]3737 [Pa2013]Euler
从这个FB开始写博客啦. 也不知道会坚持多久…… = =似乎要加一句转载请注明出处 http://www.cnblogs.com/DancingOnTheTree/p/4026076.html htt ...
- Eclipse关闭XML文件验证的方法,解决xml警告
XML的编写是否符合规范,可以通过XML Schema或DTD进行验证,但有时候电脑本来就很卡,而且XML的某些错误并未导致程序无法运行的情况下,暂时关闭XML的验证也算不错的选择. 如web.xml ...
- centos6.4虚拟机vmware-tools安装及启动到进度条卡死
vmware-tools安装: linux-VMware tools安装步骤: (1)在CD-ROM虚拟光驱中选择使用ISO镜像,找到VMWARE TOOLS 安装文件,如D:\VMware\VMwa ...
- wifi钓鱼教程
关于 <原创>想钓鱼必须还要有好竿wifi学习教程+软件下载地址修正 因为最近网盘维护 导致资源无法下载 今天早上开通下载服务了大家可以放心下载. 蹭网要低调不要炫耀 软件介绍:Wires ...
- [LeetCode 118] - 杨辉三角形(Pascal's Triangle)
问题 给出变量numRows,生成杨辉三角形的前numRows行. 例如,给出numRows=5,返回: [ [1], [1,1], [1,2,1], [1,3,3,1], [1, ...
- OpenRTSP的使用
由于需要研究OpenRTSP的源码,所以先学习下使用. -d [time]--------这个是录制时间,就是单位秒,超时后,程序自动结束. -i -----------以.avi文件格式生成. ...
- Oracle 客户端 NLS_LANG 的设置(转)
1. NLS_LANG 参数组成NLS_LANG参数由以下部分组成:NLS_LANG=<Language>_<Territory>.<Clients Characters ...
- TCP 协议
== 已经了解了以太网和IP了,下面我们进入传输层,开始讲解TCP协议. == 仍然先把TCP报文段的格式放在这里,然后我们看图说话: TCP报文段也分为首部和数据两部分,首部默认情况下一般是20字节 ...