具有 position: relative 的元素不应该是正常文档流的一部分吗?
Shouldn't an element that has position: relative be a part of the normal document flow?
我有一个组件,它有一个带 position: relative
的 div 和一个带 position: absolute
嵌套在其中的 div。当我将该元素引入我的其他组件时,它们会重叠。
这是第一个组件:
<div className={classes.positionRelative}>
<div className={classes.absoluteList}>
<div className={classes.flexWrapper}>
<img
className={classes.coinImg}
src={currentCoin}
alt='current coin'
/>
<input
className={inputSizeDecider}
onChange={storeInputText}
/>
<img src={search} alt='search icon' />
</div>
{inputText != '' && (
<ul>
{coins &&
coins
.filter(coin => {
if (
coin.name
.slice(0, inputText.length)
.toLowerCase() ==
inputText.toLowerCase()
) {
return coin;
}
})
.map((coin, i) => (
<div key={`div${i}`}>
<img
src={coin.image}
alt='coin logo'
key={`img${i}`}
/>
<p key={`p${i}`}>{coin.name}</p>
</div>
))}
</ul>
)}
</div>
</div>
css:
.positionRelative {
position: relative;
}
.absoluteList {
display: flex;
padding: 2px;
width: 50vw;
flex-direction: column;
align-items: top;
position: absolute;
border: solid 1px #707070;
border-radius: 10px;
}
.flexWrapper {
display: flex;
align-items: center;
justify-content: flex-end;
}
.flexWrapper > input {
width: 20vw;
padding-left: 2vw;
flex-grow: 1;
border-style: none;
outline: none;
overflow: hidden;
}
.coinImg {
height: 2.5vh;
}
第二个组成部分(没有css)
<div>
<Searchbar />
<p>
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Optio
adipisci facilis sapiente incidunt laboriosam provident esse
eius ut, odio doloremque magni! Earum voluptates distinctio qui
sint temporibus assumenda nobis vero.
</p>
</div>
当我 运行 这个
时,搜索栏组件和段落只是堆叠在一起
您的 .positionRelative
元素没有任何其他子元素,除了 .absoluteList
– 它有 position:absolute
.
但是具有 position:absolute
的元素不带任何 space 自己的 !因此,您的 .positionRelative
呈现为没有内容的元素,因此高度为零。 (使用浏览器工具检查它,然后您就会看到它)。因此,其绝对定位的子元素将与文档流中的 other 元素重叠。
因此,为了为 .absoluteList
创建 space,您必须为 .positionRelative
元素定义一个手册 height
。
或者,考虑从 .absoluteList
中删除 position:absolute
,因此它被视为 .positionRelative
的常规内容。
我有一个组件,它有一个带 position: relative
的 div 和一个带 position: absolute
嵌套在其中的 div。当我将该元素引入我的其他组件时,它们会重叠。
这是第一个组件:
<div className={classes.positionRelative}>
<div className={classes.absoluteList}>
<div className={classes.flexWrapper}>
<img
className={classes.coinImg}
src={currentCoin}
alt='current coin'
/>
<input
className={inputSizeDecider}
onChange={storeInputText}
/>
<img src={search} alt='search icon' />
</div>
{inputText != '' && (
<ul>
{coins &&
coins
.filter(coin => {
if (
coin.name
.slice(0, inputText.length)
.toLowerCase() ==
inputText.toLowerCase()
) {
return coin;
}
})
.map((coin, i) => (
<div key={`div${i}`}>
<img
src={coin.image}
alt='coin logo'
key={`img${i}`}
/>
<p key={`p${i}`}>{coin.name}</p>
</div>
))}
</ul>
)}
</div>
</div>
css:
.positionRelative {
position: relative;
}
.absoluteList {
display: flex;
padding: 2px;
width: 50vw;
flex-direction: column;
align-items: top;
position: absolute;
border: solid 1px #707070;
border-radius: 10px;
}
.flexWrapper {
display: flex;
align-items: center;
justify-content: flex-end;
}
.flexWrapper > input {
width: 20vw;
padding-left: 2vw;
flex-grow: 1;
border-style: none;
outline: none;
overflow: hidden;
}
.coinImg {
height: 2.5vh;
}
第二个组成部分(没有css)
<div>
<Searchbar />
<p>
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Optio
adipisci facilis sapiente incidunt laboriosam provident esse
eius ut, odio doloremque magni! Earum voluptates distinctio qui
sint temporibus assumenda nobis vero.
</p>
</div>
当我 运行 这个
时,搜索栏组件和段落只是堆叠在一起您的 .positionRelative
元素没有任何其他子元素,除了 .absoluteList
– 它有 position:absolute
.
但是具有 position:absolute
的元素不带任何 space 自己的 !因此,您的 .positionRelative
呈现为没有内容的元素,因此高度为零。 (使用浏览器工具检查它,然后您就会看到它)。因此,其绝对定位的子元素将与文档流中的 other 元素重叠。
因此,为了为 .absoluteList
创建 space,您必须为 .positionRelative
元素定义一个手册 height
。
或者,考虑从 .absoluteList
中删除 position:absolute
,因此它被视为 .positionRelative
的常规内容。