您的位置:首页 > Web前端 > CSS

js改变style样式和css样式

2017-01-10 23:27 856 查看
在很多情况下,都需要对网页上元素的样式进行动态的修改。在JavaScript中提供几种方式动态的修改样式,下面将介绍方法的使用、效果、以及缺陷。

1、使用obj.className来修改样式表的类名。

2、使用obj.style.cssTest来修改嵌入式的css。

3、使用obj.className来修改样式表的类名。

4、使用更改外联的css文件,从而改变元素的css

下面是一段html代码和css代码用来解释上面方法的区别的。

CSS

?
HTML

?
方法一、使用obj.className来修改样式表的类名

从下面的代码可以看出ob.style.cssTest是如何来btnB的样式的。

?
该段代码修改btB的文字的颜色,在浏览器中打开调试工具,可以发现btB标签中多了一个属性【style="内联式>外联式。而btB的hove伪类的background-color样式写在内联式中,所以嵌入式的background-color覆盖了伪类中,这就使得鼠标放入btB上感觉不到背景颜色的变化。

方法二、使用obj.style.cssTest来修改嵌入式的css

直接上JavaScript代码:

?
该段代码和【一】中的效果是一样的,缺陷也是一样。

方法三、使用obj.className来修改样式表的类名

使用代码来修改btB引用样式的类名,如下段代码:

?
通过更改btB的css的类名的方式来更改样式,更改样式类名有两种方式。1、obj.className = "style2";  2、 obj.setAttribute("class", "style2");都是一样的效果。

用这种方式来修改css比上面的效果要好很多。

方法四、使用更改外联的css文件,从而改变元素的css

通过更改外联的css文件引用从而来更改btB的样式,操作很简单。代码如下:

首先得引用外联的css文件,代码如下:

?
这样也能方便的更改btB的样式,个人觉得这种方式是最好用的,是实现整体页面换肤的最佳方案。

在我们编写网页的时候,样式表示我们常常需要相伴的内容,谁然很招人烦。恕我前端菜鸟对这东西很是无力啊。下面是我在代码浪潮中的虚席到的一些东西。

1、样式表内容修改方式。

2、当前元素样式内容获取。

3、document.styleSheets内容。

 

1.首先我们从最简单的开始,样式表修改。

  我们在编写网页的时候通常需要对元素进行一些显示样式内容的修改,这是我们其实是有许多种方法的。

  one: 改变元素style属性。 首先我们可以直接通过元素的elem.setAttribute("style", content);的方式,直接的修改当前的元素的style属性中的内容。style属性是所有的元素通用的属性,标示的是当前的元素显示样式的设置,而且优先级是最高的。所以通过直接修改Style中的内容将会是一种很直接有效的方式。

    Two:改变元素class属性。 其次我们可以使用的也是改变元素的属性值的方式,当时此次改变的是class属性的值,当我们在使用的样式表代码中预先编写好可能的元素的样式,然后通过改变class中的内容以达到改变当前的元素样式的需求。当然对于当前的方式来说,如果你同时改变了style中的样式的话,style种的内容将会优先显示。

  Three:使用element.style参数进行样式修改。 element.style获取的是当前元素style属性种最终显示的内容。其内容其实就是获取了style属性种的内容的一个集合。但是JS把它视为一个元素的属性,并且作为一项内容放置在element对象中。element.style读取获取的数据是CSS样式声明对象([object CSSStyleDeclaration])。但是它是可读写的。当我们使用这样的方法改变当前的元素样式的时候,我们可以通过element.style.backgroundImage这样的方式来设置想要改变的样式的内容。并且其达到的效果和第一条种的效果是相同的。

 

2.当前元素的样式信息的获取。

  我们有时需获取某医院苏的样式表的信息,并使用其中的信息进行计算或是判断。

  one:element.style。 在第一条第三项中我们提到过。这一属性返回的是一个CSS样式声明对象([object CSSStyleDeclaration]),但是是可读可写的。并且其中的内容是当前元素style中的内容。所以只有当我们需要使用的是style种的属性的话,我们使用这样的方式是可以很方便的一种方式。

  two:window.getComputerStyle。 我们可以通过使用window对象中的getComputerStyle来进行获取当前元素的最终显示的全部样式的集合。其方法种有两个参数,参数一是需要获取样式的元素对象,第二个参数是伪类,如果输入了这一参数,则返回的内容变成了相关元素的对应伪类的样式对象了。在jquery种我们可以使用CSS()方法来进行样式的内容获取。

由上可见其使用的是document.defaultView这个属性指代的其实就是window对象。

在MDN中其对于这一使用的总结是:In browsers, 
document.defaultView
 returns the window object associated with a document, or null if none available. 翻译过来就是,在浏览器中,document.defaultView返回的是与文档有关联的window对象,或者是null如果没有可用的话。具体为什么有了window之后还要这样一个参数,完全不知道啊。一脸懵逼ing。

 

3.document.styleSheets内容介绍。

  对于document对象中会有另一个属性可以获取样式,即styleSheets属性。

  styleSheets属性返回的是styleSheetsList数组列表。并且这一属性只有document才有。一般的元素对象是没有的。MDN给出的定义是:

  The 
Document.styleSheets
 read-only property returns a 
StyleSheetList
 of 
CSSStyleSheet
 objects
for stylesheets explicitly linked into or embedded in a document.而且在于chrome中显示的内容是:



由上图可见其中的每一个CSSStyleSheet对象都是一个使用link导入的CSS延时文件。

我们先来看一看CSSStyleSheet的相关内容吧。



由上图可以得出,其实CSSStyleSheet是继承了StyleSheet的,其中的主要的内容有:

cssRules属性,它是一个CSSRulesList数组,其中每一个元素都是CSSStyleRule对象。



由上图可见,其实CSSStyleRule对象中的cssText属性所存储的内容就是我们编写的CSS文件中的内容。实际上document.styleSheets传递回来的其实是一个当前页面的样式内容的集合。

存储了所有的样式的内容。

 

上面几点是我在平时的学习过程种所见和所想,如有错误的话望帮忙指出,那么就先到这里吧。十分感谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: