line-height与vertical-align:简单的属性不简单
学习过CSS肯定对line-height与vertical-align两个属性有印象;line-height用来设置行高,vertical-align用来设置文本垂直方向的对齐方式,两种看似十分简单,但是其应用及原理却不简单
line-height
line-height与内容
先思考个问题:默认的div元素高度为0,为什么添加了文字之后,高度就有了?这个高度是由哪个属性决定的?如果是span元素,高度又是又谁决定的呢?
如上图所示,结果应该很明确了:影响div元素高度的是line-height属性,影响span元素高度的是font-size属性,更准确的说法应该是line-height决定块状元素的内容区域高度,而font-size影响行内元素的文本区域高度,这里请记住内容区域与文本区域不是同一个概念。
line-height与x
我们这里的x就是26个英文字母中的x。由于自身形态的一些特殊性,这个小小的不起眼的字母在CSS中是一个很重要的概念。
如基线base-line的定义就是:
字母x 的下边缘(线)就是我们的基线。
vertical-align中的middle指的就是:
关于基线向上1/2的x高度对齐
而x的高度甚至作为一个尺寸单位,这个单位就是ex,就是指小写字母x的高度。
veritcal-align
张鑫旭在《CSS世界》中一书中,将veritcal-align属性值分为4类:
- 线类,如baseline(默认值)、top、middle、bottom;
- 文本类,如text-top、text-bottom;
- 上标下标类,如sub、super;
- 数值百分比类,如20px、2em、20%等。
这种划分方法是根据属性值的类型来划分的,实际使用中感觉这样的划分方法不够合理,如线类中的baseline、middle是受到元素font-size影响,而top、bottom却是受到元素line-height影响;也就是说baseline、middle是子元素文本区域与父元素文本区域对齐,top、bottom是子元素内容区域与父元素内容区域对齐,不同的veritcal-align属性值,影响其对齐效果的属性都是不同的。
上图显示的是改变子元素line-height(内容区域)对对齐的影响,此外根据veritcal-align属性值不同,子元素的内容区域、文本区域,父元素的内容区域、文本区域都会对对齐造成影响,设置百分比或相对尺寸更是会与font-size与line-height两个属性产生直接联系,可见简单的vertical-align想要合理使用并不是那么简单的。
内容区域与文本区域
理解和正确使用line-height与vertical-align,首先要明确内容区域与文本区域的概念:
在一般情况下,可以认为font-size影响span,span内容大小即为文本区域,line-height影响div,div的内容大小即为内容区域。这里要注意影响并不是简单的font-size或line-height数值就决定区域的高度。
如上图div元素的实际高度是43而不是40,这是因为div中的文本存在一个为ling-height值40px的内容区域,而span也存在一个ling-height值40px的内容区域,这两个内容区域高度相等,但是vertical-align默认值为baseline,所以两者之间是关于文本区域对齐的,文本区域两者大小是不同的,即baselin所在位置不同,连接两个高度相同矩形,接口不在同一个位置,自然两者就无法对齐,父元素要包含这两个元素,高度也就不可能只有40px。div包含图片,底部出现空白也是因为这个原因了,图片的底部就是baseline,div中存在幽灵节点,两者基于baseline对齐造成了底部空白。
CSS中许多奇怪的现象都可以从概念的角度合理的去解释,在初步学习CSS的使用之后,进一步理解学习CSS的概念是非常有必要的。
line-height与vertical-align:简单的属性不简单的更多相关文章
- What is Vertical Align?
https://css-tricks.com/what-is-vertical-align/ ************************************************* CSS ...
- JSP简单标签带属性开发
1.开发带属性的标签,标签处理器类中属性要有相应setter方法,符合javaBean规范 2.tld文件中进行相应属性标签配置 属性配置相关说明如下图 3.简单标签带属性的例子 1).通过设置标签属 ...
- @Basic表示一个简单的属性 懒加载,急加载
5.@Basic(fetch=FetchType,optional=true) 可选 @Basic表示一个简单的属性到数据库表的字段的映射,对于没有任何标注的getXxxx()方法,默认 即为 @Ba ...
- Java设计模式(一) 简单工厂模式不简单
摘要:本文介绍了简单工厂模式的概念,优缺点,实现方式,以及结合Annotation和反射的改良方案(让简单工厂模式不简单).同时介绍了简单工厂模式(未)遵循的OOP原则.最后给出了简单工厂模式在JDB ...
- 深入了解css的行高Line Height属性
什么是行间距? 古时候我们使用印刷机来出来文字.印刷出来的每个字,都位于独立的一个块中. 行间距,即传说中控制两行文字垂直距离的东东.在CSS中,line-height被用来控制行与行之间垂直距离. ...
- 前端知识点回顾之重点篇——CSS中vertical align属性
来源:https://www.cnblogs.com/shuiyi/p/5597187.html 行框的概念 红色(line-height)为行框的顶部和底部,绿色(font-size)为字体的高度, ...
- iOS:UIView、UIControl、UIButton、UILabel简单的属性和方法常识
常见属性和方法 一 .UIVIew 常见属性 1.frame 位置和尺寸(以父控件的左上角为原点(0,0)) 2.center 中点 (以父控件的左上角为原点(0,0)) 3.bounds 位置和尺寸 ...
- XAF应用开发教程(二)业务对象模型之简单类型属性
使用过ORM的朋友对这一部分理解起来会非常快,如果没有请自行补习吧:D. 不说废话,首先,我们来开发一个简单的CRM系统,CRM系统第一个信息当然是客户信息.我们只做个简单 的客户信息来了解一下XAF ...
- 关于Vertical Align的理解
1:vertical-align 翻译就是垂直-对齐... 2:关于line-height的点 2.1:如果一个标签没有定义height属性,那么其最终表现的高度一定是由line-height起作用. ...
随机推荐
- 十大经典排序算法(Python,Java实现)
参照:https://www.cnblogs.com/wuxinyan/p/8615127.html https://www.cnblogs.com/onepixel/articles/7674659 ...
- b/s和c/s
一.B/S结构 B是英文单词“Browser”的首字母,即浏览器的意思:S是英文单词“Server”的首字母,即服务器的意思.B/S就是“Browser/Server”的缩写,即“浏览器/服务器”模式 ...
- Go项目目录管理
在Go的官网文档How to Write Go Code中,已经介绍了Go的项目目录一般包含以下几个: src 包含项目的源代码文件: pkg 包含编译后生成的包/库文件: bin 包含编译后生成的可 ...
- 第二十一篇 jQuery 学习3 特效效果
jQuery 学习3 这节课主要是学习jQuery的动态效果. show()和hide()显示与隐藏方法,toggle()方法,fadeIn()谈入,fadeOut()谈出,slideDown() ...
- no input file specified 三种解决方法
一.IIS Noinput file specified 方法一:改PHP.ini中的doc_root行,打开ini文件注释掉此行,然后重启IIS 方法二: 请修改php.ini 找到 ; cgi.f ...
- Delphi ComboBox组件
- C# 文件操作的一些小点子
1. 判断指定文件是否存在: bool System.IO.File.Exits(string fliePath);
- filter和filter_by 的区别
- Java I/O(三)各种Reader和Writer读写器、RandomAccessFile随机访问文件、序列化
2019 01/01 八.Reader和Writer读写器 前面讲的输入输出流的基本单位都是字节,因此可以称为“字节流”,读写器是以字符为基本单位,可以称为“字符流”.它们的使用方法非常相似,因此我考 ...
- POJ 1038 Bugs Integrated Inc (复杂的状压DP)
$ POJ~1038~~\times Bugs~Integrated~Inc: $ (复杂的状压DP) $ solution: $ 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前 ...