【转】【自己总结了一些点】理解css视觉格式化

理解css视觉格式化

参考:

详尽一点的=>http://www.cnblogs.com/xiaohuochai/p/6252163.html

简单一点的=>http://www.jianshu.com/p/f1019737e155

主要是 行布局 的内容比较需要理解。

想起之前写页面遇到过的问题:
在表单中,文本与input夹杂,然后垂直怎么也对不齐的问题。。

太蛋疼了,所以好好理解了一下

【mark的术语】

1、正常流
  文本从左向右、从上向下显示,是传统HTML文档的文本布局

2、非替换元素
  如果元素的内容包含在文档中,则称之为非替换元素

3、替换元素
  指作为其他内容占位符的一个元素(<img>、<video>、<audio>等)。但,inline-block元素在布局中也当作替换元素处理。所以,又包含大量的表单类元素及表格类元素

4、块级元素
  在正常流中,在其元素框之前和之后生成“换行”,且会垂直摆放的元素。通过声明display:block可以让元素生成块级框

5、行内元素
  在正常流中,不会在元素框之前或之后生成“行分隔符”,是块级元素的后代。通过声明display:inline可以让元素生成行内框

6、根元素
  位于文档树顶端的元素,在HTML文档中,是元素HTML

总结点

1、em框
  em框在字体中定义,也称为字符框(character box)。实际的字形可能比其em框更高或更矮。在CSS中,font-size的值确定了各个em框的高度

2、内容区
  在非替换元素中,内容区是元素中各字符的em框串在一起构成的框;
而在替换元素中,内容区就是元素的固有高度再加上可能有的外边距、边框或内边距。内容区类似于一个块级元素的内容框(content box)

3、行间距
  行间距(leading)是font-size和line-height之差。这个差实际上要分为两半,分别应用到内容区的顶部和底部

**[注意]行间距只应用于非替换元素!!**

2、构造各元素的行内框

a、对于替换元素来说,得到各元素的height、margin-top、margin-bottom、padding-top、padding-bottom、border-top-width、border-bottom-width值,把它们加在一起

因为,行间距不应用到替换元素上,所以替换元素的内容大小等于行内框大小

b、对于非替换元素来说,得到各行内非替换元素及不属于后代行内元素的所有文本的font-size值和line-height值,再将line-height减去font-size,得到行的行间距,这个行间距除以2,将其一半分别应用到em框的顶部和底部

3、替换元素(即<input>一类的标签)的 line-height 并不会生效。

因此在span中,最好是

margin: 0;
padding: 0;
height: xxx;	// 父 span 的 font-size

这样的话,替换元素就会和父span中的文本拥有相同的内容高度。替换元素的 vertical-align 的属性调整垂直位置也就会比较准确。

原文地址:https://www.cnblogs.com/xfh0192/p/7660565.html