用js动态改变元素的css

公绪
• 阅读 8808

1: CSSStyleDeclaration对象
跟别的属性一样,style也是元素的一个属性,只是style属性是一个比较特殊的属性,它不是一个字符串,而是一个叫做CSSStyleDeclatation的对象:一个包含CSS属性的对象。比如:

element.style.fontSize = '20px';
element.style.color = '#fff';

2: js中对应的css属性的名字的规则

1: css中属性的连字符(-)变为驼峰
    element.style.fontSize = '20px';
    
2: 当属性为js保留字时,在前面加前缀'css'
    element.style.cssFloat = 'left';
    
3: 给属性赋值必须为字符串类型: 
    element.style.fontSize = '40px'; (对的)
    element.style.fontSize = 40;(错的)
    element.style.fontSize = '40';(也是错的,需要带上单位,除非是‘100%’之类的百分百)

3: css中的复合样式
在js里面也可以像在css中那样使用复合样式,比如:

element.style.padding = '20px 30px 40px 50px';

以上代码使用复合样式属性‘padding’给元素指定了'padding-top', 'padding-right', 'padding-bottom', 'padding-left'的值,分别为'20px', '30px', '40px', '50px'.
4: 通过js设置的CSS属性的权重
我们都知道在html中有三种方式来改变元素的css,分别是:
1: 内联css

<h1 style="font-size: 40px;">测试</h1>

2: 嵌入式

<head>  
  <style type="text/css">  
      span{  
         color:red;  
     }  
  </style>  
</head>  

3: 外部引用

<link rel='stylesheet' type='text/css' href='reset.css'>

在这三种里面,我们知道第一种内联式的权重是最高的。通过js来设置的css正好就是内联的式,所以他会覆盖嵌入式和外部引用的同名css属性

还有一个很重要的点:要避免直接给style对象整个赋值,比如

element.style = 'fontSize: 40px';

如果这个元素本来的内联属性有很多,而你的本意其实只是想改变fontSize; 但是,通过上面的代码,会把其他的内联属性都去掉,最后只留下了fontSize.

4: window.getComputedStyle(element, pseudoElement);
在全局对象window上有一个方法叫‘getComputedStyle()’, 通过它可以获取某个元素的最终的计算出来的属性,也就是最终告诉浏览器怎么去渲染这个元素的css的属性。
这个方法接受两个参数:

1: element 
 想要查询的元素,必须
 
2: pseudoElement
 想要查询的元素的伪元素,当是null或者空字符串时,就是表示想查询元素本身,而不是伪元素

这个方法的返回值也是一个CSSStyleDeclaration对象,只是它和元素的style属性有一些区别:
1: 它是只读的
2: 它返回的css属性的值是经过计算了的。
类似于百分比,rem之类的相对值,不会被返回,而是返回换算好之后的绝对值,比如只会返回px为单位的值
3: 颜色以'rgb(#, #, #)'或者‘rgba(#, #, #, #)’返回,而不是16进制
4: 复合样式,会以特定的属性返回。
比如window.getComputedStyle(element, pseudoElement).padding是没有的,应该查询window.getComputedStyle(element, pseudoElement).paddingTop

4: 获取一个元素的类名
想获取一个元素的CSS类名,有两个属性都可以做到:

1: className
2: classList

先来实验一下,直观地感受一下这两者的区别。假如,我们有一个元素:

//HTML code
<div class="z-top-container has-banner">test</div>

//js code
var ele = document.querySelector('.z-top-container');
ele.className; //"z-top-container has-banner"
ele.classList; // ["z-top-container", "has-banner", value: "z-top-container has-banner"]

从上面的例子我们就可以看出区别:

1: className返回一个字符串,如果这个元素有多个class,则以空格分隔。
2: classList返回的是一个DOMTokenList对象:一个只读的类数组对象。

接下来我们着重地来说一下这个DOMTokenList对象。
DOMTokenList对象定义了三个修改元素的class的方法:

1: add(className)
    参数为class名字,类型为字符串,作用是给这个元素添加一个class
    ele.classList.add('hehe'); //给元素ele添加了一个名为‘hehe’的长css 类
2: remove(className)
    参数为class名字,类型为字符串,作用是给这个元素删除一个class
    ele.classList.remove('hehe');//从ele的css类里面去掉‘hehe’这个类
3: toggle(className)
    参数为class名字,类型为字符串,作用是如果元素没有这个class,就添加;如果已经有了,就删除。
    
点赞
收藏
评论区
推荐文章
Python进阶者 Python进阶者
4年前
一篇文章带你了解CSS定位知识
大家好,我是IT共享者,人称皮皮。这篇我们来讲讲CSS定位。一、Position(定位)CSS定位属性允许你为一个元素定位。它也可以将一个元素放在另一个元素后面,并指定一个元素的内容太大时,应该发生什么。元素可以使用的顶部,底部,左侧和右侧属性定位。然而,这些属性无法工作,除非是先设定position属性。他们也有不同的工作方式,这取决于定位方法。二、属
Wesley13 Wesley13
4年前
java中的类与对象(1)
    首先理解一下类和对象的关系,可以说:类是对象的抽象,对象是类的实例。类一个类中,通常上包含了属性和功能。属性通常用变量表达,功能通常上用函数表达。编写一个类class类名{//属性,用变量表达//功能,用函数表达}对象实例化对象的方法及含义:类名 对象名 new 
Stella981 Stella981
4年前
JavaScript学习总结(十七)——Javascript原型链的原理
一、JavaScript原型链ECMAScript中描述了原型链的概念,并将原型链作为实现继承的主要方法。其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。在JavaScript中,用__proto__属性来表示一个对象的原型链。当查找一个对象的属性时,JavaScript会向上遍历原型
Wesley13 Wesley13
4年前
CSS基本语法及页面引用
css基本语法及页面引用(1)css基本语法css的定义方法是:选择器{属性:值;属性:值;属性:值;}选择器是将样式和页面元素关联起来的名称,属性是希望设置的样式属性每个属性有一个或多个值。代码示例:/css注释ctrlshift"/"/d
Wesley13 Wesley13
4年前
JS函数高级
原型与原型链所有函数都有一个特别的属性:prototype:显式原型属性所有实例对象都有一个特别的属性:__proto__:隐式原型属性显式原型与隐式原型的关系函数的prototype:定义函数时被自动赋值,值默认为{},即用为原型对象
Wesley13 Wesley13
4年前
JS原型、原型链深入理解
原型是JavaScript中一个比较难理解的概念,原型相关的属性也比较多,对象有”prototype”属性,函数对象有”prototype”属性,原型对象有”constructor”属性。原型是JavaScript中一个比较难理解的概念,原型相关的属性也比较多,对象有”prototype”属性,函数对象有”prototype”属性,原型对
Stella981 Stella981
4年前
JavaScript 基于原型链的继承
JavaScript对象是动态的属性“包”(指其自己的属性)。JavaScript对象有一个指向一个原型对象的链。当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾。遵循ECMAScript标准,someObject.Prototype
Stella981 Stella981
4年前
CSS 分类 (Classification)
★★CSS分类属性(Classification)★★⑴CSS分类属性允许你控制如何显示元素,设置图像显示于另一元素中的何处,相对于其正常位置来定位元素,使用绝对值来定位元素,以及元素的可见度。⑵下面是常用的属性以及描述:!(https://oscimg.oschina.net/oscnet/00cb565
Stella981 Stella981
4年前
Android Property Animation
属性动画系统是一个健壮的框架,它使你几乎能够将任何东西做成动画。你可以定义一个动画来随着时间改变任何对象属性,而不管它是否会被绘制到屏幕上。一个属性动画在一个特定的时间长度中改变一个属性的值(一个对象中的一个成员)。当这个属性会影响到屏幕上绘制的组件时,也就产生了我们看得到的那类动画了。要动画化一些东西,你可以指定你想要动画化的对象属性,比如一个对象在屏幕上
Wesley13 Wesley13
4年前
CSS基础_CSS样式的几种书写形式
1.内嵌式将CSS代码集中写在HTML文档的head头部标签中,并且用style标签定义,其基本语法格式如下:<head<styletype"text/CSS"标签名/选择器{属性1:属性值1;属性2:属性值2;属性3:属性值3;
Easter79 Easter79
4年前
Spring两种依赖注入方式的比较
我们知道,Spring对象属性的注入方式有两种:设值注入和构造注入。先看代码:  假设有个类为People,该对象包含三个属性,name和school还有age,这些属性都有各自的setter和getter方法,还有一个包含这三个属性的构造方法。如果用spring来管理这个对象,那么有以下两种方式为People设置属性:  1.设值注入: