首先明确,vertical-align只对inline-block和inline元素有效。

在说vertical-align之前,需要先说明一下什么是line box。

浏览器中显示的一行会包含多个非block元素(有block元素时就换行了),通过一个box可以把这一行包含起来,这就是一个line box。

比如一个div,他会占据一行,包裹着内部所有非block元素的就是一个line box。

line box的高度,是本行中拥有最高行高的元素的高度。

此时,对拥有最高行高的非block元素设置vertical-align值,会直接影响本行的基线位置(可以说就是设置了本行的基线位置),本行中其他非block元素设置vertical-align时,都是相对于本行的基线位置进行显示。

举例:

<div style="height:100px;width:100px;border:1px solid black;">
<span style="display:inline-block;height:50px;vertical-align:top;border:1px solid black;">1</span>
<span style="vertical-align:top;">2</span>
<span style="vertical-align:middle;">3</span>
<span style="vertical-align:bottom;">4</span>
</div>
<div style="height:100px;width:100px;border:1px solid black;">
<span style="display:inline-block;height:50px;vertical-align:middle;border:1px solid black;">1</span>
<span style="vertical-align:top;">2</span>
<span style="vertical-align:middle;">3</span>
<span style="vertical-align:bottom;">4</span>
</div>
<div style="height:100px;width:100px;border:1px solid black;">
<span style="display:inline-block;height:50px;vertical-align:bottom;border:1px solid black;">1</span>
<span style="vertical-align:top;">2</span>
<span style="vertical-align:middle;">3</span>
<span style="vertical-align:bottom;">4</span>
</div>

会发现显示如下图所示。

1所在的span高度最高,所以其设置的vertical-align会直接影响本行的基线位置。调整1所在的span出现的先后顺序,结果都是一样的。

<div style="height:100px;width:100px;border:1px solid black;">
<span style="vertical-align:top;">2</span>
<span style="vertical-align:middle;">3</span>
<span style="vertical-align:bottom;">4</span>
<span style="display:inline-block;height:50px;vertical-align:top;border:1px solid black;">1</span>
</div>
<div style="height:100px;width:100px;border:1px solid black;"> <span style="vertical-align:top;">2</span>
<span style="vertical-align:middle;">3</span>
<span style="vertical-align:bottom;">4</span>
<span style="display:inline-block;height:50px;vertical-align:middle;border:1px solid black;">1</span>
</div>
<div style="height:100px;width:100px;border:1px solid black;">
<span style="vertical-align:top;">2</span>
<span style="vertical-align:middle;">3</span>
<span style="vertical-align:bottom;">4</span>
<span style="display:inline-block;height:50px;vertical-align:bottom;border:1px solid black;">1</span>
</div>

再举例:

在一个block元素中使用

#parent::before或者#parent::after

{

  content:'';

  display:inline-block;

  height:100%;

  vertical-align:middle;

}

可使#parent中的非block元素垂直居中显示,也是上述的原理。

ps:

如果想让1在span中垂直居中显示,保证span的display是inline-block,然后将span的line-height设置为50px,同span高度相等即可。不可设置为100%,最后的line-height只是文字大小的高度。

如何正确使用css中vertical-align的更多相关文章

  1. 前端知识点回顾之重点篇——CSS中vertical align属性

    来源:https://www.cnblogs.com/shuiyi/p/5597187.html 行框的概念 红色(line-height)为行框的顶部和底部,绿色(font-size)为字体的高度, ...

  2. CSS中强大的EM

    (转)作者:dearjohn ,发布于2012-7-31 http://www.uml.org.cn/html/201207311.asp 使用CSS也好久了,但一直都是在使用“px”来设置Web元素 ...

  3. CSS中设置DIV垂直居中的N种方法 兼容IE浏览器

    在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中 ...

  4. css中的em 简单教程 -- 转

    先附上原作的地址: https://www.w3cplus.com/css/px-to-em 习惯性的复制一遍~~~~ -------------------------------我是分界线---- ...

  5. CSS中的EM属性之弹性布局

    这篇教程将引导大家如何使用“em”来创建一个基本的弹性布局,从而学习其如何计算?又是如何使用“em”对层进行弹性扩展?又是如何扩展文本和图像等内容?下在我们就一起带着这些问题开始今天的“em”之行. ...

  6. 深入理解CSS中的margin

    1.css margin可以改变容器的尺寸 元素尺寸 可视尺寸--标准盒子模型中盒子的宽度是不包括margin值的,clientWidth 占据尺寸--包括margin的宽度 outWidth不在标准 ...

  7. CSS中设置div垂直居中

    在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中 ...

  8. 比较css中单位px,em和rem的区别

    国内的设计师大都喜欢用px,而国外网站大都喜欢用em和rem,那么三者有什么区别,又各自有什么优劣呢? px特点 1. IE无法调整那些使用px作为单位的字体大小: 2. 国外的大部分网站能够调整的原 ...

  9. CSS中强大的EM(转)

    转自:https://www.w3cplus.com/css/px-to-em CSS中强大的EM 作者:大漠 日期:2011-10-27 点击:97370 em 长度单位 编辑推荐:3月31日前,点 ...

随机推荐

  1. flume file channel 异常解决

    1. 错误提示 -- ::, (SinkRunner-PollingRunner-DefaultSinkProcessor) [ERROR - org.apache.flume.SinkRunner$ ...

  2. android访问网络--okhttp

    import com.squareup.okhttp.MediaType;import com.squareup.okhttp.OkHttpClient;import com.squareup.okh ...

  3. 疯狂java学习笔记之面向对象(八) - static和final

    一.static: 1.static是一个标识符: - 有static修饰的成员表明该成员是属于类的; - 没有static修饰的成员表明该成员是属于实例/对象的. 2.static修饰的成员(Fie ...

  4. BZOJ1114 : [POI2008]鲁滨逊逃生Rob

    设船最宽行列的交点为船的重心,那么只要预处理出重心在每个位置是否可行,以及在边界上走出边界所需的最小值之后,进行一遍BFS即可. 枚举每个点$(x,y)$,求出它上下最近的障碍物的距离.考虑重心在第$ ...

  5. 转:苹果应用商店DNS修改加快下载速度

    苹果应用商店DNS修改加快下载速度 具体方法:依次点击进入[设置]→[无线局域网]→[WiFi网络右侧小i图标]→更改DNS地址,可以按照自身需求选择以下某个DNS进行更换. OpenDNS:208. ...

  6. 移动端页面0.5px border的实现

    移动端上经常发现1px边框异常的粗,因此,决定用伪类配合css3来实现0.5px边框 代码如下: <!doctype html> <html lang="en"& ...

  7. ThinkPHP登录功能代码

    <?php /** * 后台登录控制器 */ Class LoginAction extends Action{ /** * 登录视图 */ Public function index(){ $ ...

  8. App如何适应 iPhone 5s/6/6 Plus 三种屏幕的尺寸?

    来自//www.cocoachina.com/ 初代 iPhone 2007 年,初代 iPhone 发布,屏幕的宽高是 320 x 480 像素.下文也是按照宽度,高度的顺序排列.这个分辨率一直到 ...

  9. javascript 时间操作

    javascript时间函数 javascript提供了Date对象来进行时间和日期的计算.Date对象有多种构造函数: 1.dateObj=new Date() //当前时间 2.dateObj=n ...

  10. Linux文件/目录权限设置命令:chmod

    文件/目录权限设置命令:chmod 这是Linux系统管理员最常用到的命令之一,它用于改变文件或目录的访问权限.该命令有两种用法: 用包含字母和操作符表达式的文字设定法 其语法格式为:chmod [w ...