鱼C论坛

 找回密码
 立即注册
查看: 6977|回复: 17

[学习笔记] 053 - 你的定位决定你的地位

[复制链接]
发表于 2020-9-23 14:27:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 不二如是 于 2020-9-29 08:56 编辑






哈哈,废话不多说了,#敲黑板时刻!





在线视频:传送门





课程思维导图

53.jpeg

猛戳

                               
登录/注册后可看大图
超清





position 属性决定了网页上元素的位置摆放情况。

有 5 个值,课上小甲鱼老师带我们都过了一遍。


position:static

static 是 position 属性的默认值。

如果省略 position 属性,浏览器就认为该元素是 static 定位。

这时,浏览器会按照源码的顺序,决定每个元素的位置,这称为"正常的页面流"。  

每个块级元素占据自己的区块,元素与元素之间不产生重叠,这个位置就是元素的默认位置。

小甲鱼老师强调的:

static 定位所导致的元素位置,是浏览器自主决定的,所以这时 top、bottom、left、right 这四个属性无效。

一定要记住哦!


position:relative

relative 表示,相对于默认位置(即 static 时的位置)进行偏移,即定位基点是元素的默认位置。

它必须搭配 top、bottom、left、right 这四个属性一起使用,用来指定偏移的方向和距离。

演示代码:
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>position</title>
  <style>
    #son {
      width: 100px;
      height: 100px;
      background-color: red;
      position: relative;
      top: 50px;
    }
  </style>
</head>

<body>
  <div id="father">
    <div id="son"></div>
  </div>
</body>

</html>
效果:

2020-09-25_17-59-49.jpg


id 为 son 的 div 元素设置 top:50px 后,便从默认位置向下偏移 50 px。

就是上图蓝色虚线画出的距离。


position:absolute

absolute 表示,相对于上级元素(一般是父元素)进行偏移,即:

游客,如果您要查看本帖隐藏内容请回复


它有一个重要的限制条件:

定位基点(一般是父元素)不能是 static 定位,否则定位基点就会变成整个网页的根元素 html

另外,absolute 定位也必须搭配 top、bottom、left、right 这四个属性一起使用。

还是用上面的代码,但稍微修改下:
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>position</title>
  <style>
    #father {
      width: 300px;
      height: 300px;
      background-color: green;
      position: relative;
      top: 50px;
    }


    #son {
      width: 100px;
      height: 100px;
      background-color: red;
      position: absolute;
      top: 50px;
    }
  </style>
</head>

<body>
  <div id="father">
    <div id="son"></div>
  </div>
</body>

</html>
效果:

2020-09-25_18-22-04.jpg


父元素是 relative 定位,子元素是 absolute 定位。

父元素本身相对根元素有 50px 的向下偏移。

子元素的定位基点是父元素,相对于父元素的顶部向下偏移 50px 。

如果父元素是 static 定位,上例的子元素就是距离网页的顶部向下偏移 50px 。

注意,absolute 定位的元素会被"正常页面流"忽略。

即在"正常页面流"中,该元素所占空间为零,周边元素不受影响。


position:fixed

fixed 表示,相对于视口(viewport,浏览器窗口)进行偏移,即定位基点是浏览器窗口。

这会导致元素的位置不随页面滚动而变化,好像固定在网页上一样。

代码:
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>position</title>
  <style>
    div {
      width: 100px;
      height: 100px;
      background-color: blue;
      position: fixed;
      top: 100px;
      left: 100px;
    }
  </style>
</head>

<body>
  <div></div>
</body>

</html>
效果:

2020-09-25_18-26-45.jpg


div元素始终在视口顶部,不随网页滚动而变化。

如果搭配 top、bottom、left、right这四个属性一起使用,表示元素的初始位置是基于视口计算的。

否则初始位置就是元素的默认位置。


position:sticky

2020-09-23_16-48-41.jpg


sticky 跟前面四个属性值都不一样,它会产生动态效果。

很像 relative 和 fixed 的结合:

一些时候是 relative 定位(定位基点是自身默认位置),另一些时候自动变成 fixed 定位(定位基点是视口)。

因此,它能够形成"动态固定"的效果。

比如,小甲鱼老师举个通讯录例子、网页的搜索工具栏,初始加载时在自己的默认位置(relative 定位)。

页面向下滚动时,工具栏变成固定位置,始终停留在页面头部(fixed 定位)。

等到页面重新向上滚动回到原位,工具栏也会回到默认位置。

sticky 生效的前提是:

必须搭配top、bottom、left、right这四个属性一起使用,不能省略。

否则等同于 relative 定位,不产生"动态固定"的效果。

原因是这四个属性用来定义"偏移距离",浏览器把它当作 sticky 的生效门槛。

它的具体规则是,当页面滚动,父元素开始脱离视口时(即部分不可见),只要与 sticky 元素的距离达到生效门槛,relative 定位自动切换为 fixed 定位。

等到父元素完全脱离视口时(即完全不可见),fixed 定位自动切换回 relative 定位。

演示代码(赚点鱼币 ): 源码.zip (550 Bytes, 下载次数: 20, 售价: 2 鱼币)

演示:

Sep-25-2020 18-38-36.gif





课后作业,完成了吗?


传送门






                               
登录/注册后可看大图







如果有收获,别忘了评分


                               
登录/注册后可看大图


这位鱼油,如果喜欢本系列学习笔记,请订阅 淘专辑传送门)(不喜欢更要订阅

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
秃秃七 + 5 + 5 + 3

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-29 15:56:14 | 显示全部楼层
学习到这里,MARK!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-10 21:50:35 | 显示全部楼层
123
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-25 23:17:27 | 显示全部楼层
回复快快快
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-12 01:43:14 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-12 06:42:44 From FishC Mobile | 显示全部楼层
请问一下,a标签的父级是 div
然后该div设置了一个背景图片
那么问题来了,这个a标签无法接收鼠标点击动作
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-12 18:03:41 | 显示全部楼层
为什么要搞那么多偏移
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-4 09:54:17 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-18 09:45:48 | 显示全部楼层
想看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-25 21:46:29 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-26 09:10:59 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-27 11:29:23 | 显示全部楼层
66666666666666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-13 09:57:08 | 显示全部楼层
相对定位,父元素动,子元素也动
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-22 18:17:17 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-8 20:03:38 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-3 15:10:30 | 显示全部楼层
爱鱼C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-17 09:20:41 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-18 09:32:28 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 19:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表