gpt4 book ai didi

css - 如何使元素仅在存在滚动条时出现?

转载 作者:行者123 更新时间:2023-11-28 01:13:18 24 4
gpt4 key购买 nike

你好,

我需要某些伪元素仅在滚动条出现时出现。这是代码:

.pseudo::before, .pseudo::after {
position: absolute;
z-index: 1;
content: "";
width: 18px;
height: calc(100% - 2px);
right: 0;
display: block;
pointer-events: none;
border: 5px solid black;
box-sizing: border-box;
}

.pseudo::before {background: rgba(177, 171, 44, 0.4);border-radius: 25px;}

但这行代码只有在滚动条出现时才需要。当它不存在时无需拥有它。

纯 CSS 解决方案会很好,但我愿意接受替代方案。

谢谢。

最佳答案

您需要观察元素的大小,查看是否出现滚动条,如果出现则添加一个类。伪元素只有在该类存在于其父级上时才会出现。该演示使用新的 ResizeObserver .目前只有 Chrome 支持。但是,有一个 pollyfill .

向下拖动文本区域 handle 将其放大,直到出现滚动条。

注意:伪元素出现后会导致永久溢出,因此您无法通过缩小文本区域来隐藏滚动条。

const ro = new ResizeObserver(entries => {
const { target } = entries[0];
const hasScrollbar = target.scrollHeight > target.clientHeight;

if(hasScrollbar) target.classList.add('has-scrollbar');
else target.classList.remove('has-scrollbar');
});

ro.observe(document.querySelector('.pseudo'));
.pseudo {
position: relative;
overflow: auto;
height: 150px;
}

.pseudo.has-scrollbar::before, .pseudo.has-scrollbar::after {
display: block;
}

.pseudo::before,
.pseudo::after {
position: absolute;
z-index: 1;
content: "";
width: 18px;
height: calc(100% - 2px);
right: 0;
display: none;
pointer-events: none;
border: 5px solid black;
box-sizing: border-box;
}

.pseudo::before {
background: rgba(177, 171, 44, 0.4);
border-radius: 25px;
}
<div class="pseudo">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam dapibus ante ac iaculis dapibus. Vestibulum quis purus at urna tincidunt commodo ac id ante.
<br />
<textarea></textarea>
</div>

关于css - 如何使元素仅在存在滚动条时出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51992630/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com