2009-08-20 21 views
34

Estoy buscando darle estilo a un cuadro de diálogo modal (usando UI Dialog) con un CSS único que es diferente del diálogo tradicional, por lo que en esencia es necesario tener dos cuadros de diálogo jQuery diferentes.jQuery UI Dialog Estilo de CSS individual

He LABRÓ uno, por ejemplo,

<div id="dialog_style1" class="dialog1 hidden">One content</div> 

y otro

<div id="dialog_style2" class="dialog2 hidden">Another content</div> 

Por desgracia me he dado cuenta de que el uso de CSS separado para partes de estilo del cuadro de diálogo, como

.dialog1 .ui-dialog-titlebar { display:none; } 
.dialog2 .ui-dialog-titlebar { color:#aaa; } 

no funciona porque .ui-dialog-titlebar no tiene la clase .dialog1, y no puedo hacer un addClass sin entrar en el plugin.

Una alternativa sería tener un elemento como body tener una clase/id única (dependiendo de cuál yo quiera), pero eso impediría tener ambos cuadros de diálogo en la misma página.

¿Cómo puedo hacer esto?

Respuesta

23

Ejecutar lo siguiente inmediatamente después de que el diálogo se llama en el Ajax:

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

Esto se aplica sólo para el cuadro de diálogo que se abre, por lo que se puede cambiar para cada uno usado.

(Esta respuesta rápida se basa en otra respuesta en la pila   desbordamiento.)

+1

En mi caso también tuve que agregar $ (". Ui-dialog-titlebar"). RemoveClass ("ui-widget-header") porque estaba sobreescribiendo mi color de fondo. – maxivis

+0

En mi caso, ui-dialog-content hizo el truco. $ (".ui-dialog-content"). addClass ("clase personalizada"); –

1

Usted puede agregar a la clase que el título de esta manera:

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

derecho, pero '.ui-dialog-titlebar' no tiene la clase' .dialog1'. .dialog1 {display: none;} w ocultaré todo el contenido del cuadro de diálogo, que no quiero. – Rio

+0

¿Dónde está .ui-dialog-titlebar? –

+0

Es parte del diálogo jQuery (http://docs.jquery.com/UI/Dialog/Theming) – Rio

0

Prueba estas:

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

La mejor recomendación que puedo dar para usted es para cargar la página en Firefox, abra la dialogar e inspeccionarlo con Firebug, luego probar diferentes selectores en la consola y ver qué funciona. Es posible que necesite usar algunos de los otros descendant selectors.

+0

Sí. No funciona, lo he intentado, usando Firebug también. Es por eso que publiqué ;-) – Rio

+0

Todo el problema es .ui-dialog-titlebar wraps * alrededor de * # dialog_style1, así que mientras # dialog_style1 se aplica muy bien al contenido del cuadro de diálogo, no se aplica al título en sí. – Rio

2

La forma habitual de hacerlo es con jQuery UI CSS Scopes:

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

Por desgracia, el cuadro de diálogo jQuery UI mueve el Diálogo elementos DOM al final del documento, para corregir posibles problemas de índice z. Esto significa que el alcance no funcionará (ya no tendrá un antepasado ".myCssScope").

Christoph Herold designed a workaround que tengo implemented as a jQuery plugin, quizás eso ayude.

3

De acuerdo con la UI dialog documentation, el plug-in de diálogo genera algo como esto:

<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> 

Eso significa que lo que se puede añadir a cualquier clase de exactitud a la primera o segunda de diálogo usando más cercano) método (de jQuery.Por ejemplo:

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

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

y luego CSS.

+0

Me gusta la solución más cercana – gigi

61

La versión actual del diálogo tiene la opción "dialogClass" que puede usar con su id. Por ejemplo,

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

Entonces el CSS habría

.dialog_style1 {color:#aaa;} 
+4

Esto realmente me ayudó más que la respuesta. Al definir mi propio estilo personalizado, puedo volver a definir todos los elementos de la interfaz de usuario como clases encadenadas. Es decir .dialog_style1 .ui-dialog-title -etc. La respuesta seleccionada redefine el contenido principal del diálogo, pero no el encabezado y el pie de página. –

+2

Es mejor no usar javascript si tiene la capacidad de usar clases de CSS estáticas. Esta respuesta es mejor que la aceptada. – RomanKapitonov

+1

woot proporcionó el vigésimo vórtice. ¡Buena respuesta! – Loktar

4

Este problema se presentó para mí cuando yo estaba tratando de encontrar una respuesta similar. Consideremos:

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

Dónde abc es el nombre de su 'envoltorio CSS' - ver desbordamiento de pila pregunta Custom CSS scope and jQuery UI dialog themes donde encontré la respuesta de Evgeni Nabokov. Para obtener más información sobre el contenedor CSS en uso con un cuadro de diálogo jQuery UI, consulte lo siguiente (pero tenga en cuenta que NO resuelven realmente el problema del contenedor CSS con el cuadro de diálogo - necesita los comentarios anteriores para ayudar allí, Using Multiple jQuery UI Themes on a Single Page . (blog filamento)

+0

Gracias por agregar esta respuesta, aunque la pregunta tiene algunos años. ¡Esto me ayudó! =) –

3

creé estilos personalizados con sólo anulando clases de jQuery en el estilo en línea Así que en la parte superior de la página, usted tiene la CSS jQuery vinculado y justo después de que anulen las clases que necesita para modificar:.

<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> 
+0

¡Bien, gracias !. Demasiado gook gook para encontrar mi camino. 4 archivos css una tonelada de archivos jquery js. Hice su camino. ¡Encontré el archivo css más bajo en mi diseño y puse toda tu etiqueta justo debajo! ya! Quería el título, lo conseguí para trabajar, pero me gustaría tener una "x" en lugar de un botón para cerrar. Sé que está esperándome. – JustJohn

Cuestiones relacionadas