css追悼之灰色濾鏡效果-——html與body標籤的坑及猜想

一.前言

今天4月4日追悼會,敬所有抗疫戰爭的犧牲者。

大部分網站都將顏色變爲了灰色,這是如何實現的呢。

二.思路

1.首先想了mack遮罩,但看了看文檔好像不對啊,遮罩後全局都變爲不可點擊了,並不是想要的效果。

2.百度了一下,發現可以用filter來實現,於是就順着做下去了,大概的代碼是這樣

html{
    filter:grayscale(1);
}

是的這就完了,只要在css里加入這兩句就能實現全局遮罩了,考慮兼容性的話可以多加幾行,這裏就不說了。

 

 

 


要是遇上了背景圖片無法變色的問題,可以繼續看下去

三.bug

1.起源:我嘗試將html的filter修改完畢,但卻發現還有個body標籤的背景圖沒有變化,於是產生了疑惑。

2.經過:

       嘗試將該背景圖轉到別的標籤上,發現除了html標籤和body標籤,其他都是正常的,html標籤還可以解釋,但body標籤是html標籤的子級,爲什麼不行呢?

       意識到可能是body和html的嵌套關係出了錯,百度了一下body標籤和html標籤的問題,看了一些文章,簡述一下。

3.示例:

首先看個代碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        body{
            background: black;
            border:green 1px solid;
        }
        div{
            color:red;
            width:100px;
            height:100px;
            border:1px solid red
        }
    </style>
</head>
<body>
    <div>
        一小塊
    </div>
</body>
</html>

 

大家應該沒想到,body層外也是黑色的,照理說沒有給外層顏色,應該顯示爲白色。再添加幾行代碼

html{
   background: yellow;
   border:blue  1px solid;
}

最後測試發現,只有html標籤和body標籤會導致這個問題。

 

4.總結:

       我的猜想是,在html之上還有一層,姑且稱爲瀏覽器層,默認爲全屏,而不是像html/body標籤隨內容變化而變化。若是html標籤中背景有值,那麼瀏覽器層會奪走html標籤的背景值給自身使用,若是html標籤中沒有,它就會去body標籤中尋找並奪走給自身使用,若是都沒有,則呈現白色。

       無論是html被奪走還是body被奪走,這個標籤的背景值都會失效,看到的實際上是瀏覽器層的背景。

       所以纔會產生最開始那個問題,body背景圖片沒有變黑白,因爲body背景被瀏覽器層“抓走了”,瀏覽器層位於html層的更上一層,所以html的灰色濾鏡無法作用到它身上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章