Estilo de superposición
IgxOverlayService
se utiliza para mostrar contenido encima del contenido de la página. Muchos componentes Ignite UI for Angular utilizan la superposición (Desplegable, Combo, Selector de fecha y más), por lo que es importante comprender cómo la superposición muestra el contenido. Para mostrar el contenido sobre otros elementos, el servicio lo mueve a un contenedor de salida especial (adjunto al final del cuerpo del documento, de forma predeterminada). Este comportamiento puede afectar a los estilos cuyo ámbito es un contenedor específico.
Styling Overlay Components
En la mayoría de los casos, los estilos de temas globales no se ven afectados por las salidas superpuestas. Por ejemplo, echemos un vistazo a un menú desplegable, diseñado según el mixin global css-vars
:
<!-- overlay-styling.component.html -->
<igx-drop-down #customDropDown height="350px">
<igx-drop-down-item *ngFor="let item of items" [value]="item.id">
{{ item.name }}
</igx-drop-down-item>
</igx-drop-down>
@use "igniteui-angular/theming" as *;
// IMPORTANT: Prior to Ignite UI for Angular version 13 use:
// @import '~igniteui-angular/lib/core/styles/themes/index';
$my-drop-down-theme: drop-down-theme(
$palette: $my-custom-palette
);
@include css-vars($my-drop-down-theme);
Los estilos globales no se generan bajo una regla de alcance y no se ven afectados por ninguna encapsulación y, por lo tanto, pueden coincidir con cualquier elemento de la página, incluido igx-drop-down-item
que el servicio movió a la salida de superposición.
Scoped Component Styles
Al determinar el alcance de los estilos de los elementos que se muestran en la superposición, debemos especificar la posición de la outlet
de superposición en el DOM. Las reglas CSS con alcance requieren una estructura jerárquica específica de los elementos; debemos asegurarnos de que el contenido superpuesto se muestre en el contexto correcto de los estilos que queremos aplicar.
Por ejemplo, tomemos el igx-combo
: sus estilos de elementos usan el tema igx-drop-down
, porque el combo define su contenido dentro de su propia vista.
Note
Siempre alcance sus estilos en un selector:host
para evitar que los estilos se filtren.
// overlay-styling.component.scss
:host {
@include css-vars($my-drop-down-theme);
}
Si la variable $legacy-support
en su tema está configurada en true
, debe darle estilo a su componente usando la función de tema del componente.
Note
Si el componente utiliza una ViewEncapsulation Emulated
, es necesario penetrate
esta encapsulación usando::ng-deep
// overlay-styling.component.scss
:host {
::ng-deep{
@include drop-down($my-drop-down-theme);
}
}
Los elementos de la lista de nuestro combo no son descendientes de nuestro host
de componentes; actualmente se muestran en la salida superpuesta predeterminada, al final del cuerpo del documento. Puede cambiar esto utilizando la propiedad outlet
en overlaySettings
. La outlet
controla dónde se debe representar el contenedor superpuesto.
Aquí, podemos pasar una referencia al elemento donde nos gustaría que esté nuestro contenedor:
<igx-combo [data]="items" valueKey="name" displayKey="name" [overlaySettings]="{ outlet: element, modal: true }">
</igx-combo>
export class OverlayStylingComponent {
...
constructor(public element: ElementRef) {
}
}
Ahora, la lista de elementos del combo se representa correctamente dentro del host de nuestro componente, lo que significa que nuestro tema personalizado entrará en vigor:
Styling The Overlay
Ahora que hemos cubierto cómo funciona ViewEncapsulation
junto con la propiedad outlet
de la superposición, podemos ver cómo podemos diseñar el contenedor de la superposición. El overlay-theme
expone una única propiedad: $background-color
, que afecta el color del fondo cuando la superposición se establece en modal: true
.
Global Styles
La forma más sencilla de diseñar el modal de superposición es incluir su tema en los estilos globales de nuestra aplicación:
// styles.scss
$my-overlay-theme: overlay-theme(
$background-color: rgba(0, 153, 255, 0.3)
);
@include css-vars($my-overlay-theme);
Si la variable $legacy-support
en su tema está configurada en true
, debe darle estilo a su componente usando la función de tema de superposición.
// styles.scss
...
@include overlay($my-overlay-theme);
Ahora todas las superposiciones modales tendrán un tinte púrpura en su fondo.
Scoped Overlay Styles
Si queremos que nuestra superposición tenga un fondo específico solo bajo un determinado componente, podemos limitar el tema. Al determinar el alcance de una superposición modal, es necesario mover la salida de superposición, lo cual tiene algunas limitaciones. Para minimizar los riesgos de recorte de desbordamiento, índice z y problemas de ventana gráfica, recomendamos usar salidas para superposiciones modales solo en componentes de nivel superior:
// styles.scss
...
.purple {
@include css-vars($my-overlay-theme);
}
Para asegurarse de que el tema no afecte a otros componentes de nuestra aplicación, utilice el selector:host
.
// overlay-styling.component.scss
@use "igniteui-angular/theming" as *;
// IMPORTANT: Prior to Ignite UI for Angular version 13 use:
// @import '~igniteui-angular/lib/core/styles/themes/index';
...
:host {
@include css-vars($my-overlay-theme);
}
Note
Si el componente utiliza una ViewEncapsulation Emulated
y $legacy-support
está configurado en true
, use la función de tema de la superposición y penetrate
en la encapsulación usando::ng-deep
API References
Additional Resources
- IgniteUI para Angular- Biblioteca de temas
- Tema principal de superposición
- Estrategias de posición
- Estrategias de desplazamiento