Issue #1032💬 RespondidoAbierto el 12 de abril de 2018por tommedemaReacciones 2

No se procesan múltiples reglas CSS de tipografía en la regla

Respuesta rápidapor tommedema1

@cjpollard gracias, pero parece que estás desmontando algo que se cosió por la razón equivocada. Creo que un enfoque mejor es no unir estas reglas de at-en desde el principio. @artf he presentado una residencia permanente por esto: https://github.com/artf/grapesjs/pull/1036 Para ser sincero, en mi opinión los parsers...

Lee la respuesta completa abajo ↓

Pregunta

Última versión de uvas #cfde1c1

Si pones una sola '@font-face', esto se analiza perfectamente:

Ejemplo de JSFiddle: https://jsfiddle.net/szLp8h4n/140/

Captura de pantalla:

<img width="1395" alt="captura de pantalla 2018-04-11 a las 3 19 56 pm" src="https://user-images.githubusercontent.com/331833/38646200-d5c4260e-3d9b-11e8-8c41-7c3c6b1f67dd.png">

Sin embargo, si se introduce una segunda 'cara de @font', solo se analiza la segunda y se pierde la primera:

Ejemplo de JSFiddle: https://jsfiddle.net/szLp8h4n/141/

Captura de pantalla:

<img width="1401" alt="captura de pantalla 2018-04-11 a las 3 21 45 pm" src="https://user-images.githubusercontent.com/331833/38646258-14959854-3d9c-11e8-977c-23a611fff2c5.png">

Estoy intentando depurar esto, pero agradecería vuestra ayuda. ¿Podría estar relacionado con línea 122 en ParserCss.js?

Respuestas (3)

tommedema12 de abril de 2018

@cjpollard gracias, pero parece que estás desmontando algo que se cosió por la razón equivocada.

Creo que un enfoque mejor es no unir estas reglas de at-en desde el principio. @artf he presentado una residencia permanente por esto:

https://github.com/artf/grapesjs/pull/1036

Para ser sincero, en mi opinión los parsers no deberían intentar ser inteligentes y optimizar el código. El navegador es un analizador sintáctico en sí mismo, y si las reglas están en el navegador, las uvitas deberían respetar esto. Al complicar el analizador, introducimos varios errores (yo mismo ya he reunido una lista). De hecho, recomendaría no tener analizador en absoluto y simplemente obtener componentes y sus estilos, etc., en tiempo real desde la API DOM / Javascript.

artf13 de abril de 2018

Totalmente de acuerdo contigo, Tom, el objetivo principal de 'cssComposer' es simplemente ofrecer una interfaz ágil para las definiciones de estilo. Lo que tenemos dentro de CssParser ahora mismo es en realidad un analizador del navegador y el resto del código es solo un recorridor. De hecho, tenemos problemas como el #307 que muestran la inconsistencia generada por los analizadores del navegador (de hecho, obtendrás salidas diferentes en cada navegador). Mi idea (añadida ya a la hoja de ruta #74) era crear una interfaz extensible que permitiera añadir analizadores personalizados al editor (por ejemplo, 'postcss' para CSS), pero obviamente aún no encontré tiempo para empezarla.

Por cierto, gracias por la solución tan rápida

tommedema12 de abril de 2018

@artf que lo sepas, ahora puedo reproducir esto en un caso de prueba que falla:

it('Editor de Init desde el elemento con múltiples reglas at-font', () => {
      config.fromElement = 1;
      config.storageManager = { type: 0 };
      fixture.innerHTML = '
      <style>
        @font-face {
          familia de fuentes: 'Glificones Medianos';
          src: formato URL (https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/fonts/glyphicons-halflings-regular.woff2) ('Woff2');
        }
        @font-face {
          familia de fuentes: 'Droid Sans';
          src: formato URL (https://fonts.gstatic.com/s/droidsans/v8/SlGVmQWMvZQIdix7AFxXkHNSbRYXags.woff2) ('woff2');
        }
      ' +</style> htmlString;
      editor const = obj.init(config);
      const css = editor.getCss();
      const styles = editor.getStyle();
      expect(styles.length).toIgual(2);
    });

Tras una depuración adicional, esto parece deberse a que 'cssComposer' piensa que la segunda regla es la misma que la anterior y luego devuelve la primera:

https://github.com/artf/grapesjs/blob/dev/src/css_composer/index.js#L185

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 →

Tutoriales relacionados

Guías detalladas sobre el mismo tema.

Todos los tutoriales →

Explorar categorías de plugins

Ve directamente a las páginas de categorías de plugins en el marketplace.