【发布时间】:2015-04-01 22:18:25
【问题描述】:
我有一个容器,里面有一个列表。列表项可以拖动,用鼠标移动。
容器可以滚动:
overflow-y: scroll;
通过设置此属性,Chrome 会自动将 overflow-x 属性设置为“自动”。如果我设置 overflow-x: visible 它会被 Chrome 忽略。如果我设置overflow-x: hidden,那么显然该项目被裁剪了。
当我将列表项拖到容器的左边缘或上边缘之外时,它会被裁剪到容器的边缘。如果我将它拖出右侧或底部边缘,容器会滚动以容纳它。我希望该项目能够拖到容器外而不会被裁剪并且不会触发滚动。
鉴于容器必须设置为overflow-y: scroll,而这反过来又会迫使 Chrome 设置overflow-x: auto,有什么办法可以实现还是不可能?
Codepen:http://codepen.io/Pedr/pen/azLWeY
注意:我知道我可以通过使用填充来偏移容器来解决这个问题(这样容器的限制实际上会超出其视觉边缘),但在我的情况下这不是一个选项.
$(function() {
$('.Wrapper').mousemove(function(event){
$('.Item').offset({left: event.pageX, top: event.pageY});
});
})
html,
body {
height: 100%;
}
.Wrapper {
width: 100%;
height: 100%;
position: absolute;
}
.Container {
background: grey;
position: absolute;
width: 50%;
left: 25%;
min-height: 100%;
overflow-y: scroll;
overflow-x: hidden; // Clips Item
// If left at auto it will clip the item on the top and left edge and scroll if the item overlaps the bottom or right edge.
}
.Item {
padding: 20px;
background: red;
position: absolute;
width: 600px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="Wrapper">
<div class="Container">
<div class="Item">ITEM</div>
</div>
</div>
【问题讨论】:
-
哈哈,这个标题引起了我的注意! “将孩子从容器中拖出”......什么?哦,那个……
-
郑重声明,我认为您不应该对所有不是您想要的答案投反对票。
-
@deebs 我只是对每一个花费零努力编写的答案投了反对票。
-
如果有答案,那么“零努力”是不可能的。我想你可以说“最小的努力”......这更容易理解。无论哪种方式,您可以确定每个人所做的努力这一事实非常了不起。
-
@deeps 我一定让你很不高兴,因为你一天后回来编辑你的评论。这不是人气竞赛。如果答案显示出很少的努力(并且我认为用 JS 解决这样的 CSS 问题需要很少的努力)或者没有以我满意的方式解决问题,那么我将其标记为因为我没有考虑过有用。
标签: html css drag-and-drop overflow clip