我想在<div>
内设置一个边距,并在可滚动的position:absolute
内设置<div>
,以便在内部div和可滚动区域边界之间留出一些空闲空间(右边)和底部)。
我试过这样的事情,但没有运气:
<div style="overflow:scroll">
<div style="position:absolute; margin-right:100px; margin-bottom:100px">DRAG ME</div>
</div>
在此演示: https://jsfiddle.net/ayft01x0/
只有margin-bottom才有效,而且只能在Chrome中使用。
您还可以想象可分解div中还有其他元素,即使它们被“拖动我”元素的边缘遮盖,它们也应该保持可点击状态(使用CSS边距时应该是这种情况)。
我正在寻找一种仅适用于Webkit浏览器的CSS解决方案 有什么想法吗?
答案 0 :(得分:1)
绝对定位会改变边距的工作方式,但您可以获得边框之后的效果:
我们在左侧和右侧添加边框。这会干扰您在可拖动元素上已经存在的边界,因此我们添加了一个伪元素来处理设计。伪元素掩盖了“拖累我”的声音。文本,所以我们在该内容周围添加一个包装器并修复z索引
这里an update to your fiddle,这里是必要的CSS的片段
#container {
position: relative;
width: 200px;
height: 200px;
border: solid 1px black;
background-color: white;
}
#box {
position: absolute;
border-right: 100px solid transparent; /* changed this */
border-bottom: 100px solid transparent; /* changed this */
outline: 1px solid red; /* just for demo purposes */
width: 80px;
height: 80px;
left: 50px;
top: 50px;
/* dropped the border and background styles */
}
#box span { /* added this element */
position: relative;
z-index: 1;
}
#box:before { /* added this element */
content: '';
position: absolute;
z-index: 0;
width: 80px;
height: 80px;
/* placement adjusted to take the border into account */
left: -2px;
top: -2px;
/* border and background styles moved from #box to here */
border: solid 2px #666;
border-radius: 10px;
background: #ccc; /* shaved off a couple bytes by dropping the -color */
}
&#13;
<div id="container" style="overflow:scroll">
<div id="box">
<span>DRAG ME</span><!-- added this wrapping element so that it can get a z-index -->
</div>
</div>
&#13;
请注意,我保留了可拖动框的初始位置,但实际上我可能会这样做。负边距只是元素维度的一半。这样,如果您调整#container
的大小,则不必重新计算#box
的起始位置
#box {
...
width: 80px;
height: 80px;
left: 50%;
top: 50%;
margin-left: -40px;
margin-top: -40px;
}
答案 1 :(得分:0)
通过使用带内部填充的封装div并使用pointer-events
属性使其对鼠标交互透明,有一种解决方法。
<div style="overflow:scroll">
<div style="position:absolute; padding-right:100px; padding-bottom:100px; pointer-events:none">
<div style="pointer-events:all">DRAG ME</div>
</div>
</div>
答案 2 :(得分:0)
实现此目的的最简单方法是创建一个不可见的CSS ::before
伪元素,该元素覆盖框和padding
,并使用{{3}使其对鼠标交互透明property:
div.box::before{
content: '';
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
padding-right: 100px;
padding-bottom: 100px;
pointer-events: none;
/* background-color: rgba(255,0,0,0.2); // to understand what is going on */
}
在此演示: pointer-events
当该框具有 设置为overflow
的{{1}}属性时,请注意它无法正常工作。