首頁 web前端 css教學 關於CSS3開啟硬體加速的使用與陷阱

關於CSS3開啟硬體加速的使用與陷阱

Jun 20, 2018 pm 02:58 PM

這篇文章主要介紹了詳解CSS3開啟硬體加速的使用和坑,內容挺不錯的,現在分享給大家,也給大家做個參考。

最近在看在github上看iscroll的文件。雖然是英文的,但是為了裝逼,沒辦法硬著頭皮看完了,覺得作者寫得不錯(我有那麼好耐心寫那麼長的文檔就好了[摀臉]),然後為了更好地裝逼,有看了一遍,其中是發現了不少好東西的,比如說CCS3硬體加速就是在上面被我擴展出來的。為了大家可以一起愉快地玩耍,我就先附上iscroll的Github Link:https://github.com/issaxite/iscroll

開啟CSS3加速

#平常我們寫的css3動畫(沒有觸發硬體加速的)都是使用瀏覽器緩慢的軟體渲染引擎來執行,字面上就是沒有開啟硬體加速。例如有時候寫的行動裝置網頁的動畫(例如最簡單的模態框)在安卓手機上會出現卡片幀的現象,有很大可能就是使用瀏覽器軟體渲染引擎來執行,效能跟不上導致的。上面說到硬體加速就可以解決這個問題,性能跟不上嘛,那就Spider Man上(能力越大,責任越大)——來硬體加速,性能提上去呀(我知道這又是一個爛gag ),其實所謂硬體加速就是告訴瀏覽器,讓它使用GPU進行渲染,切換到GPU模式,發揮GPU的一系列功能。

舉例:

CSS的  animations,  transforms 以及 transitions 不會自動開啟GPU加速,而是由瀏覽器的緩慢的軟體渲染引擎來執行。為了效能,這個時候或許你就需要開啟硬體加速功能。那我們怎麼可以切換到GPU模式呢,很多瀏覽器提供了某些觸發的CSS規則。

Chrome, FireFox, Safari, IE9 和最新版本的Opera都支援硬體加速,當它們偵測到頁面中某個DOM元素應用了某些CSS規則時就會開啟,最顯著的特徵的元素的3D變換。

在其他的文章上看到的幾個可以切換到GPU模式的幾個3d屬性:

.isaax{
   -webkit-transform: translate3d(250px,250px,250px)
   rotate3d(250px,250px,250px,-120deg)
   scale3d(0.5, 0.5, 0.5);
}

在iscroll的文檔上看到的是下面這個:

.isaax {
   -webkit-transform: translateZ(0);
   -moz-transform: translateZ(0);
   -ms-transform: translateZ(0);
   -o-transform: translateZ(0);
   transform: translateZ(0);
}

據說使用以上樣式觸發硬體加速後會出現「頁面可能會出現閃爍的效果「 的問題,我是還沒發現,在網路上是找到兩個可以解決的方法:

方法一

.isaax {
   -webkit-backface-visibility: hidden;
   -moz-backface-visibility: hidden;
   -ms-backface-visibility: hidden;
   backface-visibility: hidden;
 
   -webkit-perspective: 1000;
   -moz-perspective: 1000;
   -ms-perspective: 1000;
   perspective: 1000;
}
  • backface-visibility (ie10 )是用來隱藏被旋轉元素的背面,translateZ 導致的? ;

  • 而當為元素定義 perspective 屬性時,其子元素會得到透視效果。

換言之,不是去掉閃爍,而是設為透明[技術太渣根本不敢說話]

方法二

#如果是webkit內核,還有一種方式可以解決:

.isaax {
   -webkit-transform: translate3d(0, 0, 0);
   -moz-transform: translate3d(0, 0, 0);
   -ms-transform: translate3d(0, 0, 0);
   transform: translate3d(0, 0, 0);
}

硬體加速的坑

看了大神的文章才知道,握草,這東西也不是萬金油啊,用得不好,狠起來你那女票還狠,看了打開大神的例子又再次感受到深深的惡意。頭部的那個輪播動畫元素的存在居然會導致下面所有相對和絕對定位的元素都被放到複合層中。 。 。

然後說一下怎麼打開查看【複合層】元素選項的方式,好像上面文章提到的方法有點過時:

打開控制台

勾選Layer Borders選項,你會發現世界突然清晰了許多

最後,附上跳過坑的方法

使用3D硬體加速提升動畫效能時,最好給元素增加一個z-index屬性,人為幹擾複合層的排序,可以有效減少chrome創建不必要的複合層,提升渲染性能,移動端優化效果尤為明顯。

.isaax{
  position: relative;
  z-index: 1;  // 可以设大点,尽量设得比后面元素的z-index值高
}

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

關於開發CSS3彈性盒模型的方法之二

關於bootstrap3.0的柵格系統原理

#

以上是關於CSS3開啟硬體加速的使用與陷阱的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

什麼是AutoPrefixer,它如何工作? 什麼是AutoPrefixer,它如何工作? Jul 02, 2025 am 01:15 AM

Autoprefixer是一個根據目標瀏覽器範圍自動為CSS屬性添加廠商前綴的工具。 1.它解決了手動維護前綴易出錯的問題;2.通過PostCSS插件形式工作,解析CSS、分析需加前綴的屬性、依配置生成代碼;3.使用步驟包括安裝插件、設置browserslist、在構建流程中啟用;4.注意事項有不手動加前綴、保持配置更新、非所有屬性都加前綴、建議配合預處理器使用。

CSS教程,用於創建粘性標頭或頁腳 CSS教程,用於創建粘性標頭或頁腳 Jul 02, 2025 am 01:04 AM

TocreatestickyheadersandfooterswithCSS,useposition:stickyforheaderswithtopvalueandz-index,ensuringparentcontainersdon’trestrictit.1.Forstickyheaders:setposition:sticky,top:0,z-index,andbackgroundcolor.2.Forstickyfooters,betteruseposition:fixedwithbot

CSS教程,用於創建加載旋轉器和動畫 CSS教程,用於創建加載旋轉器和動畫 Jul 07, 2025 am 12:07 AM

創建CSS加載旋轉器的方法有三種:1.使用邊框的基本旋轉器,通過HTML和CSS實現簡單動畫;2.使用多個點的自定義旋轉器,通過不同延遲時間實現跳動效果;3.在按鈕中添加旋轉器,通過JavaScript切換類來顯示加載狀態。每種方法都強調了設計細節如顏色、大小、可訪問性和性能優化的重要性,以提升用戶體驗。

CSS教程專注於移動優先設計 CSS教程專注於移動優先設計 Jul 02, 2025 am 12:52 AM

Mobile-firstCSSdesignrequiressettingtheviewportmetatag,usingrelativeunits,stylingfromsmallscreensup,optimizingtypographyandtouchtargets.First,addtocontrolscaling.Second,use%,em,orreminsteadofpixelsforflexiblelayouts.Third,writebasestylesformobile,the

如何創建本質上響應的網格佈局? 如何創建本質上響應的網格佈局? Jul 02, 2025 am 01:19 AM

要創建內在響應式網格佈局,核心方法是使用CSSGrid的repeat(auto-fit,minmax())模式;1.設置grid-template-columns:repeat(auto-fit,minmax(200px,1fr))讓瀏覽器自動調整列數並限制每列最小和最大寬度;2.使用gap控制格子間距;3.容器應設為相對單位如width:100%、配合box-sizing:border-box避免寬度計算錯誤並用margin:auto居中;4.可選設置行高與內容對齊方式提升視覺一致性,如row

如何將整個網格集中在視口中? 如何將整個網格集中在視口中? Jul 02, 2025 am 12:53 AM

要讓整個網格佈局在視口中居中顯示,可通過以下方法實現:1.使用margin:0auto實現水平居中,需設定容器固定寬度,適用於固定佈局;2.利用Flexbox在外層容器設置justify-content和align-items屬性,結合min-height:100vh可實現垂直和水平居中,適合全屏展示場景;3.直接使用CSSGrid的place-items屬性在父容器上快速居中,簡潔且現代瀏覽器支持良好,同時需確保父容器有足夠高度。每種方式均有適用場景和限制,根據實際需求選擇合適的方案即可。

CSS中使用@supports的功能檢測是什麼? CSS中使用@supports的功能檢測是什麼? Jul 02, 2025 am 01:14 AM

prainuredetectionIncsssusissuse@supportScheckSifabRowsEsuppecifortSupecifortEfeatureBeforeApplyingReplyingStyles.1.itusesconditionalcsssssbasssbasedonproperty-valueperty-valuepairs,suessas@supports@supports@supports@supports(display:grid)

解決CSS瀏覽器兼容性問題和前綴 解決CSS瀏覽器兼容性問題和前綴 Jul 07, 2025 am 01:44 AM

處理CSS瀏覽器兼容性和前綴問題需理解瀏覽器支持差異並合理使用廠商前綴。 1.了解常見問題如Flexbox、Grid支持不一,position:sticky失效,動畫表現不同;2.查閱CanIuse確認特性支持情況;3.正確使用-webkit-、-moz-、-ms-、-o-等廠商前綴;4.推薦使用Autoprefixer自動添加前綴;5.安裝PostCSS並配置browserslist指定目標瀏覽器;6.構建時自動處理兼容性;7.老項目可用Modernizr檢測特性;8.不必追求所有瀏覽器一致,確

See all articles