表達全國各族人民對抗擊新冠肺炎疫情斗爭犧牲烈士和逝世通報的深切哀悼,國務院今天發布公告,決定2020年4月4日舉行全國性哀悼活動。在此期間,全國和駐外使館下半旗致哀,全國停止公共娛樂活動,4月4日10點開始,全國人民默哀3分鐘,汽車、火車、艦船鳴笛,防空警報鳴響。
想到以往默哀日訪問網站時發現整站會變成全灰,即想到如果立即開始開發、設計圖修改等工作也會消耗大量的時間與精力,那會不會有css可以直接處理所有的元素將他們變灰,隨即想到了css3的filter(濾鏡),并也證實了這一想法的可行性。
filter: grayscale 使用可以調整元素的灰度值
.gray-filter {
filter: grayscale(100%);
-webkit-filter: grayscale(100%);
-moz-filter: grayscale(100%);
-ms-filter: grayscale(100%);
-o-filter: grayscale(100%);
filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale");
filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);
-webkit-filter: grayscale(1);
}
復制代碼
以B站為例:
在正常的情況下B站這個導航欄滑到下面之后是fixed在頁面的頂部的
但假如你把這段css加到了body上會發生下面這種情況:
你可以發現它不再固定在頁面的頂部了,而是超出去了屏幕外面,屏幕左下角的小電視人也跑到了頁面上半部分去,為什么會發生這樣的情況呢?
我去Google查閱了相關資料,發現:
對于指定了 filter 樣式且值不為 none 時,被應用該樣式的元素其子元素中如果有 position 為 absolute 或 fixed 的元素,會為這些元素創建一個新的容器,使得這些絕對或固定定位的元素其定位的基準相對于這個新創建的容器。
我們可以聯想出fixed是相對于html根容器來定位的,如果在body上設置了filter則會創建一個新的定位基準,而頁面滾動時將body滾動出了屏幕外,則body內所有子孫元素的fixed將產生不符合預期的效果。
影響全站的方法我們可以將該樣式應用到根元素html上,即使創建了新的定位基準元素,也不會對子孫元素產生不符合預期的影響。
html {
filter: grayscale(100%);
-webkit-filter: grayscale(100%);
-moz-filter: grayscale(100%);
-ms-filter: grayscale(100%);
-o-filter: grayscale(100%);
filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale");
filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);
-webkit-filter: grayscale(1);
}
復制代碼
效果:
非全站變灰我們可以將需要使用filter的元素單獨加上
<html>
<body>
<div class="gray-filter"></div>
</body>
</html>
<style>
.fixed {
position: fixed;
top: 100px;
left: 100px;
height: 100px;
width: 100px;
background-color: #f00;
}
.gray-filter {
filter: grayscale(100%);
-webkit-filter: grayscale(100%);
-moz-filter: grayscale(100%);
-ms-filter: grayscale(100%);
-o-filter: grayscale(100%);
filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale");
filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);
-webkit-filter: grayscale(1);
}
</style>
復制代碼
很多小伙伴評論說IE低版本不支持該怎么辦于是我Google搜索了一下是有實現辦法的 實現辦法是引入grayscale.js,Demo下載 grayscale.js Demo
簡單查看了該js的源碼后發現會將color、background-color、borderColor等屬性提取出來后替換成灰色,background-image和圖片會使用canvas繪制處理成灰色再替換成處理后的圖片源
demo內functions.js則是對判斷瀏覽器userAgent來識別瀏覽器類型與版本,做出對應的處理
參考資料地址:http://www.majas-lapu-izstrade.lv/cross-browser-grayscale-ie11/
微信小程序我嘗試加在page上但是fixed還是失效了,只能使用第二種方法去加樣式,大家如果有解決方案可以評論提出來大家一起討論一下~
CSS3 filter MDN 地址:https://developer.mozilla.org/zh-CN/docs/Web/CSS/filter
《關于前端CSS寫法104個知識點匯總(一)》
《關于前端CSS寫法104個知識點匯總(二)》
《妙用CSS變量,讓你的CSS變得更心動》
《你未必知道的49個CSS知識點》
《手把手整理CSS3知識匯總【思維導圖】》
《拒絕JavaScript,這三個CSS技巧你一定用的上》
作者:tiutiu
轉發鏈接:https://juejin.im/post/5e86e221e51d4546ce27b99c
VitePress 是 VuePress 的下一代框架,是基于 Vue3+Vite 構建的靜態站生成器。
原先的 VuePress 是基于 Webpack 構建,本地啟動開發一個只有幾個簡單頁面的文檔站點需要等待的時間讓人難以忍受。即使是HMR熱更新也需要幾秒鐘的時間才能在瀏覽器中顯示出來。
從根本上說,這是因為 VuePress 是 webpack 的一個應用程序。即使只有兩頁,這也是一個完整的 webpack 項目(包括所有的主題源文件)正在編譯。當項目有很多頁面時,情況會變得更糟:每個頁面都必須先完全編譯,然后服務器才能顯示內容!
Vite 很好地解決了這些問題:幾乎立即啟動服務器,只按需編譯正在服務的頁面,以及閃電般的快速 hmr。所以基于 Vue3 和 Vite 的 VitePress 誕生了。
總之,體驗舒適,性能好,才有競爭力。開源字節基于vitepress推出官方技術文檔,幫助大家做一些系統化的學習來提升自我的認知效率,從而提高我們的自我獨立性。
如若轉載,請注明出處:開源字節 https://sourcebyte.cn/article/107.html
號用于每日更新前端最新面試題,React、Vue、小程序、JavaScript、HTML5、CSS、uniapp、ES6、前端工程化、性能優化等熱點面試題~~~
歡迎關注,面試題刷起來~~升職加薪不是夢~~
以下是一些常見的前端面試題和答案,涉及 CSS 的主題:
*請認真填寫需求信息,我們會在24小時內與您取得聯系。