Descripción general de la directiva de información sobre herramientas de Angular
The igxTooltip and the igxTooltipTarget directives provide us with the ability to create a fully customizable tooltip and attach it to any element on our page.
While most tooltips have a limited number of available positions, with the igxTooltipTarget directive we can specify any position we want on the page while keeping it in relation to the target (anchor) and provide various other overlay settings like scroll strategies and custom animations!
Angular Tooltip Example
Getting Started with Ignite UI for Angular Tooltip
Para comenzar con la directiva Ignite UI for Angular Tooltip, primero debe instalar Ignite UI for Angular. En una aplicación Angular existente, escriba el siguiente comando:
ng add igniteui-angular
Para obtener una introducción completa al Ignite UI for Angular, lea el tema de introducción.
The next step is to import the IgxTooltipModule in your app.module.ts file.
// app.module.ts
...
import { IgxTooltipModule } from 'igniteui-angular/tooltip';
// import { IgxTooltipModule } from '@infragistics/igniteui-angular'; for licensed package
@NgModule({
...
imports: [IgxTooltipModule],
})
export class AppModule {}
Alternatively, as of 16.0.0 you can import the IgxTooltipDirective as a standalone dependency, or use the IGX_TOOLTIP_DIRECTIVES token to import the component and all of its supporting components and directives.
// home.component.ts
import { IGX_TOOLTIP_DIRECTIVES } from 'igniteui-angular/tooltip';
import { IgxAvatarComponent } from 'igniteui-angular/avatar';
// import { IGX_TOOLTIP_DIRECTIVES, IgxAvatarComponent } from '@infragistics/igniteui-angular'; for licensed package
@Component({
selector: 'app-home',
template: `
<igx-avatar
class="avatar"
#target="tooltipTarget"
[igxTooltipTarget]="tooltipRef"
src="assets/images/avatar/10.jpg"
size="medium"
shape="circle"
>
</igx-avatar>
<div #tooltipRef="tooltip" igxTooltip>Her name is Madelyn James</div>
`,
styleUrls: ['home.component.scss'],
standalone: true,
imports: [IGX_TOOLTIP_DIRECTIVES, IgxAvatarComponent],
/* or imports: [IgxTooltipDirective, IgxTooltipTargetDirective, IgxAvatarComponent] */
})
export class HomeComponent {}
Now that you have the Ignite UI for Angular Tooltip module or directives imported, you can start using the igxTooltip directive.
Using the Angular Tooltip
Let's say we want to create a simple text tooltip like the one above. In our case, we're using our awesome IgxAvatar as the element, so we start by importing the IgxAvatarModule first.
// app.module.ts
import { IgxTooltipModule } from 'igniteui-angular/tooltip';
import { IgxAvatarModule } from 'igniteui-angular/avatar';
// import { IgxTooltipModule, IgxAvatarModule } from '@infragistics/igniteui-angular'; for licensed package
@NgModule({
...
imports: [IgxTooltipModule, IgxAvatarModule],
})
export class AppModule {}
Tooltip target
The avatar will be our target and all we have to do is set the igxTooltipTarget directive on it, which basically marks our element as one that has a tooltip.
- The
igxTooltipTargetdirective extends theigxToggleActiondirective. - The
igxTooltipTargetdirective is exported with the name tooltipTarget.
<!--simpleTooltip.component.html-->
<igx-avatar
class="avatar"
#target="tooltipTarget"
igxTooltipTarget
src="assets/images/avatar/10.jpg"
size="medium"
shape="circle">
</igx-avatar>
Información sobre herramientas
Now let's create the tooltip element itself! Since we want a simple text tooltip, we will define an ordinary div element with text inside and set the igxTooltip directive on it, which marks it as a tooltip.
- The
igxTooltipdirective extends theigxToggledirective. - The
igxTooltipdirective is exported with the name tooltip.
<!--simpleTooltip.component.html-->
<div #tooltipRef="tooltip" igxTooltip>Her name is Madelyn James</div>
Attach tooltip to target
Now that we have both our target and tooltip defined, all that's left for us to do is assign the tooltip's reference to the igxTooltipTarget selector of the target.
<!--simpleTooltip.component.html-->
<igx-avatar
class="avatar"
#target="tooltipTarget"
[igxTooltipTarget]="tooltipRef"
src="assets/images/avatar/10.jpg"
size="medium"
shape="circle">
</igx-avatar>
<div #tooltipRef="tooltip" igxTooltip>Her name is Madelyn James</div>
Si todo salió bien, debería ver el ejemplo que se muestra en la sección Demostración de información sobre herramientas.
Rich tooltip
The igxTooltip content can be more than just simple text. Since the tooltip itself is a regular element in the markup, you can enhance its content by adding any elements you need and styling them accordingly.
Let's expand on the use of the igxTooltip and use it to provide more details for a specific location on a map! We'll use a simple div to represent our map, the IgxAvatar for a logo in our tooltip and the IgxIcon for the location icon on our map. For this purpose, we will get their respective modules.
// app.module.ts
import { IgxTooltipModule } from 'igniteui-angular/tooltip';
import { IgxAvatarModule } from 'igniteui-angular/avatar';
import { IgxIconModule } from 'igniteui-angular/icon';
// import { IgxTooltipModule, IgxAvatarModule, IgxIconModule } from '@infragistics/igniteui-angular'; for licensed package
@NgModule({
...
imports: [IgxTooltipModule, IgxAvatarModule, IgxIconModule],
})
export class AppModule {}
También usaremos los siguientes estilos para nuestra aplicación:
/* richTooltip.component.css */
.location:hover {
cursor: pointer;
}
.map {
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
width: 200px;
height: 252px;
background-image: url(assets/images/card/media/infragisticsMap.png);
border: 1px solid #d4d4d4;
}
.locationTooltip {
width: 310px;
background-color: var(--igx-grays-700);
padding: 3px;
font-size: 13px;
}
.locationTooltipContent {
display: flex;
justify-content: center;
align-items: center;
}
.logo {
margin-right: 10px;
min-width: 25px;
width: 45px;
height: 45px;
}
Comencemos creando nuestro mapa. Necesitamos un div simple que tenga como fondo una imagen con un mapa. ¡Además, agregaremos un ícono que nos indicará la posición de nuestra ubicación! Dado que queremos proporcionar más detalles para esta ubicación, nuestro ícono obviamente será el objetivo de la información sobre herramientas.
<!--richTooltip.component.html-->
<div class="map">
<igx-icon
class="location"
[style.color]="'blue'"
fontSet="material"
[igxTooltipTarget]="locationTooltip"
>location_on</igx-icon>
...
</div>
¡Ahora la información sobre herramientas! Para su contenido, crearemos un contenedor que se llenará con algunos elementos de información de texto y un avatar. Luego, simplemente adjuntaremos la información sobre herramientas al objetivo e incluiremos un bonito estilo CSS.
<!--richTooltip.component.html-->
<div class="wrapper">
<div class="map">
<igx-icon
class="location"
[style.color]="'blue'"
fontSet="material"
[igxTooltipTarget]="locationTooltip"
>location_on</igx-icon>
<div class="locationTooltip" #locationTooltip="tooltip" igxTooltip>
<div class="locationTooltipContent">
<igx-avatar
class="logo"
src="assets/images/card/avatars/igLogo.png"
size="medium"
shape="square">
</igx-avatar>
<div>
<div>Infragistics Inc. HQ</div>
<div>2 Commerce Dr, Cranbury, NJ 08512, USA</div>
</div>
</div>
</div>
</div>
</div>
Si todo ha ido bien, así es como debería verse nuestra ubicación y descripción emergente:
Advanced Example
The tooltip integrates seamlessly with other components, allowing you to create advanced tooltips that contain components within them.
In the following example, you can see how we create descriptive tooltips by using the IgxList, IgxAvatar, IgxIcon, IgxBadge, IgxButton, IgxCard and IgxCategoryChart components.
Show/Hide delay settings
What if we want to control the amount of time that should pass before showing and hiding the tooltip? For this purpose we can use the showDelay and the hideDelay properties of the igxTooltipTarget directive. Both properties are of type number and take time in milliseconds.
Note
The built-in UI interaction behavior of the IgxTooltipTargetDirective works by taking showDelay and hideDelay property values into account. Showing and hiding the tooltip through the API or the API of the IgxTooltipDirective does NOT take the showDelay and hideDelay property values into account. If necessary, such logic would have to be implemented manually according to the application's specifics.
Overlay configuration
Both the igxTooltip and igxTooltipTarget directives use the IgxOverlayService to open and close the respective tooltip element.
The igxTooltipTarget directive exposes a positionSettings property, which can be used to customize the animations of our tooltip, its position in the UI and a lot more! If this property is not set, then default position settings will be used.
To further customize the tooltip, use the overlaySettings property (inherited from the igxToggleAction).
<igx-icon [igxTooltipTarget]="tooltipRef" [positionSettings]="positionSettings" [overlaySettings]="overlaySettings">
info
</igx-icon>
<div #tooltipRef="tooltip" igxTooltip>Her name is Madelyn James</div>
public positionSettings: PositionSettings = {
horizontalDirection: HorizontalAlignment.Left,
horizontalStartPoint: HorizontalAlignment.Left,
verticalDirection: VerticalAlignment.Top,
verticalStartPoint: VerticalAlignment.Bottom,
openAnimation: useAnimation(slideInTop, { params: { duration: '2000ms' } }),
closeAnimation: useAnimation(slideOutBottom, { params: { duration: '2000ms'} }),
offset: 10
}
public overlaySettings: OverlaySettings = {
closeOnEscape: false,
};
Note
Any property that is set through the positionSettings or overlaySettings will override the same property from the default settings and will have a direct impact on the tooltip.
Additional Properties
Apart from the properties we've already covered, the igxTooltipTarget offers a variety of additional properties that allow you to further configure the tooltip's behavior and appearance.
You can make the tooltip "sticky" using the sticky property, which adds a close button and keeps the tooltip visible until the user closes it manually - either by clicking the close button or pressing the Esc key. This behavior overrides the default hover behavior, preventing the tooltip from disappearing when the user stops hovering over the target element.
<igx-icon [igxTooltipTarget]="tooltipRef" [sticky]="true">
info
</igx-icon>
<div #tooltipRef="tooltip" igxTooltip>Her name is Madelyn James</div>
To customize the default close button, use the closeButtonTemplate property.
<igx-icon [igxTooltipTarget]="tooltipRef" [sticky]="true" [closeButtonTemplate]="customTemplate">
info
</igx-icon>
<ng-template #customTemplate>
<igx-icon>cancel</igx-icon>
</ng-template>
<div #tooltipRef="tooltip" igxTooltip>Her name is Madelyn James</div>
Note
Any custom content added via the closeButtonTemplate is rendered only when the tooltip is in sticky mode.
Additionally, you can add an arrow indicator to the tooltip by using the hasArrow property.
<igx-icon [igxTooltipTarget]="tooltipRef" [hasArrow]="true">
info
</igx-icon>
<div #tooltipRef="tooltip" igxTooltip>Her name is Madelyn James</div>
The arrow element is positioned based on the provided position settings. If the directions and starting points do not correspond to any of the predefined position values, the arrow is positioned in the top middle side of the tooltip (default tooltip position bottom).
Valores de posición predefinidos
| Posición | Dirección horizontal | Punto inicial horizontal | Dirección vertical | Punto de inicio vertical |
|---|---|---|---|---|
| arriba | Alineación.Horizontal.Centro | Alineación.Horizontal.Centro | VerticalAlignment.Top | VerticalAlignment.Top |
| inicio superior | Alineación Horizontal.Derecha | Alineación Horizontal.Izquierda | VerticalAlignment.Top | VerticalAlignment.Top |
| extremo superior | Alineación Horizontal.Izquierda | Alineación Horizontal.Derecha | VerticalAlignment.Top | VerticalAlignment.Top |
| abajo | Alineación.Horizontal.Centro | Alineación.Horizontal.Centro | Alineación vertical.Inferior | Alineación vertical.Inferior |
| inicio desde abajo | Alineación Horizontal.Derecha | Alineación Horizontal.Izquierda | Alineación vertical.Inferior | Alineación vertical.Inferior |
| extremo inferior | Alineación Horizontal.Izquierda | Alineación Horizontal.Derecha | Alineación vertical.Inferior | Alineación vertical.Inferior |
| Derecha | Alineación Horizontal.Derecha | Alineación Horizontal.Derecha | Alineación vertical.Medio | Alineación vertical.Medio |
| Inicio correcto | Alineación Horizontal.Derecha | Alineación Horizontal.Derecha | Alineación vertical.Inferior | VerticalAlignment.Top |
| extremo derecho | Alineación Horizontal.Derecha | Alineación Horizontal.Derecha | VerticalAlignment.Top | Alineación vertical.Inferior |
| Izquierda | Alineación Horizontal.Izquierda | Alineación Horizontal.Izquierda | Alineación vertical.Medio | Alineación vertical.Medio |
| inicio izquierdo | Alineación Horizontal.Izquierda | Alineación Horizontal.Izquierda | Alineación vertical.Inferior | VerticalAlignment.Top |
| extremo izquierdo | Alineación Horizontal.Izquierda | Alineación Horizontal.Izquierda | VerticalAlignment.Top | Alineación vertical.Inferior |
En el siguiente ejemplo, puede ver una demostración de todas las opciones de posición y el comportamiento de posicionamiento de la flecha en acción:
Personalización de la posición de la flecha
To customize the arrow's position, you can override the positionArrow(arrow: HTMLElement, arrowFit: ArrowFit) method.
Por ejemplo:
export class CustomStrategy extends TooltipPositioningStrategy {
constructor(settings?: PositionSettings) {
super(settings);
}
public override positionArrow(arrow: HTMLElement, arrowFit: ArrowFit): void {
Object.assign(arrow.style, {
left: '-0.25rem',
transform: 'rotate(-45deg)',
[arrowFit.direction]: '-0.25rem',
});
}
}
public overlaySettings: OverlaySettings = {
positionStrategy: new CustomStrategy({
horizontalDirection: HorizontalAlignment.Right,
horizontalStartPoint: HorizontalAlignment.Right,
verticalDirection: VerticalAlignment.Bottom,
verticalStartPoint: VerticalAlignment.Bottom,
})
};
<igx-icon [igxTooltipTarget]="tooltipRef" [hasArrow]="true" [overlaySettings]="overlaySettings">
info
</igx-icon>
<div #tooltipRef="tooltip" igxTooltip>Her name is Madelyn James</div>
Estilismo
To get started with styling the tooltip, we need to import the index file, where all the theme functions and component mixins live:
@use "igniteui-angular/theming" as *;
// IMPORTANT: Prior to Ignite UI for Angular version 13 use:
// @import '~igniteui-angular/lib/core/styles/themes/index';
Following the simplest approach, we create a new theme that extends the tooltip-theme and provide the $text-color, $background and the $border-radius parameters.
$dark-tooltip: tooltip-theme(
$text-color: #ecaa53,
$background: #011627,
$border-radius: 6px,
);
Note
In order to style any additional components that are used as part of the tooltip's content (such as IgxButton, IgxSwitch, etc.), an additional theme should be created that is specific to the respective component and placed under the tooltip's scope only (so it does not affect the rest of the application).
Since the tooltip uses the IgxOverlayService, in order for our custom theme to reach down the tooltip that we want to style, we will provide a specific outlet where the tooltip will be placed in the DOM when it is visible.
<igx-avatar
#target="tooltipTarget"
[igxTooltipTarget]="tooltipRef"
[igxToggleOutlet]="outlet"
>
</igx-avatar>
<div #outlet="overlay-outlet" igxOverlayOutlet>
<div #tooltipRef="tooltip" igxTooltip>Her name is Madelyn James</div>
</div>
El último paso es incluir el tema del componente en nuestra aplicación.
@include css-vars($dark-tooltip);
Ahora nuestra información sobre herramientas con estilo debería verse así:
Demo
Styling with Tailwind
Puedes personalizar la descripción emergente usando nuestras clases utilitarias personalizadas de Tailwind. Asegúrate de configurar primero a Tailwind.
Junto con la importación de Tailwind en tu hoja de estilos global, puedes aplicar las utilidades de tema deseadas de la siguiente manera:
@import "tailwindcss";
...
@use 'igniteui-theming/tailwind/utilities/material.css';
The utility file includes both light and dark theme variants.
- Use
light-*classes for the light theme. - Use
dark-*classes for the dark theme. - Append the component name after the prefix, e.g.,
light-tooltip,dark-tooltip.
Once applied, these classes enable dynamic theme calculations. You can then override the generated CSS variables using arbitrary properties. After the colon, provide any valid CSS color format (HEX, CSS variable, RGB, etc.).
Puedes encontrar la lista completa de propiedades en el Tema IgxTooltip. La sintaxis es la siguiente:
<div
class="!light-tooltip ![--background:#90B69F]"
#tooltipRef="tooltip"
igxTooltip>
Her name is Madelyn James
</div>
Note
The exclamation mark(!) is required to ensure the utility class takes precedence. Tailwind applies styles in layers, and without marking these styles as important, they will get overridden by the component’s default theme.
Al final, tu descripción emergente debería verse así:
Accessibility
The igxTooltip is built with accessibility in mind and includes the following properties and ARIA attributes:
idproperty - autogenerated if not set by the developer.role- When the tooltip is in its default behavior,role="tooltip"is applied. If thestickyproperty is enabled, the role changes tostatus.aria-hidden- automatically updated depending on whether the tooltip is visible or not.
By setting the aria-describedby attribute of the target to its respective tooltip's id, a reference will be provided to the tooltip element. This provides screen readers the information needed to read out the tooltip's contents when the end-user triggers the tooltip.
Se debe tener especial cuidado en los siguientes escenarios:
- El contenido de la información sobre herramientas es demasiado complejo para interpretarlo automáticamente.
- La información sobre herramientas se utiliza con un comportamiento implementado manualmente (por ejemplo, mostrar/ocultar manualmente) en lugar del comportamiento integrado.
- El elemento objetivo no se puede enfocar.
Notes and Limitations
| Limitación | Descripción |
|---|---|
| Estrategia de posición personalizada con flecha | LaigxTooltipTarget directiva usaTooltipPositionStrategy el elemento para colocar la información sobre herramientas y la flecha. Si se usa una personalizadapositionStrategy yhasArrow se establece entrue, la estrategia personalizada debe extender elTooltipPositionStrategy. De lo contrario, la flecha no se mostrará. |
API References
En este artículo aprendimos a crear, configurar y diseñar increíbles descripciones emergentes para los elementos de nuestra página. También utilizamos algunos componentes Ignite UI for Angular adicionales, como iconos y avatares, para mejorar el diseño de nuestra aplicación. Las API respectivas se enumeran a continuación:
Componentes y/o directivas adicionales que se utilizaron:
Styles: