` 元素的所有子元素(除非它们有自己的 `color` 规则)都将默认使用蓝色字体。
**需要注意的是,并非所有 CSS 属性都是可继承的。**一些影响布局和盒模型的属性,如 `width`, `height`, `padding`, `margin` 和 `border`,是不可继承的。而一些与文字样式和颜色相关的属性,如 `color`, `font`, `letter-spacing` 和 `line-height`,是可以继承的。如果你想强制一个属性继承其父元素的值,可以使用 `inherit` 关键字,如 `width: inherit;`。
## 盒子模型
**在 CSS 中,所有的 HTML 元素都可以看作是盒子。**当你在设计一个网页时,你实际上是在操作这些盒子。这种观念被称为 盒子模型(Box Model)。
```text
+---------------------------------------------------+
| Margin |
| +---------------------------------------------+ |
| | Border | |
| | +---------------------------------------+ | |
| | | Padding | | |
| | | +---------------------------------+ | | |
| | | | Content | | | |
| | | +---------------------------------+ | | |
| | | Padding | | |
| | +---------------------------------------+ | |
| | Border | |
| +---------------------------------------------+ |
| Margin |
+---------------------------------------------------+
```
CSS 的盒子模型主要由四个部分组成:
1. **Content(内容)**:这是 HTML 元素的实际内容,如文字、图片等。
2. **Padding(内边距)**:包围在内容周围的空间。内边距是透明的。
3. **Border(边框)**:包围在内边距和内容周围的边框。边框是可见的,你可以定义其样式、宽度和颜色。
4. **Margin(外边距)**:包围在边框和其他元素之间的空间。外边距是透明的。
这些部分一起决定了元素的总尺寸。**元素的 `width` 和 `height` 属性默认只包含内容的尺寸,不包括内边距、边框和外边距,这是因为 `box-sizing` 默认值为 `content-box`。**但是,你可以通过设置 `box-sizing: border-box;` 来改变这种行为,使 `width` 和 `height` 也包括内边距和边框。
这里是一个样例代码:
```css
div {
width: 300px;
padding: 10px;
border: 5px solid black;
margin: 20px;
}
```
在这个例子中,`div` 元素的实际宽度是 350px(300px 的内容宽度 + 2 *10px 的内边距 + 2* 5px 的边框宽度 = 350px),外边距额外增加了 20px 的空间,但不会增加 `div` 元素本身的宽度。
### 边框
边框主要由 `border` 属性控制,这也是一个复合属性,包括以下几个子属性:
| 属性 | 描述 | 示例值 |
| --------------- | ------------------ | ----------------------------------- |
| `border-width` | 设置边框的宽度 | `1px`, `medium`, `thick` |
| `border-style` | 设置边框的样式 | `solid`, `dashed`, `dotted`, `none` |
| `border-color` | 设置边框的颜色 | `black`, `#000000`, `rgb(0,0,0)` |
| `border-radius` | 设置边框的圆角半径 | `10px`, `50%` |
```css
.example-border {
/* 设置边框宽度为 5px */
border-width: 5px;
/* 设置边框样式为实线 */
border-style: solid;
/* 设置边框颜色为蓝色 */
border-color: blue;
/* 设置边框的圆角半径为 10px,使得边框具有圆角效果 */
border-radius: 10px;
}
```
### 背景
背景主要由 `background` 属性控制,这是一个复合属性,包括以下几个子属性:
| 属性 | 描述 | 示例值 |
| :-------------------- | :--------------------------- | :-------------------------------------------- |
| `background-color` | 设置元素的背景颜色 | `red`, `#FF0000`, `rgb(255,0,0)` |
| `background-image` | 设置一个或多个背景图像 | `url("image.jpg")` |
| `background-repeat` | 设置背景图像是否以及如何重复 | `no-repeat`, `repeat-x`, `repeat-y`, `repeat` |
| `background-position` | 设置背景图像的起始位置 | `center`, `top right`, `50% 50%` |
| `background-size` | 设置背景图像的大小 | `cover`, `contain`, `50% 50%` |
```css
.example-background {
/* 设置背景颜色为浅灰色 */
background-color: #f8f8f8;
/* 设置背景图像,这里使用了一个在线的图片 URL */
background-image: url('https://example.com/image.jpg');
/* 设置背景图像不重复 */
background-repeat: no-repeat;
/* 设置背景图像的位置在元素的中央 */
background-position: center;
/* 设置背景图像的大小以完全覆盖元素 */
background-size: cover;
}
```
## 文本处理
在 CSS 中,你可以使用各种属性来处理和控制文本的样式。以下是一个 CSS 文本处理示例:
```css
.example-text {
/* 设置文本颜色为红色 */
color: red;
/* 设置字体为 Arial */
font-family: Arial;
/* 设置字体大小为 14px */
font-size: 14px;
/* 设置字体粗细为粗体 */
font-weight: bold;
/* 设置字体样式为斜体 */
font-style: italic;
/* 设置文本居中对齐 */
text-align: center;
/* 设置下划线装饰线 */
text-decoration: underline;
/* 设置文本全部转换为大写 */
text-transform: uppercase;
/* 设置行高为 20px */
line-height: 20px;
/* 设置字符间距为 2px */
letter-spacing: 2px;
/* 设置单词间距为 5px */
word-spacing: 5px;
/* 设置首行文本缩进为 20px */
text-indent: 20px;
/* 设置不换行 */
white-space: nowrap;
/* 设置文本阴影,水平偏移 1px,垂直偏移 1px,阴影模糊半径 2px,阴影颜色为黑色 */
text-shadow: 1px 1px 2px black;
}
```
以下是一些常用的 CSS 文本属性:
| 属性 | 描述 | 示例值 |
| ----------------- | ------------------------ | ------------------------------------------------- |
| `color` | 设置文本颜色 | `red`, `#FF0000`, `rgb(255,0,0)` |
| `font-family` | 设置字体 | `Arial`, `"Times New Roman"`, `sans-serif` |
| `font-size` | 设置字体大小 | `12px`, `1em`, `80%` |
| `font-weight` | 设置字体的粗细 | `normal`, `bold`, `600` |
| `font-style` | 设置字体样式,如斜体 | `normal`, `italic`, `oblique` |
| `text-align` | 设置文本对齐方式 | `left`, `right`, `center`, `justify` |
| `text-decoration` | 设置文本装饰线,如下划线 | `none`, `underline`, `overline`, `line-through` |
| `text-transform` | 设置文本转换,如大写 | `none`, `uppercase`, `lowercase`, `capitalize` |
| `line-height` | 设置行高 | `normal`, `1.5`, `20px` |
| `letter-spacing` | 设置字符间距 | `normal`, `3px`, `0.5em` |
| `word-spacing` | 设置单词间距 | `normal`, `10px`, `2em` |
| `text-indent` | 设置首行文本缩进 | `0`, `20px`, `5%` |
| `white-space` | 设置如何处理元素内的空白 | `normal`, `nowrap`, `pre`, `pre-wrap`, `pre-line` |
| `text-shadow` | 设置文本阴影 | `1px 1px 2px black` |
## 溢出内容
在 CSS 中,`overflow` 属性用于控制当元素的内容超过其指定的宽度和高度时发生的情况。这种情况通常称为溢出。`overflow` 属性有以下几个值:
- `visible`:这是默认值,表示内容会**溢出元素的边界框**。
- `hidden`:如果内容溢出元素的边界框,则该**内容会被剪裁**,并且其他内容是不可见的。
- `scroll`:如果内容溢出元素的边界框,**浏览器会添加滚动条**以便查看剩余的内容。
- `auto`:如果内容溢出元素的边界框,**浏览器会根据需要添加滚动条。**
另外,还有 `overflow-x` 和 `overflow-y` 属性,这两个属性分别用于设置元素的水平和垂直溢出。这些属性有相同的值:`visible`、`hidden`、`scroll` 和 `auto`。
以下是一些示例:
```css
/* 如果其内容溢出,该内容将被剪裁 */
.example {
overflow: hidden;
}
/* 如果其内容在垂直方向上溢出,浏览器将添加滚动条 */
.example {
overflow-y: scroll;
}
/* 如果其内容溢出,浏览器将根据需要添加滚动条 */
.example {
overflow: auto;
}
```
需要注意的是,**`overflow` 属性只有在元素的宽度和高度已经明确指定(例如,通过 CSS 或内联样式)**,并且内容实际上溢出这些指定的尺寸时,才会起作用。
## 单位和值
在 CSS 中,我们经常需要为各种属性提供值,这些值可能需要单位。下面是一些常见的 CSS 单位和值:
| 类型 | 单位 | 说明 |
| :----------- | :----------- | :----------------------------------------------------------- |
| 相对长度 | em | 相对于父元素的字体大小 |
| 相对长度 | rem | 相对于根元素(通常是 ``)的字体大小 |
| 相对长度 | % | 相对于父元素的大小 |
| **绝对长度** | px | 屏幕上的一个点 |
| **绝对长度** | cm, mm, in | 在屏幕上的大小可能会因设备而异,但在打印中很有用 |
| 其他单位 | vw | 相对于视口的宽度,"1vw" 等于视口宽度的 1% |
| 其他单位 | vh | 相对于视口的高度,"1vh" 等于视口高度的 1% |
| 其他单位 | vmin 和 vmax | 分别是视口宽度和高度中较小和较大的值的百分比 |
| 颜色值 | Hexadecimal | 十六进制,如 "#FF0000" 代表红色 |
| 颜色值 | RGB | 如 "rgb(255, 0, 0)" 代表红色 |
| 颜色值 | RGBA | 增加了一个 alpha (透明度) 值,如 "rgba(255, 0, 0, 0.5)" 代表半透明的红色 |
| 颜色值 | HSL | 使用色相(hue)、饱和度(saturation)和亮度(lightness)来指定颜色,如 "hsl(0, 100%, 50%)" 代表红色 |
| 颜色值 | HSLA | 与 HSL 类似,但增加了 alpha (透明度) 值,如 "hsla(0, 100%, 50%, 0.5)" 代表半透明的红色 |
| 关键字值 | display | 可以接受 "block", "inline", "inline-block", "none" 等值 |
| 关键字值 | position | 可以接受 "static", "relative", "absolute", "fixed" 等值 |
## 布局技巧
在 CSS 的世界里,布局是最重要的技巧之一。**Flexbox(弹性盒子)和 Grid(网格)布局是两种现代且强大的布局方法。**Flexbox 主要用于在一维空间(行或列)内对元素进行布局,非常适合用于组件和小型布局。而 Grid 则主要用于在二维空间(行和列)内对元素进行布局,非常适合用于大型布局项目,如整个页面布局。
### Display
CSS 中 `display` 属性用于控制元素的显示类型。以下是一些常见的 `display` 属性值:
| 属性值 | 描述 | 示例元素 |
| :------------- | :----------------------------------------------------------- | :------------------------------- |
| `block` | 元素作为块级元素显示,前后会有换行符。 | `