overflow:scroll div 内含 position:absolute 元素
overflow:scroll div with position:absolute element inside
我在overflow:scroll容器里面有一个table,里面有一些按钮table,当有人点击它们的时候,他们会显示一个contextual/tooltip(位置:绝对图层)文本。
当我向右滚动并单击按钮时,它会向右移动而忽略滚动:
使容器相对位置解决了位置问题,但它出现在容器内没有显示菜单:
我需要帮助才能实现以下所需行为:
这是片段:
.container{
width:200px;
height:100px;
overflow:scroll;
position:relative; /* removing this solves the problem, but .contextual moves to the original position */
}
.board{
width:400px;
}
.contextual{
display:none;
position:absolute;
width:100px;
height:100px;
margin: 20px;
z-index: 2;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class=container>
<table class=board>
<tr><td colspan=2>This board size (200) is bigger than its container size (100).</td></tr>
<tr>
<td>this is a button with a contextual element</td>
<td>
<input type=button value="click me" onclick="$('.contextual').show();" />
<div class=contextual>This is a contextual help text.</div>
</td>
</tr>
</table>
</div>
您可以使用 overflow: auto
。这将仅在必要时显示滚动条。此外,您可以从 .contextual
.
中删除 z-index: 2
将上下文 div 放在溢出 div 之外,并根据鼠标位置进行定位。
showContext = function() {
var e = window.event;
var posX = e.clientX;
var posY = e.clientY;
var context = document.getElementById("contextual")
context.style.top = posY + "px";
context.style.left = posX + "px";
context.style.display = "block";
}
.container{
width:200px;
height:100px;
overflow:scroll;
position:relative; /* removing this solves the problem, but .contextual moves to the original position */
z-index:1;
}
.board{
width:400px;
}
#contextual{
display:none;
position:absolute;
width:100px;
height:100px;
background-color:grey;
z-index: 2;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
<table class="board">
<tr><td colspan=2>This board size (200) is bigger than its container size (100).</td></tr>
<tr>
<td>this is a button with a contextual element</td>
<td>
<input type="button" value="click me" onclick="javascript:showContext();" />
</td>
</tr>
</table>
</div>
<div id="contextual">This is a contextual help text.</div>
对于遇到此问题的人,但设置为鼠标位置无济于事
如果你和我有同样的问题,父容器设置为 overflow: scroll
并且尽管 position: absolute
父容器的子元素被切断 - 请执行以下操作
用例,构建下拉菜单
- 将元素设置为
position: fixed
- 获取父元素的视口位置
- 将位置
top
、left
、bottom
、right
值设置为视口值
您可以使用与@jfeferman
中的代码片段相同的代码
我在overflow:scroll容器里面有一个table,里面有一些按钮table,当有人点击它们的时候,他们会显示一个contextual/tooltip(位置:绝对图层)文本。
当我向右滚动并单击按钮时,它会向右移动而忽略滚动:
使容器相对位置解决了位置问题,但它出现在容器内没有显示菜单:
我需要帮助才能实现以下所需行为:
这是片段:
.container{
width:200px;
height:100px;
overflow:scroll;
position:relative; /* removing this solves the problem, but .contextual moves to the original position */
}
.board{
width:400px;
}
.contextual{
display:none;
position:absolute;
width:100px;
height:100px;
margin: 20px;
z-index: 2;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class=container>
<table class=board>
<tr><td colspan=2>This board size (200) is bigger than its container size (100).</td></tr>
<tr>
<td>this is a button with a contextual element</td>
<td>
<input type=button value="click me" onclick="$('.contextual').show();" />
<div class=contextual>This is a contextual help text.</div>
</td>
</tr>
</table>
</div>
您可以使用 overflow: auto
。这将仅在必要时显示滚动条。此外,您可以从 .contextual
.
z-index: 2
将上下文 div 放在溢出 div 之外,并根据鼠标位置进行定位。
showContext = function() {
var e = window.event;
var posX = e.clientX;
var posY = e.clientY;
var context = document.getElementById("contextual")
context.style.top = posY + "px";
context.style.left = posX + "px";
context.style.display = "block";
}
.container{
width:200px;
height:100px;
overflow:scroll;
position:relative; /* removing this solves the problem, but .contextual moves to the original position */
z-index:1;
}
.board{
width:400px;
}
#contextual{
display:none;
position:absolute;
width:100px;
height:100px;
background-color:grey;
z-index: 2;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
<table class="board">
<tr><td colspan=2>This board size (200) is bigger than its container size (100).</td></tr>
<tr>
<td>this is a button with a contextual element</td>
<td>
<input type="button" value="click me" onclick="javascript:showContext();" />
</td>
</tr>
</table>
</div>
<div id="contextual">This is a contextual help text.</div>
对于遇到此问题的人,但设置为鼠标位置无济于事
如果你和我有同样的问题,父容器设置为 overflow: scroll
并且尽管 position: absolute
父容器的子元素被切断 - 请执行以下操作
用例,构建下拉菜单
- 将元素设置为
position: fixed
- 获取父元素的视口位置
- 将位置
top
、left
、bottom
、right
值设置为视口值
您可以使用与@jfeferman
中的代码片段相同的代码