我希望position: fixed
div的宽度(因为我希望它能够独立于页面滚动)等于其父元素(td
元素)的宽度。
但是我似乎无法实现。我当前的代码是:
html:
<table style="width: 90%; border: 1px solid black;">
<tr>
<td id='tdLeft'>
fdsfsdfsd<br><br><br><br><br><br><br><br><br>
fdsfsdfsd<br><br><br><br><br><br><br><br><br>
fdsfsdfsd<br><br><br><br><br><br><br><br><br>
fdsfsdfsd<br><br><br><br><br><br><br><br><br>
fdsfsdfsd<br><br><br><br><br><br><br><br><br>
</td>
<td id='tdRight'>
fdsfsd
<br>
rfeoif jerofj eriof
<div id='divFixed'>
hahaha, fdsfsd, fsdfsd, fdsfds, fdsfaaasd, fdfsdss,
hahaha, fdsfsd, fsdfsd, fdsfds, fdsfsd, fdfsd,
hahaha, fdsfsd, fsdfsd, fdsfds, fdsfsd, fdfsd
</div>
</td>
</tr>
</table>
css:
#tdLeft, #tdRight {
margin: 0;
padding: 0;
border-spacing: 0px;
border-collapse: collapse;
vertical-align: top;
}
#tdLeft {
position: relative;
width: 40%;
}
#tdRight {
position: relative;
width: 60%;
background-color: green;
}
#divFixed {
position: fixed;
border: 1px solid black;
top: 100px;
width: inherit;
}
因此,小黑框应与绿色td
元素一样宽。
jsfiddle:https://jsfiddle.net/jpovqd4u/2/
position: sticky
位置无法正常工作(宽度正确),但由于顶部包装div的层数较多,因此不会保持粘性,并且由于浏览器兼容性欠佳也不理想。
答案 0 :(得分:2)
您可以通过将fixed
替换为sticky
来获得所需的内容,但是它在表是您唯一的元素的情况下将非常有效,因为sticky
的位置不会使该元素固定在其包含块(父元素)之外
table {
border: 1px solid black;
width: 90%;
}
#tdLeft,
#tdRight {
margin: 0;
padding: 0;
border-spacing: 0px;
border-collapse: collapse;
vertical-align: top;
}
#tdLeft {
position: relative;
width: 50%;
}
#tdRight {
position: relative;
width: 50%;
background-color: green;
}
#divFixed {
position: sticky;
border: 1px solid black;
top: 100px;
}
<table>
<tr>
<td id="tdLeft">
fdsfsdfsd<br><br><br><br><br><br><br><br><br>
fdsfsdfsd<br><br><br><br><br><br><br><br><br>
fdsfsdfsd<br><br><br><br><br><br><br><br><br>
fdsfsdfsd<br><br><br><br><br><br><br><br><br>
fdsfsdfsd<br><br><br><br><br><br><br><br><br>
</td>
<td id="tdRight">
fdsfsd
<br>
rfeoif jerofj eriof
<div id="divFixed">
hahaha, fdsfsd, fsdfsd, fdsfds, fdsfaaasd, fdfsdss,
hahaha, fdsfsd, fsdfsd, fdsfds, fdsfsd, fdfsd,
hahaha, fdsfsd, fsdfsd, fdsfds, fdsfsd, fdfsd
</div>
</td>
</tr>
</table>
答案 1 :(得分:1)
使用position: sticky
而不是固定的 :
根据元素的正常流向放置元素 文档,然后相对于其最近的滚动祖先偏移 并且包含块(最近的块级祖先),包括 与表格相关的元素,基于top,right,bottom和 剩下。偏移量不会影响任何其他元素的位置。
来源:MDN
请参见下面的演示
#tdLeft, #tdRight {
margin: 0;
padding: 0;
border-spacing: 0px;
border-collapse: collapse;
vertical-align: top;
}
#tdLeft {
position: relative;
width: 50%;
}
#tdRight {
position: relative;
width: 50%;
background-color: green;
}
#divFixed {
position: sticky; /* CHANGED */
border: 1px solid black;
top: 100px;
/*width: inherit;*/
}
<table style="width: 90%; border: 1px solid black;">
<tr>
<td id='tdLeft'>
fdsfsdfsd<br><br><br><br><br><br><br><br><br>
fdsfsdfsd<br><br><br><br><br><br><br><br><br>
fdsfsdfsd<br><br><br><br><br><br><br><br><br>
fdsfsdfsd<br><br><br><br><br><br><br><br><br>
fdsfsdfsd<br><br><br><br><br><br><br><br><br>
</td>
<td id='tdRight'>
fdsfsd
<br>
rfeoif jerofj eriof
<div id='divFixed'>
hahaha, fdsfsd, fsdfsd, fdsfds, fdsfaaasd, fdfsdss,
hahaha, fdsfsd, fsdfsd, fdsfds, fdsfsd, fdfsd,
hahaha, fdsfsd, fsdfsd, fdsfds, fdsfsd, fdfsd
</div>
</td>
</tr>
</table>