大学生网络信息中心-运行部
首页
开发文档
项目介绍
加入我们
首页
开发文档
项目介绍
加入我们
  • CSS 教程

🎨 CSS 开发教程

本教程由沈阳农业大学 大学生网络信息中心运行部提供,适用于校园网站开发

第一章: CSS 基础

1.1 CSS是什么?

CSS(Cascading Style Sheets,层叠样式表)是一种控制网页样式与布局的语言。它与HTML的关系可以比喻为:

  • 📐 HTML - 网页的骨架(结构)
  • 🎨 CSS - 网页的皮肤与衣服(样式)

1.2 CSS的作用

功能类别具体能力示例
文本样式字体、颜色、边距、行距font-size: 16px;
盒子模型大小、排列、边框、背景padding: 10px;
布局控制响应式设计、多设备适配@media (max-width: 768px)
动画交互过渡效果、动态变换transition: all 0.3s;

1.3 引入CSS的三种方式

方式1:行内样式(不推荐)

<p style="color: red;">红色文字</p>
  • ✅ 优点:快速测试
  • ❌ 缺点:样式与结构混杂

方式2:内嵌样式(小项目可用)

<head>
  <style>
    p {
      color: red;
    }
  </style>
</head>
  • ✅ 优点:适合简单页面
  • ❌ 缺点:样式写在HTML中,不够分离

方式3:外部样式表(推荐)

<!-- HTML文件 -->
<link rel="stylesheet" href="style.css">
/* style.css */
p {
  color: red;
}

-✅ 推荐方式,样式与结构分离,维护性强,适合项目开发

提示

  • 每个页面使用一个主 CSS 文件,例如 style.css
  • 使用类名(class)来控制样式,而不是依赖标签或ID
  • 开发过程中可借助浏览器开发者工具(F12)实时查看样式效果



第二章: CSS 选择器

CSS 选择器的作用是选中 HTML 中的元素,让你可以对它们添加样式

2.1 常见基础选择器

① 元素选择器(标签名)

p {
  color: #333;
}
  • 所有<p>标签都会变色

② 类选择器(最常用)

<p class="intro">欢迎访问</p>
.intro {
  font-size: 18px;
}
  • 使用 class 可以对某类元素统一设置样式

③ ID 选择器(只用于唯一元素)

<div id="header"></div>
#header {
  background: #f0f0f0;
}
  • ID 一般只在某个唯一模块使用,项目中不推荐滥用

2.2 组合选择器

① 后代选择器(空格)

.nav a {
  color: blue;
}
  • 所有 .nav 中的 <a> 链接变蓝

② 子代选择器(>)

.container > p {
  margin: 0;
}
  • 只选中 .container 的直接子元素 <p>

③ 多个选择器一起(逗号)

h1, h2, h3 {
  font-weight: bold;
}

2.3 属性选择器

input[type="text"] {
  border: 1px solid #ccc;
}

2.4 状态伪类选择器

a:hover {
  color: red;
}
input:focus {
  outline: none;
}
  • 常用于交互样式,例如鼠标悬停、表单焦点等

第三章: 盒模型 + 元素显示模型

这部分是掌握 CSS 布局的核心基础,了解后可以更好地控制大小、边距、对齐等问题

3.1 CSS 盒模型

在 CSS 中,每个元素都被看作一个盒子,包含以下几层结构:


+--------------------------+
|         margin           |
|   +------------------+   |
|   |      border      |   |
|   |   +------------+ |   |
|   |   |  padding   | |   |
|   |   |  +------+  | |   |
|   |   |  |content| | |   |
|   |   |  +------+  | |   |
|   |   +------------+ |   |
|   +------------------+   |
+--------------------------+

属性说明
content元素的内容区域(文字、图片等)
padding内容和边框之间的内边距
border边框线
margin外边距,用于和其他元素之间的距离

示例代码

.box {
  width: 200px;
  padding: 20px;
  border: 2px solid #333;
  margin: 30px;
}

box-sizing 设置尺寸计算方式

默认情况下,width 和 height 只计算 content 部分。 为了更方便控制尺寸,我们通常统一设置:

* {
  box-sizing: border-box;
}
  • 所有 padding 和 border 会包含在 width/height 中,更好算尺寸

可视化调试技巧

  • 按 F12 → Elements → 点选任意盒子 → 查看右侧盒模型结构图

3.2 元素的显示类型

类型描述示例标签
block独占一行,可设置宽高div, p, section
inline行内显示,不可设置宽高span, a, strong
inline-block行内显示 + 可设置宽高布局小组件常用

示例对比

<div class="box">Block 元素</div>
<span class="inline">Inline 元素</span>
.box {
  display: block;
  width: 200px;
  background: lightblue;
}

.inline {
  display: inline;
  background: lightcoral;
}
  • 若要让一个元素既可设置大小又能在一行排列 → 用 display: inline-block;

小技巧

  • 表单元素默认是 inline,可使用 display: block; 调整布局
  • 行内元素加 margin-top/bottom 可能不生效 → 改为 inline-block
  • 可以通过 display: none; 实现隐藏元素



第四章: 字体,文本,背景

网页中最常见的文字排版样式

4.1 字体相关属性

属性作用常用值
font-size字体大小16px、1rem
font-weight字体粗细normal、bold、600
font-family字体类型"PingFang SC", "Microsoft YaHei", sans-serif

4.2 文本样式属性

属性作用常用值
color文字颜色#333、red
line-height行高1.5(推荐)
text-align文本对齐left、center、right
text-decoration文本装饰线none(去除链接下划线)
letter-spacing字符间距1px(调整紧凑度)

4.3 背景相关属性

属性作用常用值示例
background-image设置背景图片url("图片路径")url("banner.jpg")
background-size控制背景图尺寸cover(充满)
contain(完整显示)
100% 100%(拉伸)
background-size: cover
background-position调整背景图位置center
top/bottom
left/right
x% y%
center top
20% 50%
background-repeat控制平铺方式no-repeat
repeat
repeat-x/repeat-y
no-repeat
background-attachment滚动行为scroll(默认)
fixed(固定)
fixed
background简写属性任意顺序组合以上属性url("bg.jpg") center/cover no-repeat

4.4 实用代码片段

/* 基础样式 */
body {
  font-family: "PingFang SC", sans-serif;
  color: #333;
  line-height: 1.5;
  background: #f5f5f5;
}

/* 标题 */
h1 { 
  font-size: 2rem;
  font-weight: bold;
  color: #1e90ff;
}

/* 链接 */
a {
  color: #1e90ff;
  text-decoration: none;
}
a:hover { text-decoration: underline; }

/* 卡片 */
.card {
  background: white;
  padding: 1rem;
  border-radius: 4px;
  box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}

/* 响应式图片背景 */
.hero {
  background: url("picture.jpg") center/cover;
  min-height: 200px;
}



第五章: Flex & Grid 布局

Flex 是一维布局系统,擅长横向或纵向排列元素,非常适合菜单栏、卡片排列、表单布局等。 Grid 是二维布局系统,擅长 同时控制行和列,适合构建复杂布局或固定网格结构

5.1 Flex 弹性布局

启用 Flex 布局

.container {
  display: flex;
}

主轴方向:flex-direction

flex-direction: row;       /* 默认,水平方向 */
flex-direction: column;    /* 垂直方向 */

主轴对齐方式:justify-content

属性值含义
flex-start左对齐(默认值)
flex-end右对齐
center居中
space-between两端对齐,元素间等间距
space-around元素周围间距相等
.container {
  justify-content: space-between;
}

交叉轴对齐方式:align-items

align-items: stretch;     /* 默认,高度拉伸填满容器 */
align-items: center;      /* 垂直居中 */
align-items: flex-start;  /* 顶部对齐 */
align-items: flex-end;    /* 底部对齐 */

子项占比控制:flex

.item {
  flex: 1; /* 平均分配空间 */
}

✅ 示例:横向导航栏

<nav class="nav">
  <a href="#">首页</a>
  <a href="#">课程</a>
  <a href="#">联系我们</a>
</nav>
.nav {
  display: flex;
  justify-content: space-around;
  background: #f5f5f5;
  padding: 1rem;
}
.nav a {
  text-decoration: none;
  color: #333;
}

5.2 Grid 网格布局

启用 Grid 布局

.container {
  display: grid;
  grid-template-columns: repeat(3, 1fr); /* 三列平均分 */
  gap: 1rem;
}

常用语法

.container {
  grid-template-rows: auto auto;
  grid-template-columns: 200px 1fr 200px;
  gap: 20px; /* 行列间距 */
}

✅ 示例:卡片排列

<div class="grid">
  <div class="card">1</div>
  <div class="card">2</div>
  <div class="card">3</div>
</div>
.grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 1rem;
}
.card {
  background: #fff;
  padding: 1rem;
  box-shadow: 0 4px 8px rgba(0,0,0,0.05);
}

选择建议

情况推荐布局
横向/纵向排列Flex
简单响应式卡片排列Grid
布局中只有一行或一列变化Flex
多列+多行、固定网格Grid



第六章: 响应式设计

响应式设计的目标是:一个页面适配多个设备(手机、平板、电脑等),不需为每种设备写多个页面

6.1 移动优先理念

现代响应式设计推荐:优先针对小屏幕设计样式,再逐步覆盖大屏样式。

/* 默认样式:适用于手机 */
body {
  font-size: 16px;
  padding: 1rem;
}

/* 平板及以上 */
@media (min-width: 768px) {
  body {
    font-size: 18px;
    padding: 2rem;
  }
}

/* 桌面端 */
@media (min-width: 1024px) {
  body {
    font-size: 20px;
    padding: 3rem;
  }
}

6.2 媒体查询基础语法

@media (条件) {
  /* 仅当条件满足时生效 */
}

常见断点(可自行调整)

设备最小宽度断点
手机默认样式(无需 media)
平板@media (min-width: 768px)
桌面@media (min-width: 1024px)
大屏@media (min-width: 1280px)

🔧 示例:两列布局在手机上变成单列

.container {
  display: grid;
  grid-template-columns: 1fr;
  gap: 1rem;
}

@media (min-width: 768px) {
  .container {
    grid-template-columns: 1fr 2fr;
  }
}

🧩 示例:隐藏菜单(移动端折叠)

.menu {
  display: none;
}

@media (min-width: 768px) {
  .menu {
    display: block;
  }
}

🔘 视口单位

.header {
  height: 100vh;            /* 全屏高度 */
  width: 100vw;             /* 全屏宽度 */
  font-size: calc(16px + 1vw); /* 动态字体 */
}



🧪 动手练习:实现简洁卡片信息块

请编写 HTML + CSS,完成以下效果(响应式建议使用 Flex 实现):

要求:

  • 容器 .card 宽度不固定,高度自适应
  • 内边距 20px,圆角 8px,阴影不突兀
  • 标题加粗,副标题为灰色小字
  • 鼠标悬停时,卡片背景稍微变亮,阴影增强
  • 整体风格参考组件化写法,类命名语义化
Prev
HTML 教程
Next
JS 教程