CSS 学习笔记(五)定位与显示隐藏,一篇把我从“会用”拉到“理解”的笔记

10 阅读5分钟

在前端入门阶段,我一直有个困惑:
为什么有些布局非得用定位?浮动和标准流不行吗?

学完这一阶段的 CSS(定位 + 显示隐藏)之后,这些问题终于串起来了。这篇文章是我对 CSS 第五天核心内容的一次系统复盘,重点放在:

  • 定位到底解决了什么问题
  • 四种定位方式的本质区别
  • 为什么“子绝父相”是定位的灵魂
  • 定位在真实业务中的使用方式(轮播图、遮罩层)
  • display / visibility / overflow 的差异和使用场景

如果你和我一样,刚从浮动走向定位,这篇笔记应该能帮你少踩很多坑。


一、为什么一定要学定位?

在正式学定位之前,我尝试过用标准流、浮动去实现下面这些效果:

  • 一个元素在盒子内部自由移动,并且可以压住其他元素
  • 页面滚动时,某个模块始终固定在屏幕某个位置

结论很明确:
标准流和浮动都做不到,或者说做得非常别扭。

于是,定位的价值就很清楚了:

  • 浮动:解决“横向排列”的问题
  • 定位:解决“自由移动 + 叠加”的问题

一句话总结:

当你需要一个元素“不老实待着”,那就该用定位了。


二、定位的本质是什么?

CSS 中的定位不是魔法,本质只有一句话:

定位 = 定位模式 + 边偏移

1. 边偏移(top / right / bottom / left)

边偏移用来决定元素“具体去哪儿”。

需要记住的点只有一个:
边偏移必须配合定位模式使用,单独写是无效的。

2. 定位模式(position)

CSS 提供了四种主要定位方式:

  • static(静态)
  • relative(相对)
  • absolute(绝对)
  • fixed(固定)

sticky(粘性)属于进阶阶段,这里不作为重点。


三、四种定位方式,一次说清楚

1. static —— 默认状态

  • 所有元素的默认定位方式
  • 按标准流排列
  • 不支持边偏移

一句话:
等于没定位,几乎不用。


2. relative —— 相对定位(重点)

相对定位有两个非常关键的特点:

  1. 相对于自己原来的位置移动
  2. 不脱离标准流,仍然占有原位置

这意味着:

  • 它不会影响后面的布局
  • 它最常见的用途不是“移动自己”,而是——
    给绝对定位当爹

3. absolute —— 绝对定位(重点)

绝对定位是定位体系里变化最大的一个。

它的核心特点只有三条:

  1. 完全脱离标准流(不占位置)
  2. 如果父元素没有定位
    → 以浏览器(Document)为参照
  3. 如果父元素有定位
    → 以最近的定位祖先为参照

这也是为什么我们总会听到那句口诀:

子绝父相

含义非常简单:

  • 子元素:绝对定位(自由摆放、不占位置)
  • 父元素:相对定位(限制范围、占位置)

为什么父元素不能也用绝对定位?

因为父元素如果脱标,
下面的布局会整体塌上来。

一句话总结:

父级要站得住,子级才能随便飞。


4. fixed —— 固定定位(重点)

固定定位可以理解为:

一种只认浏览器窗口的绝对定位

它的特点非常纯粹:

  • 参照点永远是浏览器可视区
  • 不随滚动条滚动
  • 完全脱标,不占位置

典型使用场景:

  • 返回顶部按钮
  • 固定导航
  • 悬浮广告

四、定位方式对比总结

定位方式是否脱标参照对象使用场景
static标准流几乎不用
relative自己原位置给绝对定位当父级
absolute定位的祖先模块叠加、自由摆放
fixed浏览器窗口固定元素

学习定位时,只抓两个核心问题:

  1. 占不占位置
  2. 相对于谁移动

五、定位的真实应用:淘宝轮播图

轮播图是定位最经典的综合案例。

它几乎集齐了定位的所有知识点:

  • 父盒子:相对定位(限制范围)
  • 左右按钮:绝对定位(叠加在图片上)
  • 小圆点:绝对定位 + 水平居中
  • z-index:控制层级关系

这里最大的收获是一个认知转变:

轮播图不是“图片布局”,而是“定位布局”。

一旦你意识到这一点,代码反而会变得很自然。


六、z-index:控制谁在上面

只要用了定位,就几乎一定会遇到层级问题。

关于 z-index,只记住三点:

  1. 数值越大,越靠上
  2. 相同数值,后写的覆盖先写的
  3. 只能作用于定位元素

这也是为什么 z-index 经常和 absolute / fixed 一起出现。


七、显示与隐藏:不只是“看不见”

显示与隐藏是 CSS 中非常容易被低估的一部分。

实际上,它们在交互中非常重要。

1. display: none(最常用)

  • 元素完全消失
  • 不占位置

典型场景:

  • 下拉菜单
  • 弹窗
  • 遮罩层

2. visibility: hidden(了解)

  • 元素不可见
  • 仍然占位置

一句话理解:

停职留薪,人没了,工位还在。


3. overflow: hidden(重点)

overflow 并不是严格意义上的“隐藏元素”,
而是:

  • 隐藏超出父盒子的部分内容

它在实际开发中有两个高频用途:

  1. 清除浮动
  2. 防止内容撑破盒子

需要注意的是:
有定位的元素,慎用 overflow: hidden。


八、综合案例:鼠标经过显示遮罩

这是一个非常“前端”的效果:

  • 初始状态:遮罩隐藏
  • hover 父盒子:遮罩显示
  • 遮罩:绝对定位 + display 切换

这个案例让我真正理解了:

CSS 不是静态的样式,而是可以参与交互的。


九、阶段总结

学完定位和显示隐藏之后,我对 CSS 的理解明显上了一个台阶。

如果用一句话总结这一阶段:

  • 标准流:管上下
  • 浮动:管左右
  • 定位:管自由和叠加

真正的页面布局,
一定是三者配合完成的,而不是单选题。

下一步,我会开始把这些知识真正用到完整页面中,而不是停留在单个案例。

如果你也正在学前端,希望这篇笔记能帮你把“会写”变成“理解”。