嗨,
我需要某些伪元素才能仅在滚动条出现时出现。这是代码:
.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的解决方案会不错,但我愿意接受替代方案。
谢谢。
答案 0 :(得分:0)
您需要观察元素的大小,看是否出现滚动条,如果有则添加一个类。仅当类在其父级上存在时,才会显示伪元素。该演示使用新的ResizeObserver。目前仅受Chrome支持。但是,有一个pollyfill。
向下拖动文本区域手柄以将其放大直到出现滚动条。
注意:在您的伪元素出现之后,它们会导致永久性溢出,因此您无法通过缩小文本区域来隐藏滚动条。
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>