内联格式化模式(line-height原理)

作者:dudo 来源:dudo博客 时间:2008-06-29 14:37:00 

重要提示:

本文并非一篇简单地介绍内联格式模型(inline formatting model)的文章。相反,它是对内联格式(inline formatting)本质规则和过程 的扼要剖析,是对CSS2中规则的总结。本文的知识点十分密集,即使错过其中一个小小的知识点也可会导致根本性地误解。本文经过了CSS工作 组(CSS Working Group)和多个CSS组织(CSS cmmounity)反复推敲和检查,但是这并是说本文已经做到至善至美了。也可能有些情况这里没 有涉及到,同时有可能文中提到的一些名词术语对于新手来说存在一定理解上的困难。但是我坚信本文得出的结论是正确无疑的。如果你确定 本文存在某方面的谬误,请把你的观点写下来发信到www-style@w3.org进行讨论。谢谢!

前言:

为了清晰地描述内联格式模型(inline formatting model)的工作原理,弄清使用到的专业术语的具体含义非常重要。首先来看几个等式,然后是对这些术语的解释。

  •      em-box = font-size = content-area

  •      content-area + (half-)leading = inline box

  •      inline box(min/max) = line-box

其中, 

  • em-box = 指定字体中定义的em-box(文本本身盒模型的大小)

  • font-size = em-box中指定用于度量字体显示大小的数值

  • content-area = 在非置换元素中,盒模型是使用元素内每个字符的font-size的整体大小来描述的;在可置换元素中,则中元素的实际高度加上margin、border、padding的值;

  • (half-)leading = 每个元素由于font-sizeline-height的不同,在content-area的上方和下方产生的差值,并且上下方的差值相等的

  • inline box = 每个元素的(half-)leading和content-area之和;对于非转换元素,一个元素的inline-box的高度恰好等于它的line-height的值;对于可转换元素,一个元素的inline box高度则正好等于其实际高度加上所有的margin、border、padding等。

  • line-box=它的上下边界分别是行内所有inline-box的最高点和最低点。

上面的描述中所未涉及到的几点:

  • content-area和块级元素的内容盒框相似

  • 内联元素的背景会同时应用在元素content-area和padding上

  • 内联元素的边框是围绕在contend-area和padding之外的

  • 内联元素及其衍生盒模型的非转换元素中在垂直方向上应用margin将不会起作用(但是水平方向可以)

  • 可转换元素的margin和border会影响元素line-box的高度,因此也会影响到所在行的line-box高度

此外,inline box是根据vertical-align来处理对齐方式的。上面的说明中没有提到这一点,但是它却CSS2:10.8中介绍的规则。

结论:

在只有一行font-sizeline-height相等的内联非置换元素情况下同,解决起来比较简单。content-area直接通过font-size来定义,line-box的高度等于line-height。(后面会有更加充分的解释)
而在同时包含有可置换和非置换内联元素的情况下(什么是可置换、非可置换元素?),它们有不同的font-sizeline-height值,问题就得使用下面的方法来解决。对于每个元素来说,content-area的高度取决于每一个非可置换元素的font-size和可置换元素的实际高度加上所有的padding、border和margin。之后再加上leading,一半位于上部,一半位于下部。得出的这个数值就是inline box中用以计算对齐方式的数值。inline-box中顶部最高位置就是line-box的顶部,inline-box中底部的最低位置就是line-box中的底部(也就前面所说的line-box的上下边界由所以inline-box的最高和最底位置来决定)。

标签:line-height,效果,文字,css
0
投稿

猜你喜欢

  • 在Visual Studio中使用GIT进行源码管理

    2022-09-24 19:28:02
  • python中k-means和k-means++原理及实现

    2022-01-17 10:52:07
  • golang时间及时间戳的获取转换

    2024-05-05 09:26:27
  • Mac系统重置PostgreSQL密码的方法示例代码

    2024-01-28 13:46:30
  • QQ影音正式版官网Banner设计

    2009-03-27 18:46:00
  • JavaScript实现网页计算器功能

    2024-04-17 10:03:41
  • jquery ui bootstrap 实现自定义风格

    2024-05-09 09:05:24
  • 编程知识点(1)关键词之存储类型

    2023-06-26 20:18:36
  • pyqt5与matplotlib的完美结合实例

    2022-01-09 12:23:59
  • 详解如何在Apache中运行Python WSGI应用

    2021-05-16 05:24:03
  • 微信小程序上传图片到php服务器的方法

    2023-11-07 11:57:25
  • 微信小程序使用npm支持踩坑

    2024-04-22 13:07:40
  • vscode 远程调试python的方法

    2021-09-07 23:00:59
  • MySQL判别InnoDB表是独立表空间还是共享表空间的方法详解

    2024-01-18 14:23:34
  • python爬虫使用requests发送post请求示例详解

    2022-02-26 16:50:22
  • Python中的图像处理之Python图像平滑操作

    2021-06-05 12:56:06
  • Python基础之数据类型详解

    2023-11-06 11:01:31
  • volatile保证可见性及重排序方法

    2022-07-22 03:14:59
  • 使用sqlplus连接Oracle数据库问题

    2024-01-13 09:25:16
  • Git 教程之服务器搭建详解

    2022-07-28 06:44:20
  • asp之家 网络编程 m.aspxhome.com