css中line-height行高的深入学习

之前对css中行高的理解还是有些肤浅,深入后才发觉里面内有乾坤。学习line-height,首先从基本原理开始

(标注该文章转载 http://www.cnblogs.com/dolphinX/p/3236686.html)

顶线/中线/基本/底线

<!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

   内容区域/行内框/行框

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

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

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

<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 与 font-size 的计算值之差(行距)分为两半,分别加到一个文本行内容的顶部和底部。可以包含这些内容的最小框就是行框。



说明

normal

默认,设置合理的行间距。

number

设置数字,此数字会与当前的字体尺寸相乘来设置行间距。相当于倍数

length

设置固定的行间距。

%

基于当前字体尺寸的百分比行间距。

inherit

规定应该从父元素继承 line-height 属性的值

   单行文本垂直居中

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

   多行文本垂直居中

<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;">
		 多行文本垂直居中.<br/>
		多行文本垂直居中.
	</span>
</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>

   行高的继承

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

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

【资料参考】

来源 http://www.cnblogs.com/dolphinX/p/3236686.html

http://www.cnblogs.com/fengzheng126/archive/2012/05/18/2507632.html

时间: 2024-08-10 17:03:01

css中line-height行高的深入学习的相关文章

wpf datagrid row height 行高自动计算使每行行高自适应文本

wpf 的datagrid的行高 要么是Auto,要么是定值:但会带来麻烦就是每行行高都一样. 当需要按内容(主要是wrap 换行的textbox或textblock)来动态调整行高的时候,需要用到dataGrid的LoadingRow 事件. 参考两个网页: http://stackoverflow.com/questions/9264398/how-to-calculate-wpf-textblock-width-for-its-known-font-size-and-characters

css总结6:行高和字体大小的关系

1 CSS line-height 属性 代码: p.small {line-height:70%}p.big {line-height:200%} 运行后:70%与200%宽高 2 CSS font-size 属性 h1 {font-size:250%;}h2 {font-size:200%;}p {font-size:100%;} 两者特点: 1 一行文字行高和父元素高度一致的时候,垂直居中显示 2 行高:文字高度+上下边距 原文地址:https://www.cnblogs.com/auto

CSS中的height与line-height的区别

<p class='text'>高与行高的区别</p> 那么我要想让这些字上下居中那么可以用宽度和行高控制 .text{ height:25px; line-height:25px; } 什么是行高? 行高不是每行直接的间距 行高指的是文本行的基线间的距离. 就是每行文字下边与下一行文字的下基线之间距离 原文地址:https://www.cnblogs.com/sui776265233/p/9403690.html

css基础 文字垂直居中 行高等于容器高度

礼悟:    公恒学思合行悟,尊师重道存感恩.叶见寻根三返一,江河湖海同一体.          虚怀若谷良心主,愿行无悔给最苦.读书锻炼养身心,诚劝且行且珍惜.              ide:visual studio 2017             browser:Chrome                     os:win7 代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8&qu

如何正确使用css中vertical-align

首先明确,vertical-align只对inline-block和inline元素有效. 在说vertical-align之前,需要先说明一下什么是line box. 浏览器中显示的一行会包含多个非block元素(有block元素时就换行了),通过一个box可以把这一行包含起来,这就是一个line box. 比如一个div,他会占据一行,包裹着内部所有非block元素的就是一个line box. line box的高度,是本行中拥有最高行高的元素的高度. 此时,对拥有最高行高的非block元素

Sql Server Report 导出到EXCEL 指定行高

在SQL SERVER REPORT 2005做报表的时候,发现在report中指定的行高没有用.google了一下,找到了解决方法. Make both CanGrow and CanShrink are False for all of the cells in the row.  This is because Excel itself doesn't really have a concept of CanGrow and CanShrink - rather, all it can d

一种高效的可变行高列表行定位算法

列表控件是数据显示时使用的一种常用的控件. 一般情况下列表中的行是等高的,这种情况下无论列表包含多少行,都能够在O(1)的时间定位到指定行. 但是当显示的内容格式不一致时,使用相等的行高可能就意味着显示空间的浪费,也意味说用户需要更多的滚动操作,影响用户体验. 要实现一个支持可变行高的列表控件,首先要解决的问题就是快速定位列表行. 假定一个列表中的表项按照下面的高度排列: 1,2,3,1,2,3,1,2,3,1,2,3,4,5 可以知道总高度为:33 程序员需要解决从一个随机的[0,32]的值(

Excel快速删除空白行与调整行高列宽的方法,学会了很实用

Excel表格作为大家经常使用的办公文档,在使用的过程中我们也会遇到各种问题,比如常见的行高列宽的调整.空白行的删除的等等.今天小编就为大家带来了Excel快速删除空白行与行高列宽的方法,希望可以帮助到大家. 一:调整行高列宽 作为Excel表格最常见的问题之一,我们在办公中常用到的调整行高列宽的方法主要有两种,都非常的简单方便. 方法1: 第一种方法也是最简单的一种方法,把鼠标光标放置在行高或者是列宽线条上时,就会出现一个[黑色双箭头]的标志,点击即可拉动线条调整行高.列宽.(唯一的弊端是行高

[ css 深入理解 inline box 模型中line boxes ] css中深入理解line-height(行高)产生的原因:看不见的 line boxes

到底这个line-height行高怎么就产生了高度呢: 在inline box模型中,有个line boxes,这玩意是看不见的,这个玩意的工作就是包裹每行文字.一行文字一个line boxes.例如“艾佛森退役”这5个字,如果它们在一行显示,你艾佛森再牛逼,对不起,只有一个line boxes罩着你:但“春哥纯爷们”这5个字,要是竖着写,一行一个,那真是够爷们,一个字罩着一个line boxes,于是总计五个line boxes.line boxes什么特性也没有,就高度.所以一个没有设置he