搜尋
首頁web前端css教學CSS程式碼重構詳解

CSS程式碼重構詳解

Jan 31, 2018 am 11:14 AM
css詳解

本文主要介紹CSS程式碼重構,小編覺得蠻不錯的,現在分享給大家,也給大家做個參考。一起跟著小編過來看看吧,希望能幫助大家。

1. 重構與架構

重構是指在不改變程式碼行為的前提下,重寫程式碼,使其更加簡潔、易於重複使用。

架構是指軟體專案的各個不同部件之間的組合方式。

優秀的架構:

  1. 可預測:可以對軟體的工作方式和結構做出準確的假設

  2. #可重複使用:在多處使用相同程式碼,無需重寫

  3. #可擴展:比較容易的增加新內容

  4. #可維護:修改一處程式碼不用大規模的改動其他程式碼

#2. CSS選擇器的優先權

用(a, b, c, d)表示,優先權a>>b>>c>>d,其中:

  1. 有行內style 屬性時,a=1 ,否則a=0

  2. b 為ID 選擇器的數量

  3. c 為類別選擇器、屬性選擇器、偽類別的數量

  4. d 為型別選擇器、偽元素的數量

#(ps:偽類別與偽元素的差異)

!important 優先權最高,可覆蓋行內樣式。不可以加入到行內樣式屬性中。

3. 如何寫優質的CSS

使用註解

註解記錄的內容包括:

  1. 檔案內容

  2. 選擇器的依賴、用法

  3. #使用特定宣告的原因(hack等)

  4. #不應繼續使用的廢棄樣式

/*
* 导航链接样式
*
* @see templates/nav.html
*/
.nav-link {
  ...
}

.nav-link:hover {
  border-bottom: 4px solid #333;
  /* 防止增加了4px下边框导致元素移动 */
  padding-bottom: 0;
}

/* @deprecated */
.nav-link {
  ...
}

保持選擇器的簡單

#
/* 不推荐 */
p > nav > ul > li > a {}
/* 不推荐 */
a.nav-link {}
/* 推荐 */
.nav-link {}

但是並不是任何場景都應遵循該推薦,如下為輸入框的文字和邊框增加樣式。

.error {
  color: #f00;
}
input.error {
  border-color: #f00;
}

分離CSS 和JavaScript

JavaScript 用來選擇元素的類別和ID, 不應該再用來為元素添加樣式。用 JavaScript 修改元素樣式時,應該透過增加和刪除 類別 來實現。

建議在只用於 JavaScript 的類別和 ID 前面加上 js- ,或 ID 只用於 JavaScript 選擇元素,類別用於樣式。

ID和類別名稱要有意義

建立更好的盒子

盒子的尺寸計算方法有content- box 和border-box ,建議在一個專案中堅持使用方法,例如:

*,
*::after,
*::before {
}

(ps: ::after 表示法是在CSS3 中引入的, :: 符號是用來區分偽類和偽元素的。為樣式分類

依用途定義樣式,有助於創建更優秀的架構,因為將樣式組織為不同的類別,促使程式碼可預測性更強,更易於重複使用。

通用樣式

因為不同瀏覽器的預設樣式有些許差別,所以需要通用樣式為各種元素的屬性設定預設值樣式,使其在不同瀏覽器

表現一致。

推薦 Nicolas Gallagher 和 Jonathan Neal 開發的normalize.css,可依照自己的專案適當刪除。

基礎樣式

用類型選擇器和結合符(例如,ul ul表示ul下面的ul)或偽類為 HTML 元素添加更細緻的樣式。例如: color 、 font-family 、 font-size 、 letter-spacing 、 line-height 、 margin 、 padding 等。

HTML 元素可分為:區塊元素、標題和文字元素、錨點元素、文字語意元素、清單、表格、表單等等,不同的元素在基礎樣式的設定上稍有不同,可參考元素基礎樣式表。

元件樣式

元件重要的是可重複使用性,如:按鈕、下拉式選單、模態方塊、選項卡等。

定義需要實現的行為,也就是該元件達到的效果,組織HTML 結構
  1. 為元件裡的元素增加樣式,確保複用性
  2. 根據需要,改寫元素容器的樣式。如確認按鈕,警告按鈕,成功按鈕等,定義元件的容器元素不同的類別名稱
  3. #在元件的父元素中設定
  4. 功能樣式

合理使用!important 定義類別屬性,在JavaScript 操作樣式時使用。如添加下面這個類別來實現元素隱藏:

.hidden {
  display: none !important;
}

#瀏覽器特定樣式

##儘管未來瀏覽器行為趨於統一,但目前一些老的瀏覽器仍然有怪癖行為。我們必須使用一些 hack 的樣式來解決這些怪癖行為,推薦將這些樣式單獨放在一個樣式表中,並用 條件註釋 新增引用。

<!--[if IE 8]>
  <link rel="stylesheet" href="ie8.css" />
<![endif]-->

維護程式碼

#程式碼規格

代码规范是将良好的代码编写方法记录下来形成指南,以鼓励团队所有成员以相同的方法编写代码。规范应定期审阅和更新。CSS 代码规范通常指定了注释、格式、命名、选择器用法等方便的规范。

模式库

模式库是网站使用的一组用户界面模式,将所有组件汇集在一起。好处就是参与项目的成员都能了解到搭建网站的各个模块,熟悉背后的原理,并且有助于保证用户界面的一致性。

推荐几个优秀的模式库:

  1. Mailchimp's Pattern Library

  2. [Carbon Design System](http://carbondesignsystem.com/style/color/swatches)

  3. Code For America

代码的组织和重构策略

按照样式从最不精确到最精确组织 CSS

之前我们为样式分类,现在我们按照产生作用的顺序再来组织一下 CSS 代码:

  1. 通用样式:设定基准,消除不同浏览器之间的不一致性

  2. 基础样式:为网站所有元素提供基本的样式,如颜色、间距、行高、字体等,不需要重写

  3. 组件及容器样式:以上一步的基础样式为基础,用类定义样式

  4. 结构化样式:该样式常用来创建布局,定义尺寸等

  5. 功能样式:最精确的样式,满足单一目的而实现的样式,如警告框样式

  6. 浏览器特定样式

PS:媒体查询要靠近相关声明块,这样做可以为样式是如何起作用的提供更多的背景信息。

重构前审查 CSS

如下审查非常有助于重构:

  1. 所用到的属性列表

  2. 颜色数量

  3. 使用的最高和最低选择器优先级

  4. 选择器长度

CSS Dig 是 Google Chrome 的一款插件,可以帮助获取以上信息。

重构策略

推荐多次小范围重构,避免大范围重构引入错误。

(1)删除僵尸代码:

没有使用的声明块、重复的声明块和声明语句。

(2)分离 CSS 和 JavaScript

(3)分离基础样式

如果一个类型选择器使用过多次,新建一条规则集,找到最常用的属性,添加到新的规则集。从其他规则集删除重复的属性,因为它们可以继承新定义的基础样式。

/* 重构前 */
body > p > h1 {
  color: #000;
  font-size: 32px;
  margin-bottom: 12px;
}

.section-condensed h1 {
  color: #000;
  font-size: 16px;
}

.order-form h1 {
  color: #333;
  text-decoration: underline;
}

/* 重构后 */
h1 {
  color: #000;
  font-family: Helvetica, san-serif;
  font-size: 32px;
  line-height: 1.2;
}

body > p > h1 {
  margin-bottom: 12px;
}

.section-condensed h1 {
  font-size: 16px;
}

.order-form h1 {
  color: #333;
  text-decoration: underline;
}

(4)删除冗余的 ID

/* 不推荐 */
#main-header ul#main-menu {}
/* 推荐 */
#main-menu {}

(5)定义可复用的组件,删除重复的 CSS

(6)删除行内 CSS

相关推荐:

谈一谈PHP的代码重构_PHP教程

推荐五款优秀的PHP代码重构工具

推荐五款优秀的PHP代码重构工具_PHP


以上是CSS程式碼重構詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
每周平台新聞:活動時機,網絡的Google Earth,不死會話cookie每周平台新聞:活動時機,網絡的Google Earth,不死會話cookieApr 19, 2025 am 10:57 AM

在本週的新聞中,Wikipedia有助於識別三個慢單擊處理程序,Google Earth進入網絡,CSS中的SVG屬性獲得了更多的支持,以及在殭屍cookies的情況下該怎麼做。

純CSS的多線截斷純CSS的多線截斷Apr 19, 2025 am 10:50 AM

本文中的訣竅仍然非常整潔又聰明,但是現在有一種標準化的方法可以做到這一點,這可能是您最好的選擇。

CSS動畫庫CSS動畫庫Apr 19, 2025 am 10:46 AM

有很多庫希望幫助您在網絡上進行動畫操作。這些是真正幫助您使用語法或的圖書館

顏色輸入:深入研究跨瀏覽器差異顏色輸入:深入研究跨瀏覽器差異Apr 19, 2025 am 10:40 AM

在本文中,我們將查看內部元素內部的結構,瀏覽器的不一致,為什麼它們在某個瀏覽器中以某種方式看起來

將(偽)元素限製到其父元的邊框框將(偽)元素限製到其父元的邊框框Apr 19, 2025 am 10:39 AM

您是否曾經想確保(偽)元素在其父框架之外沒有顯示任何內容?如果您在想像什麼

烤麵包烤麵包Apr 19, 2025 am 10:30 AM

有一天,突然之間,我開始聽到關於吐司的笑話。我不知道上下文是什麼。我以為一些朋友剛開始講吐司笑話,

使用導航警衛保護VUE路線使用導航警衛保護VUE路線Apr 19, 2025 am 10:29 AM

身份驗證是每個Web應用程序的必要組成部分。這是一種方便的手段,我們可以通過它個性化體驗並加載特定於一個的內容

創建交錯動畫的不同方法創建交錯動畫的不同方法Apr 19, 2025 am 10:28 AM

動畫元素最基本的元素非常簡單。定義密鑰幀。命名動畫。將其稱為元素。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

記事本++7.3.1

記事本++7.3.1

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

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。