jQuery UI Dialog 个人 CSS 样式

Posted

技术标签:

【中文标题】jQuery UI Dialog 个人 CSS 样式【英文标题】:jQuery UI Dialog individual CSS styling 【发布时间】:2010-11-21 10:58:10 【问题描述】:

我希望使用与传统对话框不同的独特 CSS 来设置模式对话框(使用 UI 对话框)的样式,因此本质上是有两个看起来不同的 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 这样的元素有一个唯一的类/ID(取决于我想要哪个),但这会阻止两个对话框在同一页面中。

我该怎么做?

【问题讨论】:

【参考方案1】:

您可以像这样将类添加到标题中:

$('#dialog_style1').siblings('div.ui-dialog-titlebar').addClass('dialog1');

【讨论】:

对,但.ui-dialog-titlebar 没有.dialog1 类。 .dialog1 display:none; 将隐藏对话框的全部内容,这是我不想要的。 .ui-dialog-titlebar 在哪里? 好的。我正在查看 jqModal (dev.iceburg.net/jquery/jqModal) 并没有找到它。【参考方案2】:

试试这些:

#dialog_style1 .ui-dialog-titlebar  display:none; 
#dialog_style2 .ui-dialog-titlebar  color:#aaa; 

我能给你的最好建议是在 Firefox 中加载页面,打开对话框并使用 Firebug 检查它,然后在控制台中尝试不同的选择器,看看有什么用。您可能需要使用其他一些descendant selectors。

【讨论】:

是的。它不起作用,我也尝试过使用 Firebug。这就是我发布的原因;-) 整个问题是 .ui-dialog-titlebar 环绕 #dialog_style1,所以虽然#dialog_style1 很好地适用于对话框的内容,但它不适用于标题本身。【参考方案3】:

在Ajax 中调用对话框后立即运行以下命令:

    $(".ui-dialog-titlebar").hide();
    $(".ui-dialog").addClass("customclass");

这仅适用于打开的对话框,因此可以针对每个使用的对话框进行更改。

(此快速回答基于 *** 上的另一个回复。)

【讨论】:

在我的情况下,我还必须添加 $(".ui-dialog-titlebar").removeClass("ui-widget-header") 因为它覆盖了我的背景颜色。 就我而言, ui-dialog-content 成功了。 $(".ui-dialog-content").addClass("customclass");【参考方案4】:

执行此操作的标准方法是使用 jQuery UI 的 CSS Scopes:

<div class="myCssScope">
   <!-- dialog goes here -->
</div>

不幸的是,jQuery UI 对话框将对话框 DOM 元素移动到文档的末尾,以修复潜在的 z-index 问题。这意味着作用域将不起作用(它将不再具有“.myCssScope”祖先)。

Christoph Herold designed a workaround 我是 implemented as a jQuery plugin,也许这会有所帮助。

【讨论】:

【参考方案5】:

根据UI dialog documentation,对话框插件生成如下内容:

<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 的 closest() 方法将内容添加到任何类中,以准确地添加到第一个或第二个对话框中。例如:

$('#dialog_style1').closest('.ui-dialog').addClass('dialog_style1');

$('#dialog_style2').closest('.ui-dialog').addClass('dialog_style2');

然后CSS它。

【讨论】:

【参考方案6】:

当前版本的对话框具有选项“dialogClass”,您可以将其与您的 id 一起使用。 例如,

$('foo').dialog(dialogClass:'dialog_style1');

那么CSS 就是

.dialog_style1 color:#aaa;

【讨论】:

这实际上比答案更能帮助我。通过定义我自己的自定义样式,我可以将所有 UI 元素重新定义为链式类。即 .dialog_style1 .ui-dialog-title -等。所选答案重新定义了对话框的主要内容,而不是页眉和页脚。 如果你有能力使用静态css类,最好不要使用javascript。这个答案比公认的要好。【参考方案7】:

当我试图找到类似的答案时,我发现了这个问题。考虑:

    $('.ui-dialog').wrap('<div class="abc" />');
    $('.ui-widget-overlay').wrap('<div class="abc" />');

abc 是您的“CSS 包装器”的名称 - 请参阅 Stack Overflow 问题 Custom CSS scope and jQuery UI dialog themes,我从 Evgeni Nabokov 那里找到了答案。有关与jQuery UI 对话框一起使用的 CSS 包装器的更多信息 - 请参阅以下内容(但请注意,它们并不能真正解决 CSS 包装器的问题对话框 - 您需要以上内容cmets 来帮忙,Using Multiple jQuery UI Themes on a Single Page(Filament 博客)。

【讨论】:

感谢您添加此答案,尽管这个问题已有几年历史了。这对我有帮助! =)【参考方案8】:

我只是通过覆盖内联样式中的 jQuery 类来创建自定义样式。所以在页面顶部,你有 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>

【讨论】:

好吧,谢谢!太多狼吞虎咽的东西找不到我的出路。 4 个 css 文件 大量的 jquery js 文件。我按照你的方式做了。我在我的布局中找到了最低的 css 文件,并将你的整个标签放在它的正下方!呀!我想要标题,让它工作,但想要一个“x”而不是一个关闭按钮。我知道它在外面等着我。

以上是关于jQuery UI Dialog 个人 CSS 样式的主要内容,如果未能解决你的问题,请参考以下文章

Jquery UI dialog 弹层被遮住的问题

jquery dialog 怎样半透明

用jquery-ui的dialog做对话框

如何使 jquery-ui-dialog 没有关闭按钮?

请问,如何让 jQuery UI 里的 dialog 不随滚轮上下滚动啊?

jquery中的dialog()方法是怎么使用。我引入了dialog.js。