Viendo comportamientos extraños al implementar uvas en mi sitio
Hola @randohinn, 1) Supongo que eliminar la clase no elimina el estilo, pero sí elimina los estilos asociados a esa clase del bloque, prueba a añadir la clase de nuevo y mira si los estilos vuelven 2) Por defecto, si un bloque tiene una clase, todas las propiedades de estilo que editas se añaden a la clase,Esto se ind...
Lee la respuesta completa abajo ↓Pregunta
Estoy probando una implementación muy sencilla de uvas.
importar 'grapesjs/dist/css/grapes.min.css';
importar uvas de 'uvas';
sea blockElements = [];
const files = require.context('./blocks', true, /\.js$/i)
archivos.llaves().mapa(clave => blockElements.push(requiere('./blocks/'+key.split('./')[1]).default));
window.editor = grapesjs.init({
Indica dónde iniciar el editor en el editor. También puedes aprobar un HTMLElement
Contenedor: '#gjs',
Consigue el contenido del lienzo directamente del elemento
Como alternativa, podríamos usar: 'components: '<h1>¡Hello World Component!</h1>' `,
fromElement: cierto,
Desactiva el gestor de almacenamiento por el momento
storageManager: false,
Evita cualquier panel por defecto
paneles: { predeterminados: [{
id: 'conmutador de panel',
EL: '.panel__switcher',
botones: [{
id: 'bloques de exposición',
ACTIVO: Cierto,
etiqueta: 'Bloques',
Orden: 'Bloques de Exhibición',
Activable: falso,
}, {
id: 'capas de exhibición',
activo: falso,
etiqueta: 'Layers',
Orden: 'Mostrar capas',
Una vez activada, desactiva la posibilidad de desactivarlo
Activable: falso,
}, {
id: 'estilo de espectáculo',
activo: falso,
etiqueta: 'Styles',
Orden: 'Estilos de Exhibición',
Una vez activada, desactiva la posibilidad de desactivarlo
Activable: falso,
}
],
}]},
blockManager: {
appender a: '.contenedor-bloques',
bloques: bloqueElementos,
},
layerManager: {
appendTo: '.capas-contenedor',
},
selectorManager: {
appendTo: '.estilos-contenedor'
},
StyleManager: {
append To: '.estilos-contenedor',
Sectores: [{
nombre: 'Dimension',
abierto: falso,
Uso de propiedades integradas
buildProps: ['ancho', 'altura', 'acolchado', 'margen'],
Usa 'propiedades' para definir o anular una sola propiedad
Propiedades: [
{
Tipo de entrada,
opciones: entero | Radio | select | color | deslizador | archivo | compuesto | Stack
tipo: 'entero',
nombre: 'Ancho', // Etiqueta para la propiedad
propiedad: 'width', // propiedad CSS (si buildProps la incluye, se extenderá)
unidades: ['px', '%', 'vw'], // Unidades, disponibles solo para tipos 'enteros'
valores por defecto: 'auto', // Valor por defecto
min: 0, // Valor mínimo, disponible solo para tipos 'enteros'
},
{
Tipo de entrada,
opciones: entero | Radio | select | color | deslizador | archivo | compuesto | Stack
tipo: 'entero',
nombre: 'Height', // Etiqueta de la propiedad
propiedad: 'altura', // propiedad CSS (si buildProps la contiene, se extenderá)
unidades: ['px', '%', 'vh'], // Unidades, disponibles solo para tipos 'enteros'
valores por defecto: 'auto', // Valor por defecto
min: 0, // Valor mínimo, disponible solo para tipos 'enteros'
}
]
},{
nombre: 'Extra',
abierto: falso,
buildProps: ['fondo', 'sombra de caja', 'prop personalizado'],
Propiedades: [
{
ID: 'Atrezzo personalizado',
nombre: 'Custom Label',
Propiedad: 'tamaño de fuente',
tipo: 'select',
Valores predeterminados: '32px',
Lista de opciones, disponibles solo para tipos 'select' y 'radio'
Opciones: [
{ valor: '12px', nombre: 'Tiny' },
{ valor: '18px', nombre: 'Medium' },
{ valor: '32px', nombre: 'Big' },
],
}
]
}]
},
});
const panelManager = editor. Paneles;
editor. Commands.add('show-layers', {
getRowEl(editor) { return editor.getContainer().closest('.editor-row'); },
getLayersEl(row) { return row.querySelector('.layers-container') },
run(editor, sendero) {
const lmEl = this.getLayersEl(this.getRowEl(editor));
lmEl.style.display = '';
},
stop(editor, remitente) {
const lmEl = this.getLayersEl(this.getRowEl(editor));
lmEl.style.display = 'ninguno';
},
});
editor. Commands.add('show-blocks', {
getRowEl(editor) { return editor.getContainer().closest('.editor-row'); },
getLayersEl(row) { return row.querySelector('.blocks-container') },
run(editor, sendero) {
const lmEl = this.getLayersEl(this.getRowEl(editor));
lmEl.style.display = '';
},
stop(editor, remitente) {
const lmEl = this.getLayersEl(this.getRowEl(editor));
lmEl.style.display = 'ninguno';
},
});
editor. Commands.add('show-styles', {
getRowEl(editor) { return editor.getContainer().closest('.editor-row'); },
getLayersEl(row) { return row.querySelector('.styles-container') },
run(editor, sendero) {
const lmEl = this.getLayersEl(this.getRowEl(editor));
lmEl.style.display = '';
},
stop(editor, remitente) {
const lmEl = this.getLayersEl(this.getRowEl(editor));
lmEl.style.display = 'ninguno';
},
});
panelManager.addPanel();
Y el único bloque requerido por el requerimiento automático al final es:
exportar default {
'id': 'sección de altura completa',
'etiqueta': 'Sección de altura completa',
'contento': '
<section data-gjs-type="default" class="w-full h-full bg-red-500">
</section>
`
}
Tengo dos problemas y una pregunta:
- Eliminar una clase del editor de estilo, borra el resto del estilo...
- Añadir un segundo bloque, tras cambiar las propiedades del primer bloque... no añade un bloque sin estilo, duplica el que ya existía
- ¿Hay alguna forma de marcar un bloque como no nestable, por ejemplo, que solo pueda estar en la capa superior?
¿Qué podría hacer para arreglarlo?
Respuestas (3)
Hola @randohinn,
- Supongo que eliminar la clase no elimina el estilo, pero sí elimina los estilos asociados a esa clase del bloque, prueba a añadir la clase de nuevo y mira si los estilos vuelven
- Por defecto, si un bloque tiene una clase, todas las propiedades de estilo que editas se añaden a la clase,
Esto se indica por el color de las etiquetas en las propiedades de estilo.
• así que los otros bloques que añadas con esa clase sí
También tengo los mismos cambios. Si quieres aplicar estilos a un solo bloque, primero tienes que desactivar las clases.
Para asegurarte de que las propiedades que cambias solo se apliquen al bloque que editas por defecto, añade esto a tu configuración
'''js window.editor = grapesjs.init({ //... selectorManager : { componentFirst: true}, //... });
3) Creo que tendrás que definir un nuevo componente para eso. Echa un vistazo a [grapesjs-plugin-forms](https://github.com/artf/grapesjs-plugin-forms) como referencia. Los bloques en la categoría de formas están hechos de modo que solo pueden dejarse caer dentro de un bloque de forma.
Hola, Tengo el mismo problema desde esta mañana. Ayer y los días anteriores todo estaba bien.
Un cordial
Lo siento, no pasa nada. He hecho una modificación en un componente que genera el problema
Preguntas y respuestas relacionadas
Continúa investigando con debates sobre temas similares.
Issue #2465
[Pregunta] problema con CSS e iconos
Hola @artf he instalado Grapes JS a NPM [ "Grapesjs": "^0.15.9"] y estoy usando Vue con Grapes Js, aquí está mi código --------------------...
Issue #1180
[Pregunta] Reacciona con GrapeJS
Saludos, he buscado y no he encontrado una solución concreta a mi problema. Actualmente, estoy intentando integrar mi aplicación React con...
Issue #3627
[PREGUNTA]: Estoy intentando duplicar la página, pero los estilos no se aplican debido a los IDs, cambios a -2,-3 al final.
'''javascript const duplicatePage = (editor) => { sea components = editor.getHtml(); sea css = editor.getCss(); sea newPage = editor. Pages...
Issue #3421
[PREGUNTA] Cómo eliminar la regla CSS del selector de clases
Estoy usando componentFirst configurado en true para que mis usuarios apliquen el estilo necesario al componente que seleccionaron. Selecci...
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 →Explorar categorías de plugins
Ve directamente a las páginas de categorías de plugins en el marketplace.