## style属性的设置和获取
在DOM当中,如果想设置样式,有两种形式:
- className(针对内嵌样式表)
- style(针对行内样式)
这一段就来讲一下style。
需要注意的是:style是一个对象,只能获取**行内样式**,不能获取内嵌的样式和外链的样式。例如:
```html
Title
```
打印结果:
![](http://img.smyhvae.com/20180129_1407.png)
上图显示,因为border属性不是行内样式,所以无法通过style对象获取。
## style属性的注意事项
style属性需要注意以下几点:
- (1)样式少的时候使用。
- (2)style是对象。
我们在上方已经打印出来,typeof的结果是Object。
- (3)值是字符串,没有设置值是“”。
- (4)命名规则,驼峰命名。和css不一样。
- (5)只能获取行内样式,和内嵌和外链无关。
本段最开始的时候讲到的。
- (6)box.style.cssText = “字符串形式的样式”。
`cssText`这个属性,其实就是把行内样式里面的值当做字符串来对待。在上方代码的基础之上,举例:
```html
```
打印结果:
![](http://img.smyhvae.com/20180129_1410.png)
## style的常用属性
style的常用属性包括:
- backgroundColor
- backgroundImage
- color
- width
- height
- border
- opacity 设置透明度 (IE8以前是filter: alpha(opacity=xx))
注意DOM对象style的属性和标签中style内的值不一样,因为在JS中,`-`不能作为标识符。比如:
- DOM中:backgroundColor
- CSS中:background-color
## style属性的举例
我们针对上面列举的几个style的样式,来举几个例子:
- 1、改变div的大小和透明度
- 2、当前输入的文本框高亮显示
- 3、高级隔行变色、高亮显示
- 4、百度皮肤
- (继续下面PPT)
- 显示隐藏/关闭广告/显示二维码(隐藏方法)
- 提高层级
下面来逐一实现。
### 举例1:改变div的大小和透明度
代码举例:
```html
```
### 举例2:当前输入的文本框高亮显示
代码实现:
```html
```
### 举例3:高级隔行变色、高亮显示
```html
序号 |
姓名 |
课程 |
成绩 |
1
|
生命壹号 |
语文 |
100 |
2
|
生命贰号 |
日语 |
99 |
3
|
生命叁号 |
营销学 |
98 |
4
|
生命伍号 |
数学 |
90 |
5
|
许嵩 |
英语 |
96 |
6
|
vae |
体育 |
90 |
```
实现的效果如下:
![](http://img.smyhvae.com/20180129_1520.gif)
代码解释:
上方代码中,我们**用到了计数器myColor来记录每一行最原始的颜色**(赋值白色之前)。如果不用计数器,可能很多人以为代码是写的:(错误的代码)
```html
```
这种错误的代码,实现的效果却是:(未达到效果)
![](http://img.smyhvae.com/20180129_1525.gif)
## js 访问css属性
访问行内的css样式,有两种方式:
方式一:
```javascript
box.style.width
box.style.top
```
方式二:
```javascript
元素.style["属性"]; //格式
box.style["width"]; //举例
```
方式二最大的优点是:可以给属性传递参数。
### 获取css的样式
上面的内容中,我们通过`box1.style.属性`只能获得**行内样式**的属性。可如果我们想获取**内嵌或者外链**的样式,该怎么办呢?
(1)w3c的做法:
```javascript
window.getComputedStyle("元素", "伪类");
```
两个参数都是必须要有的,如果没有伪类就用 null 代替。
(2)IE和opera的做法:
```javascript
obj.currentStyle;
```
于是,就有了一种兼容性的写法,同时将其封装。代码举例如下:
```html
```
打印结果:
![](http://img.smyhvae.com/20180204_1425.png)