两万块前端就业课程——学习笔记分享(Day_05)

接续上文:两万块前端就业课程——学习笔记分享(Day_04)-CSDN博客

点关注不迷路哟。你的点赞、收藏,一键三连,是我持续更新的动力哟!!!

主页:

一位搞嵌入式的 genius-CSDN博客一位搞嵌入式的 genius擅长前后端项目开发,嵌入式自学专栏,微机原理与接口技术,等方面的知识,一位搞嵌入式的 genius关注matlab,论文阅读,前端框架,stm32,c++,node.js,c语言,智能家居,vue.js,html,npm,单片机领域. https://blog.csdn.net/m0_73589512?spm=1000.2115.3001.5343

目录

Day05(前端:HTML+CSS阶段)

1. 属性选择器

一、简单选择器

1. 属性选择器

二、全局属性与属性选择器结合

1. title 属性介绍

2. 属性选择器的使用场景

三、属性选择器的注意事项

四、示例演示

五、知识小结

2. 后代选择器(必须掌握的非常重要)

一、后代选择器

1. 所有后代选择器(空格分隔)

2. 直接子代选择器(> 分隔)

二、核心区别对比

三、应用场景与优势

四、注意事项

五、示例总结

3. 兄弟选择器

二、兄弟选择器

1. 相邻兄弟选择器(+ 连接)

2. 普遍兄弟选择器(~ 连接)

三、核心区别对比

四、应用场景示例

五、注意事项

总结

4. 选择器-选择器组-交集-并集(重要:项目中经常会使用的)

1. 交集选择器的进阶理解

2. 并集选择器的实用技巧

3. 选择器组的性能考量

5. 伪类选择器

伪类(Pseudo-classes):控制元素状态的动态选择器

一、伪类的核心概念与本质

二、常用伪类分类与实战应用

1. 动态伪类(响应用户交互)

2. 其他伪类(了解即可)

三、伪类的使用技巧与注意事项

四、知识小结

开发建议

6. 伪类-动态伪类

CSS 动态伪类:状态管理与 LVHA 顺序原则深度解析

一、a 元素的四种核心交互状态(动态伪类)

二、LVHA 顺序原则:避免样式覆盖的核心规则

1. 顺序错误的后果:

三、焦点状态(:focus)的特殊性与位置

1. 特性:

2. 书写位置:

四、默认样式继承与差异化设置

五、实战建议

总结

7. 伪元素

伪元素(Pseudo-elements):装饰元素特定部分的 “虚拟工具”

一、伪元素的核心概念与特点

二、常用伪元素及实战应用

1. 文本特定部分选择:::first-line 与 ::first-letter

2. 内容插入:::before 与 ::after(高频使用)

三、伪元素的使用注意事项

四、知识小结

开发建议


Day05(前端:HTML+CSS阶段)

1. 属性选择器

一、简单选择器

1. 属性选择器

基本概念: 根据元素的属性名称选择元素,基础语法为 [attribute],表示选择所有拥有该属性的元素(无论属性值是什么)。 例如:[title] { color: red; } 会选中所有带 title 属性的元素。

精确匹配: 使用 [attribute=value] 语法精确匹配属性值,其中 value 需严格等于属性值(区分大小写)。 例如:[title="div"] { background: blue; } 仅选中 title 属性值为 "div" 的元素。

语法变体

语法含义示例
[attr^=value]属性值以 value 开头[title^="d"] 匹配 title="div"、"doc"
[attr$=value]属性值以 value 结尾[title$="v"] 匹配 title="div"、"lov"
[attr*=value]属性值包含 value(任意位置)[title*="i"] 匹配 title="div"、"list"
[attr~=value]属性值包含 value 且以空格分隔[title~="div"] 匹配 title="a div b"
`[attr=value]`属性值等于 value 或以 value - 开头`[lang=en]`匹配 lang="en"、"en-US"

开发建议

  • 日常开发中优先使用 classid 选择器,更直观且性能更优。

  • 属性选择器多用于特殊场景(如选择原生属性,如 [disabled][href] 等)。

二、全局属性与属性选择器结合

1. title 属性介绍
  • 功能:HTML 全局属性,可添加到任何元素,鼠标悬停时显示提示文本。

  • 示例:

    <div title="这是一个div">鼠标悬停查看提示</div>
    <p title="段落说明">这是一段文字</p>
2. 属性选择器的使用场景
  • 适用场景:当需要选择具有特定属性的元素,且无需手动添加 class 时。

  • 优势:直接利用元素已有的属性(如原生属性 titlehrefdisabled),减少冗余代码。

  • 示例:

    /* 选中所有带title属性的元素 */
    [title] { 
      border: 1px solid #ccc; 
    }
    ​
    /* 选中title值为"提示"的元素 */
    [title="提示"] { 
      color: green; 
    }

三、属性选择器的注意事项

  1. 语法细节

    • 必须用中括号 [] 包裹属性名,否则会被解析为元素选择器(如 title 会被当作标签选择器,而非属性)。

    • 精确匹配时,= 前后不能有空格(如 [title = "div"] 是错误写法)。

  2. 优先级

    • 属性选择器优先级与 class 选择器相同(均为 0,0,1,0),低于 id 选择器。

  3. 性能考量

    • 复杂属性选择器(如 *=^=)性能略低于 class 选择器,大规模使用可能影响页面渲染速度。

四、示例演示

<!-- HTML -->
<div title="div">第一个div(title="div")</div>
<div title="div box">第二个div(title="div box")</div>
<div title="doc">第三个div(title="doc")</div>
<p title="paragraph">这是一个段落(title="paragraph")</p>
/* CSS */
/* 1. 所有带title属性的元素 */
[title] { 
  margin: 10px; 
  padding: 5px; 
}
​
/* 2. title值精确为"div"的元素 */
[title="div"] { 
  background: yellow; 
}
​
/* 3. title以"doc"开头的元素 */
[title^="doc"] { 
  color: blue; 
}
​
/* 4. title包含"box"的元素 */
[title*="box"] { 
  border: 2px dashed red; 
}

效果

  • 所有元素都有外边距和内边距(因 [title] 选择器)。

  • 第一个 div 背景为黄色(因 [title="div"])。

  • 第三个 div 文字为蓝色(因 [title^="doc"])。

  • 第二个 div 有红色虚线边框(因 [title*="box"])。

五、知识小结

知识点核心内容易错点
基础属性选择器[attribute] 匹配所有带该属性的元素忘记写中括号 []
精确匹配[attribute=value] 严格匹配属性值= 前后加空格导致失效
高级匹配语法^=(开头)、$=(结尾)、*=(包含)等混淆 ~=(空格分隔)和 *=(任意包含)
开发最佳实践优先使用 class,属性选择器用于特殊场景过度使用复杂属性选择器影响性能

通过理解属性选择器的语法和适用场景,可以在特殊需求下更灵活地选择元素,同时避免滥用导致代码冗余或性能问题。

2. 后代选择器(必须掌握的非常重要)

一、后代选择器

后代选择器用于根据元素的嵌套层级关系选择元素,主要分为两种类型:

1. 所有后代选择器(空格分隔)

定义:通过空格分隔两个选择器,表示选中 “第一个选择器匹配元素的所有后代元素”(包括直接子元素和间接嵌套的后代元素)。

语法

祖先选择器 后代选择器 { /* 样式 */ }

示例解析: 结合以下 HTML 结构:

<div class="home">
  <div class="box">
    <span>呵呵</span> <!-- 间接后代(home → box → span) -->
    <div class="content">
      <div class="desc">
        <p><span>哈哈</span></p> <!-- 深层后代(home → ... → span) -->
      </div>
    </div>
  </div>
  <span>啦啦啦</span> <!-- 直接后代(home → span) -->
</div>
<span>外部span</span> <!-- 非home后代 -->

若使用选择器:

.home span { color: red; }
  • 匹配范围.home 内部所有 span(包括直接子元素 <span>啦啦啦</span>、间接子元素 <span>呵呵</span>、深层嵌套的 <span>哈哈</span>)。

  • 排除范围.home 外部的 <span>外部span</span> 不匹配。

2. 直接子代选择器(> 分隔)

定义:通过大于号 > 分隔两个选择器,表示仅选中 “第一个选择器匹配元素的直接子元素”(仅一级嵌套,不包含间接后代)。

语法

父选择器 > 子选择器 { /* 样式 */ }

示例解析: 使用选择器:

.home > span { background: green; }
  • 匹配范围:仅 .home 的直接子元素 <span>啦啦啦</span>(一级嵌套)。

  • 排除范围.home 内部的间接后代(如 <span>呵呵</span><span>哈哈</span>)不匹配。

二、核心区别对比

选择器类型语法符号匹配范围典型应用场景
所有后代选择器空格所有层级的后代(直接 + 间接)批量设置某容器内所有同类元素样式
直接子代选择器>仅直接子元素(一级嵌套)精准控制父元素的直接子元素样式

三、应用场景与优势

  1. 避免冗余 class: 无需为每个嵌套元素添加 class,直接通过层级关系选择,例如:

    .article p { line-height: 1.6; } /* 匹配.article内所有p标签 */
    .nav > li { margin-left: 10px; } /* 仅匹配.nav的直接子元素li */
  2. 精准控制样式范围: 避免样式污染外部元素,例如:

    • .header a 仅设置页头内的链接样式,不影响页面其他链接。

    • .list > .item 仅设置列表的直接子项样式,不影响子项内部的嵌套元素。

四、注意事项

  1. 性能影响: 所有后代选择器(空格)会递归查找所有层级,深层嵌套时可能增加浏览器解析开销,建议避免过度嵌套(如 a b c d e 这类多层级选择器)。

  2. 语法细节

    • 空格和 > 前后可以有空格(如 .home > span.home>span 效果相同),但推荐保留空格提高可读性。

    • 嵌套层级以 DOM 结构为准,与 HTML 缩进无关(即使代码缩进混乱,只要 DOM 层级正确,选择器仍生效)。

五、示例总结

通过以下代码可直观对比两种选择器的效果:

<style>
  .home span { color: red; } /* 所有后代span文字变红 */
  .home > span { background: green; } /* 直接子代span背景变绿 */
</style>
​
<div class="home">
  <div class="box">
    <span>呵呵</span> <!-- 文字红,无绿背景(间接后代) -->
    <div class="content">
      <div class="desc">
        <p><span>哈哈</span></p> <!-- 文字红,无绿背景(深层后代) -->
      </div>
    </div>
  </div>
  <span>啦啦啦</span> <!-- 文字红,绿背景(直接子代) -->
</div>
<span>外部span</span> <!-- 无样式(非后代) -->

效果

  • 所有 .home 内部的 span 文字均为红色。

  • .home 的直接子元素 span 同时拥有绿色背景。

3. 兄弟选择器

二、兄弟选择器

兄弟选择器用于选择共享同一父元素的同级元素(即 “兄弟节点”),根据匹配范围可分为两种类型。

1. 相邻兄弟选择器(+ 连接)

定义:通过加号 + 连接两个选择器,表示选中 “第一个选择器匹配元素的紧邻后一个兄弟元素”(仅一个,且必须紧随其后)。

语法

前兄弟选择器 + 目标选择器 { /* 样式 */ }

示例解析: 给定 HTML 结构:

<div class="home">
  <div class="box">盒子1</div>
  <div class="content">内容1</div> <!-- 紧邻.box的兄弟 -->
  <div class="content">内容2</div>
</div>

使用选择器:

.box + .content { color: red; }
  • 匹配结果:仅选中 .box 后面紧邻的第一个 .content(即 “内容 1”),文字变为红色。

  • 条件限制:

    • 两个元素必须是同一父元素的子节点(此处父元素为 .home)。

    • 目标元素必须紧跟在前兄弟元素之后(中间不能有其他元素)。

2. 普遍兄弟选择器(~ 连接)

定义:通过波浪号 ~ 连接两个选择器,表示选中 “第一个选择器匹配元素的所有后续兄弟元素”(不限数量,无需紧邻)。

语法

前兄弟选择器 ~ 目标选择器 { /* 样式 */ }

示例解析: 基于上述 HTML 结构,使用选择器:

.box ~ .content { background: yellow; }
  • 匹配结果:选中 .box 后面所有 .content 兄弟元素(包括 “内容 1” 和 “内容 2”),背景变为黄色。

  • 条件限:

    • 两个元素必须是同一父元素的子节点。

    • 目标元素必须在前兄弟元素之后(但中间可以有其他元素)。

三、核心区别对比

选择器类型语法符号匹配范围典型应用场景
相邻兄弟选择器+仅紧邻的后一个兄弟元素选中紧随某元素后的特定元素(如表单提示语)
普遍兄弟选择器~所有后续兄弟元素(不限紧邻)批量设置某元素后的所有同类兄弟样式

四、应用场景示例

  1. 表单提示样式(相邻兄弟): 为输入框后的紧邻提示文字设置样式:

    <style>
      input + .tip { color: #666; font-size: 12px; }
      input:focus + .tip { color: #165DFF; } /* 输入框聚焦时提示文字变色 */
    </style>
    ​
    <div class="form-item">
      <input type="text" placeholder="用户名">
      <span class="tip">请输入3-16位字符</span> <!-- 紧邻input的兄弟 -->
      <span class="extra">其他说明</span> <!-- 不匹配(非紧邻) -->
    </div>
  2. 列表选中状态联动(普遍兄弟): 选中某列表项后,所有后续项变灰:

    <style>
      .list .item.active ~ .item { opacity: 0.5; }
    </style>
    ​
    <ul class="list">
      <li class="item">项1</li>
      <li class="item active">项2(选中)</li>
      <li class="item">项3(变灰)</li>
      <li class="item">项4(变灰)</li>
    </ul>

五、注意事项

  1. 方向限制: 兄弟选择器仅匹配 “后续” 兄弟,不匹配 “前面” 的兄弟。例如 .content + .box 无法选中 .content 前面的 .box

  2. 父元素一致性: 必须确保两个元素属于同一父元素,否则无法匹配。例如:

    <div class="home">
      <div class="box">盒子</div>
    </div>
    <div class="home">
      <div class="content">内容</div> <!-- 与.box不同父元素,不匹配.box + .content -->
    </div>
  3. 使用频率: 兄弟选择器在日常开发中使用频率低于后代选择器,主要用于特殊联动场景(如表单、列表状态关联),只需掌握基础语法即可。

总结

兄弟选择器通过元素的同级关系筛选目标,核心区别在于匹配范围:

  • + 选中 “紧邻的后一个兄弟”,适用于精准关联两个相邻元素。

  • ~ 选中 “所有后续兄弟”,适用于批量设置后续元素样式。 通过实际场景练习(如表单、导航栏)可快速掌握其用法,无需死记硬背。

4. 选择器-选择器组-交集-并集(重要:项目中经常会使用的)

1. 交集选择器的进阶理解
  • 多重条件组合:除了元素与类的组合,交集选择器还可实现更复杂的匹配,例如:

    • p.text.active:选中同时拥有textactive两个类的<p>元素

    • div#header.main:选中 id 为header且类为main<div>元素(但不推荐过度叠加,影响可读性)

  • 错误写法警示:

    • div .box(中间有空格):这是后代选择器,而非交集选择器

    • .box div:含义为 "类为 box 的元素内部的 div",与交集逻辑完全不同

2. 并集选择器的实用技巧
  • 换行书写规范:当选择器较多时,建议换行排版以增强可读性:

    h1,
    h2,
    h3,
    .title {
      font-weight: normal;
      color: #333;
    }
  • 避免无意义合并:不要为了精简代码强行合并关联性低的选择器,例如将 "按钮样式" 与 "标题样式" 合并可能导致后期维护混乱

  • 优先级特性:并集选择器中每个选择器的优先级独立计算,例如:

    p,       /* 优先级:元素选择器(1) */
    .box,    /* 优先级:类选择器(10) */
    #logo {  /* 优先级:ID选择器(100) */
      margin: 0;
    }

    上述代码中,

    #logo

    的样式仍会覆盖其他选择器对同一元素的样式设置

3. 选择器组的性能考量
  • 交集选择器越具体,匹配效率越高(浏览器会先匹配左侧元素再筛选条件)

  • 并集选择器的性能消耗与选择器数量正相关,建议控制在 10 个以内

  • 避免同时使用交集与并集的复杂组合,例如:

    /* 不推荐:过度复杂的选择器组 */
    div.box, p.text, span#link.active { ... }

通过合理运用选择器组,可以在保证样式精准性的同时大幅提升 CSS 代码的效率,但需注意平衡简洁性与可读性,避免陷入 "为精简而精简" 的误区。

5. 伪类选择器

伪类(Pseudo-classes):控制元素状态的动态选择器

一、伪类的核心概念与本质

伪类是 CSS 选择器的特殊类型,用于选择处于特定状态的元素(如鼠标悬停、被点击、获取焦点等)。其核心特点是:

  • “伪”:并非真实存在的类(不通过class属性定义),而是基于元素的动态状态或位置自动匹配。

  • 语法:以冒号(:)为前缀,如 :hover:active

  • 作用:为元素的不同状态添加差异化样式,增强交互反馈(如按钮悬停变色、输入框聚焦高亮)。

二、常用伪类分类与实战应用

按功能可分为动态伪类(最常用)、目标伪类、结构伪类等,其中动态伪类是前端开发的核心。

1. 动态伪类(响应用户交互)
伪类作用场景示例代码核心功能
:hover鼠标悬停在元素上时button:hover { background: blue; }按钮悬停时变色,提供交互反馈
:active元素被点击且未释放时(点击中)a:active { color: red; }链接点击瞬间变色,增强操作感知
:focus元素获取焦点时(如输入框)input:focus { border: 2px solid green; }输入框聚焦时高亮边框,提示当前交互对象
:link未被访问过的链接(仅适用于<a>a:link { color: #333; }区分未访问链接与其他文本
:visited已被访问过的链接(仅适用于<a>a:visited { color: #999; }提示用户该链接已访问

注意

  • :link:visited 仅对带href<a>标签生效;

  • 动态伪类的书写顺序会影响效果(推荐:linkvisitedhoveractive)。

2. 其他伪类(了解即可)
  • 目标伪类 :target:匹配 URL 中锚点对应的元素(如#section1),用于跳转后高亮目标区域:

    /* URL为https://example.com#intro时生效 */
    #intro:target { background: #f0f0f0; }
  • 元素状态伪类:用于表单控件,如:

    • :enabled/:disabled:匹配启用 / 禁用的输入框;

    • :checked:匹配选中的单选按钮 / 复选框。

  • 否定伪类 :not():排除特定元素,简化选择器:

    /* 选中所有class不是"disabled"的按钮 */
    button:not(.disabled) { cursor: pointer; }
三、伪类的使用技巧与注意事项
  1. 组合使用:伪类可与类选择器、元素选择器组合,精准定位元素:

    /* 仅当类为"btn"的按钮悬停时生效 */
    .btn:hover { transform: scale(1.05); }
  2. 优先级:伪类的优先级与类选择器相同(高于元素选择器,低于 ID 选择器):

    • div:hover 优先级 > div(元素选择器);

    • #box:hover 优先级 > .box:hover(ID 选择器 > 类选择器)。

  3. 兼容性

    • 常用伪类(:hover:focus)兼容所有现代浏览器;

    • 特殊伪类(如:nth-child())需注意低版本浏览器支持(可通过 Can I Use 查询)。

四、知识小结
知识点核心内容考试重点 / 易混淆点难度系数
伪类基本概念选择特定状态的元素,语法以:开头与类选择器的区别(: vs .⭐⭐
动态伪类hover鼠标悬停时的样式,前端开发必掌握可与任意元素组合(不限于链接)⭐⭐⭐
动态伪类组合link/visited/hover/active的顺序顺序错误可能导致样式失效(如hover需在link之后)⭐⭐
其他伪类:focus/:target/:not()的基本作用了解存在即可,无需深入记忆
开发建议
  1. 优先掌握hover:这是最常用的伪类,几乎所有交互元素(按钮、导航、卡片)都需要,务必熟练运用。

  2. 增强交互反馈:为可点击元素(<a>button)添加hoveractive样式,让用户清晰感知操作状态。

  3. 表单必用focus:输入框、下拉框等添加focus样式,提升表单易用性(如高亮边框、提示文字)。

伪类是实现 “动态样式” 的核心工具,合理使用能让页面从 “静态” 变为 “可交互”,显著提升用户体验。

6. 伪类-动态伪类

CSS 动态伪类:状态管理与 LVHA 顺序原则深度解析

一、a 元素的四种核心交互状态(动态伪类)

动态伪类是 CSS 中用于响应用户交互的关键工具,其中<a>标签的四种状态最为典型,分别对应不同的交互阶段:

伪类状态描述默认样式(浏览器)核心作用
a:link未被访问过的链接(初始状态)蓝色,下划线区分未访问链接与其他文本
a:visited已被访问过的链接(基于浏览器历史)紫色,下划线提示用户该链接已浏览
a:hover鼠标悬停在链接上时通常变为红色或加深颜色提供即时交互反馈,引导用户点击
a:active链接被点击且未释放时(点击瞬间)通常为深红色强化点击动作的感知,提升操作确认感

示例代码

/* 未访问链接 */
a:link { color: #3498db; text-decoration: none; }
/* 已访问链接 */
a:visited { color: #9b59b6; }
/* 鼠标悬停 */
a:hover { color: #e74c3c; text-decoration: underline; }
/* 点击瞬间 */
a:active { color: #c0392b; }
二、LVHA 顺序原则:避免样式覆盖的核心规则

四种伪类的书写顺序直接影响样式生效与否,必须严格遵循 link → visited → hover → active(记忆口诀:LoVe HAte,即 Love 的前两个字母 + Hate 的后两个字母)。

1. 顺序错误的后果:

若将hover写在linkvisited之前,会导致悬停样式被默认状态覆盖(因为linkvisited的优先级与hover相同,后定义的样式会覆盖先定义的)。

错误示例

/* 错误顺序:hover在link之前,导致hover样式失效 */
a:hover { color: red; }
a:link { color: blue; } /* 覆盖hover样式 */

正确逻辑

  • 先定义默认状态(linkvisited),再定义交互状态(hoveractive),确保动态状态能覆盖默认状态。

三、焦点状态(:focus)的特殊性与位置

:focus用于选中获得焦点的元素(如通过 Tab 键导航或点击输入框),常见于可交互元素(<a><input><button>等)。

1. 特性:
  • 非交互元素(如<div><p>)默认无法获得焦点;

  • 浏览器会自动为聚焦元素添加 “焦点环”(outline),标识当前可操作对象;

  • 常用于表单交互(如输入框聚焦时高亮边框)。

2. 书写位置:

建议放在hover之后、active之前,即 link → visited → hover → focus → active,原因是:

  • focushover同优先级,需确保悬停后聚焦的样式能生效;

  • active(点击状态)应在最后,覆盖聚焦状态。

示例

a:focus { outline: 2px solid #2ecc71; } /* 焦点样式 */
四、默认样式继承与差异化设置
  • 若仅设置a { color: blue; },所有状态(包括hoveractive)都会继承该颜色,无法实现差异化;

  • 必须单独声明各伪类样式,才能让不同状态显示不同效果;

  • 未显式定义的状态会继承最近的父状态样式(如未定义active,则继承hover的样式)。

五、实战建议
  1. 必写顺序:严格遵循 LVHA 原则,即使暂时不需要某状态(如visited),也建议按顺序占位,避免后续维护时出错。

  2. 移除默认下划线:通过text-decoration: none统一移除a标签的默认下划线,仅在hover时添加(提升美观度)。

  3. 焦点样式优化:保留或自定义:focus样式(如替换默认outline为更美观的边框),兼顾键盘导航用户的体验。

  4. 测试验证:通过 Tab 键测试焦点切换,通过刷新页面(清除缓存)测试linkvisited的区别。

总结

动态伪类是实现交互反馈的核心工具,而 LVHA 顺序原则是确保样式正确生效的 “红线”。掌握linkvisitedhoveractive的顺序逻辑,以及:focus的合理位置,能让链接和交互元素的样式既美观又符合用户操作预期。记住:顺序决定生效,细节决定体验

7. 伪元素

伪元素(Pseudo-elements):装饰元素特定部分的 “虚拟工具”

一、伪元素的核心概念与特点

伪元素是 CSS 中用于选择元素特定部分(如首行文本、首字母)或插入虚拟内容的特殊选择器,与伪类(选择元素状态)的核心区别在于:

  • 作用对象:伪元素针对元素的 “部分内容”,伪类针对元素的 “整体状态”;

  • 语法标识:推荐使用双冒号(::),如 ::first-line(兼容单冒号:,但双冒号更易区分伪类);

  • 虚拟性:不是真实 DOM 元素,仅通过 CSS 渲染,不影响 HTML 结构。

二、常用伪元素及实战应用
1. 文本特定部分选择:::first-line::first-letter

这两个伪元素专门用于装饰文本的首行或首字母,适合排版美化(如书籍、文章标题)。

伪元素作用适用元素核心特性
::first-line选择元素的首行文本块级元素(如pdiv自动适应屏幕尺寸,首行范围随宽度变化
::first-letter选择元素的第一个字符(或汉字)块级元素(行内元素需设display: block可实现首字下沉等排版效果

示例 1:首行文本样式

p::first-line {
  color: #e74c3c; /* 首行文本红色 */
  font-weight: bold; /* 首行加粗 */
  font-size: 1.2em; /* 首行放大 */
}
  • 效果:无论屏幕宽度如何变化,p标签中当前显示的第一行文本都会应用上述样式。

示例 2:首字母下沉

.article::first-letter {
  color: #3498db;
  font-size: 3em; /* 首字母放大 */
  float: left; /* 左浮动实现下沉 */
  line-height: 0.8; /* 调整行高避免错位 */
  margin-right: 5px; /* 与后续文本留间距 */
}
  • 效果:文章第一个字(如 “今”)会放大并左浮动,模拟书籍的首字下沉效果。

2. 内容插入:::before::after(高频使用)

这两个伪元素用于在元素内容的前后插入虚拟内容,常用于添加装饰性元素(如图标、分隔符),不污染 HTML 结构。

  • 核心语法:必须配合 content 属性(即使内容为空),否则不生效。

    .box::before {
      content: "★"; /* 插入内容(文本、空字符串或URL) */
      color: #f39c12; /* 装饰内容样式 */
      margin-right: 8px; /* 与主内容间距 */
    }
    ​
    .box::after {
      content: ""; /* 空内容可用于添加图形 */
      display: inline-block;
      width: 10px;
      height: 10px;
      background: #2ecc71;
      border-radius: 50%; /* 圆形装饰 */
      margin-left: 8px;
    }
  • 效果.box 元素的内容前会出现黄色五角星,内容后会出现绿色圆点,HTML 结构中无需额外标签。

  • 常见用途

    • 添加图标(如用content: "→"作为箭头);

    • 清除浮动(::after { content: ""; clear: both; display: table; });

    • 实现特殊形状(如通过边框和content模拟三角形)。

三、伪元素的使用注意事项
  1. 适用元素限制

    • ::first-line::first-letter 仅对块级元素生效,行内元素(如span)需设置 display: blockinline-block

    • ::before::after 插入的内容默认是行内元素,需通过 display 调整为块级或行内块级。

  2. 与伪类的区分

    • 伪类用单冒号(:),如 :hover(状态);

    • 伪元素推荐用双冒号(::),如 ::before(内容部分),避免混淆。

  3. 性能与维护

    • 装饰性内容优先用伪元素(如图标、分隔符),减少不必要的 DOM 元素;

    • 复杂内容(如需要交互的元素)不适合用伪元素(无法绑定事件)。

四、知识小结
知识点核心内容考试重点 / 易混淆点难度系数
伪元素基本概念选择元素特定部分或插入虚拟内容,用::标识与伪类的区别(内容部分 vs 元素状态)⭐⭐
::first-line选择首行文本,自动适应屏幕宽度仅对块级元素生效,行内元素需转换显示类型⭐⭐
::first-letter选择首字母,实现首字下沉等效果会包含首字母后的标点符号(如 “!”“,”)⭐⭐
::before/::after在内容前后插入虚拟内容,需配合content必须设置content(即使为空),默认行内元素⭐⭐⭐
开发建议
  1. 排版美化:用 ::first-line::first-letter 增强文章可读性(如首行加粗、首字放大)。

  2. 装饰性内容:优先用 ::before/::after 添加图标、分隔线等,保持 HTML 结构简洁。

  3. 兼容性处理:虽然单冒号(:)兼容旧浏览器,但推荐双冒号(::),符合 W3C 规范且语义更清晰。

伪元素是 “用 CSS 装饰内容” 的利器,合理使用能在不增加 DOM 复杂度的前提下,大幅提升页面的视觉效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值