Trabajando con TinyMCE 7 en un entorno complejo de maquetación, nos encontramos con un problema bastante frustrante: los paneles flotantes aparecían completamente desalineados, incluso en el footer de la página.

Después de investigar a fondo, probar múltiples enfoques y descartar soluciones aparentemente válidas, llegamos a una conclusión clara: no es un bug puntual, es una limitación estructural del propio editor.

Qué son los paneles flotantes en TinyMCE

TinyMCE 7 renderiza varios elementos de su interfaz como paneles flotantes:

  • El overflow de la toolbar (...)
  • El popup contextual de enlaces
  • Quick toolbars

Estos elementos no se insertan dentro del editor, sino en un contenedor independiente:

 
class="tox-tinymce-aux">
 

Este contenedor se añade directamente al y todos los paneles usan:

 
position: absolute;
 

Las coordenadas se calculan en base al editor, pero se aplican respecto al .

El origen del problema

En layouts simples, esto funciona correctamente. Pero en estructuras reales más complejas, empiezan los problemas.

En nuestro caso, el editor estaba:

  • Dentro de un layout con sidebar (flexbox)
  • En una columna col-md-6 (50% del ancho)
  • Bastante abajo en la página

Esto genera un desfase importante entre:

  • La posición real del editor
  • El sistema de coordenadas del

Resultado: los paneles aparecen desplazados cientos de píxeles hacia abajo.

Qué intentamos (y por qué no funcionó)

Probamos prácticamente todo lo razonable:

Ajustes CSS

Modificar z-index o usar position: fixed en .tox-tinymce-aux solo afecta a la capa visual, no a las coordenadas. El problema persiste.

ui_container

TinyMCE permite redefinir dónde se renderizan estos elementos, pero en versiones como 7.8 no se aplica correctamente a todos los casos (especialmente el popup de enlaces).

Manipulación del DOM

Mover el contenedor .tox-tinymce-aux dentro del editor con JavaScript rompe los cálculos internos del propio TinyMCE.

Reposicionamiento manual

Usar getBoundingClientRect() para recalcular la posición funciona… hasta que TinyMCE vuelve a sobrescribirla en el siguiente frame.

Cambios de layout

Incluso sacando el editor a ancho completo, el problema persiste si sigue lejos del top del .

La solución: eliminar los paneles flotantes

La única solución realmente estable fue eliminar completamente el uso de estos paneles.

1. Cambiar el modo de toolbar

Por defecto:

 
toolbar_mode: 'sliding'
 

Esto introduce el botón ... con un panel flotante.

La solución:

 
toolbar_mode: 'wrap'
 

Ahora la toolbar simplemente ocupa varias líneas. No hay overflow, no hay panel flotante.

2. Sustituir el plugin de enlaces

El plugin link genera un popup contextual que sufre el mismo problema.

Lo que hicimos:

  • Eliminar el plugin link
  • Crear un botón personalizado
  • Usar SweetAlert2 para gestionar el diálogo

SweetAlert2 funciona con:

 
position: fixed;
 

y un overlay a pantalla completa, por lo que siempre aparece correctamente centrado.

Conclusión

Este comportamiento no es un simple bug, sino una limitación del diseño de TinyMCE 7:

  • Calcula posiciones respecto al editor
  • Pero renderiza respecto al

Cuando hay un gran desplazamiento entre ambos, el resultado es inevitablemente incorrecto.

No existe una solución limpia vía CSS o JavaScript que lo corrija de forma fiable.

La estrategia más sólida es evitar por completo los paneles flotantes:

  • toolbar_mode: 'wrap'
  • Sustituir popups por modales externos como SweetAlert2

 

Si estás integrando TinyMCE en layouts complejos, esto puede ahorrarte muchas horas de debugging.