Modo Absoluto/Diseñador
Actualización rápida, desde el https://github.com/artf/grapesjs/releases/tag/v0.15.3 puedes empezar a usar estas nuevas API de Modo Arrastre'config.dragMode' - La configuración inicial para el modo global de arrastre'editor.setDragMode' - cambiar el modo global de arrastre de los componentes'component.setDragMode' - c...
Lee la respuesta completa abajo ↓Pregunta
Hola a todos, este número es una visión general de lo que es, lo que se ha hecho, qué hacer y lo que es agradable tener para completar la función Modo Diseñador.
Prefacio
Así que empecemos describiendo qué es y cuál es el objetivo de esta función. El modo Diseñador debería permitir al usuario arrastrar componentes libremente por el lienzo, sin restricciones de posicionamiento fijas en HTML, más parecido a herramientas como Photoshop o Boceto. De este modo, mover componentes es mucho más intuitivo, especialmente para quienes no tienen nada que ver con el posicionamiento en HTML.
Este enfoque puede ser extremadamente útil si estás creando documentos cuyo resultado final es visualmente estático, como, por ejemplo, PDFs o diapositivas de presentaciones. Así que lo que intento decir es que el posicionamiento absoluto no es fácil de manejar cuando tienes que trabajar con algo como sitios web, principalmente porque es un poco engorroso trabajar con plantillas responsivas. Un componente en posición absoluta, desde un punto de vista menos técnico, queda fuera del "flujo fijo HTML", de modo que ni sus hermanos ni los nodos padres pueden ver sus dimensiones.
Veamos a continuación un ejemplo de posicionamiento absoluto aplicado a una página HTML simple
Así que en este ejemplo, puedes ver claramente cómo se eliminan los componentes del flujo (puedes notarlo mirando su nodo padre) y lo extraño que se comportan al cambiar el ancho del lienzo, donde todos los demás componentes se adaptan al nuevo ancho pero el que está en absoluto permanece quieto. El ejemplo muestra solo unos pocos componentes en modo absoluto, imagina que se trata de una página entera.
Así que para el diseño de páginas web, pensé en una solución alternativa, en lugar de depender de 'posición: absoluta' parece mucho más fiable 'transformar: transición(...)' ya que mueve el componente relacionado con su posición fija original sin sacarlo del flujo.
Obviamente, no es perfecto y cada plantilla requeriría ajustes específicos para diferentes tamaños de dispositivo, pero al menos el componente no se ha movido totalmente de su posición original.
Así que, el objetivo de esta función sería:
- Ser capaz de crear un proyecto completo en modo absoluto, desde el inicio (inicialización) hasta el final (exportación de código)
- Poder mezclar diferentes modos de arrastre (por defecto, absoluto y traslado) Obviamente, esto no es algo que puedas activar solo con "una opción". La mezcla de modos de arrastre debería delegarse a quién implementa el editor
Implementación
Desde el https://github.com/artf/grapesjs/releases/tag/v0.14.57 ya puedes cambiar la opción de modo de arrastre, globalmente o por componente.
Para iniciar el editor, globalmente, en uno de los modos de arrastre deberías cambiar la opción del modelo del editor. Aún no hemos especificado ninguna API estable, así que cualquier sugerencia es bienvenida, pero para la inicialización, lo más probable es que la opción sea algo así:
'''js const editor = grapesjs.init({ // ... dragMode: 'absoluto', // 'absoluto' | 'traducir' }); // ... o cambiar mediante API editor.setDragMode('absolute');
Por ahora puedes habilitarlo de esta manera:
'''js
editor.getModel().set('dmode', 'absoluto');
No es tan diferente cambiar el modo de arrastre en un solo componente, simplemente añadimos una nueva propiedad a la instancia de Componente: 'component.set('dmode', 'absoluto'); Por ejemplo, podrías añadir un nuevo icono de barra de herramientas para cambiar entre diferentes modos
Aquí un ejemplo de un modo de arrastre global 'absoluto'
https://jsfiddle.net/9zf4kd6e/
Puedes notar que el editor añade automáticamente posicionamiento absoluto a los componentes.
Veamos con más detalle cómo se implementa. Cuando haces clic en el icono de mover, activas el comando por defecto 'tlb-move', donde [decide https://github.com/artf/grapesjs/blob/4c993c04f8e4fc824e5d1d1d4d8af53ac40fa630/src/commands/index.js#L144-L162 si mover el componente de la forma estándar o delegar la operación de arrastre solicitada a otro, nuevo, 'core:component-drag' mando. El nuevo comando utiliza la utilidad Arrastrador y actualiza la posición del componente cuando el arrastrador lo indica. Este comando también crea guías para el Arrastrador, que puede acoplarse a ellos (una especie de Guías Inteligentes).
Problemas/Bugs
Eliminando desde el bloque [Corregido en v0.15.3]
Actualmente, la caída de bloques no se gestiona, por lo que todos los componentes que caen se colocan de forma fija.
No sé si hay que fiarnos del marcador verde (por cierto, no parece tan malo) o simplemente descartarlo según la posición del ratón
Desplazamiento automático [Corregido en v0.15.3]
El desplazamiento automático al arrastrar componentes no funciona
De hecho, está desactivado por esta regla CSS, de lo contrario el resultado es aún peor
Necesitamos colocar un oyente 'scroll' al inicio del dragger (y quitarlo al final) y actualizar la posición del componente en el gatillo.
Posicionamiento de la barra de herramientas [Corregido en v0.14.62]
Cuando el componente se coloca fuera del lienzo (en el lado izquierdo), su barra de herramientas está mal posicionada
Definitivamente hay algo que arreglar en el comando 'SelectComponent'
Encantado de tener
Gobernantes
Es bastante común en las herramientas de posicionamiento absoluto tener reglas, con la posibilidad de alternarlas y añadir guías horizontales/verticales. Aquí un ejemplo de la interfaz Sketch
Este es un breve resumen de lo que se me ha ocurrido y quería compartirlo, así que cualquier otra sugerencia, informes de errores, API o mejoras arquitectónicas es muy bienvenida. Desde mi punto de vista, el objetivo de 'Poder mezclar diferentes modos de arrastre' ya está en el punto bueno, pero para el 'Poder crear un proyecto completo en modo absoluto' el Eliminar desde el bloque es obligatorio.
Respuestas (3)
Actualización rápida, desde el https://github.com/artf/grapesjs/releases/tag/v0.15.3 puedes empezar a usar estas nuevas API de Modo Arrastre
- 'config.dragMode' - La configuración inicial para el modo global de arrastre
- 'editor.setDragMode' - cambiar el modo global de arrastre de los componentes
- 'component.setDragMode' - cambiar el modo de arrastre de un solo componente Ya se describen los valores posibles: ninguno (por defecto), 'absoluto', 'translate'
@simplecommerce
Al hacer clic en modos dispositivo, si usas posicionamiento absoluto, crearás los estilos solo para ese modo, facilitaría construir páginas responsivas, ya que podrías alternar entre los modos de dispositivo y posicionar tus elementos.
GrapesJS ya funciona así, pero esto no resuelve el problema de rehacer gran parte del trabajo para cada punto de ruptura
@sunhillbd sí, pero probablemente sea culpa mía por no haber sido del todo clara con el punto. Básicamente, lo que ves en la demo es un ejemplo de mezcla de posición estática con posición absoluta: cuando haces clic en el icono de arrastrar separas el componente del flujo estático, así que el efecto que ves es como quitar el nodo del padre. Por eso sugiero la opción de 'traducir' en ese caso
Preguntas y respuestas relacionadas
Continúa investigando con debates sobre temas similares.
Issue #2355
[requisición] ¿Soporte para reglas en modo diseñador?
Sé que hay un hilo antiguo que sugiere el soporte para los Gobernantes (pero ya está cerrado). Solo me pregunto si hay alguna posibilidad d...
Issue #668
Cuando no esté disponible seleccionar un elemento, sugiere pasar el cursor y hacer clic en evento seleccionará el padre disponible.
Hola @artf, ¿puedo tener una mejora para el comando de selección? Cuando el cursor haga clic o pase el cursor sobre el elemento que no es s...
Issue #2196
[Bug] La selección de elementos de enlace no muestra barra de herramientas
Pasos para reproducir: añadir texto, seleccionar una palabra, hacer clic en el icono de enlace en el panel RTE, seleccionar un enlace. Comp...
Issue #660
Seleccionar función padre que no funciona cuando el elemento padre no es seleccionable
Hola @artf, tengo una pregunta sobre la función de seleccionar padres. No se puede seleccionar el elemento padre cuando el elemento padre n...
Plugins de pago que cumplen con este problema
Seleccionado por temas clave y relevancia de etiquetas para ayudarte a enviar más rápido.
Cargando recomendaciones de plugins de pago...
Consulta los plugins de código abierto de GrapesJS en GitHub O haz una búsqueda rápida en nuestro catálogo gratuito.
Explora plugins gratuitos →Los plugins premium incluyen soporte, actualizaciones regulares y funciones listas para producción — ahorrando días de trabajo de integración.
Explora plugins premium →Tutoriales relacionados
Guías detalladas sobre el mismo tema.
Tutorial
Super Tooltip for GrapesJS — Version 0.1.5 Released 🎉
We’re excited to announce the v 0.1.5 update of Super Tooltip, our floating‑menu and tooltip plugin for GrapesJS
Tutorial
GrapesJS in 2026: The Complete Guide to the Open-Source Web Builder Framework
Master GrapesJS in 2026. Architecture, code examples, React integration, plugin development, Studio SDK, and how it compares to other projects
Explorar categorías de plugins
Ve directamente a las páginas de categorías de plugins en el marketplace.