diff --git "a/\345\217\266\345\255\220\350\241\241/20241014-CSS\351\200\211\346\213\251\345\231\250\357\274\232\344\274\252\347\261\273.md" "b/\345\217\266\345\255\220\350\241\241/20241014-CSS\351\200\211\346\213\251\345\231\250\357\274\232\344\274\252\347\261\273.md"
new file mode 100644
index 0000000000000000000000000000000000000000..ff2a51e514be9476ab043aa467b183d4548c9bae
--- /dev/null
+++ "b/\345\217\266\345\255\220\350\241\241/20241014-CSS\351\200\211\346\213\251\345\231\250\357\274\232\344\274\252\347\261\273.md"
@@ -0,0 +1,194 @@
+# CSS 选择器:伪类
+
+## 伪类选择器概述
+
+伪类选择器是用于选择处于特定状态的元素的CSS选择器。它们使我们能够为元素在不同状态下(例如被点击、鼠标悬停等)应用不同的样式。伪类通过冒号(:)表示。
+
+## 伪类类型
+
+伪类选择器分为两种:
+
+1. **静态伪类**:主要用于超链接(标签)。
+ - `:link`:表示链接未被访问的状态。
+ - `:visited`:表示链接已被访问的状态。
+2. **动态伪类**:适用于所有HTML元素。
+ - `:hover`:鼠标悬停在元素上时应用的样式。
+ - `:active`:鼠标点击元素但未松开时的样式。
+ - `:focus`:元素获得焦点时的样式,通常用于输入框等可交互元素。
+
+## 超链接的状态
+
+标签有四种伪类状态,具体如下:
+
+- `:link`:表示链接未被访问。
+- `:visited`:表示链接已被访问。
+- `:hover`:鼠标悬停在链接上时的样式。
+- `:active`:鼠标点击链接但未松开时的样式。
+
+## 示例代码
+
+以下是一个简单的CSS示例,展示如何使用伪类为超链接定义不同的样式:
+
+```css
+/* 超链接样式定义 */
+a:link {
+ color: red; /* 未访问链接为红色 */
+}
+a:visited {
+ color: orange; /* 已访问链接为橙色 */
+}
+a:hover {
+ color: green; /* 鼠标悬停时链接为绿色 */
+}
+a:active {
+ color: black; /* 鼠标点击时链接为黑色 */
+}
+```
+
+## 伪类的顺序
+
+在CSS中,这四种状态的伪类必须按照固定的顺序书写,具体为:
+
+`a:link, a:visited, a:hover, a:active`
+
+如果不按照上述顺序书写,某些样式可能会失效。这种规则被称为“爱恨准则”。
+
+## 超链接美化示例
+
+下面的代码展示了如何通过CSS为导航栏中的超链接添加样式,使其在不同状态下表现出不同的样式:
+
+```html
+
+
+
+
+
单元格1 | +单元格2 | +单元格3 | +单元格4 | +
单元格5 | +单元格6 | +单元格7 | +单元格8 | +
这是段落文本。
+ + +``` + +在这个例子中: +- `h1` 和 `p` 都继承了 `body` 元素的文字颜色为红色和字体为Arial。 +- `p` 元素自定义了自己的 `font-size`,因此段落文字大小为16px,而`h1`没有设置大小,因此它的字体大小取决于浏览器的默认值或其他样式。 + +### 1.3 不可继承的属性 + +一些样式属性不会自动从父元素传递到子元素。这些属性大多与布局、边框、背景等页面结构相关,主要包括: + +- **`background-color`**:背景颜色。 +- **`border`**:边框样式。 +- **`margin`**:外边距。 +- **`padding`**:内边距。 +- **`width`** 和 **`height`**:尺寸属性。 + +如果这些属性没有被明确设置,子元素将使用浏览器的默认值,而不是继承父元素的值。 + +#### 示例 + +```html +这个段落不会继承div的背景颜色。
+`元素不会继承背景颜色。 + +### 1.4 强制继承 + +有时我们可能希望子元素继承某些不可继承的属性。为了实现这一点,可以使用CSS的`inherit`关键字,明确要求子元素继承父元素的某个属性。 + +#### 示例 + +```css +div { + background-color: inherit; /* 强制继承父元素的背景颜色 */ +} +``` + +通过使用`inherit`,我们可以强制子元素继承某些属性,而不是使用默认值。 + +--- + +## 2. CSS 层叠性(Cascade) + +### 2.1 什么是层叠性? + +CSS中的"层叠性"(Cascade)指的是当一个元素同时匹配多个CSS规则时,浏览器需要决定优先应用哪一条规则。CSS的设计初衷是为开发者提供灵活性,因此同一个元素可能会有多个样式规则来自不同的地方。 + +浏览器通过一套规则来确定最终生效的样式,这些规则包括:**样式的来源、重要性**(`!important`)、**优先级**(specificity)和**顺序**。 + +### 2.2 样式来源 + +在浏览器中,样式可以从三种来源获得: + +1. **浏览器默认样式**:浏览器会为所有未定义样式的元素提供默认的基础样式。 +2. **外部样式表**:开发者编写的CSS文件,链接到HTML文档中。 +3. **用户定义样式**:用户可以通过浏览器设置或插件自定义一些样式。 + +浏览器会根据这些来源的优先级来决定应用哪一组样式。 + +### 2.3 优先级(Specificity) + +优先级决定了当同一个元素有多个规则时,哪一条规则将被应用。不同的CSS选择器有不同的优先级,优先级越高的规则会覆盖优先级低的规则。 + +- **行内样式**:最高优先级,直接在HTML元素中定义的样式。 +- **ID选择器**:优先级较高的选择器,通常用于标识页面中的唯一元素。 +- **类选择器、伪类选择器**:用于应用于多个元素的选择器。 +- **标签选择器**:用于匹配特定HTML标签,如`div`、`p`、`h1`等。 + +### 2.4 优先级计算 + +CSS优先级可以通过数值系统来理解,每个选择器类型都有固定的优先级值: + +- **标签选择器**:`0, 0, 0, 1` +- **类选择器、伪类选择器**:`0, 0, 1, 0` +- **ID选择器**:`0, 1, 0, 0` +- **行内样式**:`1, 0, 0, 0` + +当元素匹配多个规则时,浏览器会根据优先级值的大小来决定应用哪一个规则。 + +#### 示例 + +```html + + +
+ +这个文本会显示为红色。
+ + +``` + +- 由于ID选择器`#important`的优先级最高,文本颜色将会被应用为红色,尽管`p`和`class="highlight"`也定义了颜色样式。 + +### 2.5 使用 `!important` + +`!important` 是一种用来强制某个样式优先应用的声明。即使在层叠性和优先级计算中某个规则具有较低的优先权,只要加上`!important`,这条规则就会强制生效。 + +```css +p { + color: blue !important; /* 强制将段落颜色设为蓝色 */ +} +``` + +- 无论其他选择器或优先级如何,`p`元素的文字颜色都会是蓝色。 + +--- + +## 3. 继承性和层叠性的结合使用 + +继承性和层叠性是CSS中两个紧密相关的概念。继承性允许样式在元素树中传递,而层叠性解决了当多个规则冲突时的优先级问题。在实际开发中,继承和层叠往往会一起工作,以决定网页的最终样式。 + +#### 示例 + +```html + + + + +这是绿色的文本。
+这是蓝色的文本。
+ + +``` + +在这个例子中,`#highlight`段落使用了绿色的文字颜色,因为ID选择器的优先级最高。而其他段落继承了蓝色,并且覆盖了`body`中的灰色。 diff --git "a/\345\217\266\345\255\220\350\241\241/20241016-CSS\347\233\222\346\250\241\345\236\213\350\257\246\350\247\243.md" "b/\345\217\266\345\255\220\350\241\241/20241016-CSS\347\233\222\346\250\241\345\236\213\350\257\246\350\247\243.md" new file mode 100644 index 0000000000000000000000000000000000000000..3d6eec4ea6f881f606b458d31b461a6310f1673f --- /dev/null +++ "b/\345\217\266\345\255\220\350\241\241/20241016-CSS\347\233\222\346\250\241\345\236\213\350\257\246\350\247\243.md" @@ -0,0 +1,149 @@ +# CSS 盒模型 + +## 盒子模型的基本区域 + +盒模型由四个主要区域组成: + +1. **内容区域**(Content):元素的实际内容部分,如文本、图片等。 +2. **内边距**(Padding):内容区域与边框之间的距离。内边距会扩展盒子的大小,但不会影响元素的外部边界。 +3. **边框**(Border):围绕内容区域和内边距的边框。边框的厚度会影响盒子的总大小。 +4. **外边距**(Margin):元素与周围其他元素的距离。外边距不会影响盒子的尺寸,但会影响布局中的元素之间的距离。 + +## 代码演示 + +盒子模型的代码示例: + +```css +div { + width: 200px; + height: 200px; + padding: 50px; + border: 10px solid black; + margin: 30px; +} +``` + +在这个示例中,虽然`width`和`height`设置为200px,但元素的总宽高将包括`padding`、`border`,因此盒子的实际宽高为320px(200 + 50*2 + 10*2)。 + +## 标准盒模型与IE盒模型 + +CSS中有两种盒模型: + +1. **标准盒模型**(W3C Box Model):在标准盒模型中,`width`和`height`只指内容区域的宽高,不包括内边距和边框。 +2. **IE盒模型**:在IE盒模型中,`width`和`height`包含了内容区域、内边距和边框。 + +## 设置盒模型模式 + +通过CSS属性`box-sizing`可以指定使用哪种盒模型。通常使用`border-box`来使用IE盒模型,使用`content-box`来使用标准盒模型。示例: + +```css +/* 标准盒模型 */ +element { + box-sizing: content-box; +} + +/* IE盒模型 */ +element { + box-sizing: border-box; +} +``` + +## `` 标签的默认 `margin` + +默认情况下,``标签带有`8px`的外边距,这会导致页面内容并不完全贴合浏览器窗口的边缘。可以通过CSS来清除这个默认的外边距: + +```css +body { + margin: 0; +} +``` + +## 宽度与高度的计算 + +在盒模型中,元素的总宽度和高度不仅仅是`width`和`height`的数值,还需要加上内边距和边框的厚度。实际总宽高的计算公式为: + +```text +实际宽度 = width + 左内边距 + 右内边距 + 左边框 + 右边框 +实际高度 = height + 上内边距 + 下内边距 + 上边框 + 下边框 +``` + +## Padding(内边距) + +内边距是内容区域与边框之间的空间,它会扩展元素的大小,但不会影响其他元素的布局。`padding`可以单独为四个方向指定,也可以通过综合属性同时设置。例子: + +```css +/* 单独设置四个方向的padding */ +element { + padding-top: 20px; + padding-right: 15px; + padding-bottom: 10px; + padding-left: 5px; +} + +/* 综合属性 */ +element { + padding: 20px 15px 10px 5px; /* 上右下左顺时针方向 */ +} +``` + +## Padding的计算顺序 + +- 如果只设置一个值,四个方向都会应用该值。 +- 如果设置两个值,第一个值应用于上下,第二个值应用于左右。 +- 如果设置三个值,第一个值应用于上,第二个值应用于左右,第三个值应用于下。 +- 如果设置四个值,则分别应用于上、右、下、左。 + +## Border(边框) + +边框是包裹内容区域和内边距的线框,可以指定宽度、样式和颜色。边框的基本语法如下: + +```css +element { + border: 1px solid black; +} +``` + +## 边框的拆分 + +边框属性可以被拆分为三部分: + +- `border-width`:边框的宽度。 +- `border-style`:边框的样式,如`solid`(实线)、`dashed`(虚线)、`dotted`(点线)等。 +- `border-color`:边框的颜色。 + +例子: + +```css +element { + border-width: 2px; + border-style: dashed; + border-color: blue; +} +``` + +也可以按方向分别设置: + +```css +element { + border-top: 1px solid red; + border-right: 2px dashed green; + border-bottom: 3px dotted blue; + border-left: 4px double yellow; +} +``` + +## Margin(外边距) + +外边距控制元素与周围其他元素之间的距离。与`padding`类似,`margin`也可以单独设置四个方向,或使用综合属性。例子: + +```css +element { + margin: 10px 20px 30px 40px; /* 上右下左 */ +} +``` + +与`padding`相同,`margin`的设置规则也分为单值、双值、三值和四值模式。 + +## 外边距的折叠 + +当两个垂直相邻的块级元素都设置了外边距时,它们的外边距可能会折叠为一个较大的外边距。这个现象称为**外边距折叠**,通常只发生在块级元素的上下外边距之间。 diff --git "a/\345\217\266\345\255\220\350\241\241/20241017-\346\265\256\345\212\250.md" "b/\345\217\266\345\255\220\350\241\241/20241017-\346\265\256\345\212\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..6adcc197765a82dfa178f9a6f47e96559b10a1fd --- /dev/null +++ "b/\345\217\266\345\255\220\350\241\241/20241017-\346\265\256\345\212\250.md" @@ -0,0 +1,101 @@ +# 浮动 + +## 标准文档流 + +### 标准文档流的特性 + +**(1)空白折叠现象:** +无论有多少空格、换行或tab符,最终都会折叠为一个空格。这意味着HTML中的空白符不会完全呈现出来。 + +例如: +```html +中华人民共和国
+