存取樣式資訊


在 HTML 標籤上,可以設定 style 屬性,藉以改變元素的樣式。例如:

<div style="color: #ffffff; background-color: #ff0000; width: 500px; height: 200px; padding-left: 250px; padding-top: 150px;">這是一段訊息</div>

可以直接使用 JavaScript 設定 style 特性上的各個特性來達到相同效果。例如:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
</head>
<body>
    <div id="message">這是一段訊息</div>

<script type="text/javascript">
    let message = document.getElementById('message');
    message.style.color = '#ffffff';
    message.style.backgroundColor = '#ff0000';
    message.style.width = '500px';
    message.style.height = '200px';
    message.style.paddingLeft = '250px';
    message.style.paddingTop = '150px';
</script>  

</body>
</html>

按此觀看執行結果

style 特性參考的是 CSSProperties 物件,要注意的是特性名稱的大小寫,通常是沒有破折線、採駝峰式命名。一般不會或不建議使用標籤的 style 屬性來設定樣式,而會定義在樣式表中。例如:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <style type="text/css">
        #message {
            color: #ffffff; 
            background-color: #ff0000; 
            width: 500px; 
            height: 200px; 
            padding-left: 250px; 
            padding-top: 150px;
        }
    </style>
</head>
<body>

    <div id="message">這是一段訊息</div>

</body>
</html>

按此觀看執行結果

然而在這種情況下,無法使用 style 特性來取得樣式表中定義的各個樣式資訊,因為元素的 style 特性是對應於標籤的 style 屬性,標籤若沒有定義 style 屬性,或程式中沒有設定 style 的特性,就無法使用 style 特性來取得樣式資訊。

標籤的 style 屬性或透過元素的 style 特性會覆蓋樣式表的設定,由於一般並不建議直接於標籤上設定 style 屬性,因此透過程式時,通常建議將 style 特性用於設定樣式,而不是取得樣式。

如果標籤沒有設定 style 屬性,而想要取得元素上套用的樣式資訊,則必須取得元素的計算樣式(Computed style),計算樣式是指所有樣式規則(包括樣式表、style 屬性)已套用至元素後的樣式結果。

若是在標準瀏覽器中,可以使用 windowgetComputedStyle 函式(與 document.defaultView.getComputedStyle 是相同函式),取得的樣式物件是唯讀的 CSS2Properties 物件,可以直接如同使用 style 特性,直接於上指定特性來取得樣式資訊,或是使用 getPropertyValue() 方法指定 CSS 屬性。

getComputedStyle 的第二個引數可指定虛擬類別(pseudo-class),如果不設定的話,也必須指定 null,例如:

window.getComputedStyle(elem, null)[prop];

來使用程式取得上一個範例網頁的 CSS 樣式設定:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <style type="text/css">
        #message {
            color: #ffffff; 
            background-color: #ff0000; 
            width: 500px; 
            height: 200px; 
            padding-left: 250px; 
            padding-top: 150px;
        }
    </style>
</head>
<body>

    <div id="message">這是一段訊息</div>
    <span id="console"></span>

<script type="text/javascript">
    function style(elem, prop) {
        return window.getComputedStyle(elem, null)[prop];
    }

    let message = document.getElementById('message');
    let color = style(message, 'backgroundColor');
    document.getElementById('console').innerHTML = color;
</script>  
</body>
</html>

按此觀看執行結果