CSS粘性定位 - 它的真正工作原理!

news2024/11/20 6:22:50

本文首发于微信公众号:大迁世界, 我的微信:qq449245884,我会第一时间和你分享前端行业趋势,学习途径等等。
更多开源作品请看 GitHub https://github.com/qq449245884/xiaozhi ,包含一线大厂面试完整考点、资料以及我的系列文章。

快来免费体验ChatGpt plus版本的,我们出的钱
体验地址:https://chat.waixingyun.cn
可以加入网站底部技术群,一起找bug.

这篇文章详细解释了CSS中的sticky定位方式,并讲解了它的工作原理。

CSS中的sticky定位有很好的浏览器支持,但许多开发者并没有使用它。原因有两方面:一是等待浏览器支持的时间太长,导致这个特性被遗忘;二是大部分开发者并不完全理解它的工作原理。

我假设你们都知道CSS定位,但让我们简要回顾一下:

直到3年前,有四个CSS位置: staticrelativeabsolutefixed

staticrelativeabsolutefixed 之间的主要区别在于它们在DOM流中占用的空间。staticrelative 保留其在文档流中的自然空间,而 absolutefixed 则不保留空间,它们具有浮动行为。而新的sticky定位具有所有类型的相似性。

使用 position: sticky

使用 position: sticky 时,每个人都很快明白,当视口到达定义的位置时,元素会粘在那里。

.some-component{
    position: sticky;
    top: 0;
} 

有时候sticky定位能正常工作,有时候则不能。当它正常工作时,元素会"粘"在一定位置,但在滚动的其他部分,它又会停止"粘"住。作为一个每天都在使用CSS的人,作者无法接受自己不能深入理解这个问题的根本原因,所以决定深入研究sticky定位。

Stick 探索

在尝试使用 sticky 定位的过程中,我很快发现,当一个具有sticky定位样式的元素被包裹起来,并且它是包裹元素内唯一的元素时,这个被定义为sticky定位的元素并不会"粘"住。

<!-- DOESN'T WORK!!! -->
<style>
    .sticky{
        position: sticky;
        top: 0;
    }
</style>
<div class="wrapper">
   <div class="sticky">
        SOME CONTENT
   </div>
</div>

当我在包裹元素内添加更多元素时,它开始正常工作了。

为什么?

这样做的原因是,当一个元素被赋予sticky定位样式时,粘性元素的容器是粘性元素可以粘住的唯一区域。这个元素没有其他元素可以浮动,因为它只能浮动在兄弟元素上,而作为唯一的子元素,它没有兄弟元素。

CSS Sticky 定位的真正工作原理!

CSS 的 sticky 定位有两个主要部分,即粘性元素粘性容器

粘性元素 - 是我们使用 position: sticky 样式定义的元素。当视口位置与位置定义匹配时,元素将浮动,例如: top: 0px

.some-component{
    position: sticky;
    top: 0px;
}

粘性容器——是包裹粘性项目的HTML元素。这是粘性项目可以浮动的最大区域。

当你使用 position: sticky 定义一个元素时,自动定义了父元素为粘性容器!

记住这一点非常重要!容器是粘性项目的作用域,项目无法离开其粘性容器。

这就是前面例子中,粘性元素一开始就没有粘住的原因:粘性元素是粘性容器中唯一的子元素。

CSS Sticky 定位的视觉示例:

image.png

事例:https://codepen.io/elad2412/pen/QYLEdK

理解CSS的Sticky行为

就像我之前说的,CSS的 Sticky 定位与其他所有 CSS 定位方式的行为都不同,但另一方面,它与它们也有一些相似之处。让我来解释一下:

Relative 定位(或Static定位)- 粘性定位元素类似于相对定位和静态定位,因为它保持DOM中的自然间隙(保持在流中)。

Fixed - 当项目固定时,它的行为与 position: fixed 完全相同,浮动在视口的相同位置,从流中移除。

Absolute 定位 - 在粘附区域的末尾,元素停止并堆叠在另一个元素的顶部,就像绝对定位元素在 position: relative 容器内的行为一样。

贴在底部?

在大多数情况下,使用 position: sticky 以将元素固定在顶部,类似于这样:

.component{
    position: sticky;
    top: 0;
}

这正是它被创建出来的原因,因为在此之前,只能通过JavaScript来实现。

但你也可以使用它将元素粘贴到底部。这意味着可以定义页脚具有粘性位置,并且在向下滚动时始终会出现粘在底部。当我们到达粘性容器的末尾时,元素将停留在其自然位置。最好将其用于自然位置为粘性容器底部的元素。

HTML

<main class="main-container">
  <header class="main-header">HEADER</header>
  <div class="main-content">MAIN CONTENT</div>
  <footer class="main-footer">FOOTER</footer>
</main>

CSS

.main-footer{     
     position: sticky; 
     bottom: 0;
}

事例地址:https://codepen.io/elad2412/pen/MZZVjw

Browsers Support

  • 除旧版 IE 外,所有主要现代浏览器都支持粘性定位。
  • 对于Safari浏览器,需要添加 -webkit 前缀。
position: -webkit-sticky; /* Safari */  
position: sticky;

image.png

代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug。

交流

有梦想,有干货,微信搜索 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。

本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试完整考点、资料以及我的系列文章。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/641019.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32单片机蓝牙APP智能温控风扇红外热释电

实践制作DIY- GC0144-蓝牙APP智能温控风扇 基于STM32单片机设计---蓝牙APP智能温控风扇 二、功能介绍&#xff1a; 硬件组成&#xff1a;STM32F103C最小系统板DS18B20温度湿度OLEDHC-05蓝牙模块SR602红外热释电人体检测5V直流风扇多个按键&#xff08;开关键&#xff0c;下限减…

【WinForm项目】C#模拟交通信号灯|WinForm交通红绿灯

文章目录 前言一、运行效果二、界面设计三、代码&#xff1a;总结 前言 交通信号灯十字路口通行原理图。 实际上归类为四大类&#xff1a; 南北双向直行东西双向直行一对黑色粗线的左转一对红色粗线的左转。 状态逻辑图如下图所示&#xff1a;假定通行顺序为&#xff1a;南…

JavaWeb笔记(四)

前端基础 **提醒&#xff1a;**还没有申请到IDEA专业版本授权的同学要抓紧了&#xff0c;很快就需要用到。 经过前面基础内容的学习&#xff0c;现在我们就可以正式地进入Web开发的学习当中啦~ 本章节会讲解前端基础内容&#xff08;如果已经学习过&#xff0c;可以直接跳到…

一文说透:低代码开发平台和零代码平台区别是什么?

低代码开发平台和零代码平台区别是什么&#xff1f; 一个简单的例子就可以解释清楚。 假设你想入住一套新房&#xff0c;回看住房变迁史&#xff1a; 最原始方式是&#xff1a;自己建造往后一点&#xff0c;交付“毛坯房”&#xff1a;开发商统一建小区&#xff0c;不需要自…

5本豆瓣高分Python技术书籍

Python的经典书籍有很多&#xff0c;推荐五本对初学者来说非常实用的入门书&#xff0c;豆瓣评分都在8以上。分别是&#xff1a; 《Python学习手册》&#xff0c;豆瓣8.2分《Python编程&#xff0c;从入门到实践》&#xff0c;豆瓣9.3分《Python Cookbook》&#xff0c;豆瓣9.…

如何优化ABAP程序

文章目录 1 Before code3 After code3 Performance4 Summary4.1 We don t use nested loop as possible as .4.2 We use useful data in the program .4.3 Take care history data . 1 Before code DATA:BEGIN OF LW_SZJE,ZJN TYPE P DECIMALS 1, "折旧年KANSW LIKE A…

从零玩转系列之微信支付实战PC端接口搭建

一、前言 halo各位大佬很久没更新了最近在搞微信支付,因商户号审核了我半个月和小程序认证也找了资料并且将商户号和小程序进行关联,至此微信支付Native支付完成.此篇文章过长我将分几个阶段的文章发布(项目源码都有,小程序和PC端) 在此之前已经更新了微信支付开篇、微信支付安…

阿里云+Nginx Proxy Manager 设置二级域名

这里我们以购买阿里云的域名为例 有域名的作用&#xff1a;当我们在浏览器上面访问主机的某一个端口时&#xff0c;必须输入主机ip端口号&#xff0c;这就会非常的麻烦&#xff0c;而且也会暴露出我们的主机名&#xff0c;很不安全&#xff0c;因此域名的好处就是可以将我们的主…

开关电源-FPC入门知识

01功率因数补偿和功率因数校正 功率因数补偿&#xff1a;在上世纪五十年代&#xff0c;已经针对具有感性负载的交流用电器具的电压和电流不同相&#xff08;图1&#xff09;从而引起的供电效率低下提出了改进方法&#xff08;由于感性负载的电流滞后所加电压&#xff0c;由于电…

JavaWeb笔记(二)

数据库基础 数据库是学习JavaWeb的一个前置&#xff0c;只有了解了数据库的操作和使用&#xff0c;我们才能更好地组织和管理网站应用产生的数据。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IJ1neG69-1686619058026)(null)] 什么是数据库 数…

2023中国纸业碳中和与可持续峰会,九月来袭!

制浆与造纸是资源密集型产业&#xff0c;具有高污染、高能耗的特点。“双碳”目标提出后&#xff0c;造纸行业同时面临需求和产能增长的生产现状与实现“双碳”目标的考验。如何在未来保证产量增长&#xff0c;还能实现节能减排和降耗&#xff0c;成为了所有制浆造纸及上下游产…

docker容器启动的问题 - docker容器和虚拟机的比较 - docker的底层隔离机制

目录 一、docker容器启动的问题&#xff1f; 二、什么是docker仓库&#xff1f; 三、虚拟机和docker容器的区别&#xff1a; docker的优势&#xff1a; docker的缺点&#xff1a; 对比&#xff1a; 四、docker的底层隔离机制 参考文献&#xff1a;LXC linux容器简介——…

前端项目架构怎么搭

前端项目架构 文章目录 **前端项目架构** **框架选型标准****异常处理****自动化构建** **&#xff08;打包&#xff09;****基础组件****公共方法封装****目录结构分配原则** 框架选型标准 ​ 框架的选型需要考虑很多因素&#xff0c;如该技术能否可以满足业务需求、浏览器支…

《大卫科波菲尔》社会网络分析

《大卫科波菲尔》社会网络分析 1.简介1.1数据集介绍1.2社会网络分析简介1.3《大卫科波菲尔》介绍 2.描述性统计3.网络概述4.社区发现5.好句摘抄6.总结和不足 1.简介 1.1数据集介绍 Newman教授的个人数据网站 网址&#xff1a;http://www-personal.umich.edu/~mejn/netdata/ 从…

网络设备容量测试该如何进行?

网络设备容量测试该如何进行? 网络设备容量测试是现代IT运维管理中的重要内容之一。随着企业对网络带宽需求的不断增加&#xff0c;为了更好地满足用户需求和提升网络性能&#xff0c;进行网络设备容量测试显得尤为重要。那么&#xff0c;网络设备容量测试该如何进行呢? 首先…

转行大数据该怎么学

大数据分析主要面向于离线计算。负责数据分析、报表统计等工作&#xff0c;重于数据价值的体现&#xff1b;数据的ETL调度&#xff0c;即E抽取、T转换、L加载&#xff0c;着重于离线数据的流转。虽然工作形式比较单一&#xff0c;但日常需求比较多&#xff0c;尤其是节假日的数…

UE特效案例 —— 武器附魔

一&#xff0c;环境配置 创建默认地形Landscape&#xff0c;如给地形上材质需确定比例&#xff1b;添加环境主光源DirectionalLight&#xff0c;设置相应的强度和颜色&#xff1b;PostProcessVolume设置曝光&#xff0c;设置Min/Max Brightness为1&#xff1b; 与关闭Game Sett…

从数据中台实践,浅谈数据质量管理

时代背景 近20年来&#xff0c;我国的科学技术发展日新月异&#xff0c;各种新兴技术层出不穷&#xff0c;深刻的改变着各行各业&#xff0c;也改变着我们的生活。大数据、云计算、人工智能的出现更是将技术革命推向了高潮。在这种背景下&#xff0c;继农业经济、工业经济之后&…

NSS周常刷密码(3)

[LitCTF 2023]md5的破解 from hashlib import md5 from string import ascii_lowercase,digits import itertools f1 LitCTF{md5can3derypt213thoughcrsh} for i in itertools.product(ascii_lowercasedigits, repeat4):t .join(i)flag f1[:13] t[:2] f1[13:16] t[2] f…

d2l_第四章学习_Classification/Softmax Regression

x.1 Classification 分类问题理论 x.1.1 Classification和Regression的区别 注意&#xff0c;广义上来讲&#xff0c;Classification/Softmax Regression 和 Linear Regression 都属于线性模型。但人们口语上更习惯用Classification表示Softmax Regression&#xff0c;而用Re…