初入前端的时候觉得CSS知道display、position、float就可以在布局上游刃有余了,随着以后工作问题层出不穷,才逐渐了解到CSS并不是几个style属性那么简单,最近看了一些关于行高的知识,就此总结一下。

所谓行高是指文本行基线间的垂直距离。要想理解这句话首先得了解几个基本知识:

顶线、中线、基线、底线

<!DOCTYPE html>
<html><head><title>Test</title><style type="text/css" >span{padding:0px;line-height:1.5;}</style></head><body><div class="test"><div style="background-color:#ccc;"><span style="font-size:3em;background-color:#999;">中文English</span><span style="font-size:3em;background-color:#999;">English中文</span></div></div></body>
<html>

从上到下四条线分别是顶线、中线、基线、底线,很像才学英语字母时的四线三格,我们知道vertical-align属性中有top、middle、baseline、bottom,就是和这四条线相关。

尤其记得基线不是最下面的线,最下面的是底线。

行高、行距与半行距

行高是指上下文本行的基线间的垂直距离,即图中两条红线间垂直距离。

行距是指一行底线到下一行顶线的垂直距离,即第一行粉线和第二行绿线间的垂直距离。

半行距是行距的一半,即区域3垂直距离/2,区域1,2,3,4的距离之和为行高,而区域1,2,4距离之和为字体size,所以半行距也可以这么算:(行高-字体size)/2

内容区、行内框、行框

内容区:底线和顶线包裹的区域,即下图深灰色背景区域。

行内框,每个行内元素会生成一个行内框,行内框是一个浏览器渲染模型中的一个概念,无法显示出来,在没有其他因素影响的时候(padding等),行内框等于内容区域,而设定行高时行内框高度不变,半行距【(行高-字体size)/2】分别增加/减少到内容区域的上下两边(深蓝色区域)

行框(line box),行框是指本行的一个虚拟的矩形框,是浏览器渲染模式中的一个概念,并没有实际显示。行框高度等于本行内所有元素中行内框最大的值(以行高值最大的行内框为基准,其他行内框采用自己的对齐方式向基准对齐,最终计算行框的高度),当有多行内容时,每行都会有自己的行框。

<div style="background-color:#ccc;"><span style="font-size:1em;background-color:#666;">中文English</span><span style="font-size:3em;background-color:#999;">中文English</span><span style="font-size:3em;background-color:#999;">English中文</span><span style="font-size:1em;background-color:#666;">English中文</span></div>

line-height

基本概念搞明白了我们就可以说说本文的主角line-height属性了。

定义:line-height 属性设置行间的距离(行高),不能使用负值。该属性会影响行框的布局。在应用到一个块级元素时,它定义了该元素中基线之间的最小距离而不是最大距离。line-height 与 font-size 的计算值之差(行距)分为两半,分别加到一个文本行内容的顶部和底部。可以包含这些内容的最小框就是行框。

可能的值

说明
normal 默认,设置合理的行间距。
number 设置数字,此数字会与当前的字体尺寸相乘来设置行间距。相当于倍数
length 设置固定的行间距。
% 基于当前字体尺寸的百分比行间距。
inherit 规定应该从父元素继承 line-height 属性的值。

貌似很简单,但感觉没什么用出的样子,那就让我们看看line-height的几个应用

div文字垂直居中

div居中对齐一直是个难题,水平还好解决些,margin:0 auto; 可以解决现代浏览器,IE下text-align:center。但垂直居中就没那么简单了,默认是这样子的。

<div style="width:150px;height:100px;background-color:#ccc;"><span>This is a test.<br/>This is a test.</span></div>

我们可以利用line-block这样做

<div style="width:150px;height:100px;line-height:100px;background-color:#ccc;font-size:0;"><span style="display:inline-block;font-size:10px;line-height:1.4em;vertical-align:middle;">This is a test.<br/>This is a test.</span></div>

单行就比较简单了,把line-height设置为box的大小可以实现单行文字的垂直居中

<div style="line-height:100px;border:dashed 1px #0e0;">This is a test.</div>

元素对行高影响

行框高度是行内最高的行内框高度,通过line-height调整,内容区行高与字体尺寸有关,padding不对行高造成影响。

<div style="border:dashed 1px #0e0;margin-bottom:30px;"><span style="font-size:14px;background-color:#999;">This is a test</span></div><div style="border:dashed 1px #0e0;"><span style="font-size:14px;padding:20px;background-color:#999;">This is a test</span></div>

第二个span虽然因为padding原因内容区变大,当行高并未改变

行高的继承

行高是可继承的,但并不是简单的copy父元素行高,继承的是计算得来的值。

<div style="border:dashed 1px #0e0;line-height:150%;font-size:10px;"><p style="font-size:30px;">1232<br/>123</p></div>

按一般理解既然line-height可以继承,那么p元素的行高也是150%了,可是事实是这样的

非但没有变成150%,反而连100%都没有,重叠了!这就是继承计算的结果,如果父元素的line-height有单位(px、%),那么继承的值则是换算后的一个具体的px级别的值;上例p得到的是10px*150%=15px的行高,而P的字体大小为30px,所以发生了重叠。

而如果属性值没有单位,则浏览器会直接继承这个“因子(数值)”,而非计算后的具体值,此时它的line-height会根据本身的font-size值重新计算得到新的line-height 值。

<div style="border:dashed 1px #0e0;line-height:1.5;font-size:10px;"><p style="font-size:30px;">1232<br/>123</p></div>

所以在使用line-height时,除非你刻意否则尽量使用倍数设值

CSS行高——line-height相关推荐

  1. html中高与行高的区别,深入了解css的行高Line Height属性

    什么是行间距? 古时候我们是用印刷机来处理文字,印出来的每个字都位于独立的一个块里. 行间距,即传说中控制两行文字之间垂直距离的东东. 在CSS,line-height被用来控制行与行之间的垂直距离. ...

  2. html中行高是指字的高度嘛,CSS行高line-height的理解

    一.行高的字面意思 "行高"顾名思义指一行文子的高度.具体来说是指两行文子间基线间的距离. 基线是在英文字母中用到的一个概念,我们刚学英语的时候使用到的那个英语本子每行有4条线,其 ...

  3. CSS——行高、字体、文本的样式

    一.行高 行高(line height)行高指的是文字占有的实际高度可以通过line-height来设置行高行高可以直接指定一个大小(ex pm)也可以设置一个整数如果是一个整数行高将会是字体的指定的 ...

  4. 【转】css行高line-height的一些深入理解及应用

    一.前言 前两天在腾讯ISD团队博客上看到一篇翻译的文章"深入理解css 行高",是个不错的文章,学到了不少东西,建议您看看. 这里,我也要讲讲我对line-height的一些理解 ...

  5. css行高line-height的一些深入理解及应用

    by zhangxinxu from http://www.zhangxinxu.com,原文地址:http://www.zhangxinxu.com/wordpress/?p=384 一.一些字面意 ...

  6. css行高(line-height)及文本垂直居中原理

    css行高(line-height)及文本垂直居中原理 一.行高的定义 标准定义:两行文字基线之间的距离. 那么什么是基线? 基线是在英文字母中用到的一个概念,我们刚学英语的时使用的那个英语本子每行有 ...

  7. CSS行高等于盒子的高度,能让文字在盒子里面垂直居中的原理

    CSS行高等于盒子的高度,能让文字在盒子里面垂直居中的原理:用pink老师的一张ppt就成让人一下子明白过来.

  8. CSS基础-行高(height和line-height)【学习笔记】

    1 行高测量 行高的测量方法: 2 单行文本垂直居中 行高我们利用最多的一个地方是: 可以让单行文本在盒子中垂直居中对齐. 文字的行高等于盒子的高度. 这里情况些许复杂,开始学习,我们可以先从简单地方 ...

  9. CSS 行高与行对齐精解:line-height 和 vertical-align (图文)

    7.3 line-height 行高指的是文本行的基线间的距离,但是文本之间的空白距离不仅仅是行高决定的, 同时也受字号的影响. 7.3.1 语 法 line-height属性的具体定义列表如下: 语 ...

最新文章

  1. Linux Kernel TCP/IP Stack — Socket Layer
  2. 从vivo 大规模特征存储实践中学点经验
  3. SQL Server 常用分页SQL
  4. android商品mysql_android使用mysql的方法总结
  5. SetDll把Dll文件注入到.exe应用程序中
  6. [Ext JS 4] 拖放[drag and drop]
  7. 【Rayeager PX2分享】OpenCV入门之图像显示
  8. hlg1492盒子【最小路径覆盖】
  9. svn删除文件和解决冲突
  10. 指数函数图像怎么画?
  11. uniapp调起打印机(调起第三方打印软件)适用app,将页面生成图片打印的两种方式
  12. 在VMware上搭建iPhone开发环境(转)
  13. 计算机群等级,腾讯客服-群成员活跃等级规则
  14. policy服务器未能登陆,开机出现Group Policy Client服务未能登录的解决措施
  15. 搭建mysql 主从复制The slave I/O thread stops because master and slave have equal MySQL server UUIDs
  16. 什么是软件功能测试,如何做好功能测试?
  17. markdown如何在表格内换行?
  18. pandas 读表格_手把手教你数据分析(1)--Pandas读取Excel信息
  19. cf微软AIM服务器,CF微软AIM1.1透视自瞄无后坐力
  20. Git中smart Checkout与force checkout

热门文章

  1. Jmeter(二十五)Jmeter之系统函数
  2. 关于JavaScript的浅拷贝和深拷贝
  3. 《 第一行代码 》读后感
  4. Ubuntu下MySQL忘记root密码重置
  5. the content of the adapter has changed but listview did not
  6. c# winform 程序打包部署
  7. error LNK2001: unresolved external symbol _WinMain@16
  8. Microsoft Ajax Beta1 - 边学边用边补充 (Part 2 - DragDropList)
  9. Android图表控件MPAndroidChart——曲线图LineChart的使用(财富收益图)
  10. linux退出编辑器命令,LINUX中,Vi编辑器的几种模式及保存、退出等命令