jQuery UI 对话框的自定义样式

问题描述 投票:0回答:4

我正在尝试将 jQuery UI 对话框的默认样式更改为与此类似的样式 -

enter image description here

我已经完成了在 jQuery UI 中更改一些 CSS 的操作。

.ui-widget {
    font-family: Verdana,Arial,sans-serif;
    font-size: .8em;
}

.ui-widget-content {
    background: #F9F9F9;
    border: 1px solid #90d93f;
    color: #222222;
}

.ui-dialog {
    left: 0;
    outline: 0 none;
    padding: 0 !important;
    position: absolute;
    top: 0;
}

#success {
    padding: 0;
    margin: 0; 
}

.ui-dialog .ui-dialog-content {
    background: none repeat scroll 0 0 transparent;
    border: 0 none;
    overflow: auto;
    position: relative;
    padding: 0 !important;
}

.ui-widget-header {
    background: #b0de78;
    border: 0;
    color: #fff;
    font-weight: normal;
}

.ui-dialog .ui-dialog-titlebar {
    padding: 0.1em .5em;
    position: relative;
        font-size: 1em;
}

HTML:

<div id="popup-msg">
    <div id="loading">
        <h2>Loading...</h2>
        <h3>Please wait a few seconds.</h3>
    </div>  
    
    <div id="success" title="Hurray,">
        <p>User table is updated.</p>
    </div>
</div>

这是小提琴

但是当我添加这种样式时,它会应用于我的所有对话框。谁能告诉我如何避免这个问题。

谢谢你。

css jquery-ui
4个回答
68
投票

参见https://jsfiddle.net/qP8DY/24/

您可以直接在 HTML 中向 div#success 添加一个类(例如我的示例中的“success-dialog”),也可以通过添加到dialogClass 选项在 JavaScript 中添加,就像我所做的那样。

$('#success').dialog({
    height: 50,
    width: 350,
    modal: true,
    resizable: true,
    dialogClass: 'no-close success-dialog'
});

然后只需将 success-dialog 类添加到适当的 CSS 规则中即可。 要指示应用了两个(或更多)类的元素,只需将它们全部写在一起,中间没有空格。 例如:

.ui-dialog.success-dialog {
    font-family: Verdana,Arial,sans-serif;
    font-size: .8em;
}

17
投票

您可以通过选项

dialogClass

为对话框的顶部元素指定自定义类
$("#success").dialog({
    ...
    dialogClass:"myClass",
    ...
});

然后你可以通过

.myClass.ui-dialog
在CSS中定位这个类。


5
投票

该解决方案仅解决了部分问题,它可能允许您设置容器和内容的样式,但不允许您更改标题栏。我开发了一种解决方法,但向对话框 div 添加一个 id,然后使用 jQuery .prev 更改该 div 的样式,该 div 是对话框 div 的前一个同级。这是有效的,因为当 jQueryUI 创建对话框时,您的原始 div 成为新容器的同级,但标题 div 是原始 div 的上一个同级,但容器和标题 div 都没有 id 来简化选择 div .

HTML

<button id="dialog1" class="btn btn-danger">Warning</button>
<div title="Nothing here, really" id="nonmodal1">
  Nothing here
</div>

您可以使用 CSS 来设置对话框主要部分的样式,但不能设置标题

.custom-ui-widget-header-warning {
  background: #EBCCCC;
  font-size: 1em;
}

你需要一些 JS 来设计标题

$(function() {
                   $("#nonmodal1").dialog({
                     minWidth: 400,
                     minHeight: 'auto',
                     autoOpen: false,
                     dialogClass: 'custom-ui-widget-header-warning',
                     position: {
                       my: 'center',
                       at: 'left'
                     }
                   });
        
                   $("#dialog1").click(function() {
                     if ($("#nonmodal1").dialog("isOpen") === true) {
                       $("#nonmodal1").dialog("close");
                     } else {
                       $("#nonmodal1").dialog("open").prev().css('background','#D9534F');
                     
                     }
                   });
    });

该示例仅显示简单的样式(背景),但您可以根据需要将其变得复杂。

您可以在这里看到它的实际效果:

https://codepen.io/chris-hore/pen/OVMPay


0
投票

jQuery UI 对话框中的dialogClass 选项已被弃用,取而代之的是classes 选项。

以下是如何使用类选项将自定义类添加到对话框中: JavaScript

$( "#dialog" ).dialog({
  classes: {
    "ui-dialog": "my-dialog-class"
  }
});
© www.soinside.com 2019 - 2024. All rights reserved.