J'ai développé un signet Javascript qui a div div réparé vers la page en cours.
Mais le problème est que, lorsque div et son contenu est chargé en raison des codes CSS d'origine des pages (Bookmarklet a aussi son propre CSS), l'apparence de mon div corrompt. Je veux dire, dans chaque page, certains éléments semblent différents (parfois les étiquettes, parfois l'arrière-plan de textarea, etc.)
Y a-t-il un moyen de corriger cette erreur que vous connaissez?
Il peut s'agir d'une solution CSS ou Javascript.
Merci d'avance ...Problème CSS du contrôle ajouté
Répondre
Y at-il un moyen de corriger cette erreur que vous connaissez?
Oui, définir tous les biens pertinents à l'intérieur du DIV et !important
:
<div style="width: 300px !important; line-height: 1em !important....">
il n'y a pas d'autre moyen parfaitement de sécurité. Tous les widgets externes que j'ai vus le font de cette façon.
Je ne comprends pas complètement la question. Peut-être qu'un petit extrait aiderait?
Si vous craignez que les styles existants puissent remplacer les styles des éléments que vous ajoutez dynamiquement, vous pouvez ajouter le tag! Important. Mais si les styles sont en ligne (ce qui est invariablement ce qui se passe avec les bookmarklets), cela ne devrait pas être nécessaire.
En fait et de façon surprenante pour moi aussi, les règles '! Important' * peuvent * remplacer les CSS en ligne si elles sont suffisamment spécifiques. Il faut utiliser '! Important' dans le CSS en ligne pour être sûr à 100%. –
Je m'injecte un javascript et un css (pas de style css) et le fichier js contient un div avec son contenu. Et je veux apprendre cela, comment puis-je forcer mon fichier CSS à utiliser? – Alper
Il semble que ce que vous dites est que le CSS de la page remplace le style par défaut du contenu que vous injectez. Cela est probablement dû à l'une des deux choses suivantes: ne pas spécifier chaque attribut de style (et en utilisant des valeurs relatives) pour votre contenu ou votre spécificité n'est pas assez élevé.
Indiquez tous les attributs de style
Disons que votre contenu ressemble à ceci:
<div id="#cool-bookmarklet">Here is some content</div>
Et votre CSS ressemble à ceci:
#cool-bookmarklet {
color: #000000;
font-size: 80%;
}
Deux problèmes avec ce qui précède. Seuls deux attributs de style sont déclarés, donc tous les autres attributs seront hérités d'autres styles. Et si la page avait CSS comme ça?
div {
width: 70%;
background-color: #000000;
}
Vous aurez des problèmes car ce CSS s'applique à votre contenu (le div). Votre div 'cool-bookmarklet' aura 70% de la largeur de son parent et aura une couleur de fond noire. Pas bon.
De plus, la taille de la police est une valeur relative, ce qui signifie qu'elle sera de 80% de la valeur héritée. Donc, si la taille de police spécifiée par la page est 10px, votre police sera 8px. Ici, il est probablement préférable d'utiliser le dimensionnement explicite pour éviter les problèmes de styles hérités.
Voici comment votre CSS devrait chercher à éviter les styles hérités:
#cool-bookmarklet {
color: #000000;
font-size: 12px;
width: 400px;
background-color: #ffffff;
margin: 0;
padding: 0;
font-weight: normal;
/* etc, etc */
}
Spécificité
Il y a une partie de CSS que beaucoup de gens n'apprennent pas (et moi ont pris un certain temps pour comprendre) et c'est ce qu'on appelle la spécificité. La spécificité est utilisée par les navigateurs pour déterminer les styles CSS à appliquer aux éléments lorsque deux sélecteurs entrent en conflit.
De la spécification CSS:
La spécificité d'un sélecteur est calculé comme suit (du spec):
- comte 1 si la déclaration est de est un « style » attribut plutôt qu'un Règle avec un sélecteur, 0 sinon (= a) (En HTML, les valeurs de l'attribut "style" d'un élément sont des règles de feuille de style Ces règles n'ont pas de sélecteur, donc a = 1, b = 0, c = 0 et d = 0.)
- Compter le nombre d'attributs ID dans le sélecteur (= b)
- compter le nombre d'autres attributs et pseudo-classes dans le sélecteur (= c)
- compter le nombre de noms d'éléments et des pseudo-éléments dans le sélecteur (= d)
concaténation des quatre nombres abcd (dans un système numérique avec une grande base) donne la spécificité.
Donc a = styles dans un attribut de style d'un élément html. b = sélecteurs id, c = noms de classe et attributs, d = noms de tags. Le sélecteur avec la plus haute spécificité 'gagne' si deux sélecteurs ciblent le même élément.
C'est un peu déroutant, mais on s'y arrête après quelques essais.
Disons que vous avez ces deux règles dans votre CSS:
#cool-bookmarklet { color: red; }
div { color: blue; }
Et le contenu:
<div id="cool-bookmarklet">Here is some content</div>
Le sélecteur '# refroidissement bookmarklet' aurait une spécificité de 100 (a = 0, b = 1, c = 0, d = 0). Le sélecteur 'div' a une spécificité de 1 (a = 0, b = 0, c = 0, d = 1). '# cool-bookmarklet' gagnerait et le div aura un texte rouge. Ceci est pertinent parce que si votre bookmarklet injecte une feuille de style pour styliser votre contenu, d'autres CSS sur la page peuvent le remplacer si la spécificité est plus élevée. Il est souvent plus facile de donner à votre contenu un identifiant (qui a une haute spécificité 'b'). Cela vous permet de cibler votre contenu et de ne pas vous soucier des autres styles.
Espérons que ça aide!
C'est exactement ce que je veux dire :) – Alper
- 1. Conserver l'état du contrôle utilisateur ajouté dynamiquement
- 2. Validation initiale du contrôle ajouté dynamiquement
- 3. Problème de contrôle du curseur jquery
- 4. ID du client incorrect pour le contrôle enfant ajouté dynamiquement
- 5. Récupération du contrôle du problème de contrôle du navigateur Web
- 6. Valider le contrôle ajouté dynamiquement
- 7. Comment accéder aux valeurs du contrôle utilisateur ajouté dynamiquement?
- 8. contrôle ajouté dynamiquement pas de rendu, silverlight
- 9. Problème du menu déroulant CSS
- 10. contrôle WebBrowser pas ajouté au formulaire
- 11. Ajax Control Toolkit Contrôle du calendrier CSS
- 12. Contrôle du style ellipse dans CSS
- 13. Modifier la classe CSS du contrôle validé?
- 14. Problème CSS lors du redimensionnement du navigateur
- 15. CSS avec plusieurs liens vides ajouté
- 16. ajouté un fond css, comment tout enlever
- 17. Problème flottant CSS
- 18. jQuery: problème avec les fonctions du texte ajouté
- 19. WPF Liaison d'un Dynamiquement Ajouté Contrôle
- 20. CSS: Problème de contrôle de l'en-tête Layout (ul, img)
- 21. Problème du menu déroulant IE Css
- 22. CSS Zoom 1 automatiquement ajouté au document
- 23. ligne après caractère ajouté par CSS
- 24. jquery ajouter l'animation css à l'élément ajouté
- 25. Références du fichier CSS et du contrôle utilisateur
- 26. Contrôle CSS avec javascript
- 27. Problème avec l'héritage du contrôle personnalisé
- 28. Problème de propriété du contrôle serveur ASP.NET (?)
- 29. WP7 Personnalisation du problème Contrôle DatePicker
- 30. Problème de déploiement du contrôle utilisateur SharePoint
Merci pour la réponse si rapide:) J'utilise le fichier CSS pas en ligne css codes, dois-je ajouter! Important pour toutes les lignes de codes CSS? – Alper
@Alper vous devrez faire en sorte que les codes CSS en ligne soient sécurisés. Ça craint beaucoup, mais c'est le seul moyen sûr à 100%. Sinon, si vos règles CSS ciblent tous un élément avec un 'id' (par exemple' #mainwidget a li {...} 'ceci devrait être assez spécifique (et remplacer les autres CSS) dans la plupart des cas.Les règles derrière ceci sont appelées spécificité CSS, voir par ex. [cette question] (http://stackoverflow.com/questions/2809024/points-in-css-specificity) pour les pointeurs. –
Wow, son point très intressant .. Je ne savais pas ceci: S J'utilise le fichier css comme décrit précédemment, mais tous les éléments qui ont un problème à corrompre ont leurs propres identifiants. Donc, ajouter "! Important" à tous les styles d'id résoudra mon problème, n'est-ce pas? – Alper