CSS 定位:相对构建独立的“堆栈”;或者:为啥蓝色害怕红色和黄色?

Posted

技术标签:

【中文标题】CSS 定位:相对构建独立的“堆栈”;或者:为啥蓝色害怕红色和黄色?【英文标题】:CSS positioning: relative builds independent 'stacks'; or: why is blue afraid of red & yellow?CSS 定位:相对构建独立的“堆栈”;或者:为什么蓝色害怕红色和黄色? 【发布时间】:2012-05-21 18:43:50 【问题描述】:

我需要做什么:我需要并排创建两个 div。在每个 div 中,我需要有绝对定位的图像。我还需要将这些图像从一个 div 拖到另一个。

我的问题是拖动的图像消失在另一个 div 后面。这是一个 jsFiddle 显示问题,因为黄色 div 消失在蓝色容器后面。

我的问题有没有办法让蓝色容器识别黄色 div 的 z-index(绝对位置),而黄色 div 将红色容器作为其锚点?

一些背景:我需要实现这一点,因为我想从一个列表中拖动图像,然后将它们放到另一个可排序的列表中。我想通过 jQuery UI 的可拖动、可放置和可排序方法来实现这一点。到目前为止,一切都很简单和标准。

但是,两个图像列表都必须是可滑动的。就其本身而言,这可以通过 jQuery UI 的滑块方法相对轻松地实现。然而,为了让图像滑动,我需要使用绝对定位(图像列表的实际滑动是通过改变绝对位置来实现的)。所以我无法绕过jsFiddle中所示的相对和绝对定位。

一如既往,非常感谢任何帮助!

【问题讨论】:

不确定代码,但只是一个想法:如果你这样做,当被拖动时,图像将不再以它的父 div 作为父,而是成为另一个 div 的子?跨度> 查看我的更新以获得仅使用 CSS 的替代方法。 我不确定是否存在问题,因为黄色 div 上的 z-index 工作正常:jsfiddle -编辑:我应该添加我正在使用 Chrome,以防万一它是浏览器的东西-具体的。 【参考方案1】:

您可以:

    对容器内的元素应用 z-index。 (并确保将 z-index 应用于容器,否则它们将设置自己的堆叠上下文,并且应用于其中任何内容的 z-index 仅与新上下文相关。)

    从 2 个容器中删除 position:relative 声明。如果没有任何 z-index 声明,定位元素将出现在非定位元素之前。

可以在这里找到关于堆栈上下文的一个很好的解释: http://timkadlec.com/2008/01/detailed-look-at-stacking-in-css/

更新 您可以尝试 jQuery/UI 可拖动的 helper:clone 选项。

由于它“克隆”了您要拖动的项目(“用于拖动显示”),因此它不受与原始容器相同的容器的约束。但是您需要处理这样一个事实,即在拖动“克隆”项目时该项目仍显示在其原始位置。

可以使用draggable的start和stop事件让原来的不可见又可见:

$('.myDiv')
    .draggable(
        helper: 'clone',
        start: function () 
            $(this).css('visibility', 'hidden');
        ,
        stop: function () 
            $(this).css('visibility', 'visible');
        
    )

...但是你需要处理物品掉落时发生的事情,正如 Andrius 建议的那样。为此,我建议您查看这篇文章:clone node on drag

祝你好运。

【讨论】:

+1 此外,jQuery UI 的可拖动插件采用 zindex 便利选项,可能有助于以干净的方式执行此操作。 $('my-selector').draggable('option', 'zindex', value); 谢谢大家,看了你们的回复/cmets,我明白我根本无法按预期去做。不过,Andrius 关于用 jQuery 改变父母的评论可能会奏效。我该怎么做?

以上是关于CSS 定位:相对构建独立的“堆栈”;或者:为啥蓝色害怕红色和黄色?的主要内容,如果未能解决你的问题,请参考以下文章

css:为啥我用div来定位没起作用了,id没有错,只是完全没反应,请问可能的原因都有哪些

我的父级元素div用了相对定位,儿子元素div用了相对定位,为啥孙子元素div用了绝对定位不行了?

[Web 前端] 019 css 定位之绝对定位与相对定位

DW在使用css+div排版时,为啥有的div标签不在固定位置呢,网页放大后,就会移动,求高手解答!谢谢

css中的相对定位与绝对定位的区别

css菜鸟:为啥当Position为absolute时,z-index就无效了呢?