inline-block

该值会让元素生成一个内联级块容器(inline-level block container)。一个inline-block的内部会被格式化成一个块盒,而该元素本身会被格式化成一个原子内联级盒

原子内联级盒

不属于内联盒的内联块级盒(例如,可替换内联级元素,inline-block元素和inline-table元素)被称为原子内联级盒(atomic inline-level boxes),因为它们作为单一的不透明盒(opaque box)参与其内联格式化上下文。

line-height

  1. 对于一个内容由内联级元素组成的块容器元素,'line-height'指定了元素内行盒的最小高度。这个最小高度包含基线上方的最小高度和下方的最小深度,就像每个行盒以一个具有该元素的字体和行高属性的0宽内联盒开始。
  1. 对于不可替换的内联元素,'line-height'指定了用来计算行盒高度的高度。

vertical-align

该属性会影响由一个内联级元素生成的盒的行盒内部的竖直定位。

Percentage: 决定于元素自身的line-height。

行盒:line-box

定义:在一个内联格式化上下文中,盒是一个接一个水平放置的,从包含块的顶部开始。这些盒之间的水平margin,border和padding都有效。盒可能以不同的方式竖直对齐:以它们的底部或者顶部对齐,或者以它们里面的文本的基线对齐。包含来自同一行的盒的矩形区域叫做行盒。

line-box的宽: 由包含块和浮动状况来决定。(包含块指:一般把生成的盒作为后代盒的包含块,我们说一个盒为其后代“建立”了包含块。“一个盒的包含块”表示“盒所在的包含块”,而不是它生成的包含块

line-box的高:

  1. 计算行盒中每个内联级盒的高度时,对于可替换元素,inline-block 元素和inline-table元素,这个值就是其margin box的高度;对于内联盒,这个值是其line-height
  2. 内联级盒是根据其vertical-align属性竖直对齐的。如果它们是'top'或者'bottom'对齐,它们必须对齐得让行盒高度最小化。如果这样的盒足够高,存在多个解,而CSS 2.1没有定义行盒基线的位置
  3. 行盒高度是最高的盒的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详解的更多相关文章

  1. position属性absolute与relative 详解

    最近一直在研究javascript脚本,熟悉DOM中CSS样式的各种定位属性,以前对这个属性不太了解,从网上找到两篇文章感觉讲得很透彻,收藏下来,唯恐忘记.一.解读absolute与relative ...

  2. CSS系列 (05):浮动详解

    浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止.由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样. -- W3C 文字环绕 float可以 ...

  3. springboot快速入门(二)——项目属性配置(日志详解)

    一.概述 application.properties就是springboot的属性配置文件 在使用spring boot过程中,可以发现项目中只需要极少的配置就能完成相应的功能,这归功于spring ...

  4. ie浏览器css中的行为expression详解

    CSS中的行为——expression (ie only) 最近对CSS中的行为比较感兴趣,虽然是不符合标准的也只有ie才能识别,但是他确实给css的功能扩展了不少.下面是摘自互联网上的文字和例子,因 ...

  5. CSS样式----浮动(图文详解)

    标准文档流 宏观地讲,我们的web页面和photoshop等设计软件有本质的区别:web页面的制作,是个"流",必须从上而下,像"织毛衣".而设计软件,想往哪里 ...

  6. 【css】CSS3 Media Queries 详解【转】

    说起CSS3的新特性,就不得不提到 Media Queries .最近 Max Design 更新的一个泛读列表里,赫然就有关于 Media Queries 的文章.同时位列其中的也有前天我刚刚翻译的 ...

  7. CSS3动画效果——js调用css动画属性并回调处理详解

    http://www.jb51.net/css/258407.html 这篇文章主要详细介绍了CSS3动画效果回调处理,需要的朋友可以参考下 我们在做js动画的时候,很多时候都需要做回调处理,如在一个 ...

  8. PHP.8-HTML+CSS(二)-HTML详解

    HTML+CSS HTML参考手册[http://www.w3school.com.cn/tags/index.asp] 0.HTML主体标记 代码分为三部分编写 <html> 是网页文件 ...

  9. CSS图片翻转动画技术详解

    因为不断有人问我,现在我补充一下:IE是支持这种技术的!尽管会很麻烦.需要做的是旋转front和back元素,而不是旋转整个容器元素.如果你使用的是最新版的IE,可以忽略这一节.IE10+是支持的,I ...

  10. css负边距之详解

    自从1998年CSS2作为推荐以来,表格的使用渐渐退去,成为历史.正因为此,从那以后CSS布局成为了优雅代码的代名词. 对于所有设计师使用过的CSS概念,负边距作为最少讨论到的定位方式要记上一功.这就 ...

随机推荐

  1. 非UI线程和UI线程通信

    public void onClick(View v) { new Thread(new Runnable() { public void run() { final Bitmap bitmap = ...

  2. javascript 比较对象(hashcode)

    javascript 对象的比较是比较坑爹的一件事,因为javascript对象比较的是引用地址!当两个内容完全一样的对象比较: var object1={ name:"1234 " ...

  3. jquery实现定时调度(倒计时)

    工作需要实现了倒计时的脚本,代码如下: /** * 倒计时 * @param infoId :信息显示的id 最好是用span包裹 * @param callback:倒计时结算后的回调 */ fun ...

  4. Spring4.0学习笔记(2) —— 自动装配

    Spring IOC 容器可以自动装配Bean,需要做的是在<bean>的autowire属性里指定自动装配的模式 1)byType 根据类型自动装配,若IOC 容器中有多个目标Bean类 ...

  5. Sql Server索引(转载)

    官方说法: 聚集索引 一种索引,该索引中键值的逻辑顺序决定了表中相应行的物理顺序. 聚集索引确定表中数据的物理顺序.聚集索引类似于电话簿,后者按姓氏排列数据.由于聚集索引规定数据在表中的物理存储顺序, ...

  6. PHP扩展开发(5) - PHP常量的定义和读取

    1. 定义   //定义PHP常量REGISTER_STRINGL_CONSTANT("SIMPLE_VERSION", PHP_SIMPLE_VERSION, sizeof(PH ...

  7. 获取元素位置信息:getBoundingClientRect

    一个神奇的方法. 一.历史 偷个懒,上个传送门:http://www.cnblogs.com/2050/archive/2012/02/01/2335211.html 二.介绍 DOM元素方法,返回一 ...

  8. Android Init进程命令的执行和服务的启动

    这里开始分析init进程中配置文件的解析,在配置文件中的命令的执行和服务的启动. 首先init是一个可执行文件,它的对应的Makfile是init/Android.mk. Android.mk定义了i ...

  9. Vector3.Dot 与Vector3.Cross

    Vector3.Dot(点积) : 点积的计算方式为:  a·b=|a|·|b|cos<a,b>; 其中<a,b>和<b,a> 夹角不分顺序; 物理学中点积用来计算 ...

  10. ELK( ElasticSearch+ Logstash+ Kibana)分布式日志系统部署文档

    开始在公司实施的小应用,慢慢完善之~~~~~~~~文档制作 了好作运维同事之间的前期普及.. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 软件下载地址: https://www.e ...