html消除绝对定位的影响,html – 如何防止绝对定位的元素影响滚动条?

本文介绍了一种纯CSS方法来消除绝对定位元素对滚动条的影响。通过将绝对定位应用到特定的子元素,并调整内容区域的定位和溢出属性,可以实现输入框和建议列表在滚动时一起移动的效果。这种方法需要精确地设置内容区域的填充以适应输入框的高度,以确保布局正确。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这似乎有点janky的方法和有一个小警告,但它是纯CSS /没有HTML结构修改。

基本上,我使.container是主要的父,而不是试图从较低级别(.autosuggest)工作。一步步:

>移动位置:相对于.container

>使.autosuggest绝对定位(上/左默认为0px)。

>给它一个更高的z-index,所以它总是在顶部

> make .content绝对定位所有四边0px,因此它与.container的大小相同

>将溢出滚动条移动到.content div

>(这里是警告)将.content的顶部填充设置为.input的实际需要的填充的高度。否则.content在输入元素后面。

你最终得到这样:

.container {

height: 100px;

width: 300px;

margin-top: 50px;

border: 1px solid black;

position: relative;

}

.autosuggest {

width: 250px;

position: absolute;

z-index: 50;

}

.input {

font-size: 16px;

width: 230px;

padding: 5px 10px;

border: 0;

background-color: #FFEBBF;

}

.autosuggest .input:focus ~ .suggestions{

display: block;

}

.suggestions {

display: none;

list-style-type: none;

margin: 0;

padding: 5px 10px;

width: 230px;

background-color: #85DDFF;

}

.content {

overflow-y: auto;

position: absolute;

top: 0;

left: 0;

right: 0;

bottom: 0;

padding: 28px 10px 5px;

}

  • suggestion 1
  • suggestion 2
  • suggestion 3
  • suggestion 4
  • suggestion 5
  • suggestion 6
  • suggestion 7
  • suggestion 8
  • suggestion 9

content content
content content content content content
content content content

我还添加了一些显示/隐藏的autosuggest框,因为它看起来不错。

.autosuggest .input:focus ~ .suggestions{

display: block;

}

.suggestions {

display: none;

}

已测试FF 43,Chrome 47

When scrolling the container, the input and suggestions should move together.

这很可能需要JavaScript。根据定义,将建议设置为绝对位置会将其从内容流的其余部分中删除。你可以在.suggestions div上设置一个高度,并单独滚动它,但是滚动不能(据我所知)被绑定到.content滚动,如果它定位绝对(再次,使用CSS单独)。

就像是:

$('.content').on('scroll', function () {

$('.autosuggest .suggestions').scrollTop($(this).scrollTop());

});

Why absolutely positioned suggestions affect container’s scrollbar?

从技术上讲,绝对定位的元素不影响父的高度。然而,它们仍然被视为元素的内容 – 内容溢出(至少在这种情况下)。

The overflow property specifies whether to clip content, render scrollbars or just display content when it overflows its block level container. (07001)

因为.container的溢出设置为滚动,它显示一个滚动条,因为它的一个孩子溢出边界框。如果将溢出更改为隐藏,它将隐藏所有扩展内容并设置为可见,您将看到.autosuggest扩展通过.container,但.content也是如此(因为它也是扩展边界框的内容)。

你看到一个滚动条,因为.suggest内容视觉上延伸到.container块之外,即使它是绝对定位的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值