前言

CSS(层叠样式表)是前端开发中不可或缺的一部分,它负责网页的样式和布局。本文将带你系统地学习CSS的核心知识,从基础概念到高级布局技巧,配合大量代码示例,帮助你快速掌握CSS网页美化技能。

 学习路线:CSS基础概念 → 选择器 → 字体文本样式 → 复合选择器 → 背景属性 → 显示模式 → 盒子模型 → 浮动 → 定位

一、CSS基本概念

1.1 什么是CSS?

CSS 全称为 Cascading Style Sheets(层叠样式表),是一种用来表现HTML或XML等文件样式的计算机语言。

简单来说,CSS就是给网页“化妆”的工具:

组成部分 作用 类比
HTML 网页结构 人的骨骼
CSS 网页样式 人的衣服和妆容
JavaScript 网页行为 人的动作和表情

1.2 CSS的三种引入方式

CSS有三种引入方式,各有不同的使用场景:

① 内嵌式(内部样式表)
<!DOCTYPE html>
<html>
<head>
    <style>
        /* 写在style标签中,作用于当前页面 */
        h1 {
            color: red;
        }
    </style>
</head>
<body>
    <h1>Hello World</h1>
</body>
</html>

适用场景:小案例、单页面练习

② 外联式(外部样式表)
<!-- 在HTML中通过link标签引入外部CSS文件 -->
<link href="css/index.css" rel="stylesheet" />
/* index.css文件内容 */
h1 {
    color: red;
}

适用场景:多页面项目、企业级开发(推荐使用)

③ 行内式(内联样式)
<!-- 直接写在标签的style属性中 -->
<h1 style="color: yellow;">Hello,我是h1标签</h1>

适用场景:临时调试、配合JavaScript动态修改样式

注意:三种引入方式的优先级遵循“就近原则”——离标签越近,优先级越高。行内样式 > 内嵌样式 > 外联样式。

二、CSS基础选择器

2.1 标签选择器

通过标签名选中页面中所有该类型的标签。

/* 选中所有li标签 */
li {
    color: #FF0000;
}

特点

  • 选中一类标签,而不是单独某一个

  • 无论嵌套多深,都能找到对应的标签

2.2 类选择器(最常用)

通过class属性值选中标签,一个标签可以有多个类名。

<style>
    .ls {
        color: red;
    }
    .highlight {
        background-color: yellow;
    }
</style>

<li class="ls highlight">李四</li>

命名规则

  • 可由数字、字母、下划线、中划线组成

  • 不能以数字或中划线开头

  • 类名可以重复使用

2.3 ID选择器

通过id属性值选中标签,id在页面中必须唯一。

#ww {
    color: #0000FF;
}
<li id="ww">王五</li>

特点

  • id值如同身份证号码,在一个页面中不可重复

  • 一个标签只能有一个id属性值

2.4 通配符选择器

选中页面中所有的标签。

* {
    padding: 0;
    margin: 0;
}

使用场景:常用于重置浏览器默认样式(清除内外边距)


三、字体与文本样式

3.1 字体样式

p {
    font-size: 32px;      /* 字体大小 */
    font-weight: 600;     /* 字体粗细:100-900,normal=400,bold=700 */
    font-style: oblique;  /* 字体风格:normal正常,oblique/italic斜体 */
    font-family: "楷体";   /* 字体类型 */
}

3.2 文本样式

p {
    text-indent: 2em;          /* 首行缩进2个字符 */
    text-align: center;        /* 水平对齐:left/center/right */
    text-decoration: underline; /* 文本修饰:underline下划线/line-through删除线/overline上划线/none去除 */
}

a {
    text-decoration: none;     /* 去除a标签默认的下划线 */
}

3.3 line-height 行高

h1 {
    line-height: 1px;    /* 设置行高 */
}

两大应用

  1. 单行文本垂直居中:设置 line-height 等于父元素高度

  2. 取消上下间距:设置 line-height: 1

3.4 颜色表示方法

CSS中颜色的四种表示方式:

表示方式 示例 说明
关键词 redbluegreen 预定义颜色名
RGB表示法 rgb(65, 168, 99) 红绿蓝三原色,范围0~255
RGBA表示法 rgba(255,0,0,0.5) 增加透明度,范围0~1
十六进制 #41A863 #开头,可简写如#000

小技巧:QQ截图工具默认可以提取颜色值;其他截图工具可使用RGB格式。

四、Chrome调试工具

Chrome开发者工具是前端开发的必备神器:

  1. 打开方式:右键点击页面元素 → 检查(或按F12)

  2. 常用功能

    • 实时查看和修改HTML/CSS

    • 调试JavaScript

    • 分析网络请求

    • 模拟移动设备


五、复合选择器

5.1 后代选择器(空格)

选中父元素的所有后代元素(儿子、孙子、重孙子...)。

/* 选中ul中所有的a标签(包括嵌套在li里的) */
ul a {
    color: red;
}
<ul>
    <li>李四
        <a>Hello 我是无序列表1</a>  <!-- 会被选中 -->
    </li>
    <a>Hello 我是无序列表2</a>       <!-- 会被选中 -->
</ul>

5.2 子代选择器(>)

只选中父元素的直接子元素(儿子级别)。

/* 只选中ul的直接子元素a,不包括li里面的a */
ul > a {
    color: #0000FF;
}

5.3 并集选择器(,)

同时选中多个选择器匹配的标签,设置相同样式。

/* 同时设置ul>a和.box_a的样式 */
ul > a, .box_a {
    color: yellow;
}

5.4 hover伪类选择器

选中鼠标悬停时的状态,设置样式。

a {
    text-decoration: none;
    color: black;
}

a:hover {
    color: red;
    text-decoration: underline;
}

5.5 结构伪类选择器

根据元素在HTML中的结构关系查找元素,减少对class的依赖。

/* 第一个子元素 */
ul li:first-child { color: red; }

/* 最后一个子元素 */
ul li:last-child { color: blue; }

/* 第n个子元素(n从1开始) */
ul li:nth-child(2) { color: blue; }

/* 前3个元素 */
ul li:nth-child(-n+3) { color: blue; }

/* 从第4个开始 */
ul li:nth-child(n+4) { color: blue; }

/* 奇数行 */
ul li:nth-child(odd) { color: red; }

/* 偶数行 */
ul li:nth-child(even) { color: red; }

六、背景属性

6.1 背景颜色

div {
    background-color: #FF0000;  /* 背景颜色 */
}

6.2 背景图片

div {
    background-image: url(img/1.jpg);  /* 背景图片 */
}

注意:背景图片默认会在水平和垂直方向平铺,且不能撑开盒子。

6.3 背景平铺

div {
    background-repeat: no-repeat;  /* 不平铺 */
    /* repeat-x: 水平平铺 */
    /* repeat-y: 垂直平铺 */
    /* repeat: 默认值,双向平铺 */
}

6.4 背景位置

div {
    /* 水平位置 垂直位置 */
    background-position: left bottom;
    /* 可选值:left/right/center/top/bottom 或 具体像素值 */
}

6.5 背景连写(推荐)

div {
    /* 顺序:背景颜色 > 背景图片 > 平铺方向 > 背景位置 */
    background: url(img/1.jpg) no-repeat left bottom;
}

七、元素显示模式

7.1 块级元素(block)

特点

  • 独占一行

  • 宽度默认100%,高度由内容撑开

  • 可以设置宽高

代表标签divph1~h6ulliform

7.2 行内元素(inline)

特点

  • 一行可以显示多个

  • 宽度和高度由内容撑开

  • 不能设置宽高

代表标签aspanbuisstrong

7.3 行内块元素(inline-block)

特点

  • 一行可以显示多个

  • 可以设置宽高

代表标签inputtextareabuttonselect

特殊说明:img标签有行内块的特点,但调试工具中显示为inline

7.4 显示模式转换

/* 块级 → 行内 */
div {
    display: inline;
}

/* 行内 → 块级 */
span {
    display: block;
}

/* 转换为行内块 */
div, span {
    display: inline-block;
}

八、盒子模型(核心重点)

8.1 盒子模型组成

每个盒子由四部分组成:

┌─────────────────────────────────┐
│          margin(外边距)         │
│  ┌───────────────────────────┐  │
│  │       border(边框)        │  │
│  │  ┌─────────────────────┐  │  │
│  │  │   padding(内边距)   │  │  │
│  │  │  ┌───────────────┐  │  │  │
│  │  │  │   content     │  │  │  │
│  │  │  │   (内容区域)   │  │  │  │
│  │  │  └───────────────┘  │  │  │
│  │  └─────────────────────┘  │  │
│  └───────────────────────────┘  │
└─────────────────────────────────┘

8.2 内容区域(width/height)

.box {
    width: 300px;   /* 内容宽度 */
    height: 200px;  /* 内容高度 */
}

8.3 边框(border)

/* 连写形式:粗细 样式 颜色 */
.box {
    border: 2px solid red;
}

/* 边框样式可选值 */
/* solid: 实线 */
/* dashed: 虚线 */
/* dotted: 点线 */

/* 单方向设置 */
.box {
    border-top: 2px solid red;
    border-right: 2px solid blue;
    border-bottom: 2px solid green;
    border-left: 2px solid yellow;
}

8.4 内边距(padding)

设置边框与内容区域之间的距离。

/* 一个值:上右下左都相同 */
padding: 10px;

/* 两个值:上下 左右 */
padding: 10px 20px;

/* 三个值:上 左右 下 */
padding: 10px 20px 30px;

/* 四个值:上 右 下 左(顺时针) */
padding: 10px 20px 30px 40px;

8.5 外边距(margin)

设置盒子与盒子之间的距离。

/* 取值规则同padding,按顺时针方向 */
margin: 10px;           /* 四边相同 */
margin: 10px 20px;      /* 上下 左右 */
margin: 10px 20px 30px; /* 上 左右 下 */
margin: 10px 20px 30px 40px; /* 上 右 下 左 */

8.6 圆角边框(border-radius)

div {
    width: 150px;
    height: 50px;
    background-color: red;
    border-radius: 30px;  /* 圆角半径,越大越圆 */
}

九、浮动(Float)

9.1 浮动的作用

让垂直布局的盒子变成水平布局。

.box1 {
    float: left;   /* 左浮动 */
}

.box2 {
    float: right;  /* 右浮动 */
}

9.2 浮动的特点

  1. 脱标:脱离标准文档流,不占位置(从地面飘到空中)

  2. 层级更高:可以覆盖标准流中的元素

  3. 浮动找浮动:下一个浮动元素会跟着上一个浮动元素排列

  4. 受边界影响:浮动元素会受到上面元素边界的影响

  5. 特殊显示:一行可以显示多个,可以设置宽高

注意:浮动的元素不能通过 text-align: center 或 margin: 0 auto 实现水平居中。

9.3 清除浮动(解决父元素塌陷)

当子元素浮动后,父元素会失去高度,这就是高度塌陷问题。

解决方案(4种)

方案一:添加空div清除浮动
<div class="box">
    <div class="box1">浮动元素1</div>
    <div class="box2">浮动元素2</div>
    <div class="clear"></div>  <!-- 额外添加的空div -->
</div>

<style>
    .clear {
        clear: both;  /* 清除左右两侧浮动 */
    }
</style>

 缺点:增加了无意义的空标签

方案二:给父元素设置固定高度
.box {
    height: 400px;  /* 固定高度 */
}

 缺点:灵活性差,需要手动调整

方案三:给父元素设置overflow: hidden
.box {
    overflow: hidden;
}

 缺点:如果父元素有下拉菜单,此方法不可用

方案四:使用伪类清除浮动(推荐)
.box:after {
    content: '';
    display: block;
    clear: both;
}

 优点:无副作用,最推荐使用

完整浮动示例

<style>
    .box {
        border: 1px solid blue;
    }
    
    /* 推荐方案:伪类清除浮动 */
    .box:after {
        content: '';
        display: block;
        clear: both;
    }
    
    .box1 {
        width: 200px;
        height: 200px;
        border: 1px dashed red;
        float: left;
    }
    
    .box2 {
        width: 200px;
        height: 200px;
        border: 1px dashed #3A6588;
        float: right;
    }
</style>

<div class="box">
    <div class="box1">我是第1个div</div>
    <div class="box2">我是第2个div</div>
</div>

十、定位(Position)

10.1 定位的作用

  1. 让元素自由摆放在网页任意位置

  2. 解决盒子之间的层叠问题

  3. 让盒子固定在屏幕中的某个位置

10.2 定位的基本使用

/* 1. 设置定位方式 */
.box {
    position: relative;  /* 定位方式 */
}

/* 2. 设置偏移值 */
.box {
    top: 20px;     /* 距离上边的距离 */
    left: 30px;    /* 距离左边的距离 */
    right: 10px;   /* 距离右边的距离 */
    bottom: 15px;  /* 距离下边的距离 */
}

10.3 相对定位(relative)

相对于自己之前的位置进行移动。

.box1 {
    position: relative;
    top: 135px;
    left: 150px;
}

特点

  • 相对于自己原来的位置移动

  • 占位置(没有脱标)

  • 适合小范围移动

10.4 绝对定位(absolute)

相对于最近的非静态定位的父元素进行定位。

.box2 {
    position: absolute;
    right: 0px;
    bottom: 35px;
}

特点

  • 相对于最近的已定位父元素移动

  • 不占位置(脱标)

  • 宽高默认由内容撑开

10.5 子绝父相(核心技巧)

场景:让子元素相对于父元素进行自由移动

/* 父元素:相对定位 */
.box {
    position: relative;
}

/* 子元素:绝对定位 */
.box3 {
    position: absolute;
    left: 0px;
    right: 0px;
}

好处:父元素相对定位对网页布局影响最小。

10.6 固定定位(fixed)

相对于浏览器可视区域进行定位。

.box2 {
    position: fixed;
    right: 0px;
    bottom: 0px;
}

特点

  • 相对于浏览器窗口移动

  • 不占位置(脱标)

  • 常用于“返回顶部”按钮、固定导航栏

10.7 元素的层级关系(z-index)

.box1 {
    position: absolute;
    z-index: 1;  /* 数字越大,层级越高 */
}

.box2 {
    position: absolute;
    z-index: 2;  /* 显示在box1上方 */
}

结语

CSS是前端开发的基石之一,掌握好CSS能让你的网页更加美观和专业。本文从基础到进阶,系统地介绍了CSS的核心知识点,配合大量代码示例,希望能够帮助你快速入门并熟练使用CSS。

记住:多看、多练、多思考,在实践中不断提升!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐