为什么bottom:0 不能与position:sticky 一起使用?

2023-12-01

我试图了解 css“粘性”的作用。 我可以让它粘在其父级的“顶部”, 但还没有到“底部”

我的测试代码是:

.block {
  background: pink;
  width: 50%;
  height: 200px;
}

.move {
  position: sticky;
  bottom: 0;
}
1111<br/>11111<br/>11111<br/>11111<br/>11111<br/>11111<br/>11111<br/>
<div class="block">
  AAAA
  <div class="move">
    BBBB
  </div>
</div>
222222<br/>222222<br/>222222<br/>222222<br/>222222<br/>222222<br/>

当我将“移动”设置为“顶部:0”时,它会粘在粉红色块的顶部,但是当设置为“底部:0”时,它似乎不再固定/粘性。


它工作正常,但你什么也看不到。我们看一下定义:

A stickily positioned element is an element whose computed position value is sticky. It's treated as relatively positioned until its containing block crosses a specified threshold (such as setting top to value other than auto) within its flow root (or the container it scrolls within), at which point it is treated as "stuck" until meeting the opposite edge of its containing blockref

给块元素留出很大的边距以将其隐藏在屏幕上,然后开始缓慢滚动

.block {
  background: pink;
  width: 50%;
  height: 200px;
  margin-top:120vh;
}

.move {
  position: sticky;
  bottom: 0;
}
<div class="block">
  AAAA
  <div class="move">
    BBBB
  </div>
</div>

您会注意到,当您的元素显示BBB是重叠的AAA直到到达初始位置。这是使用时的粘滞行为bottom:0。所以我们的元素被保留position:relative当容器开始从顶部的屏幕出去时,它会粘在底部,直到到达相反的边缘(容器的顶部)。

完全相同的情况发生在top:0但在相反的方向:

.block {
  background: pink;
  width: 50%;
  height: 200px;
  margin-bottom:120vh;
}

.move {
  position: sticky;
  top: 0;
}
<div class="block">
  AAAA
  <div class="move">
    BBBB
  </div>
</div>

太粘了will not将元素定位到顶部或底部,但它将决定元素应如何粘贴,以便在容器开始移出屏幕时可见。

为了获得您想要的内容,您需要使用其他属性将元素放在底部并保持底部粘性。

这是一个示例,我使用 Flexbox 将元素放置在底部,并指定需要将其粘在底部。

.block {
  background: pink;
  width: 50%;
  height: 200px;
  margin-top:120vh;
  display:flex;
  flex-direction:column;
}

.move {
  margin-top:auto;
  position: sticky;
  bottom: 0;
}
<div class="block">
  AAAA
  <div class="move">
    BBBB
  </div>
</div>

So position:sticky永远不会像我们那样定义元素的位置absolute or fixed但它将定义当存在滚动行为时元素将如何粘住。


这里有更多示例以更好地理解:

.block {
  background: pink;
  display:inline-flex;
  vertical-align:top;
  height: 200px;
  max-width:100px;
  flex-direction:column;
  margin:100vh 0;
}

.e1 {
  position: sticky;
  top: 0;
}
.e2 {
  margin-top:auto;
  position: sticky;
  top: 0;
}
.e3 {
  position: sticky;
  top: 20px;
}
.e4 {
  position: sticky;
  bottom: 0;
  margin:auto;
}
.e5 {
  position: sticky;
  bottom: 0;
  top:0;
  margin:auto;
}
.e5 {
  position: sticky;
  bottom: 0;
}
<div class="block">
  <div class="e1">Top sticky</div>
</div>
<div class="block">
  <div class="e2">Top sticky at bottom (nothing will happen :( )</div>
</div>
<div class="block">
  <div class="e3">Top sticky at 10px</div>
</div>
<div class="block">
  <div class="e4">bottom sticky in the middle</div>
</div>
<div class="block">
  <div class="e5">top/bottom sticky in the middle</div>
</div>
<div class="block">
  <div class="e6">bottom sticky at the top (nothing will happen :( )</div>
</div>

粘性的另一个常见错误是忘记元素相对于其父元素的高度/宽度。如果元素的高度等于父级(包含块)的高度,那么从逻辑上讲,不会有粘性行为,因为我们已经在相对的边缘.

.block {
  background: pink;
  display:inline-flex;
  vertical-align:top;
  height: 200px;
  max-width:100px;
  flex-direction:column;
  margin:100vh 0;
}

.block > div {
  border:2px solid;
} 
.e1 {
  position: sticky;
  top: 0;
}
<div class="block">
  <div class="e1">Top sticky</div>
</div>
<div class="block">
  <div class="e1" style="height:100%">I will not stick</div>
</div>
<div class="block">
  <div class="e1" style="height:80%">I will stick a little ..</div>
</div>
<div class="block" style="height:auto">
  <div class="e1">I will not stick too</div>
</div>

请注意最后一种情况,其中父级的高度设置为auto(默认值)因此它的高度将由其内容定义,这使得粘性元素与包含块具有相同的高度,并且不会发生任何事情,因为没有粘性行为的空间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么bottom:0 不能与position:sticky 一起使用? 的相关文章

  • Div 上的倾斜边框

    我正在尝试倾斜一个 div 类似于 使用 css 倾斜 div 的顶部而不倾斜文本 https stackoverflow com questions 13591584 slant the top of a div using css wi
  • HTML 和 CSS 的基本编码标准 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想知道它们是否是像 PSR 01 这样的 HTML 和 CSS 基本编码标准 我尝试谷歌搜索和搜索 但没有找到 我建议看看类似的东西
  • 如何将 twitter bootstrap 与 Spring MVC 一起使用

    我不明白为什么我的 Spring MVC 页面没有隐藏引导样式 我的你好 jsp
  • Chrome 中的 CSS 列不平衡

    我想使用以下方法在多列中动态显示一些 Bootstrap 列表组CSS 列 https developer mozilla org en US docs Web Guide CSS Using multi column layouts 但我
  • 为什么连字符不能与内部 一起使用?

    我正在尝试让连字符处理具有以下内容的文本 span 里面的元素用于突出显示 这似乎打破了连字符算法 有什么方法可以修复这种行为 使连字符的放置方式与没有连字符的位置相同 span 元素 我不是在问像这样的解决方法 shy 代码 沙箱 htt
  • Safari 6 (iOS 6) 弹性布局不会换行元素

    我需要将两个框放在列中 这在我测试过的其他浏览器中有效 但在 iOS 6 上的 Safari 6 中无效 例子 http jsfiddle net 5FESj 1 http jsfiddle net 5FESj 1 display webk
  • CSS“概述”Webkit 和 Gecko 上不同的行为行为

    我正在做一个实验 我发现 轮廓 CSS2 属性在 Webkit 和 Gecko 上的实现方式不同 在下面的脚本中 我有一个绝对位置 div 在另一个 div 内 但浮动在其外部 Webkit 上的轮廓概述了实际的父 div 而在 Gecko
  • 使图像宽度为父 div 的 100%,但不大于其自身宽度

    我试图让图像 动态放置 对尺寸没有限制 与其父 div 一样宽 但前提是该宽度不比 100 时其自身宽度宽 我已经尝试过这个 但没有成功 img width 100 height auto max width 100 其中许多图像比它们的父
  • 当元素具有多个类时如何在 switch 语句中检查 className

    在下面的示例中 我只想单击该选项以在警报中显示 我正在尝试使用 switch 语句来确定单击了哪个类 如果我的 div 不包含多个类 则我的示例将有效 我尝试使用classList contains在我的 switch 语句中无济于事 有没
  • 更改 CSS 样式表的选择器属性

    以下是我们传统上如何更改重复元素的样式 将样式应用到每个元素 function changeStyle selector prop val var elems document querySelectorAll selector Array
  • Ie11 不应用媒体查询样式

    IE11 忽略我的媒体查询并始终使用移动 CSS 奇怪的是 如果我改变浏览器宽度 即使只是 1 2 像素 浏览器也会自行渲染并显示媒体查询 我尝试了 css lint 我的 css 中没有错误 我的CSS没有什么特别的 只是简单的 css
  • 线性淡出 div、内容和边框(顶部实线到底部透明)[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以分级 HTML 元素的不透明度 https stackoverflow com questions 12664132 is it possible to graduate the opacit
  • 检查元素是否在视口的 30% 到 60% 之间

    我正在尝试改变颜色 li 当元素占视口的 30 到 60 之间时 所以我有这个元素网格并排堆叠 如下所示 我遇到了一些插件 例如 Waypoints Viewport Checker 和其他一些插件 但没有什么好的 任何想法 我正在使用一个
  • 创建便利贴(便利贴)[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在设计一个网页 我想在我的页面中使用便利贴 便利贴 其中 当我们单击添加按钮时会添加每个便签 便签的颜色必须随机变化 并且必须倾斜并且
  • 更改网格模板列会破坏布局

    定义时grid template columns在相应的父 div 中这很好 wrapper display grid grid template columns 1fr 1fr 700px 但是如果我只想要两列怎么办 如果我删除其中之一f
  • 如何使输入字段的宽度为 100% 减去提交按钮的宽度?

    我有一个非常基本的单一输入字段 旁边有一个 提交 按钮 搜索按钮的固定宽度为 104 像素 两者都包裹在一起 总宽度占浏览器视口的 50 我的计划是允许输入字段随着浏览器窗口的扩大而扩大 目前 对于我的特定浏览器窗口 我必须修复输入字段的宽
  • 图像未完整显示在身体背景上

    例子 http jsbin com opokev 20 http jsbin com opokev 20 完整图片 http i53 tinypic com 347a8uu jpg http i53 tinypic com 347a8uu
  • 是否可以全局文本对齐表列而不在每行中指定类?

    想知道提高效率的最佳方法是什么 也许使用 jQuery 我可以接受不兼容 ie7 的解决方案 如果需要的话 即使缺乏对 ie8 的支持也可以 table th td class cal center td td left td td cla
  • 如何在rollup中使用css @import?

    我尝试创建一个简单的汇总应用程序的配置 但在 css 方面遇到了一些麻烦 这是我的 CSS 文件 import normalize css import typeface roboto html body root height 100 f
  • iPad 上的网站纵向视图

    我的网站在 iPad 纵向模式下无法正确显示 它在横向模式下看起来不错 但当我将其转换为纵向模式时 我最终会得到一个混乱的网站 所有元素都分散在整个网站上 我怎样才能解决这个问题 请帮我 这是我网站的链接 inclouds co uk ht

随机推荐

  • 将静态库转换为共享库?

    我有一个第三方库 主要由大量静态 a 库文件 我可以将其编译成一个 a库文件 但我真的需要它是一个单一的 so共享库文件 有什么方法可以将静态转换为 a文件到共享 so文件 或者更一般地说 是否有一个好的方法来组合大量的静态 a文件有几个
  • 在 Django 框架中发出 ajax Post 请求时出现 403 Forbidden 错误

    我正在尝试将 jquery 集成到我使用 Django 框架制作的 Web 应用程序中 然而我很难尝试做一个简单的ajax打电话去上班 我的模板文件包含用于处理 ajax 调用的 html 和 javascript 表单 如下所示
  • iPhone:在应用程序中同时使用 OpenGL 和本机用户界面的最佳方式是什么?

    我对 iPhone 平台还很陌生 所以我想知道在 OpenGL 渲染和 UIView 之间切换的最佳方式是什么 任何评论都非常感谢 根本不需要切换模式 iPhone 上的 OpenGL ES 渲染是在 CAEAGLLayer 核心动画层中完
  • 如何将一张表与许多不同的表关联起来?

    我有一个表格列表 即学生 教师 员工 部门 等等 每个表都有特定的注释 现在 表中的一条记录可以有一个或多个注释 这表明从任何表到注释表都是一对多关系 我不知道将评论表与其中每一个相关联的最佳方法是什么 如果我将评论表中的外键放入每个表中
  • 如何绘制堆积事件持续时间(甘特图)

    我有一个 Pandas DataFrame 其中包含流量计开始测量流量的日期以及该站退役的日期 我想生成一个以图形方式显示这些日期的图 这是我的数据框的示例 import pandas as pd data index 40623 4063
  • 将团队构建输出文件夹中的文件包含到 XAP 中

    我正在尝试使用 TFS 2010 对 Windows Phone 7 1 项目进行持续集成 有2个资源项目 用于本地化的 Win32 项目 和主要的 Windows Phone 项目 我已将上述 2 个项目的项目输出复制到主 WP 项目中的
  • Docker 堆栈在 Windows 中部署

    我在 docker stack windows 中有一些问题 我们可以在Windows 2016中启用docker stack吗 是否完全支持 如果是 我们如何启用 我们如何使用此文件自动创建 swarm 集群 我搜索过 google 但找
  • 服务器作曲家安装 --no-dev 被杀死

    当我尝试更新包时在服务器中 composer install no dev 结果是 我该如何修复它 看起来像composer install正在尝试更新软件包 因此您可能没有composer lock文件在你的项目中 在这种情况下compo
  • CFDictionary 获取 Swift3 中键的值

    我在访问 CFDictionary 中的特定 或任何 键时遇到问题 老实说 我真的不明白你需要在 Swift 中执行此操作的方式 而且我认为它过于复杂 My Code if let session DASessionCreate kCFAl
  • Jetpack Compose - 使 LazyRow 中的第一个元素与屏幕中心对齐

    我想获得一个LazyRow看起来像这样 aaa b bb cccc dd w x 是一屏宽度 元素的大小各不相同 但它们之间的间距是固定的 我想我可以添加一些开始内容填充LazyRow以便 aaa 可组合项与屏幕中心对齐 但我不知道它的宽度
  • 带空格的 Bash 变量

    我在 Windows 下的 MinGW shell 中面临下一个问题 我在我的 etc profile表达方式 export GIT SSH c Program Files TortoiseGit bin TortoisePlink exe
  • PowerPoint 和 WPF

    我确实需要一种在我的 wpf 应用程序中加载 ppt 文档的方法 谁能给我一个提示 代码示例 结帐下列的讨论线程 Dr WPF 还发表了一篇有趣的文章 可能对您也有帮助 WPF 应用程序中的托管 Office但是 考虑到您的场景的许可证成本
  • 如果是在生产环境中,调试死锁问题的正确行动计划是什么?

    注意我不是在问死锁的概念 我感兴趣的是如果你在生产集群服务器的java应用程序中遇到这个问题你会怎么做以及调试技巧 Question 关于分析步骤的计划的最佳实践 假设 您已经知道一台服务器受到此问题的影响 操作系统使用Linux Goal
  • 为什么属性不自动合成

    也许这是一个愚蠢的问题 每次我做一个 property我必须 synthesize它 但这毫无意义 你唯一能做的就是 property whatever Type property就是要做 synthesize property在实施文件中
  • 如何发出委托或 lambda 表达式

    我想发出一个返回 Function 的方法 在这个方法中 我必须创建一个委托或一个正好服务于返回类型的 lambda 表达式 总的来说 它应该看起来像这样 I have a resolve method that will be calle
  • 如何使用 htaccess 文件在 php 中重写 URL。 php代码有什么变化

    我是 htaccess 文件的新手 我正在网上搜索 但我无法在 PHP 中更改和重写 URL 例如 显示网址如 本地主机 web site view project php vp 14 我想显示我的网址 本地主机 网站 网站 项目 14 在
  • 圆角、矩形按钮

    我有兴趣制作一个类似于主页上的按钮的 html 按钮https new myspace com 我知道 html 看起来像这样
  • 如何获取所有用户所有公共仓库中Github的实时推送事件?

    我看过GET events但它返回所有事件 而不仅仅是我感兴趣的推送事件 我读过有关 webhooks 的内容pushEvent特别是 但可以配置为仅存储库 以便在推送到该存储库时收到通知 但我希望获得来自所有用户的所有公共存储库中的所有推
  • WebBrowser 控件 WPF 中的脚本错误

    当我使用 wpf 处理 webBrowser 控件时出现 脚本错误 之类的错误 即使我在这里粘贴了屏幕截图 甚至一些 jquery UI 和 css 也不起作用 我也面临这个问题 我需要创建浏览器应用程序 网络上有很多 Jquery JSO
  • 为什么bottom:0 不能与position:sticky 一起使用?

    我试图了解 css 粘性 的作用 我可以让它粘在其父级的 顶部 但还没有到 底部 我的测试代码是 block background pink width 50 height 200px move position sticky bottom