css中的基础知识,上次在刷 segmentfault 遇见了一个相关的问题有再次看过 vertical-align 的描述。今天自己也遇见一个类似的问题,再次深入学习一下。

vertical-align 用来指定行内元素(inline)或表格单元格(table-cell)元素的垂直对齐方式。

忆童年学习(涉及后文理解)

无论当初起跑的时候你学的是英语还是拼音,最后你还能记得英语的26个字母用拼音的方式怎么读吗?所以这个时候我就可以装一装了,我不是学的拼音。

由于后文学习的知识会涉及到小学知识,作为小学学霸的我开始发车了,没上车的赶快上车。

大致画了一个 四线三格 然后写了26个字母。总结了一些写法上面的规则如下:

  • 大写字母始终写在上两格
  • 小写字母 bdfhiklt 写在上两格
  • 小写字母 gpqy 写在下两格
  • 小写字母 j 写在上中下三格
  • 小写字母除上述三种小写字母的情况以外都是写在中间格

语法学习

vertical-align 的默认值是 baseline,可以选择的值有baseline | sub | super | text-top | text-bottom | middle | top | bottom | 百分数 | 固定值。

行内元素(inline)

vertical-align: baseline; 默认值情况下,元素基线与父元素的元素基线对齐。

父元素内的字母基线刚刚按照我画的第三条线为基线,图片的基线与父元素的基础对齐,图片高度(15px)不足父元素基线到顶部的高度。

如果我试着不限制图片的高度不限制(50px),接下来会发现父元素被撑高了。但是顶部与父元素顶部平齐,底部与父元素内的文本的第三条基线对齐(画的基线只是作为参考)。



如果去掉小写字母 gpqy 会发现图片与div的底部还是会存在一个距离



通过上两图的对比,能发现我之前遇见的问题,就是img放置在div中,div的高度会比图片的高度高3px,3.5px,4px等情况。因为第三格的距离还是存在,也就能理解之前的有一种解决方案,如果div中不存在文本,直接设置 font-size: 0; 。但浏览器有最小字体限制,也就不是那么好的解决方案了。

vertical-align: sub; 元素的基线与父元素的下标基线对齐。(底部高度合适,内容没有被挤出四线格)

vertical-align: super; 元素的基线与父元素的上标基线对齐。(顶部高度不够,内容被挤出了四线格)

vertical-align: text-top; 元素顶端与父元素字体的顶端对齐。

vertical-align: text-bottom; 元素底端与父元素字体的底端对齐(为了与上面的super区分开来,给父元素加了一个高于本身高度的 line-height)。

vertical-align: middle; 元素中线与父元素的小写x中线对齐。

vertical-align: top; 元素及其后代的顶端与整行的顶端对齐。

vertical-align: bottom; 元素及其后代的底端与整行的底端对齐。

这里以父元素中的 y 作为参考直接的可以看出给 img 添加 top/bottom/middle 的情况。如果父元素设置了行高会出现什么情况呢?

为什么设置 vertical-align: middle; 能解决高度问题?

举例:

<div>
<img src="" alt="">
</div>

默认的vertical-align: baseline; 因此会在img与div底部之间有第三格中超出的内容的距离,这个具体的距离和字体的大小也有关系。如果设置图片为vertical-align: middle; 后,图片在父元素内是居中的,此时图片的高度如果大于内容的高度的时候,父元素的高度就会刚好等于图片的高度。

为什么父元素设置 line-height 后 vertical-align: bottom; 会出现如下情况?

这种情况应该是最糟糕的,设置line-height后父元素的基线不那么固定了,但是还是以父元素内文本字体的基线相关,并且随着字体的大小的变化而变化,当字体大小为0的时候才正好与父元素的底部对齐。

表格元素(table/table-cell)

表格元素中我们用到垂直居中的地方应该是比较多的,对于table元素或者是table样式均可以正常向上面的行内元素一样设置对齐方式。

vertical-align: top; 单元格的内边距的上边缘与行的顶端对齐。

vertical-align: middle; 单元格垂直居中。

vertical-align: bottom; 单元格的内边距的下边缘与行的底端对齐。

总结

知识点小,但是真正理解或者说遇见类似对齐的问题问题依然是问题,仔细理解了,下次应该能很好的面对问题了吧。

参考资料

https://developer.mozilla.org/zh-CN/docs/Web/CSS/vertical-align

再次认识 vertical-align的更多相关文章

  1. What is Vertical Align?

    https://css-tricks.com/what-is-vertical-align/ ************************************************* CSS ...

  2. 浏览器兼容CSS代码:按钮文字垂直居中(input button text vertical align)

    经过测试的浏览器:IE6, IE7, IE8, IE9, Firefox, Chrome, Safiri, Maxthon 按钮的HTML代码: <input id="btn_comm ...

  3. 关于Vertical Align的理解

    1:vertical-align 翻译就是垂直-对齐... 2:关于line-height的点 2.1:如果一个标签没有定义height属性,那么其最终表现的高度一定是由line-height起作用. ...

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

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

  5. highcharts

    preparation Highcharts Highcharts是一个制作图表的纯Javascript类库,主要特性如下: 兼容性:兼容当今所有的浏览器,包括iPhone.IE和火狐等等: 对个人用 ...

  6. 基于Web实现网络拓扑图

    想想好像好久没用写博客了! 由于最近想跳槽了(ps:尽管公司挽留,提出一些异与往常的挽留“制度”,But确实已经死心了) ,发现前一段时间一些做Hadoop,和Spark同事时常来请教网络拓扑图的有关 ...

  7. 框架----Django框架知识点整理

    一.cbv cbv(class-base-view) 基于类的视图 fbv(func-base-view) 基于函数的视图 a.基本演示 urlpatterns = [ url(r'^login.ht ...

  8. CSS居中对齐终极指南

    本文首发于我的公众号:前端新世界 欢迎关注 本文将讨论可用于居中对齐元素的6种CSS技术(按照最佳实践排序),以及每一种技术最适合应用的场景.这里,居中对齐指的是将元素放置在其父元素的水平和垂直中心. ...

  9. CSS3与页面布局学习总结(二)——Box Model、边距折叠、内联与块标签、CSSReset

    一.盒子模型(Box Model) 盒子模型也有人称为框模型,HTML中的多数元素都会在浏览器中生成一个矩形的区域,每个区域包含四个组成部分,从外向内依次是:外边距(Margin).边框(Border ...

  10. FusionCharts和highcharts 饼图区别!

    FusionCharts ---------------脚本--------------- <script src="../../../fashioncharts/js/FusionC ...

随机推荐

  1. Android Paint和Color类绘画实例

    要绘图,首先得调整画笔,待画笔调整好之后,再将图像绘制到画布上,这样才可以显示在手机屏幕上.Android 中的画笔是 Paint类,Paint 中包含了很多方法对其属性进行设置,主要方法如下: se ...

  2. Mac brew命令

    一.简介 Brew又叫Homebrew,是MAC中的一款软件包管理工具,通过brew可以很方便的在MAC中安装软件或者是卸载软件. 二.安装 ruby -e "$(curl -fsSL ht ...

  3. FineReport层式报表解决大数据集展示问题攻略

    本文以填报报表为例,通过分页的方式,来解决大数据集展示的问题. 实现的思想就是通过在SQL里筛选部分数据库数据,以达到浏览器可以合理的展示报表页面.(数据分段,语句我这采用的是MYSQL,如果要用其他 ...

  4. 分布式系统理论之Quorum机制

    一,Quorum机制介绍 在分布式系统中有个CAP理论,对于P(分区容忍性)而言,是实际存在 从而无法避免的.因为,分布系统中的处理不是在本机,而是网络中的许多机器相互通信,故网络分区.网络通信故障问 ...

  5. 涨知识Style

    1.用Access作为后台数据库支撑,书写一个C#写入记录的案例 示例1: using System.Data.OleDb; string sql = "insert into 表 (列1, ...

  6. CF149D. Coloring Brackets[区间DP !]

    题意:给括号匹配涂色,红色蓝色或不涂,要求见原题,求方案数 区间DP 用栈先处理匹配 f[i][j][0/1/2][0/1/2]表示i到ji涂色和j涂色的方案数 l和r匹配的话,转移到(l+1,r-1 ...

  7. poj2486Apple Tree[树形背包!!!]

    Apple Tree Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9989   Accepted: 3324 Descri ...

  8. NOIP2015跳石头[二分答案]

    题目背景 一年一度的“跳石头”比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选 择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N 块岩石( ...

  9. Java的注解机制——Spring自动装配的实现原理

    http://www.cnblogs.com/Johness/archive/2013/04/17/3026689.html

  10. 能跨域和跨浏览器的flashcookie for jquery插件

    对于写网站时需要跨域和跨浏览器的可以看看这个. 引入jquery  和 swfstore.min.js 就可以了,蛮简单好用的,会jquery基础就可以咯. mySwfStore.set('myKey ...