Opcionalmente inserta estilos desde StyleManager con !importante
Marca personal añadida en el puesto #1056
Lee la respuesta completa abajo ↓Pregunta
Me gustaría sugerir una función que se pueda activar mediante la configuración: 'styleAsImportant: true' (por defecto es false, es decir, sin interrupciones). Pensaba que esto ya era posible configurando el cssComposer, aunque ahora he aprendido que no es así (ver más abajo una explicación).
Estoy trabajando con plantillas que a veces se generaron a partir de precompiladores que usan en exceso la bandera !important. Por ejemplo, un botón en una plantilla podría estar diseñado como:
._style_wxcCz {
Estilo de Borde: sólido !importante;
Marje: 0 !importante;
relleno-derecho: 20px !importante;
Acolchado-Top: 11px !Importante;
Acolchonado-Inferior: 11px ¡importante;
Color de fondo: #377037 !Importante;
fuente-familia: ff-clan-web-pro, "Helvetica Neue", Helvetica, sans-serif !important;
Peso-fuente: 600 !importante;
color de borde: #377037 !importante;
Radio de frontera: 0 !importante;
relleno-izquierda: 20px !importante;
Ancho de borde: 2px !importante;
color: #ffffff ¡importante;
cursor: puntero !importante;
pantalla: bloque en línea !importante;
Tamaño de fuente: 14px !importante;
Altura de línea: 18px ! importante;
Resumen: ¡Ninguno! Importante;
desbordamiento: visible !importante;
posición: relativo !importante;
text-align: centro !importante;
decoración de texto: ¡ninguna importante!
transformación de texto: mayúsculas !importante;
vertical-align: ¡centro !importante
}
Como resultado, estilizar este botón con uvas no tiene ningún efecto. La forma más obvia de que funcione con uvas es asegurarse de que:
- El estilo de las uvas también tiene '!important' (esta característica)
- El peinado de uvas viene después del de la plantilla (ya debería ser así, ¿no?)
Supuse que la forma correcta sería hacer que CssRule.js#36 fuera configurable. Intenté configurar esta bandera de 'importante' usando:
var editor = grapesjs.init(
{
cssComposer: { importante: verdadero },
...
}
);
Pero esto no parece tener efecto. Además, cuando lo codifijo a 'verdadero' en el código, veo que hay dos problemas con esta implementación:
- también añade '!important' a las reglas que provienen de la plantilla. Esta sugerencia de función es específicamente para reglas que se añaden manualmente a través del gestor de estilos, porque deberían sobrescribir los estilos de la plantilla. De lo contrario, no hay valor añadido.
- añade '!important' dos veces si ya hay una instrucción importante en las reglas de la plantilla, causando que el renderizado falle por tener propiedades CSS inválidas:
Por lo tanto, mi sugerencia es crear un nuevo valor de configuración 'styleAsImportant: true' (por defecto falso, es decir, sin interrupciones). Tras un poco de depuración inicial, descubrí que este cambio hace que esto ocurra:
style_manager/index.js línea 283:
De:
regla = cssC.add(válido, estado, dispositivoW);
a:
rule = cssC.add(valid, state, deviceW, { important: config.styleAsImportant });
Esto parece funcionar bien. No añade '!important' a las reglas de la plantilla, y sí lo añade a las reglas establecidas por el gestor de estilos. Este es el comportamiento deseado.
¿Estás de acuerdo? ¿Debería presentar una residencia permanente?
¡Salud
Respuestas (3)
Marca personal añadida en el puesto #1056
Podría ser una buena idea, pero ¿qué tal mejorar esos eventos (por ejemplo, pasar 'modelo'/'pr' a callbacks) para permitir esas personalizaciones
@tommedema Components y CssRules implementan Styleable, por lo que lo obtendrías en todos los casos.
quieres decir que tendríamos que escribir plugins para escuchar esos eventos y añadir estilo adicional al componente?
No adicionalmente, sobrescribes el estilo activado en ese modelo, por ejemplo. '''js Por ejemplo, Tus configuraciones estilo const Importante = 1; // ... editor.on('styleable:change', (model, property) => { valor const = model.getStyle()[propiedad]; console.log('Estilizado', propiedad, valor); if (styleImportant) { model.addStyle({ [propiedad]: value + ' !important' }); } });
Preguntas y respuestas relacionadas
Continúa investigando con debates sobre temas similares.
Issue #1835
¿Cómo abrir 'Configuración' todo el tiempo?
! captura Me gustaría que los 'Ajustes' estuvieran abiertos por defecto en todo momento sin que los usuarios tengan que abrirlos manualment...
Issue #1780
Cómo cambiar el desplegable extra para el rasgo de cambio de enlace
Hola @artf, Quiero dar una funcionalidad más al usuario, como que el usuario pueda cambiar cualquier enlace con el desplegable de enlaces p...
Issue #1692
Bloques de contenido no cambiables predefinidos
¿Es posible crear bloques de contenido predefinidos con datos que introduzcas desde tu backend y que el usuario no pueda cambiar, solo colo...
Issue #426
Subida de imagen después de mostrarse inmediatamente en el administrador de activos
@ artf He intentado lo mejor que pude, pero sigue sin funcionar ¿Puedes ayudarme con esto, por favor? Una vez que subo una imagen no quiero...
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.
Explorar categorías de plugins
Ve directamente a las páginas de categorías de plugins en el marketplace.