当前位置: 首页 > news >正文

CSS 核心知识点全解析:从基础到实战应用

大家好!今天这篇文章将系统总结 CSS 的核心知识点,从最基础的样式引入到复杂的选择器应用,再到盒子模型、文本处理等实战技巧,全程结合代码示例,让你轻松掌握 CSS 的精髓。

一、CSS 是什么?为什么需要它?

CSS(层叠样式表)是用来控制网页外观的语言。我们可以把网页比作 “毛坯房”,HTML 负责搭建 “墙体结构”(标签),而 CSS 则负责 “装修”—— 设置颜色、字体、布局等,让网页更美观、易读。

前端有三大核心技术:

  • HTML(结构层):定义页面元素
  • CSS(表现层):控制元素样式
  • JavaScript(行为层):实现交互效果

今天我们重点聚焦 “表现层” 的 CSS。

二、CSS 样式的引入方式

要让 CSS 生效,首先要知道如何将样式 “连接” 到 HTML。常见的引入方式有三种:

1. 外链式(推荐)

通过<link>标签引入外部.css文件,实现 HTML(结构)和 CSS(样式)的彻底分离,多个页面可共享同一份样式,便于维护。

<!-- 在<head>中引入 -->
<link rel="stylesheet" href="./css/common.css">

优点:一次修改,多处生效;减轻 HTML 文件体积。

2. 内嵌式

在 HTML 的<style>标签内编写 CSS,样式仅作用于当前页面。

<head><style>p { color: red; } /* 所有p标签文字变红 */</style>
</head>

适用场景:样式仅用于当前页面,且代码量不大时。

3. 行内式

直接在 HTML 标签的style属性中写样式,优先级最高,但会导致结构和样式混杂,不推荐大量使用。

<p style="color: blue; font-size: 20px;">行内样式</p>

总结:优先使用外链式,其次内嵌式,尽量避免行内式。

三、CSS 选择器:精准定位元素

CSS 选择器的作用是 “选中” 需要设置样式的 HTML 元素。就像我们在人群中找人,需要通过 “特征” 定位,选择器就是元素的 “特征”。

1. 基本选择器

最常用的基础选择器,覆盖大多数简单场景。

选择器语法作用示例
标签选择器标签名选中所有同名标签p { color: red; }(所有 p 标签)
类选择器. 类名选中所有带该类名的标签.active { font-size: 20px; }
ID 选择器#ID 名选中唯一带该 ID 的标签(ID 唯一)#logo { width: 100px; }
通配符选择器*选中所有标签* { margin: 0; padding: 0; }(清除默认边距)
并集选择器选择器 1, 选择器 2同时选中多个选择器的元素p, .box { color: blue; }(p 标签和.box 类)

2. 高级选择器

处理更复杂的选择场景,比如父子关系、状态变化等。

(1)组合选择器:处理元素关系
  • E>F:选中 E 的直接子元素F(仅儿子,不含孙子)
    .app>p { color: red; } /* 选中class为app的元素的直接子元素p */
    
  • E F:选中 E 的所有子孙元素F(儿子、孙子都算)
    .app p { background: yellow; } /* 选中app内所有p(包括嵌套的) */
    
  • E+F:选中 E 后面的第一个兄弟元素F
    .first+p { color: blue; } /* 选中class为first的元素后面第一个p */
    
  • E~F:选中 E 后面的所有兄弟元素F
    .first~p { color: green; } /* 选中first后面所有p兄弟 */
    
(2)伪类选择器:根据元素状态选择
  • 链接伪类(a 标签专用):

    a:link { color: pink; } /* 未访问的链接 */
    a:visited { color: red; } /* 已访问的链接 */
    a:hover { color: orange; } /* 鼠标悬浮时 */
    a:active { color: purple; } /* 鼠标点击未松开时 */
    

    注意顺序:link -> visited -> hover -> active,否则可能失效。

  • 表单伪类

    input:enabled { background: white; } /* 可用的输入框 */
    input:disabled { background: #eee; } /* 禁用的输入框 */
    input:focus { background: yellow; } /* 光标聚焦的输入框 */
    input:checked { width: 20px; } /* 被选中的复选框/单选框 */
    
  • 否定伪类:排除特定元素

    .first>input:not(#all) { width: 30px; } /* 选中.first下所有input,除了id为all的 */
    
(3)结构伪类:根据位置选择
  • E:nth-of-type(n):选中 E 的第 n 个子元素
    ul>li:nth-of-type(2n) { background: blue; } /* 列表中偶数项 */
    ul>li:nth-of-type(2n-1) { background: gray; } /* 列表中奇数项 */
    
  • E:first-of-type:选中 E 的第一个子元素
  • E:last-of-type:选中 E 的最后一个子元素
(4)属性选择器:根据属性值选择
input[name=username] { background: aqua; } /* name属性为username的input */
input[type=text] { background: red; } /* type属性为text的input */
a[href^=http] { color: green; } /* href以http开头的链接 */
a[href$=pdf] { color: red; } /* href以pdf结尾的链接 */
(5)伪元素选择器:创建 “虚拟元素”

不是选中已有元素,而是在元素内部添加虚拟内容(需配合content属性)

.third::after {content: '添加的文字'; /* 必须有,可空 */display: inline-block; /* 转为行内块,可设置宽高 */
}
p::first-letter { color: red; } /* 段落第一个字 */
p::first-line { background: yellow; } /* 段落第一行 */
p::selection { color: white; background: black; } /* 选中的文本样式 */

四、选择器优先级:样式冲突时谁说了算?

当多个选择器选中同一个元素,且设置了冲突的样式(比如同时设置 color),谁的样式会生效?这取决于优先级

优先级规则:

  1. 权重计算:不同选择器有不同权重,权重高的生效。

    • !important:无穷大(最高级,谨慎使用)
    • 行内样式(style属性):1000
    • ID 选择器:100
    • 类 / 伪类 / 属性选择器:10
    • 标签 / 伪元素选择器:1
    • 通配符:0

    示例:

    .list>.second { color: blue; } /* 类+类:10+10=20 */
    ul>.second { color: green; } /* 标签+类:1+10=11 */
    /* 前者权重更高,文字显示蓝色 */
    
  2. 同名选择器:后写的覆盖先写的。

    p { color: red; }
    p { color: blue; } /* 最终文字为蓝色 */
    
  3. 继承的样式:优先级低于直接设置的样式。

五、字体与文本样式:让文字更美观

1. 字体样式(font-*

控制字体的大小、粗细、类型等。

p {font-size: 16px; /* 字体大小(默认16px) */font-weight: 700; /* 粗细:100-900(400正常,700加粗) */font-style: italic; /* 风格:italic(倾斜)/ normal(正常) */font-family: '微软雅黑', sans-serif; /* 字体类型(多个备选,逗号分隔) */
}/* 复合属性:风格 粗细 大小 类型(顺序固定,大小和类型必填) */
p { font: italic 700 16px '微软雅黑'; }

2. 文本样式(text-*

控制文本的对齐、缩进、装饰等。

p {text-indent: 2em; /* 首行缩进(1em=当前字体大小) */text-align: center; /* 水平对齐:left/center/right */text-decoration: none; /* 装饰:underline(下划线)/ line-through(删除线)/ none(无) */text-shadow: 1px 1px 2px #999; /* 文本阴影:x偏移 y偏移 模糊半径 颜色 */line-height: 30px; /* 行高:行与行之间的距离(行高=容器高度时,文本垂直居中) */
}/* 去掉a标签默认下划线 */
a { text-decoration: none; }

六、HTML 标签分类与特性

HTML 标签按显示特性可分为三类,理解它们的区别是布局的基础。

类型特点示例标签
块级元素独占一行;可设置宽高;默认宽度占满父元素div、p、h1-h6、ul
行内元素不独占一行;宽高由内容决定;不可设置宽高span、a、i、b
行内块元素不独占一行;可设置宽高;宽高由内容决定img、input

如何改变标签类型?

通过display属性可以强制改变标签的显示类型:

七、HTML盒模型

div { display: inline; } /* 块级div转为行内元素 */
a { display: inline-block; } /* 行内a转为行内块(可设宽高) */
span { display: block; } /* 行内span转为块级元素(独占一行) */
  1. 内容区(content):元素的文本 / 图片区域,通过widthheight设置。
  2. 内边距(padding):内容区与边框的距离(子元素与父元素的距离)。
  3. 边框(border):盒子的边框,可设置粗细、样式、颜色。
  4. 外边距(margin):盒子与其他盒子的距离。

常用设置:

.box {width: 200px; /* 内容宽度 */height: 200px; /* 内容高度 *//* 内边距:上 右 下 左(顺时针) */padding: 10px 20px; /* 上下10px,左右20px *//* 边框:粗细 样式 颜色 */border: 5px solid red; /* 5px实线红色边框 */border-radius: 8px; /* 圆角边框 *//* 外边距:上 右 下 左 */margin: 20px; /* 四周20px */
}

两种盒模型:

  • 标准盒模型(默认):盒子总宽度 = width + 左右 padding + 左右 border + 左右 margin
  • 怪异盒模型:盒子总宽度 = width(包含 content + padding + border) + 左右 margin

通过box-sizing切换:

.box {box-sizing: border-box; /* 怪异盒模型(推荐,避免计算麻烦) */
}

八、CSS 三大特性:层叠、继承、优先级

  1. 层叠性:多个样式作用于同一元素时,冲突的样式按优先级覆盖,不冲突的样式同时生效。

    p { color: red; font-size: 16px; }
    p { color: blue; } /* 最终:color: blue; font-size: 16px; */
    
  2. 继承性:子元素会继承父元素的某些样式(主要是文本相关),如text-*font-*colorline-height

    .parent { color: red; font-size: 20px; }
    /* 子元素p会继承red和20px */
    <div class="parent"><p>我会继承父元素的样式</p>
    </div>
    

    例外:a标签不继承color,需单独设置。

  3. 优先级:如前文所述,解决样式冲突的核心规则。

九、文本溢出处理:内容太多装不下怎么办?

当文本内容超过容器宽度 / 高度时,需要优雅处理溢出内容。

1. 单行文本溢出省略

.single-line {width: 300px; /* 固定宽度 */white-space: nowrap; /* 不换行 */overflow: hidden; /* 隐藏溢出内容 */text-overflow: ellipsis; /* 溢出部分显示省略号 */
}

2. 多行文本溢出省略

.multi-line {width: 300px;display: -webkit-box; /* 弹性盒模型 */-webkit-box-orient: vertical; /* 垂直排列 */-webkit-line-clamp: 3; /* 显示3行 */overflow: hidden; /* 隐藏溢出 */text-overflow: ellipsis; /* 省略号 */line-height: 24px; /* 行高 */height: 72px; /* 行高*行数(3*24=72) */
}

3. 显示滚动条

如果希望用户能看到所有内容,可显示滚动条:

.scroll {width: 300px;height: 100px;overflow: auto; /* 内容溢出时显示滚动条 */
}

十、实战技巧:常用 CSS 属性

  1. 鼠标样式cursor: pointer(鼠标悬停时显示手型,常用于可点击元素)

    span { cursor: pointer; }
    
  2. 垂直对齐vertical-align(用于行内 / 行内块元素,如图片与文字对齐)

    img { vertical-align: middle; } /* 图片与文字中线对齐 */
    
  3. 清除默认样式:浏览器会给元素设置默认 margin 和 padding,可通过通配符清除

    * { margin: 0; padding: 0; }
    

总结

CSS 是网页美化的核心,掌握本文的知识点,你就能应对大多数页面样式需求。重点在于:

  • 熟练使用选择器精准定位元素
  • 理解盒子模型的空间计算
  • 掌握文本和字体样式的设置
  • 灵活处理溢出内容和标签特性

注意:行内元素和行内块元素之间会有默认间隙(因 HTML 中的空格 / 换行导致),可通过设置父元素font-size: 0解决。

http://www.lryc.cn/news/623262.html

相关文章:

  • 探索粒子世界:从基础理论到前沿应用与未来展望
  • 主从复制+哨兵
  • 【论文阅读】Multimodal Graph Contrastive Learning for Multimedia-based Recommendation
  • List容器:特性与操作使用指南
  • 《设计模式》代理模式
  • Java 9 新特性及具体应用
  • 什么是微前端?
  • XC6SLX45T-2FGG484C Xilinx AMD Spartan-6 FPGA
  • 两个简单的设计模式的例子
  • [Linux] Linux文件系统基本管理
  • 没学过音乐怎么写歌?豆包 + 蘑兔
  • Python Condition对象wait方法使用与修复
  • 《设计模式》装饰模式
  • Tello无人机与LLM模型控制 ROS
  • 二十六、Mybatis-XML映射文件
  • 行为型设计模式:对象协作的舞蹈家(中)
  • 从0到1掌握 Spring Security(第三篇):三种认证方式,按配置一键切换
  • RH134 访问网络附加存储知识点
  • 从舒适度提升到能耗降低再到安全保障,楼宇自控作用关键
  • 19.3 Transformers量化模型极速加载指南:4倍推理加速+75%显存节省实战
  • 立体匹配中的稠密匹配和稀疏匹配
  • RK3568 NPU RKNN(二):RKNN-ToolKit2环境搭建
  • 《MySQL 数据库备份与视图创建全流程:从数据迁移到高效查询实战》
  • MySQL的下载安装(MSI和ZIP版本都有)
  • 利用Qwen大模型进行c++11并发库的学习,与时俱进!!!!
  • 从频繁告警到平稳发布:服务冷启动 CPU 风暴优化实践01
  • 同创物流学习记录1
  • 发文暴论!线性注意力is all you need!
  • 【leetcode】12. 整数转罗马数字
  • 双椒派E2000D开发板LED驱动开发实战指南