Il est facile de définir des valeurs CSS en ligne avec javascript. Si je veux changer la largeur et que j'ai html comme ceci:
<div style="width: 10px"></div>
Tout ce que j'ai à faire est:
document.getElementById('id').style.width = value;
Cela changera les valeurs de la feuille de style en ligne. Normalement, ce n'est pas un problème, car le style en ligne remplace la feuille de style. Exemple:
<style>
#tId {
width: 50%;
}
</style>
<div id="tId"></div>
Utilisation de ce Javascript:
document.getElementById('tId').style.width = "30%";
J'obtiens ce qui suit:
<style>
#tId {
width: 50%;
}
</style>
<div id="tId" style="width: 30%";></div>
C'est un problème, car non seulement je ne veux pas changer les valeurs en ligne, si je recherche la largeur avant de la définir, quand j'ai:
<div id="tId"></div>
La valeur retournée est Null, donc si j'ai Javascript qui a besoin de connaître la largeur de quelque chose pour faire de la logique (j'augmente la largeur de 1%, pas à une valeur spécifique), revenir Null quand j'attends la chaîne "50% "ne fonctionne pas vraiment.
Donc ma question: j'ai des valeurs dans un style CSS qui ne sont pas situées en ligne, comment puis-je obtenir ces valeurs? Comment puis-je modifier le style au lieu des valeurs en ligne, avec un identifiant?
Réponses:
Ok, on dirait que vous voulez changer le CSS global afin de changer efficacement tous les éléments d'un style péticulaire à la fois. J'ai récemment appris à le faire moi-même grâce à un tutoriel de Shawn Olson . Vous pouvez directement référencer son code ici .
Voici le résumé:
Vous pouvez récupérer les feuilles de style via
document.styleSheets
. Cela renverra en fait un tableau de toutes les feuilles de style de votre page, mais vous pouvez dire sur laquelle vous vous trouvez via ladocument.styleSheets[styleIndex].href
propriété. Une fois que vous avez trouvé la feuille de style que vous souhaitez modifier, vous devez obtenir le tableau de règles. C'est ce qu'on appelle «règles» dans IE et «cssRules» dans la plupart des autres navigateurs. La manière de savoir sur quelle CSSRule vous vous trouvez est par laselectorText
propriété. Le code de travail ressemble à ceci:Faites-moi savoir comment cela fonctionne pour vous et veuillez commenter si vous voyez des erreurs.
la source
rule.value
dans FF 20. Il y arule.style
cependant, qui est réglable et se comporte commeelement.style
. Cf. https://developer.mozilla.org/en-US/docs/DOM/CSSStyleRule . Vérifierrule.type == rule.STYLE_RULE
peut également être une bonne idée avant d'accéderrule.selectorText
.document.styleSheets[styleIndex].cssRules.[ruleIndex].style = {'color':'red', 'background-color':'green'};
travaillé pour moi, merci!S'il vous plaît! Demandez simplement w3 ( http://www.quirksmode.org/dom/w3c_css.html )! Ou en fait, cela m'a pris cinq heures ... mais la voici!
La fonction est vraiment simple à utiliser. Exemple:
Oh..
EDIT: comme @ user21820 l'a décrit dans sa réponse, il peut être un peu inutile de changer toutes les feuilles de style de la page. Le script suivant fonctionne avec IE5.5 ainsi que le dernier Google Chrome, et ajoute uniquement la fonction css () décrite ci-dessus.
la source
En rassemblant le code dans les réponses, j'ai écrit cette fonction qui semble bien fonctionner sur mon FF 25.
C'est un moyen de mettre des valeurs dans le css qui seront utilisées dans JS même si elles ne sont pas comprises par le navigateur. par exemple maxHeight pour un tbody dans un tableau déroulé.
Appel :
CCSStylesheetRuleStyle('default', "#mydiv", "height");
CCSStylesheetRuleStyle('default', "#mydiv", "color", "#EEE");
la source
document.styleSheets[m].href
sera nul et échouera.Je ne sais pas pourquoi les autres solutions passent par toute la liste des feuilles de style du document. Cela crée une nouvelle entrée dans chaque feuille de style, ce qui est inefficace. Au lieu de cela, nous pouvons simplement ajouter une nouvelle feuille de style et y ajouter simplement les règles CSS souhaitées.
Notez que nous pouvons remplacer même les styles en ligne définis directement sur les éléments en ajoutant "! Important" à la valeur de la propriété, sauf s'il existe déjà des déclarations de style "! Important" plus spécifiques pour cette propriété.
la source
Je n'ai pas assez de représentants pour commenter, je vais donc formater une réponse, mais ce n'est qu'une démonstration du problème en question.
Il semble que lorsque les styles d'éléments sont définis dans des feuilles de style, ils ne sont pas visibles pour getElementById ("someElement"). Style
Ce code illustre le problème ... Code ci-dessous sur jsFiddle .
Dans le test 2, lors du premier appel, la valeur des éléments laissés n'est pas définie, et donc, ce qui devrait être une simple bascule est foiré. Pour mon utilisation, je définirai mes valeurs de style importantes en ligne, mais cela semble partiellement aller à l'encontre de l'objectif de la feuille de style.
Voici le code de la page ...
J'espère que cela aidera à éclairer la question.
Sauter
la source
Vous pouvez obtenir les styles "calculés" de n'importe quel élément.
IE utilise quelque chose appelé "currentStyle", Firefox (et je suppose que d'autres navigateurs "conformes aux standards") utilise "defaultView.getComputedStyle".
Vous devrez écrire une fonction de navigateur croisé pour ce faire, ou utiliser un bon framework Javascript comme prototype ou jQuery (recherchez "getStyle" dans le fichier javascript prototype et "curCss" dans le fichier javascript jquery).
Cela dit, si vous avez besoin de la hauteur ou de la largeur, vous devriez probablement utiliser element.offsetHeight et element.offsetWidth.
Attention, si vous ajoutez un style en ligne à l'élément en question, il peut agir comme valeur "par défaut" et sera lisible par Javascript au chargement de la page, car il s'agit de la propriété de style en ligne de l'élément:
la source
Ce simple résumé de 32 lignes vous permet d'identifier une feuille de style donnée et de modifier ses styles très facilement:
la source
Je n'ai jamais vu d'utilisation pratique de cela, mais vous devriez probablement considérer les feuilles de style DOM . Cependant, je pense honnêtement que c'est exagéré.
Si vous souhaitez simplement obtenir la largeur et la hauteur d'un élément, quel que soit l'endroit à partir duquel les dimensions sont appliquées, utilisez simplement
element.offsetWidth
etelement.offsetHeight
.la source
Essayez peut-être ceci:
la source