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起作用. ...
随机推荐
- node-images Windows 64-bit with Unsupported runtime 错误解决办法 及 node 历史版本下载
在做项目的时候下载的最新的10.16[2019.6.12]版本,出现了模块不兼容的问题[node-images]. 在git上发现了相同问题 https://github.com/zhangyuanw ...
- 进程管理工具之supervisor[详解]
原文链接:https://blog.csdn.net/weixin_42390791/article/details/88866237 一.问题背景1.背景 如何才能让一个进程摆脱终端,获得相对 ...
- 为什么日本编程语言ruby没前途
ruby是日本的编程语言,不像日本生鱼片一样受人喜欢 日本 Ruby的性能不如.NET或Java 你又是对的!另外,Ruby比Erlang,Lua,C ++等慢,但你不使用Erlang或C ++? W ...
- 利用selenium 爬取豆瓣 武林外传数据并且完成 数据可视化 情绪分析
全文的步骤可以大概分为几步: 一:数据获取,利用selenium+多进程(linux上selenium 多进程可能会有问题)+kafka写数据(linux首选必选耦合)windows直接采用的是写my ...
- 抗D十招:十个方法完美解决DDoS攻击防御难题
可以说,DDoS是目前最凶猛.最难防御的网络攻击之一.现实情况是,这个世界级难题还没有完美的.彻底的解决办法,但采取适当的措施以降低攻击带来的影响.减少损失是十分必要的.将DDoS防御作为整体安全策略 ...
- Delphi MainMenu组件
- Delphi Label组件
- django笔记一
课程介绍 MVC 大部分开发语言中都有MVC框架 MVC框架的核心思想是:解耦 降低各功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现代码的重用 m表示model,主要用于对数据库层的封 ...
- xml 字符串解析成通用的map
[quote]Stax解析技术:快速高效,根据流的形式解析xml,比dom解析技术更加快,dom解析技术是基于文档结构树的,会把整个dom文件树加载到内存进行解析[/quote] package co ...
- 会了docker你又多了一个谈资(上)
相信有到现在为止还是有很多同学只是听说过docker,但还不了解docker.也很想学习,但是又不知道从何入手,工作中又接触不到,而自己又懒得去翻阅各种学习资料,那么,读完本文,我保证,docker的 ...