首頁 web前端 css教學 對於能寫出好的CSS程式碼的13個建議

對於能寫出好的CSS程式碼的13個建議

Apr 05, 2017 pm 05:11 PM

CSS學起來並不難,但在大型專案中,就變得難以管理,特別是不同的人在CSS書寫風格上稍有不同,團隊上就更加難以溝通,為此總結了一些如何實現高效整潔的CSS程式碼原則:

#   1. 使用Reset但並非全域Reset

#   不同瀏覽器元素的預設屬性有所不同,使用Reset可重設瀏覽器元素的一些預設屬性,以達到瀏覽器的相容。但要注意的是,請不要使用全域Reset:

*{ margin:0; padding:0; }
登入後複製

  這不僅因為它是緩慢和低效率的方法,而且還會導致一些不必要的元素也重置了外邊距和內邊距。在此建議參考YUI Reset和Eric Meyer的做法。我跟Eric Meyer的觀點相同,Reset並不是一成不變的,具體還需要根據專案的不同需求做適當的修改,以達到瀏覽器的兼容和操作上的便利性。我使用的Reset如下:

/** 清除内外边距 **/
body, h1, h2, h3, h4, h5, h6, hr, p, 
blockquote, /* structural elements 结构元素 */
dl, dt, dd, ul, ol, li, /* list elements 列表元素 */
pre, /* text formatting elements 文本格式元素 */
form, fieldset, legend, button, input, textarea, /* form elements 表单元素 */
th, td, /* table elements 表格元素 */
img/* img elements 图片元素 */{ 
  border:medium none; 
  margin: 0; 
  padding: 0; 
} 
/** 设置默认字体 **/
body,button, input, select, textarea { 
  font: 12px/1.5 '宋体',tahoma, Srial, helvetica, sans-serif; 
} 
h1, h2, h3, h4, h5, h6 { font-size: 100%; } 
em{font-style:normal;} 
/** 重置列表元素 **/
ul, ol { list-style: none; } 
/** 重置超链接元素 **/
a { text-decoration: none; color:#333;} 
a:hover { text-decoration: underline; color:#F40; } 
/** 重置图片元素 **/
img{ border:0px;} 
/** 重置表格元素 **/
table { border-collapse: collapse; border-spacing: 0; }
登入後複製

  2. 良好的命名習慣

  無疑亂七八糟或是無語義命名的代碼,誰看了都會抓狂。就像這樣的程式碼:

.aaabb{margin:2px;color:red;}
登入後複製

  我想即使是初學者,也不至於會在實際專案中如此命名一個class,但有沒有想過這樣的程式碼同樣是很有問題的:

<h1>My name is <span class="red blod">Wiky</span></h1>
登入後複製

  問題在於如果你需要把所有原本紅色的字體改成藍色,那修改後就樣式就會變成:

.red{color:bule;}
登入後複製

  這樣的命名就會很讓人費解,同樣的命名為.leftBar的側邊欄如果需要修改成右側邊欄也會很麻煩。所以,請不要用元素的特性(顏色,位置,大小等)來命名一個class或id,您可以選擇意義的命名如:#navigation{...},.sidebar{...},.postwrap{ ...}

  這樣,無論你如何修改定義這些class或id的樣式,都不影響它跟HTML元素間的連結。

  另外還有一種情況,一些固定的樣式,定義後就不會修改的了,那你命名時就不用擔憂剛剛說的那種情況,如

.alignleft{float:left;margin-right:20px;} 
.alignright{float:right;text-align:right;margin-left:20px;} 
.clear{clear:both;text-indent:-9999px;}
登入後複製

#   那麼對於這樣一個段落

<p class="alignleft">我是一个段落!</p>
登入後複製

  如果需要把這個段落由原先的左對齊修改為右對齊,那麼只需要修改它的className就為alignright就可以了。

  3. 程式碼縮寫

  CSS程式碼縮寫可以提高你寫程式的速度,精簡你的程式碼量。在CSS裡面有不少可以縮寫的屬性,包括margin,padding,border,font,background和顏色值等,如果您學會了程式碼縮寫,原本這樣的程式碼:

li{ 
    font-family:Arial, Helvetica, sans-serif; 
    font-size: 1.2em; 
    line-height: 1.4em; 
    padding-top:5px; 
    padding-bottom:10px; 
    padding-left:5px; 
}
登入後複製

  就可以縮寫為:

li{ 
    font: 1.2em/1.4em Arial, Helvetica, sans-serif; 
    padding:5px 0 10px 5px; 
}
登入後複製

  如果您想更了解這些屬性要怎麼縮寫,可以參考《常用CSS縮寫語法總結》或下載CSS-Shorthand-Cheat-Sheet.pdf 。

  4. 利用CSS繼承

  如果頁面中父元素的多個子元素使用相同的樣式,那麼最好把他們相同的樣式定義在其父元素上,讓它們繼承這些CSS樣式。這樣你可以很好的維護你的程式碼,也可以減少程式碼量。那麼本來是這樣的程式碼:

#container li{ font-family:Georgia, serif; } 
#container p{ font-family:Georgia, serif; } 
#container h1{font-family:Georgia, serif; }
登入後複製

就可以簡寫成:

#container{ font-family:Georgia, serif; }
登入後複製

  5. 使用多重選擇器

  你可以合併多個CSS選擇器為一個,如果他們有共同的樣式的話。這樣做不但程式碼簡潔且可為你節省時間和空間。如:

h1{ font-family:Arial, Helvetica, sans-serif; font-weight:normal; } 
h2{ font-family:Arial, Helvetica, sans-serif; font-weight:normal; } 
h3{ font-family:Arial, Helvetica, sans-serif; font-weight:normal; }
登入後複製

  可以合併為

h1, h2, h3{ font-family:Arial, Helvetica, sans-serif; font-weight:normal; }
登入後複製

  6. 適當的程式碼註解

  程式碼註釋可以讓別人更容易讀懂你的程式碼,且合理的組織程式碼註釋,使得結構更加清晰。你可以選擇所做的樣式表的開始新增目錄:

/*------------------------------------ 
    1. Reset 
    2. Header 
    3. Content 
    4. SideBar 
    5. Footer 
  ----------------------------------- */
登入後複製

  如此你程式碼的結構就一目了然,你可以輕鬆的尋找和修改程式碼。

  而對於程式碼的主內容,也應適當的加以劃分,甚至在有必要的地方在對程式碼加以註解說明,這樣也有利於團隊開發:

/***    Header  ***/ 
#header{ height:145px; position:relative; } 
#header h1{ width:324px; margin:45px 0 0 20px; float:left;  height:72px;} 
  
/***    Content ***/
#content{ background:#fff; width:650px; float:left; min-height:600px; overflow:hidden;} 
#content h1{color:#F00}/* 设置字体颜色 */
#content .posts{ overflow:hidden; } 
#content .recent{ margin-bottom:20px; border-bottom:1px solid #f3f3f3; position:relative; overflow:hidden; } 
  
/***    Footer  ***/
#footer{ clear:both; padding:50px 5px 0; overflow:hidden;} 
#footer h4{ color:#b99d7f; font-family:Arial, Helvetica, sans-serif; font-size:1.1em; }
登入後複製

  7. 給你的CSS程式碼排序

#   如果程式碼中的屬性都能按照字母排序,那麼尋找修改的時候就能更加快速:

/*** 样式属性按字母排序 ***/
p{ 
    background-color:#3399cc; 
    color:#666; 
    font:1.2em/1.4em Arial, Helvetica, sans-serif; 
    height:300px; 
    margin:10px 5px; 
    padding:5px 0 10px 5px; 
    width:30%; 
    z-index:10; 
}
登入後複製

  8. 保持CSS的可讀性

#   書寫可讀的CSS將會使得更容易找到和修改樣式。對於以下兩種情況,哪種可讀性較高,我想不言而明。

/*** 每个样式属性写一行 ***/
p{ 
    background-color:#3399cc; 
    color:#666; 
    font: 1.2em/1.4em Arial, Helvetica, sans-serif; 
    height:300px; 
    margin:10px 5px; 
    padding:5px 0 10px 5px; 
    width:30%; 
    z-index:10; 
} 
  
/*** 所有的样式属性写在同一行 ***/
p{ background-color:#3399cc; color:#666; font: 1.2em/1.4em Arial, Helvetica, sans-serif;  height:300px; margin:10px 5px; padding:5px 0 10px 5px; width:30%; z-index:10; }
登入後複製

  當對於一些樣式屬性較少的選擇器,我會寫到一行:

/*** 选择器属性少的写在同一行 ***/
p{ background-color:#3399cc; color:#666;}
登入後複製

  對於這個規則並非硬性規定,但無論您採用哪種寫法,我的建議是始終保持代碼一致。屬性多的分行寫,屬性少於3個可以寫一行。

  9. 選擇更優的樣式屬性值

#   CSS中有些屬性採用不同的屬性值,雖然達到的效果差不多,當性能上卻存在著差異,如

  区别在于border:0把border设为0px,虽然在页面上看不见,但按border默认值理解,浏览器依然对border-width/border-color进行了渲染,即已经占用了内存值。

  而border:none把border设为“none”即没有,浏览器解析“none”时将不作出渲染动作,即不会消耗内存值。所以建议使用border:none;

  同样的,display:none隐藏对象浏览器不作渲染,不占用内存。而visibility:hidden则会。

  10. 使用代替@import

  首先,@import不属于XHTML标签,也不是Web标准的一部分,它对于较早期的浏览器兼容也不高,并且对于网站的性能有某些负面的影响。具体可以参考《高性能网站设计:不要使用@import》。所以,请避免使用@import

  11. 使用外部样式表

  这个原则始终是一个很好的设计实践。不单可以更易于维护修改,更重要的是使用外部文件可以提高页面速度,因为CSS文件都能在浏览器中产生缓存。内置在HTML文档中的CSS则会在每次请求中随HTML文档重新下载。所以,在实际应用中,没有必要把CSS代码内置在HTML文档中:

<style type="text/css" > 
    #container{ .. } 
    #sidebar{ .. } 
</style>
登入後複製

<li style="font-family:Arial, helvetica, sans-serif; color:#666; " >
登入後複製

  而是使用导入外部样式表:

<link rel="stylesheet" type="text/css" href="css/styles.css" />
登入後複製

  12. 避免使用CSS表达式(Expression)

  CSS表达式是动态设置CSS属性的强大(但危险)方法。Internet Explorer从第5个版本开始支持CSS表达式。下面的例子中,使用CSS表达式可以实现隔一个小时切换一次背景颜色:

background-color: expression( (new Date()).getHours()%2 ? "#B8D4FF" : "#F08A00" );
登入後複製

  如上所示,expression中使用了JavaScript表达式。CSS属性根据JavaScript表达式的计算结果来设置。

  表达式的问题就在于它的计算频率要比我们想象的多。不仅仅是在页面显示和缩放时,就是在页面滚动、乃至移动鼠标时都会要重新计算一次。给CSS表达式增加一个计数器可以跟踪表达式的计算频率。在页面中随便移动鼠标都可以轻松达到10000次以上的计算量。

  如果必须使用CSS表达式,一定要记住它们要计算成千上万次并且可能会对你页面的性能产生影响。所以,在非不得已,请避免使用CSS表达式。

  13. 代码压缩

   当你决定把网站项目部署到网络上,那你就要考虑对CSS进行压缩,出去注释和空格,以使得网页加载得更快。压缩您的代码,可以采用一些工具,如YUI Compressor

  利用它可精简CSS代码,减少文件大小,以获得更高的加载速度。

  14. 总结

  在本文中,我力图更详尽的总结书写更高效的CSS代码的原则,但鉴于本人见识和精力有限,我还是希望这些原则能帮助您更好的书写和管理您的CSS代码,不知您又是如何书写CSS的,是否也有一些想要分享的技巧?给我留言吧谢谢~

以上是對於能寫出好的CSS程式碼的13個建議的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

熱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 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

如何使用C#編寫布隆過濾器演算法 如何使用C#編寫布隆過濾器演算法 Sep 21, 2023 am 10:24 AM

如何使用C#編寫布林過濾器演算法布隆過濾器(BloomFilter)是一種空間效率非常高的資料結構,可以用來判斷一個元素是否屬於集合。它的基本思想是透過多個獨立的雜湊函數將元素映射到一個位數組中,並將對應位數組的位元標記為1。當判斷一個元素是否屬於集合時,只需要判斷對應位數組的位是否都為1,如果有任何一位為0,則可以判定元素不在集合中。布隆過濾器具有快速查詢和

編寫C語言中計算冪函數的方法 編寫C語言中計算冪函數的方法 Feb 19, 2024 pm 01:00 PM

如何在C語言中編寫乘方函數乘方(exponentiation)是數學中常用的運算,表示將一個數自乘若干次的操作。在C語言中,我們可以透過寫一個乘方函數來實現這個函數。以下將詳細介紹如何在C語言中編寫乘方函數,並給出具體的程式碼範例。確定函數的輸入和輸出乘方函數的輸入通常包含兩個參數:底數(base)和指數(exponent),輸出為計算得到的結果。因此,我們

如何使用C#撰寫動態規劃演算法 如何使用C#撰寫動態規劃演算法 Sep 20, 2023 pm 04:03 PM

如何使用C#撰寫動態規劃演算法摘要:動態規劃是求解最最佳化問題的常用演算法,適用於多種場景。本文將介紹如何使用C#編寫動態規劃演算法,並提供具體的程式碼範例。一、什麼是動態規劃演算法動態規劃(DynamicProgramming,簡稱DP)是一種用來求解具有重疊子問題和最優子結構性質的問題的演算法想法。動態規劃將問題分解成若干個子問題來求解,透過記錄每個子問題的解,

如何使用C++編寫一個簡單的飯店預約系統? 如何使用C++編寫一個簡單的飯店預約系統? Nov 03, 2023 am 11:54 AM

飯店預訂系統是一種重要的資訊管理系統,它可以幫助飯店實現更有效率的管理和更良好的服務。如果你想學習如何使用C++來編寫一個簡單的飯店預訂系統,那麼這篇文章將為您提供一個基本的框架和詳細的實作步驟。飯店預訂系統的功能需求在開發飯店預訂系統之前,我們需要確定其實現的功能需求。一個基本的飯店預訂系統至少需要實現以下幾個功能:(1)客房資訊管理:包括客房類型、房間號碼、房

如何使用C++寫一個簡單的學生選課系統? 如何使用C++寫一個簡單的學生選課系統? Nov 02, 2023 am 10:54 AM

如何使用C++寫一個簡單的學生選課系統?隨著科技的不斷發展,電腦程式設計成為了一種必備的技能。而在學習程式設計的過程中,一個簡單的學生選課系統可以幫助我們更好地理解和應用程式語言。在本文中,我們將介紹如何使用C++來寫一個簡單的學生選課系統。首先,我們需要先明確這個選課系統的功能和需求。一個基本的學生選課系統通常包含以下幾個部分:學生資訊管理、課程資訊管理、選

如何透過C++寫一個簡單的掃雷遊戲? 如何透過C++寫一個簡單的掃雷遊戲? Nov 02, 2023 am 11:24 AM

如何透過C++寫一個簡單的掃雷遊戲?掃雷遊戲是一款經典的益智類遊戲,它要求玩家根據已知的雷區佈局,在沒有踩到地雷的情況下,揭示所有的方塊。在這篇文章中,我們將介紹如何使用C++來寫一個簡單的掃雷遊戲。首先,我們需要定義一個二維陣列來表示掃雷遊戲的地圖。數組中的每個元素可以是一個結構體,用於儲存方塊的狀態,例如是否揭示、是否有雷等資訊。另外,我們還需要定義

如何用Python寫KNN演算法? 如何用Python寫KNN演算法? Sep 19, 2023 pm 01:18 PM

如何用Python寫KNN演算法? KNN(K-NearestNeighbors,K近鄰演算法)是一種簡單而常用的分類演算法。它的思想是透過測量不同樣本之間的距離,將測試樣本分類到最近的K個鄰居。本文將介紹如何使用Python編寫並實作KNN演算法,並提供具體的程式碼範例。首先,我們需要準備一些數據。假設我們有一組二維的資料集,每個樣本都有兩個特徵。我們將資料集分

如何使用C#寫二分查找演算法 如何使用C#寫二分查找演算法 Sep 19, 2023 pm 12:42 PM

如何使用C#編寫二分查找演算法二分查找演算法是一種高效率的查找演算法,它在有序數組中尋找特定元素的位置,時間複雜度為O(logN)。在C#中,我們可以透過以下幾個步驟來編寫二分查找演算法。步驟一:準備資料首先,我們需要準備一個已經排好序的陣列作為尋找的目標資料。假設我們要在陣列中尋找特定元素的位置。 int[]data={1,3,5,7,9,11,13

See all articles