【问题标题】:Strange effect happening when adding CSS添加 CSS 时出现奇怪的效果
【发布时间】:2012-11-15 06:08:50
【问题描述】:

我有一个运行良好的网页,直到我在其周围添加了以下 HTML 和 CSS:

HTML:

<div class="content">
    <div class="inner_content">
        <!-- old HTML within these 2 div tags worked find before adding these 2 new div tags -->
    </div>
</div>

CSS:

.content
{
    background:#BBBBBB;
}

.inner_content
{
    width:993px;
    margin:auto;
    padding:10px 0px 0px 10px;
    background:#AAAAAA;
}

奇怪的效果:

你可以在这个jsfiddle中看到“奇怪的效果”。

如果您单击任何包含(c) 的 div,您会注意到出现了一个小下拉菜单。如果您随后尝试通过拖动小部件的标题来移动小部件,请注意单击 (c) 时出现的下拉列表会发生什么情况

这在我添加上面的 HTML 和 CSS 之前没有发生。

截图:

以下是一些显示问题的屏幕截图:

下拉菜单在这里看起来不错: Click to enlarge.

使用旧 HTML 启用下拉菜单的移动小部件,下拉菜单与小部件一起正确移动: Click to enlarge.

在添加了新的 div/css 的情况下启用下拉菜单移动小部件,下拉菜单与小部件一起移动不正确: Click to enlarge.

问题:

有没有办法在不丢失 HTML 和 CSS 添加到页面的效果的情况下纠正它,而不会导致下拉菜单做奇怪的事情?

【问题讨论】:

  • 我看,但我没有看到有或没有外部两个 div 的不同“奇怪效果”。你能更好地描述这些差异吗?
  • 和她一样(谷歌浏览器)。下拉菜单保持打开状态,并与移动的框保持一致。
  • 当您在下拉打开的情况下放置 div 时出现。但也许是最简单的解决方案,折叠拖动初始化中的下拉列表。拖动时我们不需要它,为什么要显示它?
  • 我会截取一些截图。需要片刻。谢谢。
  • @Neograph734 拖动时下拉菜单绘制在不同的位置?是的,但是没有外部两个 div 也是如此。

标签: jquery html css jquery-ui jquery-ui-sortable


【解决方案1】:

当您开始拖动 .widget 时,jQuery-UI 会为 .widget 元素添加样式 position: absolute;,该样式会在拖动停止时被移除。这就是导致下拉菜单跳转位置的原因。

要解决此问题,请将 position: relative;position: absolute; 也可以)添加到 .widget 的样式中并重新评估您的定位算法。我建议:

$dd.css({
    top: $nav3.outerHeight()+10,
    right: 10
});

您可能还需要增加.dropdownz-index

http://jsfiddle.net/mblase75/RrpGr/14/

还有许多其他优化可以做,但这应该足以解决您的问题。

【讨论】:

  • 似乎在 IE8 和 Google Chrome 中运行良好。在我的主要项目中尝试这个,很快就会报告。谢谢。
  • 刚刚发现这个问题。单击小部件顶行上的(c) 几乎是完美的,但单击小部件底行中的(c) 似乎会打开屏幕上的下拉菜单。所有下拉菜单的右上角都应与其各自的(c)s 的右下角对齐。
  • 这行得通,谢谢。我唯一的问题是您的示例似乎创建了.widgets,它的 z-index 高于页面上的所有其他元素。我在原始问题中发布的 HTML 上方还有其他一些不同的 .dropdowns,这些下拉列表位于这些小部件的后面。即使我将小部件设置为 1 并将外部下拉列表设置为 1000。它们仍然落后于小部件。我将针对这个问题开始另一个问题。感谢您的帮助。
  • 嗯,您可以根据需要调整所有 z 索引。我刚刚为这个问题选择了一个足够大的数字。
【解决方案2】:

这是因为你给了一个 div 的填充。

您的下拉菜单相对于元素的位置。当您开始拖动它时,下拉菜单相对于另一个元素的位置。

总体而言,我发现您的 HTML 和 CSS 非常混乱,但这里有一个解决方案:http://jsfiddle.net/RrpGr/3/

我从 .widget_header 中删除了溢出:隐藏,因为它的唯一目的是包含浮动元素(对吗?),而是添加了一个伪元素来清除浮动。

.widget_header:after {
    content: "";
    display: table;
    clear: both;
}

此外,我从您的 Javascript 中删除了很多行。这些仅用于设置 CSS 属性(或计算值)。

我不明白您为什么不能仅相对于 .widget_header 定位下拉菜单(我就是这样做的)?

【讨论】:

  • IE8 似乎不喜欢这样,如果我单击(c),直到我将鼠标移出(c) 才会出现下拉菜单。但是,您的示例确实解决了移动问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-18
  • 2018-04-20
相关资源
最近更新 更多