css总结

一、CSS 基础语法

1. 引入方式

CSS 有 3 种引入方式,根据场景选择使用:

引入方式 语法示例 特点
内联样式 <div style="color: red;">内容</div> 优先级最高,仅作用于单个元素,耦合度高
内部样式 <style> div { color: red; } </style> 作用于当前页面,集中管理样式
外部样式 <link rel="stylesheet" href="style.css"> 单独文件,多页面复用,便于维护

2. 基本语法规则

CSS 由「选择器」和「声明块」组成:

css

复制代码
/* 选择器:指定要样式化的元素 */
选择器 {
  /* 声明块:由多个键值对组成 */
  属性名1: 属性值1;  /* 声明1:设置文本颜色 */
  属性名2: 属性值2;  /* 声明2:设置字体大小 */
}

/* 示例:将所有 p 标签设置为红色、16px 字体 */
p {
  color: red;
  font-size: 16px;
}

二、选择器(Selector)

选择器用于定位 HTML 元素,是 CSS 的核心功能之一。

1. 基础选择器

选择器类型 语法 说明 示例
元素选择器 标签名 匹配所有该标签元素 div { ... } 匹配所有 div
类选择器 . 类名 匹配所有含该类的元素 .active { ... } 匹配类为 active 的元素
ID 选择器 #ID 名 匹配唯一 ID 元素(ID 不可重复) #header { ... } 匹配 ID 为 header 的元素
通配符选择器 * 匹配所有元素 * { margin: 0; } 清除所有元素默认外边距

2. 复合选择器

选择器类型 语法 说明 示例
后代选择器 父选择器 子选择器 匹配父元素内的所有后代子元素 ul li { ... } 匹配 ul 内所有 li
子选择器 父选择器 > 子选择器 仅匹配父元素的直接子元素 ul > li { ... } 匹配 ul 的直接子元素 li
相邻兄弟选择器 元素 + 兄弟元素 匹配元素后的第一个相邻兄弟元素 h1 + p { ... } 匹配 h1 后的第一个 p
并集选择器 选择器 1, 选择器 2 同时匹配多个选择器 div, p { ... } 匹配所有 div 和 p
属性选择器 [属性 = 值] 匹配含指定属性及值的元素 input[type="text"] { ... } 匹配文本输入框

3. 伪类选择器(常用)

伪类用于描述元素的「状态」或「位置」:

伪类 说明 示例
:hover 鼠标悬停时的元素 button:hover { background: blue; }
:active 元素被点击时的状态 a:active { color: red; }
:focus 元素获取焦点时(如输入框) input:focus { border: 2px solid green; }
:nth-child(n) 匹配父元素的第 n 个子元素(n 从 1 开始) ul li:nth-child(2) { ... } 匹配 ul 的第 2 个 li
:first-child 匹配父元素的第一个子元素 li:first-child { ... }

三、CSS 盒模型(Box Model)

所有 HTML 元素都被视为一个「盒子」,盒模型决定元素的尺寸计算方式。

  • content(内容区) :元素的文本或图像区域,由 widthheight 定义。
  • padding(内边距):内容区与边框的距离,不允许负值。
  • border(边框) :围绕内容区和内边距的线条,由 border-widthborder-styleborder-color 定义。
  • margin(外边距):元素与其他元素的距离,允许负值(用于重叠元素)。

2. 盒模型计算方式

  • 标准盒模型 (默认):元素总宽度 = width + padding-left + padding-right + border-left + border-right
  • 怪异盒模型 (IE 盒模型):元素总宽度 = width(包含 padding 和 border)

通过 box-sizing 切换:

css

复制代码
/* 标准盒模型(默认) */
.box { box-sizing: content-box; }

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

四、布局方式

1. 流式布局(Float)

早期常用的布局方式,通过 float 使元素脱离文档流并排显示:

css

复制代码
.left {
  float: left;  /* 向左浮动 */
  width: 200px;
}
.right {
  float: right; /* 向右浮动 */
  width: 300px;
}

/* 清除浮动(避免父元素高度塌陷) */
.parent::after {
  content: "";
  display: block;
  clear: both;
}

2. Flex 布局(弹性布局)

现代布局首选方案,通过设置父元素为 display: flex,控制子元素的排列方式:

父元素属性(容器属性):

css

复制代码
.container {
  display: flex;        /* 启用 Flex 布局 */
  flex-direction: row;  /* 子元素排列方向:row(默认,水平)/ column(垂直) */
  justify-content: center; /* 水平对齐:center(居中)/ flex-start(左对齐)/ space-between(两端对齐) */
  align-items: center;  /* 垂直对齐:center(居中)/ flex-start(上对齐)/ stretch(拉伸填满) */
  flex-wrap: wrap;      /* 子元素换行:nowrap(默认,不换行)/ wrap(换行) */
}
子元素属性(项目属性):

css

复制代码
.item {
  flex: 1;              /* 占比:子元素等分父容器宽度 */
  margin: 0 10px;
}

3. Grid 布局(网格布局)

二维布局系统,适合复杂网格结构(如仪表盘、画廊):

css

复制代码
.container {
  display: grid;               /* 启用 Grid 布局 */
  grid-template-columns: 1fr 1fr 1fr; /* 列定义:3 列,每列占比 1:1:1 */
  grid-template-rows: 100px 200px;   /* 行定义:2 行,高度分别为 100px、200px */
  gap: 10px;                   /* 行列间距 */
}

五、定位(Position)

控制元素在页面中的位置,常用属性 position

说明 示例场景
static 默认值,正常文档流,不脱离布局 普通元素
relative 相对定位,相对于自身原位置偏移,不脱离文档流 微调元素位置
absolute 绝对定位,相对于最近的非 static 父元素偏移,脱离文档流 弹窗、悬浮菜单
fixed 固定定位,相对于浏览器窗口偏移,脱离文档流,不随滚动条滚动 顶部导航栏、回到顶部按钮
sticky 粘性定位,滚动到指定位置后固定(结合 top/left 等使用) 列表标题栏

示例:固定在屏幕右上角的按钮

css

复制代码
.btn {
  position: fixed;
  top: 20px;
  right: 20px;
  width: 50px;
  height: 50px;
}

六、动画与过渡

1. 过渡(Transition)

实现元素状态变化时的平滑过渡(如 hover 效果):

css

复制代码
.box {
  width: 100px;
  height: 100px;
  background: red;
  /* 过渡配置:属性 时长 动画曲线 延迟 */
  transition: width 0.3s ease 0.1s, background 0.3s;
}

.box:hover {
  width: 200px;       /* 宽度变化会触发过渡 */
  background: blue;   /* 背景色变化会触发过渡 */
}

2. 动画(Animation)

更复杂的自定义动画,需定义 @keyframes 关键帧:

css

复制代码
/* 定义动画关键帧 */
@keyframes fade {
  0% { opacity: 0; transform: scale(0.8); } /* 开始状态 */
  50% { opacity: 1; transform: scale(1.2); } /* 中间状态 */
  100% { opacity: 0; transform: scale(0.8); } /* 结束状态 */
}

/* 应用动画 */
.popup {
  animation: fade 2s infinite; /* 动画名称 时长 重复次数(infinite 无限) */
}

七、响应式布局

使页面在不同设备(手机、平板、PC)上自适应显示,核心是 @media 媒体查询:

css

复制代码
/* 默认样式(PC 端) */
.container {
  width: 1200px;
  margin: 0 auto;
}

/* 平板设备(屏幕宽度 < 992px) */
@media (max-width: 992px) {
  .container {
    width: 90%;
  }
}

/* 手机设备(屏幕宽度 < 768px) */
@media (max-width: 768px) {
  .container {
    width: 100%;
    padding: 0 10px;
  }
}

八、常见问题与解决方案

  1. 清除默认样式:浏览器会为元素添加默认 margin/padding,需重置:

    css

    复制代码
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box; /* 统一盒模型 */
    }
  2. 垂直居中

    • Flex 布局:parent { display: flex; align-items: center; justify-content: center; }
    • 定位:child { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); }
  3. 文字溢出省略

    css

    复制代码
    /* 单行文本 */
    .single-line {
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }
    
    /* 多行文本(最多 3 行) */
    .multi-line {
      display: -webkit-box;
      -webkit-line-clamp: 3;
      -webkit-box-orient: vertical;
      overflow: hidden;
    }
相关推荐
天***88964 小时前
js封装一个双精度算法实现
开发语言·前端·javascript
Algebraaaaa5 小时前
什么是前端、后端与全栈开发,Qt属于什么?
开发语言·前端·qt
胡斌附体5 小时前
使用Electron创建helloworld程序
前端·javascript·electron·nodejs·pc
toobeloong5 小时前
Electron 从低版本升级到高版本 - webview通信的改造
前端·javascript·electron
im_AMBER5 小时前
React 01
前端·javascript·笔记·react.js·前端框架·web
@大迁世界5 小时前
React 19.2.0 有哪些新变化
前端·javascript·react.js·前端框架·ecmascript
华仔啊6 小时前
用 Vue3 + Canvas 做了个超实用的水印工具,同事都在抢着用
前端·vue.js·canvas
Bacon7 小时前
前端:从0-1实现一个脚手架
前端