CSS盒子模型

一、盒子模型的核心组成

每个 HTML 元素都可以看作一个矩形盒子,由四部分组成(由内向外):

二、盒子模型各部分的详细设置

  1. 边框(border)
    复合写法:border: 1px solid red;

单一方向:border-top、border-right、border-bottom、border-left

单个属性:border-width、border-style、border-color

  1. 圆角边框(border-radius)
    为盒子添加圆角,原理:用一个圆(或椭圆)与盒子的角相切。

常用值:像素(如 10px)或百分比(50% 得到圆形或椭圆)。

可分别设置四个角:border-radius: 左上 右上 右下 左下;

  1. 内边距(padding)
    内边距会增大盒子总体尺寸(除非 box-sizing: border-box)。

单边设置:padding-top、padding-right、padding-bottom、padding-left

简写:padding: 上 右 下 左;(顺时针)

  1. 外边距(margin)
    用于调整盒子位置,实现块级元素水平居中:margin: 0 auto;

常见问题:

垂直外边距合并(相邻块元素上下 margin 取较大值)

外边距塌陷(父元素与第一个子元素 margin-top 重叠)------ 可通过触发 BFC 解决

  1. 尺寸计算(box-sizing)
    box-sizing: content-box(默认):width 只指内容宽度,实际占宽 = width + padding + border

box-sizing: border-box:width 包含内容 + padding + border,盒子总宽固定不变,避免撑大布局

三、背景(background)相关

常见背景属性

background-color:背景颜色

background-image:背景图片(url(...))

background-repeat:平铺方式(no-repeat / repeat-x / repeat-y)

background-position:背景位置(如 center center、10px 20px)

background-size:背景尺寸(cover / contain / 具体数值)

background-attachment:背景是否随滚动(fixed / scroll)

背景复合写法

css 复制代码
background: color image repeat position/size attachment;

示例:background: #f00 url(bg.png) no-repeat center/cover fixed;

背景渐变(渐变属于 background-image)

线性渐变:background-image: linear-gradient(to right, red, blue);

径向渐变:background-image: radial-gradient(circle, red, blue);

文字渐变:配合 background-clip: text 和 -webkit-background-clip: text,再设置文字颜色透明,实现渐变文字效果。

四、盒子阴影与过渡

  1. 盒子阴影(box-shadow)
    语法:box-shadow: 水平偏移 垂直偏移 模糊半径 扩散半径 颜色 内外阴影;

示例:box-shadow: 10px 10px 5px rgba(0,0,0,0.3);

内阴影:inset

  1. 过渡(transition)
    配合盒子阴影或其它属性实现平滑动画效果,如鼠标移上阴影渐变:
css 复制代码
transition: box-shadow 0.3s;

五、综合案例(来自课程)

小米卡片:运用盒子模型、圆角边框、阴影、过渡实现产品卡片效果。

淘宝侧边栏:结合字体图标、背景、内外边距、列表布局构建导航栏。

六、扩展知识(与盒子模型配合使用)

虽然不属于盒子模型核心,但在实际页面布局中常常结合:

字体图标(iconfont):通过 font-family 将图标当作文字,可像文字一样设置大小、颜色、阴影,常放在盒子内部。

CSS精灵技术(CSS Sprites):将多个小图标拼为一张大图,通过背景 background-position 移动到盒子内显示,减少 HTTP 请求。

总结思维导图

c 复制代码
CSS 盒子模型
├── 核心组成
│   ├── content(内容)
│   ├── padding(内边距)
│   ├── border(边框)
│   │   └── border-radius(圆角)
│   └── margin(外边距)
│       └── margin:0 auto(居中)
├── 盒尺寸
│   └── box-sizing(border-box 避免撑大)
├── 背景装饰
│   ├── 常见属性(颜色/图片/位置/平铺/大小/固定)
│   ├── 复合写法
│   ├── 渐变(线性/径向)
│   └── 文字渐变(background-clip:text)
├── 阴影与动画
│   ├── box-shadow(盒子阴影)
│   └── transition(过渡效果)
└── 综合应用
    ├── 小米卡片
    ├── 淘宝侧边栏
    ├── 字体图标(iconfont)
    └── CSS 精灵(Sprites)
相关推荐
fengci.2 小时前
CTF+随机困难题目
android·开发语言·前端·学习·php
liulilittle2 小时前
LLAMA-CLI 运行千问3.6(R9-7945HX+64G+RTX40608G)
java·前端·llama
Cyber4K2 小时前
【Python专项】进阶语法-日志分类与分析(2)
开发语言·前端·python
匀泪2 小时前
云原生(Kubernetes存储)
前端·chrome
kyriewen2 小时前
你等的Babel编译,够喝三杯咖啡了——用Rust重写的SWC,只需眨个眼
前端·javascript·rust
搬砖码2 小时前
同源多标签页通信 4 种方案,从入门到生产环境
前端·面试
张元清3 小时前
SSR 状态管理陷阱:defineStore vs defineContextStore
前端·javascript·面试
donecoding3 小时前
nrm、corepack、npm registry 三者的爱恨情仇
前端·node.js·前端工程化