[toc]
## pre-notify
content-area和行高、line-height:normal值并**没有**关系(比如你将html的line-height统一设置为一个数值,包裹文字的纯span的高度并不会发生变化),只和字体和字号有关
只有包裹文字的块元素的高度才和行高、line-height:normal有关。
## font-size决定span宽度
### font-size和文字选中的背景色区域和字体
微软雅黑
![](https://box.kancloud.cn/a18ed50f0bd2cfd67e84e1bf29333647_246x93.png)
文字选中的背景色区域的**宽度**刚好为font-size大小
宋体SimSun
![](https://box.kancloud.cn/de8c3f4560770eca50b2ce11263ccd05_214x83.png)
**不仅**文字选中的背景色区域的**宽度**刚好为font-size大小
,在chrome下文字选中的背景区域的**高度** -**也**刚好为font-size大小(火狐中不是),这意味着纯span的高度也为一个font-size大小
但需要注意的是,span的高度并不等于行高,行高等于`font-size*line-height:normal`,而宋体的normal值为1.1几,
![](https://box.kancloud.cn/db1fcfebf2dbf24e65babb59b7f414af_260x142.png)
微软雅黑字体下,文字的最大**可视**宽度(非选中时的背景区域)刚好和文字选中的背景色区域的**宽度**相等
![](https://box.kancloud.cn/ec4f7332f4273ef216f8353c3cfa10ac_72x72.png)
SimSun下,文字的最大**可视**宽度可以发现是略小于文字选中的背景色区域的
>结论:
>
>font-size的大小一定和文字选中的背景色区域的**宽度**一样大
>如果是SimSun(且为谷歌),那么文字选中的背景色区域的**高度**也和font-size一样大
>
>==== ==== ===
>
>除此之外,文字实际占的宽度(**视觉宽度**)并不一定等于font-size,
>微软雅黑是等于的,SimSun则是略小于
>
>但其实这并没有问题,因为css布局看的是font-size,一个span的宽度是由 `font-size*[字体个数]` 决定的
>
## lineHeight决定父容器高度
### line-height:normal
line-height默认值为`normal`,意思是根据字体的不同,line-height就会取不同的值,
如微软雅黑,line-height就为`1.32`多一点(这个值不大对?),
而宋体为`1.14`多一点
>[danger] 如果在html中重置line-height为某个特定值,那么会覆盖不同字体的所独有的line-height值
>
> 浏览器不同,字体的normal值也是不同的,可能会多一位小数或则最后一位小数的值不同
### span的高度并不一定等于行高
不改变字体自带的`line-height:normal;`
微软雅黑下,chrome下是等于的,firefox下不等于
![](https://box.kancloud.cn/9fa41600c050ab6f59791f2c5c03c4c1_214x135.png)
**且**,一旦字体本身的`line-height:normal`的值被改变,那么span的高度就 **一定不** 等于行高 (但如果不是span,内在盒子是块级盒子就不会)
![](https://box.kancloud.cn/980cb95087a3da30fa129ca610d3cd9c_449x205.png)
span的高度依然由content-area(只受字号、字体,和行高**无关**)决定
可以借由`display:inline-block;`"修正"
### 文字选中背景区域的高度和内联盒子的高度以及父容器高度
>微软雅黑
>
![](https://box.kancloud.cn/d4b744cb9eb159a10848d985a8a1446c_265x138.png)
chrome中 文本选中的区域的**高度**刚好和内联盒子一样大
![](https://box.kancloud.cn/5e3e53785a7869d7f63bac6e022d3333_240x84.png)
firefox中,微软雅黑字体时,文本选中区域的**高度**是大于内联盒子高度的
这是为什么呢?
内联盒子的高度不应该就是content-area(文字选中背景区域)的高度吗?
有两种可能
,第一种,内联盒子的高度确实是content-area的高度,但文字选中的背景区域在某些字体下并不等于content-area的高度,在某系字体下才等于
,第二种,内联盒子的高度并不一定等于content-area的高度(此时依然把文字选中时的背景区域看做是content-area的高度),这样就能很好理解为什么蓝色背景区域会超出span
So两种假设,个人倾向于第一种,即文字选中的背景区域在某些情况下并不等于content-area的高度,这样理解的好处在于,span的高度我们可以看做是由content-area决定的(只受字号和字体影响)
So,接下来我们说到content-area,请把它理解为一个纯span的高度(只受字号和字体影响)
---
由于span在不同浏览器下,即使为同一种字体同一个字号,高度也可能是不同的,并且这个span和它的容器元素的高度也不相等(等于该浏览器下这款字体的content-area大小),So,为了便于开发,为了规范浏览器表现的一致性
我们通常会将将这个普通的行级盒子变成行内块
![](https://box.kancloud.cn/45e8fb9fb8b5376d907aec0757dab361_205x68.png)
此时这个span的高度会统一像它的容器元素一样由`行高`决定(原本由content-area决定)
但此时仍然有个问题,chrome和firefox内联盒子的父级的高度呈现依然是不一样的
![](https://box.kancloud.cn/cbce84d374e780def91871bb04557e10_197x70.png)
(firefox)
可以发现firefox大于19px,而chrome刚好等于19px(文字选中背景色区域的高度),这是因为firefox微软雅黑字体的line-height:normarl值更大一点的原因。
So,我们可以统一的设置一个`line-height`数值,这样最终我们就能得到一个一致的高度
>SimSun
>
上面我们看了字体为微软雅黑时,行内盒子、父容、文字选中背景区的关于高度的表现情况,下面是字体为宋体时的表现
![](https://box.kancloud.cn/2a57bf4d106cacbe927d753ed4152926_293x114.png)
可以发现这次不论是chrome还是firefox,文本选中的背景色区域的高度和内联盒子的高度都是一样大的
但父容的高度和span还是不一样大,且差距比上一次(微软雅黑)还大
>结论:
>
>文字选中背景区域的高度和span的高度是一样大的(除了在微软雅黑这种字体下,firefox的选中区域的高度会大于span的高度,可用inline-block修复)
>
>不同浏览器下,即使字体、font-size、line-height都相同,父容器高度因此也相同,**但**span(外在内在盒子都为inline)的高度也可能是不一样的,
>但,只要设将span设置为inline-block,高度就会保持一样(等于行高)
>
>So,一行布局时,要让行级元素在不同浏览器下表现一致,需要:
>1. 对行级元素:display:inline-block(解决span和文本选中背景区域高度、父容不等高的情况)
>2. 父容器line-height使用固定数值
>因为一行的默认高度等于行高,但不同浏览器下line-height是不一样的,因为自带的字体不一样,并且同一种字体的line-height虽然都使用的关键字值`normal`,但不同浏览器下字体内置的的line-height:normal值是存在一些差距的
### display:inline-block解决span在不同浏览器下高度的不一致
## 元素box-sizing与line-height越界
box-sizing为 content-box的时候
即使line-height大于元素高度设定的值,文字也会居中显示
![](https://box.kancloud.cn/f0dbfd5875acf2c3ef527b2749d11ebf_250x142.png)
但一旦,box-sizing改为border-box
```
<C css='background:pink;padding:2px 5px;box-sizing:border-box;height:16px;' >
Mly
</C>
```
chrome
![](https://box.kancloud.cn/3d4374a261f9d10f79f99926e1c4929c_265x143.png)
firefox
![](https://box.kancloud.cn/f7efe224bc385be2080482fd9e5dfea9_152x98.png)
可以发现文字不再居中显示了,而只是让line-height的(line-box)上边和元素的content-box的上边对齐
## 关于英文
宋体下,英文字符占据的宽度是中文字符的一半,且`M`和`i`占据的宽度是一样的
![](https://box.kancloud.cn/77f2a83c3470319f2af4509f2580d40f_120x25.png)
微软雅黑下,M占据的宽度为1个font-size,而其它字母依据它们本身的宽度大小的不同占据的宽度也是不同的,
另外m和M的宽度也是不同的
![](https://box.kancloud.cn/2ec1b8673a1a3224ca87726f1d38436c_93x30.png)
### monospace
monospace是等宽字体簇(宋体算是其中一种?),但并不代表每个英文字母从而就会变为1个font-size大小,它们只是每个英文字母变得一样宽了,至于这个宽度是多少,是不一定的,可能1/2 font-size、1/3font-size...
### text-indent
`text-indent:2em` 对于中文比较适用,如果是英文的话,介于上面所述,会出现参差不齐的情况
因为此时1个英文字母的宽度不一定等于1em,
#### 1em
1em是一个`M字母宽度`的意思,它一般情况下等于1个大写字母`M`的宽度,但也存在不等于的情况(一定等于一个中文字符的宽度)
>text-indent:2em
>
微软雅黑字体下
![](https://box.kancloud.cn/369c7bfc61569025e42ecd734e2a29d5_131x56.png)
simsun字体下
![](https://box.kancloud.cn/103a3f556e2ca1b03fd35451d50db425_130x46.png)
monaspcae字体簇下
![](https://box.kancloud.cn/5bea67e7dbe84a9cb3cdd7cacc4a5f62_120x58.png)
### 文字选中背景区域的等于span的大小
simsun
![](https://box.kancloud.cn/ac7bda506da7a3ae4cb69c4b400440ba_212x119.png)
微软雅黑
![](https://box.kancloud.cn/60ef71bd5bfbb2572a62f7466a656be8_243x133.png)
---
- 空白目录
- 未处理
- webpack中的css模块化
- CSS预处理器
- 效果
- 元素装饰与美化
- 颜色
- checkbox
- img
- background
- clip-path
- 字体
- 文本控制
- text-indent
- letter-spacing
- word-spacing
- word-break和word-wrap
- white-space
- text-align
- text-decoration
- text-transform
- first-letter
- first-line
- 有关CSS百分单位的那些奇葩事儿
- 破坏性、包裹性、块状化
- 强大的absolute
- padding
- relative
- 继承性
- fixed
- float
- BFC
- z-index
- overflow
- clip
- 最佳可访问性隐藏
- 关于scrollHeight/Width
- 包含块
- margin
- 布局系统
- 杂
- Flex
- Grid
- 自定义布局系统
- gutter实现思路
- 选择器
- 伪元素和伪类
- css3
- appearance
- CSS2.1
- tmp
- 未定义行为
- 焦点元素
- outline轮廓
- 替换元素
- 盒子模型
- 块级元素/盒子
- 标记盒子
- 容器盒子(内在盒子)
- 内联元素/盒子
- 字母X
- line-height
- vertical-align
- font-size
- 内联元素盒子模型新解
- line-height定义
- line-height与行内框盒子模型
- line-height与内联元素的高度机制
- line-height值
- line-height与图片
- vertical-align支持的属性值及组成
- vertical-align起作用前提
- vertical-align与图片
- vertical-align与line-height
- vertical-align前后不一的行为表现
- vertical-align实际应用
- line-height与height
- width/height与auto
- 最小内容宽度
- 最大内容宽度
- min/max-width/height注意事项
- 流:外部尺寸与内部尺寸
- 流体布局下的宽度分离原则
- height:auto
- 浏览器渲染原理
- 移动端