記一次項目中的css樣式復用

来源:http://www.cnblogs.com/submerge/archive/2016/01/30/5172036.html
-Advertisement-
Play Games

本文同步至微信公眾號:http://mp.weixin.qq.com/s?__biz=MzAxMzgwNDU3Mg==&mid=401616238&idx=1&sn=3c6e965283c632e9035875be43e6a305&scene=0#wechat_redirect 二維碼: 一直覺得c


本文同步至微信公眾號:http://mp.weixin.qq.com/s?__biz=MzAxMzgwNDU3Mg==&mid=401616238&idx=1&sn=3c6e965283c632e9035875be43e6a305&scene=0#wechat_redirect

二維碼:

一直覺得css是一個不被重視,或者說是重視不夠的飯後甜點。因為它太“簡單”,門檻低,不能彰顯或提升廣大悶騷程式猿的逼格。。。一直都想聊聊css相關的一些雜碎。正好借最近的一次項目實踐來侃侃css。

    玉伯曾發文章做過類似的比喻說:“css就像語文。大家都認識漢字,也都會寫漢字,但是也只有那些牛逼的作家才能寫出優秀的文章,而我們卻不能”。也就是說css易學難用。一個項目隨著頁面的增多,css的代碼數量也可能直線飆升。不僅載入起來比較慢,對維護的人來說,也不確定這些代碼都有什麼地方在用,輕易不敢動。。因此,css樣式復用的重要性就可想而知了。而這個也是新手或對css不夠重視的人欠缺的。。

    上面這些,是不是很虛?不羅嗦了,先上頁面設計圖(一個答題頁面),分析頁面佈局先:

從設計稿上看,最直觀的就是頁面中的每一個問題的樣式是統一的,也就是可以把問題當作一個question模塊進行開發。但是就佈局而言,縱坐標上,這些問題的縱坐標好無規律。怎麼確定這些問題在頁面中的位置呢?私想了一個辦法,看下一張圖:

沒錯,就是把整個頁面拆解成一個一個的格子。私是把每到題放到500*500的格子,這樣,問題就在格子里相對於格子來進行定位,就簡單多了。以上就是頁面的佈局。

    然後是具體的代碼了:

    最開始當然是css reset了,

大家都知道,瀏覽器對於標簽是有預設樣式的。比如a標簽預設是有下劃線,li標簽預設有一個小點等。然而不同的瀏覽器對於這些元素的預設值不盡相同,為了屏蔽瀏覽器對元素預設樣式的差異,我們需要重置部分元素的樣式。可能大家都看過reset.css。那裡面重置的樣式有好多,我覺得完全沒有必要。我的css reset就上面只有上面這些就夠了。我也並不是說別的版本的cssreset就不好。脫離的實際的業務單純的談論某個類庫的好壞,高下都是不可取的。沒有最好的框架,只有最適合自己業務的框架。。

然後是css原子類。所謂的css原子類,入下圖:

為什麼要有這些css原子類呢?一個大型的項目,一些常用的css規則,比如text-align,float,border,positon等有可能出現十幾次,幾十次。。加入我們已經在項目開始的時候就已經定義好了我們的css原子類,那麼在需要左浮動的元素上只需要引入.fl的class就可以了。原來需要出現幾十次的float:left現在只需要出現一次就可以了(理論上是這樣)。從理論上講,只要我們把每個css原子類都定義成一個原子類,那麼我們就可以通過這些原子類的不同組合來完成我們的頁面了。css原子類是跟具體的項目和業務無關的,定義好的css原子類可以應用到任何的項目當中。css樣式分離的確實徹底,其可復用性就越高。就像這些原子類。但是,當一個元素引入的css原子類多起來的時候,那麼這個元素的class的值也會快速膨脹起來。。。我在寫頁面的時候,所能接受的class值得最多的個數是4個。考慮到這個問題呢,就引入了下一個話題,css模塊化。

    通常一個項目一個站點,要考慮到站點整體的風格統一。正式因為風格統一,所以大部分的css樣式都是可以復用的。比如我本次的項目來說,問題就可以看成是一個模塊。問題的html如下

qh是標題,qa是三個選項。最外層的div就是格子,qwrapper相對於格子進行定位。然後定義統一的css樣式。雖然頁面上有十道題,我只需要寫一次html和css.

 

對於每到題目的個性化的樣式用過.question1, .question2等類來實現。說到這裡,其實這個頁面的css樣式就差多多了。實際效果見第一張圖。在開發中除了這種一個區塊看作一個模塊來處理之外,比如頁面中的所有的buton,text也可以看成一個模塊。在需要有button的地方,只需要引入.btn就可以了。就像bootstrap。。。這裡需要註意,定義模塊樣式的時候,只能定義那些穩定的公共的樣式。就文本框而言,有的地方的文本框的寬度是100,有的地方是80,這個時候我們就需要把width從樣式中分離出去。想下麵這樣

.txt {

    height: 30px;

    line-height:30px;

    backgroud:#fff;

    font-size:14px

}

那麼寬度為100的文本就可以寫為:

<text class="txt w100"/>

寬度為80的就可以寫為:

<text class="txt w80"/>

.w100為上文中的原子類.w100 {width: 100px}

通過這種方式把項目中的可復用的區塊進行模塊化。後續開發的時候,只需要引入之前定義好的類庫就行了。假設開發之前,我們已經認真的分析過設計稿。分析過那些組件式公共的,在頁面中重覆出現的。我們就可以開開發初期先開發這些公共的樣式,便於後期復用。剛開始的時候,可能會慢一些,但是越到後期會越輕鬆。

當完成上面的這幾步的時候,理論上一個項目的大部分的css樣式就已經開發完成了。後續再寫頁面的時候,只需要引入我們定義好的類就行。仿佛就像是我們針對自己的項目開發了定製版的"bootstrap"...剩下的就是頁面特有的頁面級的css了。

    考慮到時間和篇幅關係,就不往下寫了。以上是我寫css的套路。私以為,每個人都應該有自己的套路和模式。形成自己的風格。。。以上的都是個人觀點,如果有不對的地方,或者有不同意見的歡迎交流討論哈


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.記憶體地址就是一個編號,這些編號都是連續的,稱作地址。編號對應的記憶體以位元組為單位劃分。 2.記憶體地址的大小與數據匯流排的位數有關 3.記憶體訪問分為:直接訪問和間接訪問 ①直接訪問:直接訪問記憶體單元中的內容 示例: int a = 20 ; 對於直接訪問,a代表存放數據的記憶體單元,通過對a賦值或者取值
  • 1.malloc (1)malloc分配函數:需要給出申請空間大小(以位元組為單位) (2)返回值是一個首地址,用指針接收 (3)使用sizeof計算元素大小 (4)使用malloc函數申請記憶體空間,用完後需要釋放,否則會造成記憶體泄露 (5)釋放函數free需要指向分配記憶體的指針 (6)基本形式:vo
  • 下載jdk-8u71-linux-x64.tar.gz 創建jvm文件夾(/usr/lib/jvm) sudo mkdir /usr/lib/jvm 創建jvm文件夾(/usr/lib/jvm) sudo tar zxvf jdk-8u71-linux-x64.tar.gz -C /usr/lib/
  • Java EE架構一般包含以下幾層: 1、領域對象(Domain Object)層:該層主要是由抽象的對象模型組成(也稱POJO,Plain Old Java Object 普通的、傳統的Java對象),一般包含了各自所需要的業務邏輯方法,通常這些對象模型的狀態要保存在資料庫中,以提供持久化支持;
  • 1,準備工作: windows下虛擬機上安裝centos7,下載putty工具。 2,windows下下載相關的安裝包 jdk-8u71-linux-x64.rpm kafka_2.11-0.9.0.0.tgz zookeeper-3.4.6.tar.gz 3,通過putty的pscp工具將上述3個
  • 工廠顧名思義就是生產商品的,造紙廠生產紙,鞋廠生產鞋,在面向對象的編程思想中,那麼我們這裡設計模式中的簡單工廠就是為我們生產對象的。 在介紹簡單工廠模式之前,我們先來瞭解一下怎麼生產一個商品,以生產筆記本為例,我們怎麼讓一個筆記本生產出來呢,最簡單的方式,就是我們通過實例化的方式,就能產生一個筆記本
  • 2.14 pluck 2.14.1 語法: _.pluck(list, key) 2.14.2 說明: pluck方法根據key對list數組中的每個對象進行檢索,返回檢索成功的屬性值,否則返回undefined,返回一個數組 list為數組和arguments(數組中需要是對象類似:{x: 1})
  • 這章本來準備寫成jQuery的表單操作和表格操作的。 然而昨天吧jQuery的表單操作看完,發現全部在炒之前章節的剩飯,所以就沒寫出來。 那麼今天就來看看表格吧。 因為平常做的都是公司的內部管理系統,所以說數據表格用到的還是比較多的。那麼在這裡寫出來說不定還能用上。 關於jQuery的表格應用 隔行
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...