comment supprimer la propriété css en utilisant javascript?

195

est-il possible de supprimer une propriété CSS d'un élément en utilisant JavaScript? par exemple, je dois div.style.zoom = 1.2, maintenant je veux supprimer la propriété de zoom via JavaScript?

Sam
la source
3
Veuillez clarifier: essayez-vous de supprimer une classe d'un élément ou un attribut d'un élément?
Jan Hančič
1
Désolé pour cela, pas une classe, attribut pour un élément.
sam
pourquoi downvote? c'est une question assez décente non?
Roland Bouman
2
Bonjour, je ne comprends pas - pourquoi avez-vous marqué la réponse des naïvistes comme "réponse acceptée"? Je veux dire, sa solution est bonne au cas où vous voudriez trouver des éléments par classe mais tout dans votre question indique que vous cherchiez une méthode pour changer l'effet de la définition d'une propriété du style local. Sûrement, ma réponse correspond mieux au problème? J'ai peut-être mal compris votre question?
Roland Bouman
1
@RolandBouman en fait, la réponse acceptée devrait être modifiée pour être celle d'Edvinas Ilčenko car elle répond à ce qui a été demandé au sujet de la suppression plutôt que de la changer par défaut. Votre réponse a toujours de la valeur, je l'ai donc modifiée pour clarifier la distinction.
whitneyland

Réponses:

187

Vous avez deux options:

OPTION 1:

Vous pouvez utiliser la méthode removeProperty . Cela supprimera un style d'un élément.

el.style.removeProperty('zoom');

OPTION 2:

Vous pouvez le définir sur la valeur par défaut:

el.style.zoom = "";

Le zoom effectif sera désormais celui qui découle des définitions définies dans les feuilles de style (via les liens et les balises de style). Cette syntaxe ne modifiera donc que le style local de cet élément.

Roland Bouman
la source
… Ainsi que le CSS utilisateur et les styles par défaut du navigateur.
Quentin
J'ai compris que l'OP signifiait qu'ils voulaient faire comme s'ils n'avaient pas défini la propriété style de l'élément, ce qui est exactement ce que vous avez fourni. J'ai essayé d'utiliser el.style.removeProperty ('zoom'); (ou «remplir», en fait, dans mon cas) qui semble faire la même chose dans IE et être ignoré par les autres navigateurs. Pour une raison quelconque, j'ai été surpris de constater que le définir sur une chaîne vide a le même effet et semble fonctionner sur tous les navigateurs (versions récentes).
Shavais
Ce comportement est-il spécifié n'importe où dans une norme? Je ne le trouve pas :-(
Oliver Joseph Ash
@OliverJosephAsh oui c'est documenté, voir cette réponse ci-dessous stackoverflow.com/a/7901886/700206
whitneyland
120

removeProperty supprimera un style d'un élément.

Exemple:

div.style.removeProperty ('zoom');

Page de documentation MDN:
CSSStyleDeclaration.removeProperty

Edvinas Ilčenko
la source
25
div.style.removeProperty('zoom');
Joe
la source
10

Vous pouvez utiliser l'objet styleSheets:

document.styleSheets[0].cssRules[0].style.removeProperty("zoom");

Avertissement # 1: Vous devez connaître l'index de votre feuille de style et l'index de votre règle.

Avertissement # 2: Cet objet est implémenté de manière incohérente par les navigateurs; ce qui fonctionne dans l'un peut ne pas fonctionner dans les autres.

james.garriss
la source
Cela semble vraiment fragile. Ne se cassera-t-il pas lorsque vos indices changeront?
Casey Rodarmor
Oui. C'est exactement ce que dit l'avertissement # 1.
james.garriss
Mon Chrome 26 n'a pas CSSStyleRule.prototype.removeProperty= (En fait, il CSSStyleRulen'y a pas de méthodes. = (
Rudie
CSSStyleSheet.prototype.removeRuleà la rescousse.
Rudie
@Rudie, n'est-ce pas CSSStyleSheet.prototype.deleteRule?
roka
7
element.style.height = null;

production:

<div style="height:100px;"> 
// results: 
<div style="">
T.Todua
la source
Il semble que la définition du style sur null ne fonctionne pas dans IE11.
MaximeW
1
Pourquoi quelqu'un devrait-il se soucier des IEnavigateurs? Je les ignore intentionnellement déjà depuis des années.
T.Todua
4

Vous pouvez essayer de trouver tous les éléments qui ont cette classe et de définir la propriété "zoom" sur "rien".

Si vous utilisez la bibliothèque javascript jQuery, vous pouvez le faire avec $(".the_required_class").css("zoom","")

Edit: Suppression de cette déclaration car il s'est avéré ne pas être vrai, comme indiqué dans un commentaire et d'autres réponses, il est en effet possible depuis 2010.

Faux: il n'existe aucun moyen généralement connu de modifier les feuilles de style à partir de JavaScript.

naïvistes
la source
5
Oui il y a. Modifier les feuilles de style par programmation, même si javascript n'est pas difficile. Il fonctionne sur plusieurs navigateurs avec d'excellentes performances et a vraiment du sens lors du changement d'une propriété qui devrait être la même sur un tas d'éléments. Comme ce fut également le cas en janvier 2010. Voici un bref exemple: stackoverflow.com/questions/14927706/…
Clox
Clox: Ajout de feuilles de style qui remplacent certaines propriétés par programme - bien sûr! Modification de ceux déjà chargés - Je n'en ai pas entendu parler.
naïvistes
Est-il censé être css () plutôt que attr (). Ou est-ce peut-être attr () dans IE?
Alex KeySmith
ça devrait être css, non attr, tu as raison.
naïvistes
1

Vous pouvez également le faire dans jQuery en disant $(selector).css("zoom", "")

TryingToImprove
la source
0

Cela devrait faire l'affaire - définir le style en ligne sur normal pour le zoom:

$ ('div'). attr ("style", "zoom: normal;");

Mat
la source
1
La question était de savoir comment supprimer un style, cette réponse détruira tous les styles existants et les remplacera par la seule nouvelle entrée.
whitneyland
0

en fait, si vous connaissez déjà la propriété, cela le fera ...

par exemple:

<a href="test.html" style="color:white;zoom:1.2" id="MyLink"></a>

    var txt = "";
    txt = getStyle(InterTabLink);
    setStyle(InterTabLink, txt.replace("zoom\:1\.2\;","");

    function setStyle(element, styleText){
        if(element.style.setAttribute)
            element.style.setAttribute("cssText", styleText );
        else
            element.setAttribute("style", styleText );
    }

    /* getStyle function */
    function getStyle(element){
        var styleText = element.getAttribute('style');
        if(styleText == null)
            return "";
        if (typeof styleText == 'string') // !IE
            return styleText;
        else  // IE
            return styleText.cssText;
    } 

Notez que cela ne fonctionne que pour les styles en ligne ... pas les styles que vous avez spécifiés via une classe ou quelque chose comme ça ...

Autre remarque: vous devrez peut-être échapper certains caractères dans cette instruction replace, mais vous avez l'idée.

MaxOvrdrv
la source
-3

Pour modifier toutes les classes d'un élément:

document.getElementById("ElementID").className = "CssClass";

Pour ajouter une classe supplémentaire à un élément:

document.getElementById("ElementID").className += " CssClass";

Pour vérifier si une classe est déjà appliquée à un élément:

if ( document.getElementById("ElementID").className.match(/(?:^|\s)CssClass(?!\S)/) )
thejustv
la source
1
La question était de savoir comment supprimer un style, cette réponse n'a rien à voir avec cela.
whitneyland