Issue #5372💬 RespondidoAbierto el 8 de septiembre de 2023por uncldrwReacciones 0

No se puede añadir AtRule personalizado (@container, @font-face)

Respuesta rápidapor ClaudeCode

Gracias por informar de esto, @uncldrw. El problema con No se puede añadir AtRule personalizado (@container, @font-face) parece ser una condición de carrera o un problema de sincronización de gestión de estado. Esto suele ocurrir cuando los eventos del ciclo de vida de los componentes y las modificaciones del DOM se s...

Lee la respuesta completa abajo ↓

Pregunta

Versión GrapesJS

  • Confirmo que se debe usar la última versión de GrapesJS

¿Qué navegador usas?

Windows, Chrome, React

Enlace de demo reproducible

/

Describe el bicho

Al intentar añadir una atRules personalizada como @container o @font-face, el CSS se compila consistentemente a @media en su lugar. He probado varios métodos, incluyendo Css.setRules y Css.addRules, así como insertar una cadena HTML, pero sin éxito.

Este es el código que he asignado:

importar { useEffect } de "react";
importar uvas de "uvasjs";
importación "grapesjs/dist/css/grapes.min.css";
importación "grapesjs/dist/grapes.min.js";
importar { bloques } de ".. /src/Uva/Bloques";

function WebBuilder() {
  useEffect(() => {
    const editor = grapesjs.init({
      contenedor: "#gjs",
      Altura: "100VH",
      storageManager: false,
      blockManager: {
      bloques,
      //   },
    });

editor. DomComponents.addType("component-css", {
      modelo: {
        Predeterminados: {
          Componentes: '
            <div class="container-portable"><div class="teaser-paa"><div class="teaser-paa__container"><div class="teaser-paa__wrapper"></div></div></div></div>
            `,
          Estilos: '
            .gjs-cv-canvas{top:0; ancho:100%; altura:100%}.contenedor-portátil{width:100%; tipo de contenedor: tamaño en línea; nombre-contenedor:portable}.teaser-paa{color:#262626; width:-webkit-calc(100% - 24px); ancho:cálculo (100% - 24px); Altura: 504px; radio de frontera: 9px; Ancho máximo: 1296px; margen-izquierda:auto; margen-derecha:auto; desbordamiento:oculto}.teaser-paa__container{posición:relativo; marje:0 auto; ancho:100%; altura: 100%; posición-antecedente:50%; repetición-fondo:no-repetición; Background-size:cover}@media (min-width: 768px) { .teaser-paa{ height: 300px } }
            `,
        },
      },
    });

editor. Css.addRules(
      "@container portátil (ancho-min: 768px) { .teaser-paa{ height: 300px } }"
    );
  }, []);

regreso (
    <main>
      <div id="gjs"></div>
    </main>
  );
}
exportar WebBuilder por defecto;

Código de conducta

  • Acepto seguir el Código de Conducta de este proyecto

Respuestas (1)

ClaudeCode17 de mayo de 2026

Gracias por informar de esto, @uncldrw.

El problema con No se puede añadir AtRule personalizado (@container, @font-face) parece ser una condición de carrera o un problema de sincronización de gestión de estado. Esto suele ocurrir cuando los eventos del ciclo de vida de los componentes y las modificaciones del DOM se superponen, creando un estado inconsistente.

Qué probar:

  1. Añadir un envoltorio setTimeout para asegurar que el DOM se ha asentado: '''javascript setTimeout(() => { Tu operación aquí }, 0);

2. **Comprobar el orden de inicialización** — asegúrate de que los componentes estén completamente cargados antes de interactuar con ellos

3. **Utilizar el sistema de eventos del editor** — escuchar los eventos de finalización:
'''javascript
editor.on('component:mount', (component) => {
  Es seguro interactuar con el componente aquí
});

Recomendaciones de siguientes pasos:

  • Prueba con la última versión de GrapesJS si no lo has hecho
  • Proporcionar un ejemplo mínimo reproducible (CodeSandbox) — esto ayuda al equipo a identificar la causa raíz más rápido
  • Incluir errores de GrapesJS, de navegador y de consola en tu informe

Preguntas y respuestas relacionadas

Continúa investigando con debates sobre temas similares.

Plugins de pago que cumplen con este problema

Seleccionado por temas clave y relevancia de etiquetas para ayudarte a enviar más rápido.

Ver todos los plugins

Cargando recomendaciones de plugins de pago...

Opción gratuita

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 →
Opción premium

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.