形成CSS ......这太荒谬了

时间:2009-07-18 22:12:28

标签: css forms

底线排队

有没有CSS方法可以解决这个问题? 或者我是否必须破解这个jquery插件我用来将动态下拉列表移动到表单的OUTSIDE,执行一个位置:绝对,并将其移回到表单中?

(嗯,在stackoverflow这个'tags'字段看起来像我需要的东西: - )

编辑 要修复的固定页面示例。对不起,在提交问题之前应该这样做。

编辑 7月20日:删除z-index的字段集CSS:0解决了FireFox的问题。我测试了http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/ - 它将DIV附加到html BODY的末尾,它可以跨浏览器工作。

背景

带有几个带有图例的字段集的简单表单。 CSS没什么特别的:

label { float:left; width: 150px; }
input { float: left; width: 132px; }
fieldset { position:relative; }

注意 这意味着,在HTML中,我会在每个输入标记后左侧显示一个带有清除的BR标记。

- >表格看起来不错,一切都很好。

推动目标

但是,中间的1个字段有太多的数据(即所有主要的美国专利分类代码)。因此,这需要更多可用。我在想...自动完成...保存匹配,所以一个文本字段“标记”匹配......等等。

完美,这是一个很常见的需求。所以,我打了一个jquery插件,用于标记化,多选择,文本字段插件。只有少数人使用自动完成功能进行多项选择。选择其中任何一个。我已经尝试过了所有这些: - )

所有人都倾向于对某些HTML片段进行$(输入).insertAfter() - 通常是通过Javascript填充以包含UI / LI列表。

- >还好,没有古怪。

问题

哦,天哪 - 传说,场景,复选框,一切都在自我编织中。下面的下拉div / ul内容。这是 NOT IE z索引问题。

  • 位置:绝对捣乱这个并且不会像导航菜单,工具提示,css弹出窗口那样很好地删除
  • 位置:亲戚停止捣乱,但是......嗯......它的亲戚现在。因此,容器字段集向下延伸等等。
  • firebug,在CSS上使用z-index / position等等,只是无法解决这个问题。

我是否必须破解插件才能在表单外部插入DIV下拉代码段? (然后位置:绝对; z-index:999;顶部/左侧向上移回表格) 或者......有一个CSS解决方案吗?

参考文献:

6 个答案:

答案 0 :(得分:5)

你在问题​​中没有真正提到这一点,但你只是在IE中遇到问题,对吧?因为我无法在任何其他浏览器中重现它。

答案很简单:

修复您的doctype!

您当前的doctype会触发quirks mode,因为它缺少系统标识符。因此,所有赌注都没有了。将其更改为HTML4 Strict:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
    "http://www.w3.org/TR/html4/strict.dtd">

即使修复当前的doctype,也应该这样做:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

或者更好的是,使用HTML5 doctype(因为doctypes唯一有用的是触发标准模式,这是你需要做的最短的文档类型):

<!DOCTYPE html>

答案 1 :(得分:1)

您使用的是哪个版本的IE?这是IE6中的已知问题。

在IE6中,选择为windowed objects,这意味着它们存在于页面上所有其他无窗口元素之上的平面上。 IE6中的Select元素不支持z-index and other properties

我可靠地解决这个问题的唯一方法是当select由另一个元素覆盖时,用'display:none'隐藏select。


评论后编辑

从base_new.css中的form#newsearch div.fs, form#newsearch fieldset删除z-index:0(第251行)会将其修复为FF

答案 2 :(得分:0)

似乎是z-index问题。尝试增加自动填充显示的div的z-index

答案 3 :(得分:0)

要遵循这一点很多,但想知道您是否尝试将项目放在&lt; div&gt;内。标签,那么你可以将样式信息分配给div(如高度和溢出)?

进一步检查您的屏幕截图 - 是否显示带有可能项目的div - 问题是什么?它没有出现在其他表单元素之上?我不确定我是否完全理解,但基于屏幕截图,看起来你可以调整zindex,或者div的透明度使它完全不透明。)

答案 4 :(得分:0)

只是出于兴趣,你尝试使用clear:浮动后的两个CSS标签,看看这是否有任何影响?例如。 <br style="clear:both" />

答案 5 :(得分:0)

好的 - 我找到了答案。

没有纯CSS解决方案(我可以找到),它允许现有的jquery插件的下拉列表正确地悬停在所有表单元素上。

经验教训:如果他们没有正确制作标记......你无能为力。

以下是我修复Tokenizing Autocomplet Text Entry插件(jquery)的方法 来自http://loopj.com/2009/04/25/jquery-plugin-tokenizing-autocomplete-text-entry/

将jquery.tokeninput.js文件编辑为:

  1. 改变它最初插入DIV的方式
    • 找到创建下拉列表的位置(var dropdown = ...)
    • 将.insertAfter(token_list)替换为.appendTo(document.body)
    • 这可确保标记不是正常形式/ html流程
    • 在代码初始化并插入动态“”使用
    • 的情况下执行此操作
  2. 在显示DIV时更改其位置
    • 需要确保将div 放在底部,但在输入字段下
    • 因此,在show_dropdown_searching()函数中,将这些添加到dropdown var上添加的调用字符串中(见下文)。在.show()调用之前执行此操作。
  3. .css("position", "absolute")
    .css("top", $(token_list).offset().top + $(token_list).height()) 
    .css("left", $(token_list).offset().left)