CSS 性能優化

目錄

  • CSS 性能優化
    • CSS 提高性能的方法
      • 1. 選擇器優化
        • 1.1 選擇器性能原則
        • 1.2 選擇器優化示例
      • 2. 重排(Reflow)和重繪(Repaint)優化
        • 2.1 重排和重繪的概念
        • 2.2 觸發重排的操作
        • 2.3 觸發重繪的操作
        • 2.4 優化重排和重繪的方法
      • 3. 資源優化
        • 3.1 CSS 文件優化
        • 3.2 圖片資源優化
      • 4. 加載優化
        • 4.1 關鍵 CSS 優化
        • 4.2 媒體查詢優化
      • 5. 其他優化建議


CSS 性能優化

CSS 提高性能的方法

1. 選擇器優化

1.1 選擇器性能原則
  • 避免使用通配符和深層次的嵌套選擇器
  • 盡量使用類選擇器,減少使用復雜的選擇器
  • 避免使用標簽選擇器作為關鍵選擇器
  • 減少選擇器的嵌套層級
  • 優先使用類選擇器
  • 避免使用 !important
1.2 選擇器優化示例
/* 不推薦 */
div ul li a span {color: red;
}/* 推薦 */
.nav-link {color: red;
}

2. 重排(Reflow)和重繪(Repaint)優化

2.1 重排和重繪的概念
  • 重排(Reflow):當 DOM 元素的尺寸、結構或某些屬性發生變化時,瀏覽器需要重新計算元素的幾何屬性,將其安放在界面中的正確位置,這個過程稱為重排。
  • 重繪(Repaint):當 DOM 元素的樣式發生變化,但不影響布局時,瀏覽器會重新繪制元素,這個過程稱為重繪。
2.2 觸發重排的操作
  1. 改變元素尺寸

    /* 會觸發重排 */
    element.style.width = '100px';
    element.style.height = '100px';
    element.style.padding = '10px';
    element.style.margin = '10px';
    
  2. 改變元素位置

    /* 會觸發重排 */
    element.style.position = 'absolute';
    element.style.top = '100px';
    element.style.left = '100px';
    
  3. 改變元素內容

    // 會觸發重排
    element.innerHTML = 'new content'
    element.innerText = 'new text'
    
  4. 改變窗口大小

    // 會觸發重排
    window.addEventListener('resize', () => {})
    
2.3 觸發重繪的操作
  1. 改變顏色相關屬性

    /* 只觸發重繪 */
    element.style.color = 'red';
    element.style.backgroundColor = 'blue';
    element.style.borderColor = 'green';
    
  2. 改變透明度

    /* 只觸發重繪 */
    element.style.opacity = '0.5';
    
  3. 改變陰影

    /* 只觸發重繪 */
    element.style.boxShadow = '0 0 10px rgba(0,0,0,0.5)';
    
2.4 優化重排和重繪的方法
  1. 使用 transform 代替位置改變

    /* 不推薦 */
    element.style.left = '100px';
    element.style.top = '100px';/* 推薦 */
    element.style.transform = 'translate(100px, 100px)';
    
  2. 批量修改 DOM

    // 不推薦
    for (let i = 0; i < 100; i++) {element.style.width = i + 'px'
    }// 推薦
    const fragment = document.createDocumentFragment()
    for (let i = 0; i < 100; i++) {const div = document.createElement('div')div.style.width = i + 'px'fragment.appendChild(div)
    }
    document.body.appendChild(fragment)
    
  3. 使用 CSS 類名批量修改樣式

    /* 推薦 */
    .active {background: red;color: white;padding: 10px;margin: 5px;
    }
    
  4. 使用絕對定位脫離文檔流

    /* 推薦 */
    .animation-element {position: absolute;top: 0;left: 0;
    }
    
  5. 使用 CSS3 硬件加速

    /* 推薦 */
    .hardware-accelerated {transform: translateZ(0);/* 或 */backface-visibility: hidden;/* 或 */perspective: 1000;
    }
    

3. 資源優化

3.1 CSS 文件優化
  • 壓縮 CSS 文件
  • 合并多個 CSS 文件
  • 移除未使用的 CSS
  • 使用 CSS 預處理器(Sass/Less)和后處理器(PostCSS)
3.2 圖片資源優化
  • 使用 CSS Sprites 合并圖片
  • 使用字體圖標(Icon Font)代替圖片
  • 使用 SVG 代替位圖
  • 使用 WebP 格式圖片
  • 使用響應式圖片

4. 加載優化

4.1 關鍵 CSS 優化
<!-- 關鍵 CSS 內聯 -->
<style>/* 首屏關鍵樣式 */
</style><!-- 非關鍵 CSS 異步加載 -->
<linkrel="preload"href="non-critical.css"as="style"onload="this.onload=null;this.rel='stylesheet'"
/>
4.2 媒體查詢優化
/* 分離桌面和移動端樣式 */
@media screen and (min-width: 768px) {/* 桌面端樣式 */
}@media screen and (max-width: 767px) {/* 移動端樣式 */
}

5. 其他優化建議

  1. 使用 CSS 變量

    :root {--primary-color: #007bff;--secondary-color: #6c757d;
    }.element {color: var(--primary-color);
    }
    
  2. 使用 CSS Grid 和 Flexbox 布局

    /* 使用 Flexbox */
    .container {display: flex;justify-content: space-between;
    }/* 使用 Grid */
    .grid-container {display: grid;grid-template-columns: repeat(3, 1fr);
    }
    
  3. 使用 will-change 提示瀏覽器

    .will-animate {will-change: transform;
    }
    
  4. 避免使用 @import

    /* 不推薦 */
    @import 'other.css';/* 推薦 */
    <link rel="stylesheet" href="other.css">
    

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/82761.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/82761.shtml
英文地址,請注明出處:http://en.pswp.cn/web/82761.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【JJ斗地主-注冊安全分析報告】

前言 由于網站注冊入口容易被黑客攻擊&#xff0c;存在如下安全問題&#xff1a; 暴力破解密碼&#xff0c;造成用戶信息泄露短信盜刷的安全問題&#xff0c;影響業務及導致用戶投訴帶來經濟損失&#xff0c;尤其是后付費客戶&#xff0c;風險巨大&#xff0c;造成虧損無底洞 …

SON.stringify()和JSON.parse()之間的轉換

1.JSON.stringify() 作用&#xff1a;將對象、數組轉換成字符串 const obj {code: "500",message: "出錯了", }; const jsonString JSON.stringify(obj); console.log(jsonString);//"{"code":"Mark Lee","message"…

MongoDB $type 操作符詳解

MongoDB $type 操作符詳解 引言 MongoDB 是一款流行的開源文檔型數據庫,它提供了豐富的查詢操作符來滿足不同的數據查詢需求。在 MongoDB 中,$type 操作符是一個非常有用的查詢操作符,它允許用戶根據文檔中字段的類型來查詢文檔。本文將詳細介紹 MongoDB 的 $type 操作符,…

RagFlow優化代碼解析(一)

引子 前文寫到RagFlow的環境搭建&推理測試&#xff0c;感興趣的童鞋可以移步&#xff08;RagFlow環境搭建&推理測試-CSDN博客&#xff09;。前文也寫過RagFLow參數配置&測試的文檔&#xff0c;詳見&#xff08;RagFlow環境搭建&推理測試-CSDN博客&#xff09;…

永磁同步電機控制算法--模糊PI轉速控制器

一、原理介紹 在常規的PID控制系統的基礎上提出了一種模糊PID以及矢量變換方法相結合的控制系統&#xff0c;經過仿真分析對比證明&#xff1a; 模糊PID控制系統能夠有效的提高永磁同步電機的轉速響應速度&#xff0c;降低轉矩脈動&#xff0c;增強了整體控制系統的抗干擾能力…

MySQL基本操作(續)

第3章&#xff1a;MySQL基本操作&#xff08;續&#xff09; 3.3 表操作 表是關系型數據庫中存儲數據的基本結構&#xff0c;由行和列組成。在MySQL中&#xff0c;表操作包括創建表、查看表結構、修改表和刪除表等。本節將詳細介紹這些操作。 3.3.1 創建表 在MySQL中&#…

探索未知驚喜,盲盒抽卡機小程序系統開發新啟航

在消費市場不斷追求新鮮感與驚喜體驗的當下&#xff0c;盲盒抽卡機以其獨特的魅力&#xff0c;迅速成為眾多消費者熱衷的娛樂與消費方式。我們緊跟這一潮流趨勢&#xff0c;專注于盲盒抽卡機小程序系統的開發&#xff0c;致力于為商家和用戶打造一個充滿趣味與驚喜的數字化平臺…

89.實現添加收藏的功能的后端實現

實現完查看收藏列表之后&#xff0c;實現的是添加收藏的功能 我的設想是&#xff1a;在對話界面中&#xff0c;如果用戶認為AI的回答非常好&#xff0c;可以通過點擊該回答對應的氣泡中的圖標&#xff0c;對該內容進行添加 所以后端實現為&#xff1a; service類中添加&…

OD 算法題 B卷【猴子吃桃】

文章目錄 猴子吃桃 猴子吃桃 猴子喜歡吃桃&#xff0c;桃園有N棵桃樹&#xff0c;第i棵桃樹上有Ni個桃&#xff0c;看守將在H(>N)小時后回來&#xff1b;猴子可以決定吃桃的速度K(個/小時)&#xff0c;每個小時他會選擇一棵桃樹&#xff0c;從中吃掉K個桃&#xff0c;如果這…

ubuntu 端口復用

需求描述&#xff1a;復用服務器的 80端口&#xff0c;同時處理 ssh 和 http 請求&#xff0c;也就是 ssh 連接和 http 訪問服務器的時候都可以指定 80 端口&#xff0c;然后服務器可以正確分發請求給 ssh 或者 http。 此時&#xff0c;ssh 監聽的端口為 22&#xff0c;而 htt…

Hive中ORC存儲格式的優化方法

優化Hive中的ORC(Optimized Row Columnar)存儲格式可顯著提升查詢性能、降低存儲成本。以下是詳細的優化方法,涵蓋參數配置、數據組織、寫入優化及監控調優等維度: 一、ORC核心參數優化 1. 存儲與壓縮參數 SET orc.block.size=268435456; -- 塊大小(默認256MB)…

Vim 設置搜索高亮底色

在 Vim 中&#xff0c;默認搜索命中會高亮顯示&#xff0c;方便用戶快速定位關鍵字。但有些用戶希望自定義搜索匹配的底色或前景色&#xff0c;以適應不同的配色方案或提高可讀性。本文將詳細介紹如何修改 Vim 的搜索高亮顏色。 一、Vim 搜索高亮機制 Vim 用內置的高亮組&…

【計算機網絡】非阻塞IO——poll實現多路轉接

&#x1f525;個人主頁&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收錄專欄&#x1f308;&#xff1a;計算機網絡 &#x1f339;往期回顧&#x1f339;&#xff1a;【計算機網絡】非阻塞IO——select實現多路轉接 &#x1f516;流水不爭&#xff0c;爭的是滔滔不息 一、…

vscode使用系列之快速生成html模板

一.歡迎來到我的酒館 vscode&#xff0c;yyds! 目錄 一.歡迎來到我的酒館二.vscode下載安裝1.關于vscode你需要知道2.開始下載安裝 三.vscode快速創建html模板 二.vscode下載安裝 1.關于vscode你需要知道 Q&#xff1a;為什么使用vscode? A&#xff1a;使用vscode寫…

【C/C++】不同防止頭文件重復包含的措施

文章目錄 #pragma once vs #ifndef 文件宏1 原理層面區別&#xff08;core&#xff09;2 關鍵區別與優缺點分析3 總結與最佳實踐 #pragma once vs #ifndef 文件宏 在 C/C 中&#xff0c;#pragma once 和傳統的文件宏守衛 (#ifndef HEADER_H #define HEADER_H ... #endif) 都用…

java-springboot文件上傳校驗之只允許上傳excel文件,且檢查不能是腳本或者有害文件或可行性文件

四重驗證機制&#xff1a; 文件擴展名檢查&#xff08;.xlsx/.xls&#xff09;MIME類型檢查文件魔數驗證&#xff08;真實文件類型&#xff09;可執行文件特征檢測 防御措施&#xff1a; 使用try-with-resources確保流關閉限制文件大小防止DoS攻擊使用Apache POI的FileMagic進…

不確定性分析在LEAP能源-環境系統建模中的整合與應用

本內容突出與實例結合&#xff0c;緊密結合國家能源統計制度及《省級溫室氣體排放編制指南》&#xff0c;深入淺出地介紹針對不同級別研究對象時如何根據數據結構、可獲取性、研究目的&#xff0c;構建合適的能源生產、轉換、消費、溫室氣體排放&#xff08;以碳排放為主&#…

高性能分布式消息隊列系統(四)

八、客戶端模塊的實現 客戶端實現的總體框架 在 RabbitMQ 中&#xff0c;應用層提供消息服務的核心實體是 信道&#xff08;Channel&#xff09;。 用戶想要與消息隊列服務器交互時&#xff0c;通常不會直接操作底層的 TCP 連接&#xff0c;而是通過信道來進行各種消息的發布…

QPair 類說明

QPair 類說明 QPair 是一個模板類&#xff0c;用于存儲一對數據項。 頭文件&#xff1a; cpp #include <QPair> qmake 配置&#xff1a; QT core 所有成員列表&#xff08;包括繼承成員&#xff09; 公共類型 類型定義說明first_type第一個元素的類型&#xff…

4.大語言模型預備數學知識

大語言模型預備數學知識 復習一下在大語言模型中用到的矩陣和向量的運算&#xff0c;及概率統計和神經網絡中常用概念。 矩陣的運算 矩陣 矩陣加減法 條件&#xff1a;行數列數相同的矩陣才能做矩陣加減法 數值與矩陣的乘除法 矩陣乘法 條件&#xff1a;矩陣A的列數 矩陣…