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概念,负边距作为最少讨论到的定位方式要记上一功.这就 ...
随机推荐
- geotools导入shp文件到Oracle数据库时表名带下划线的问题解决
问题: 最近在做利用geotools导入shp文件到Oracle表中,发现一个问题Oracle表名带下划线时导入失败,问题代码行: dsOracle.getFeatureWriterAppend(or ...
- QT5-控件-QDial(表盘控件)
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QDial> class ...
- 利用谷歌 kaptcha 进行验证码生成
package main.com.smart.controller; import com.google.code.kaptcha.Producer; import main.com.smart.ut ...
- Oracle数据库之FORALL与BULK COLLECT语句
Oracle数据库之FORALL与BULK COLLECT语句 我们再来看一下PL/SQL块的执行过程:当PL/SQL运行时引擎处理一块代码时,它使用PL/SQL引擎来执行过程化的代码,而将SQL语句 ...
- MOOTOOLS和JQUERY如何同时存在,解决冲突
mootools-jquery 今天在做EcStore前台的做效果时,由于Jquery的插件比较多,于是就使用了Jquery的插件,但是发现会引起Mootools的冲突. 于是猛找资料,终于找到了,现 ...
- thinkphp基础入门(1)
ThinkPHP目录如下,Application顾名思义就是应用的意思(我们的代码放在这里),Public就是公共文件的意思(主要放JS CSS 等前端资源文件),ThinkPHP文件是框架的核心包( ...
- DDMS中File Explorer无法查看data/data文件解决办法
http://www.cnblogs.com/smyhvae/p/3881477.html 找了个连接 问题描述:最近在学习Android SQLite中的SQLiteOpenHelper,使用SQ ...
- Android事件监听器Event Listener
在 Android 中,我们可以通过事件处理使UI与用户互动(UI Events). UI的用户事件处理,即View处理用户的操作,在应用程序中几乎不可避免.View是重要的类,它是与用户互动的前线: ...
- 转:CFile::Seek
CFile::Seek virtual LONG Seek(LONG lOff,UINT nFrom); throw(CFileException); 返回值:如果要求的位置合法,则Seek返回从文 ...
- Angularjs Scope 原型链
我们知道scope是可以继承的.scope的继承和js原型链是同一个概念. <div ng-controller="parentCtrl"> {{name}} < ...