J'ai un problème avec css dans VueJs. Désolé pour une mauvaise description, mais je n'ai aucune idée de ce que je fais mal.
Mon CSS dans un style limité fonctionne généralement bien en vue, je peux normalement m'adresser aux idis et aux classes.
Le problème est quand je veux changer par exemple la valeur du CSS interne d'un élément du framework vuetify, ou l'éditeur wysiwyg. Je ne comprends pas, car sur codepen tout fonctionne bien. Par exemple ici, je règle le remplissage de l'éditeur wysiwig à 0 et cela fonctionne simplement (dans codepen):
modèle:
<div class="container">
<div id="editor-container">
</div>
</div>
scénario
var quill = new Quill('#editor-container', {
modules: {
toolbar: [
[{ header: [1, 2, false] }],
['bold', 'italic', 'underline'],
['image', 'code-block']
]
},
placeholder: 'Compose the most wonderful and amazing epic you could ever imagine!',
theme: 'snow' // or 'bubble'
});
style
.ql-editor {
padding: 0!important;
}
Sur mon SPA vuejs, je colle exactement le même code CSS et cela ne fait rien. Je suis dans le bon composant, adressant le bon élément. Dans ma console, lorsque je fais l'inspection - je vois les propriétés de .q1-editor comme du rembourrage 12px etc. Donc, rien ne change dans mon site Web :( Je suis désolé pour une mauvaise explication - css n'est pas ma langue principale.
Peut-être que quelqu'un qui a plus d'expérience avec css aura une idée de ce que je fais mal.
Aller simple
Utilisez un sélecteur deep
dans vos styles scoped
: .container >>> .ql-editor
.
<style scoped>
.container >>> .ql-editor {
...
}
</style>
Cela générerait quelque chose comme:
<style>
.container[v-abc123] .ql-editor {
...
}
</style>
Vous pouvez lire à ce sujet ici: https://vue-loader.vuejs.org/guide/scoped-css.html#deep-selectors
Une autre façon
N'utilisez pas scope
sur votre balise style
.
Explication
Lorsque vous utilisez scoped
sur des balises de style dans des fichiers .vue, il ajoute un spécificateur d'attribut à chacun de vos sélecteurs CSS. Lorsque Vue génère le code HTML du composant, il ajoute l'attribut au code HTML afin que les sélecteurs correspondent. Étant donné que quill
génère le DOM pour ce plugin, pas Vue, le les sélecteurs ne correspondent pas.
Le CSS généré ressemble à ceci:
.ql-editor[v-abc123] {}
mais l'élément avec la classe ql-editor
ne pas ressemble à ceci puisque Vue ne l'a pas généré, donc il ne correspondra pas:
<div class="ql-editor" v-abc123></div>
cela ressemble à ceci:
<div class="ql-editor"></div>
Ce que vous pouvez faire est d'avoir plusieurs <style>
balises dans votre fichier Vue. De cette façon, vous pouvez conserver les styles étendus qui sont très utiles et n'ajouter que les styles globaux absolument nécessaires.
<style scoped>
/* Styles for things that are in the DOM visible in your template tag */
</style>
<style>
/* quill specific selectors (global) */
</style>
J'essaierais de garder les sélecteurs dans le style global aussi uniques que possible afin qu'ils ne fuient pas. Vous pouvez ajouter un parent autour des éditeurs et faire quelque chose comme:
<style>
.unique-to-this-component .ql-editor {
...
}
</style>
Assurez-vous de ne pas oublier d'inclure le fichier .css construit par webpack ou similaire!
Ce qui m'est arrivé, c'est que je n'ai pas inclus la fin </style>
tag, quelque chose comme ça peut le casser, alors vérifiez bien votre fichier vue.