position:sticky:在元素脱离正常流时添加样式
position:sticky : Adding style when the element detaches from normal flow
让我们看一个简单的例子:
<nav id="#mynav">MY NAVBAR</nav>
和基本样式:
#mynav {
position : sticky;
}
我想把下面的样式信息应用到我的导航栏中,当它从正常的流中分离出来时,只有,以便在视觉上从主内容中分离出来(在这种情况下是阴影)
box-shadow : 0px 10px 15px 0px rgba(0,0,0,0.75);
是否有某种伪类或媒体查询之类的东西我可以使用?例如:
#mynav:some-pseudo-class {
box-shadow : 0px 10px 15px 0px rgba(0,0,0,0.75);
}
我知道有很好的插件,但他们似乎都无法实现它而不绕过(相当新的)本地功能position:sticky
。相反,他们使用一种老式的方式(滚动事件和position:fixed; top:0
)。
所以,有可能做到这一点使用position:sticky
,而不使用scroll
事件,这减慢了页面的流动性(我不反对javascript,但滚动事件太慢)?
不幸的是,据我所知,没有针对'粘性'状态的伪类。
参见post: Targeting position:当前处于'stuck'国家
另一种方法是使用jQuery在类/css样式到达需要粘贴的元素时添加或删除该类/css样式。
我在这里找到了答案https://css-tricks.com/how-to-detect-when-a-sticky-element-gets-pinned/
今天你需要使用javascript:
const el = document.querySelector(".myElement")
const observer = new IntersectionObserver(
([e]) => e.target.classList.toggle("is-pinned", e.intersectionRatio < 1),
{ threshold: [1] }
);
observer.observe(el);
#parent {
height: 2000px;
}
.myElement {
position: sticky;
top: -1px;
}
/* styles for when the header is in sticky mode */
.myElement.is-pinned {
color: red;
}
<div id="parent">
<br /> <br /> <br /> <br />
<div class="myElement">Hello!</div>
</div>
top: -1px
是非常重要的,因为IntersectionObserver
检测"你的元素在屏幕上的可见程度"。e.intersectionRatio
对应于"可见度"的百分比你的el
。因此,如果您使用top: 0px
,那么e.intersectionRatio
将始终等于1
,并且永远不会添加is-pinned
类。
您的最佳解决方案可能是依赖于JavaScript滚动事件。CSS有(有限的)对快照点的支持,但这是目前最接近滚动事件的支持。
如果你唯一关心的是JS解决方案的流动性,我可能会建议尝试应用CSS过渡到#mynav
,这样当元素在滚动上改变时,有一个更平滑的视觉提示,一些东西正在改变。
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 跟踪在页面加载时应用内联样式的JavaScript
- Node.js使用Series函数(模式?)实现流控制时出现意外结果
- 在AJAX回调和呈现PIXIJS之间处理程序流时遇到了问题
- 当主导航离开视图时,为粘性导航应用样式
- 如果类不是一个选项,如何在使用 jQuery 时控制(避免)嵌套 html 元素的样式
- 在js中访问元素时不透明度和样式未定义,但在css中定义
- 我应该用K&编写javascript时的R样式
- 比较两个值时出现JavaScript输出和控制流错误
- Microsoft JScript运行时错误:无法获取属性'的值;样式':对象为null或未定义
- bootstrap在类更改时动画按钮样式
- "无法获取属性'的值;style'"当试图在IE中更改样式时
- React js应用程序's在托管应用程序中打开时将覆盖css样式
- 使用CSS将鼠标悬停在子对象上时,删除父对象上的悬停样式
- 使用Javascript对象为具有两个背景图像的DIV设置样式时出现问题
- Nodejs Twit 模块在停止流时出错
- 网络音频API:当使用媒体流时,firefox中的FFT数据不同于chrome中的数据
- RxJs:如何“倾听”在订阅接收到流时对其进行更改
- position:sticky:在元素脱离正常流时添加样式
- 当执行多个吞咽流时,如何将吞咽任务标记为已完成