---
title: "CSS学习笔记"
date: 2019-08-13T15:16:33+08:00
draft: false
toc: true
images:
tags: [css]
categories: web
---
## 流、元素与基本尺寸
HTML元素分为两类:**块级元素**、**内联元素**。
### CSS盒尺寸

盒子模型,一共有四种盒子:content-box, padding-box, border-box, margin-box,给定元素的width, height是作用在content-box上的。对于块状元素,如果`width:auto`,则元素会如水流般充满整个容器,而一旦设定了width具体数值,则元素的流动性就会被阻断,可以参考这个[实例](https://demo.cssworld.cn/3/2-3.php)。
### CSS流体布局下的宽度分离原则
所谓“宽度分离元则”,就是CSS中的width属性不与影响宽度的padding/border(有时候包括margin)属性共存,而应该进行分离,width独立占用一层标签,padding、border、margin利用流动性在内部自适应呈现。
box-sizing会改变尺寸作用规则,理论上有下面这些写法:
```css
.box1 { box-sizing: content-box; } /* 默认值 */
.box2 { box-sizing: padding-box; } /* Firefox曾经支持 */
.box3 { box-sizing: border-box; } /* 全线支持 */
.box4 { box-sizing: margin-box; } /* 从未支持 */
```
替换元素的特性之一就是尺寸由内部元素决定,且无论其display属性值是inline还是block;对于非替换元素,如果其display属性值为block,则会具有流动性,宽度由外部尺寸决定。
对于普通文档流中的元素,百分比高度值要想起作用,其父级必须有一个可以生效的高度值。
绝对定位的宽高百分比计算是相对于padding box的,也就是说会把padding大小值计算在内,但是,非绝对定位元素则是相对于content box计算的。
### 内联元素
“内联元素”的“内联”特指“外在盒子”,和“display为inline的元素”不是一个概念。“内联元素”的典型特征就是可以和文字在一行显示。
内联盒子模型:
- 内容区域(content area)
- 内联盒子(inline box)
- 行框盒子(line box)
- 包含盒子(containing box)
在HTML5中存在“幽灵空白结点”,叫做`strut`
> Each line box starts with a zero-width inline box with the element's font and line height properties. We call that imaginary box a "struct".
## 盒尺寸四大家族
盒尺寸中的4个盒子content box, padding box, border box和margin box分别对应CSS世界中的content, padding, border和margin属性。
根据“外在盒子”是内联还是块级我们可以把元素分为内联元素和块级元素,而根据是否具有可替换内容,我们也可以把元素分为替换元素和非替换元素。
### 替换元素特性
- 内容的外观不受页面上的CSS的影响
- 有自己的尺寸
- 在很多CSS属性上有自己的一套表现规则
### 替换元素的尺寸计算规则
- 固有尺寸指的是替换内容原本的尺寸
- HTML尺寸介于固有尺寸和CSS尺寸之间,只能通过原生HTML属性改变
- CSS尺寸特指可以通过CSS的width和height或者max-width/min-width和max-height/min-height设置尺寸,对应盒尺寸中的content box

可以使用下面的方式实现透明图片占位:
```html
```
```css
img {
visibility: hidden;
display: inline-block;
}
img[src] {
visibility: visible;
}
```
没有`src`属性的`
`是非替换元素。
**我们无法改变替换元素内容的固有尺寸。**
`
`元素中的width和height之所以会改变图片大小,是因为图片中的content替换内容默认的适配方式是填充(fill),在CSS3中,`
`和其他一些替换元素的替换内容的适配方式可以通过`object-fit`属性修改。
在CSS中,我们把content属性生成的对象称为“匿名替换元素”。
### 深入理解content
- content与替换元素
- content内容生成技术
## 内联元素与流
块级元素负责结构,内联元素接管内容。
字母x的下边缘(线)就是我们的基线,内联元素默认是基线对齐的。
`ex`是CSS中的一个相对单位,指的是小写字母x的高度,即`x-height`。
仅包含文字的`