jQuery UI对话框单独的CSS样式
我正在寻找一种模式对话框(使用用户界面对话框)与传统的对话框独立的CSS,所以实质上有两个jQuery对话框,每个看起来不同。
举个例子,
<div id="dialog_style1" class="dialog1 hidden">One content</div>
和另一个
<div id="dialog_style2" class="dialog2 hidden">Another content</div>
不幸的是我注意到,使用单独的CSS来设置对话框的部分样式
.dialog1 .ui-dialog-titlebar { display:none; } .dialog2 .ui-dialog-titlebar { color:#aaa; }
不起作用,因为.ui-dialog-titlebar
没有类.dialog1
,我不能做一个addClass
,而不插入插件。
另一种方法是让像body
这样的元素具有唯一的class / id(取决于我想要哪一个),但是这样做会阻止在同一个页面中同时存在两个对话框。
我怎样才能做到这一点?
当前版本的对话框有选项“dialogClass”,你可以使用你的ID。 例如,
$('foo').dialog({dialogClass:'dialog_style1'});
那么CSS会是
.dialog_style1 {color:#aaa;}
在Ajax中调用对话框后立即运行以下代码:
$(".ui-dialog-titlebar").hide(); $(".ui-dialog").addClass("customclass");
这仅适用于打开的对话框,因此可以对每个使用的对话框进行更改。
(这个快速的答案是基于堆栈溢出的另一个响应。)
当我试图find类似的答案时,这个问题出现了。 考虑:
$('.ui-dialog').wrap('<div class="abc" />'); $('.ui-widget-overlay').wrap('<div class="abc" />');
其中abc
是你的“CSS包装”的名称 – 请参阅堆栈溢出问题自定义CSS范围和jQuery UI对话框主题 ,我从Evgeni Nabokovfind答案。 有关使用jQuery UI对话框的CSS包装器的更多信息,请参阅以下内容(但是请注意,它们并不真正用对话框解决CSS包装器的问题 – 您需要上面的注释来帮助解决这个问题, 使用多个jQuery单页上的UI主题 (Filament博客)。
根据UI对话框文档 ,对话框插件会生成如下所示的内容:
<div class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-draggable ui-resizable"> <div class="ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix"> <span id="ui-dialog-title-dialog" class="ui-dialog-title">Dialog title</span> <a class="ui-dialog-titlebar-close ui-corner-all" href="#"><span class="ui-icon ui-icon-closethick">close</span></a> </div> <div class="ui-dialog-content ui-widget-content" id="dialog_style1"> <p>One content</p> </div> </div>
这意味着你可以使用jQuery的nearest()方法将任何类添加到第一个或第二个对话框中。 例如:
$('#dialog_style1').closest('.ui-dialog').addClass('dialog_style1'); $('#dialog_style2').closest('.ui-dialog').addClass('dialog_style2');
然后CSS呢。
我通过内联样式重写jQuery类来创build自定义样式。 所以在页面顶部,你有jQuery的CSS链接,并在那之后,覆盖你需要修改的类:
<head> <link href="/Content/theme/base/jquery.ui.all.css" rel="stylesheet"/> <style type="text/css"> .ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; background-color: #ffd; border: solid 1px #ea7; } .ui-dialog .ui-dialog-titlebar { display:none; } .ui-widget-content { border:none; } </style> </head>
标准的做法是使用jQuery UI的CSS范围 :
<div class="myCssScope"> <!-- dialog goes here --> </div>
不幸的是,jQuery UI对话框将对话DOM元素移动到文档的末尾,以修复潜在的z-index问题。 这意味着范围界定将不起作用(它不再具有“.myCssScope”祖先)。
Christoph Herold devise了一个我已经作为jQuery插件实现 的解决方法 ,也许这将有所帮助。
你可以把这个类添加到标题中,像这样:
$('#dialog_style1').siblings('div.ui-dialog-titlebar').addClass('dialog1');
试试这些:
#dialog_style1 .ui-dialog-titlebar { display:none; } #dialog_style2 .ui-dialog-titlebar { color:#aaa; }
我可以给你的最好的build议是在Firefox中加载页面,打开对话框并用Firebug检查它,然后在控制台中尝试不同的select器,看看有什么作用。 你可能需要使用一些其他的后代select器 。