鍍金池/ 教程/ HTML/ 樣式操作
書單
JavaScript 動(dòng)畫
HTML
CSS Reset
屬性操作
DOM 事件
閉包
Photoshop
Atom 文本編輯器
表單操作
布局解決方案
類型系統(tǒng)
開發(fā)實(shí)踐
數(shù)據(jù)通信
變量作用域
BOM
JavaScript 程序設(shè)計(jì)
前端工程師概述
CSS
響應(yīng)式布局
表達(dá)式與運(yùn)算符
基本語法
JavaScript 介紹
版本控制
布局
調(diào)試器
背景
圖片保存
多媒體
文檔樹
列表操作
Sublime 編輯器
盒模型
常見布局樣例
類型識(shí)別
變形
數(shù)據(jù)存儲(chǔ)
選擇器
頁(yè)面架構(gòu)
開發(fā)及調(diào)試工具
頁(yè)面模塊化
節(jié)點(diǎn)操作
測(cè)量及取色
瀏覽器兼容
HTML 簡(jiǎn)介
內(nèi)置對(duì)象
實(shí)體字符
產(chǎn)品前端架構(gòu)
協(xié)作流程
切圖
工具, 面板, 視圖
正則表達(dá)式
動(dòng)畫
語句
面向?qū)ο?/span>
HTML 語法
HTML 標(biāo)簽
技術(shù)選擇
樣式操作
圖片優(yōu)化與合并
語法
DOM 編程藝術(shù)
Canvas
接口設(shè)計(jì)
頁(yè)面優(yōu)化
文本

樣式操作

樣式操作

通過 JavaScript 動(dòng)態(tài)修改頁(yè)面樣式。

CSS 對(duì)應(yīng) DOM 對(duì)象

http://wiki.jikexueyuan.com/project/fend_note/images/C/css-dom-overview.jpg" alt="" />

<link rel="stylesheet" type="text/css" href="sample.css">
// var element = document.querySelector('link');
// 對(duì)應(yīng)于 element.sheet

<style type="text/css" media="screen">
  body {
    margin: 30px
  }
</style>
// var element = document.querySelector('style');
// 對(duì)應(yīng)于 element.sheet

// 整個(gè)頁(yè)面的全部樣式(不包括行內(nèi)樣式)
document.styleSheets

<p style="color:red">Text Color</p>
// var element = document.querySelector('p');
// 對(duì)應(yīng)于 element.style

內(nèi)部樣式表

<style>
  body{margin:30;}
  p{color: #aaa; line-height:20px}
</style>

// 1.對(duì)應(yīng)所有樣式的列表
// body{margin:30;}
// p{color: #aaa; line-height:20px}
element.sheet.cssRules;

// 2.對(duì)應(yīng)相應(yīng)的 CSS 選擇器
// p
element.sheet.cssRules[1].selectorText;

// 3.對(duì)應(yīng)一個(gè)樣式
// p{color: #aaa; line-height:20px}
element.sheet.cssRules[1]

// 4.對(duì)應(yīng)所有樣式的鍵值對(duì)
// color: #aaa; line-height:20px
element.sheet.cssRules[1].style;

// 5.對(duì)應(yīng)的屬性值
// #aaa
element.sheet.cssRules[1].stlye.color;
element.sheet.cssRules[1].lineHeight;

行內(nèi)樣式

其對(duì)應(yīng)于 CSSStyleDeclaration 的對(duì)象。

element.style.color;
// 獲取行內(nèi)樣式的鍵值對(duì)

更新樣式

element.style

element.style.color = 'red';
element.style.background = 'black';

增加樣式后得到的結(jié)果

<div style="color: red; background: black;"></div>

缺點(diǎn)

  • 每個(gè)屬性的更新都需要一個(gè)命令
  • 命名異常(以駝峰命名法命名屬性)

element.style.cssText

一次同時(shí)設(shè)置多個(gè)行內(nèi)樣式,其結(jié)果同 element.style 單獨(dú)設(shè)置相同。

element.style.cssText = 'color: red; background: black';

增加樣式后得到的結(jié)果

<div style="color: red; background: black;"></div>

以上兩種方式均將樣式混合在邏輯當(dāng)中。

更新 class

首先需要?jiǎng)?chuàng)建對(duì)應(yīng)樣式的 CSS 樣式。

.angry {
  color: red;
  background: black;
}

然后再在 JavaScript 中,在對(duì)應(yīng)的事件中給元素添加需要的類即可。

element.className += ' angry';

增加樣式后得到的結(jié)果

<div class="angry"></div>

統(tǒng)一更新多個(gè)元素樣式

以上方法均不適合同時(shí)更新多個(gè)樣式,通過更換樣式表的方式則可同時(shí)更改多個(gè)頁(yè)面中的樣式。將需要的大量樣式也在一個(gè)皮膚樣式表中,通過 JavaScript 來直接更換樣式表來進(jìn)行樣式改變。(此方法也可用于批量刪除樣式)

<link rel="stylesheet" type="text/css" href="base.css">
<link rel="stylesheet" type="text/css" href="style1.css">
element.setAttribute('href', 'style2.css');

獲取樣式

element.style

其對(duì)應(yīng)的為元素的行內(nèi)樣式表而不是實(shí)際樣式表。

<input type="checkbox" name="" value="">
element.style.color; // ""

line-height: 200px

window.getComputedStyle()

將需要取出樣式的目標(biāo)元素傳入 window.getComputedStyle() 函數(shù)中,即可得到對(duì)應(yīng)元素的實(shí)際樣式。注意的是這里獲取到的樣式值為只讀屬性不可修改!

NOTE:獲取的實(shí)際為 CSSStyleDeclaration 的實(shí)例對(duì)象。 NOTE+:此方法不支持 IE9 以下版本,IE9 中需使用 element.currentStyle 來做兼容。

var style = window.getComputedStyle(element[, pseudoEle]);
<input type="checkbox" name="" value="">
window.getComputedStyle(element).color; // 'rgb(0,0,0)'