管理Sass項目文件結構

http://www.w3cplus.com/preprocessor/architecture-sass-project.html

?

編輯推薦:?掘金是一個高質量的技術社區,從 CSS 到 Vue.js,性能優化到開源類庫,讓你不錯過前端開發的每一個技術干貨。?點擊鏈接查看最新前端內容,或到各大應用市場搜索「?掘金」下載APP,技術干貨盡在掌握中。

本文由大漠根據Hugo Giraudel的《Architecture for a Sass Project》所譯,整個譯文帶有我們自己的理解與思想,如果譯得不好或有不對之處還請同行朋友指點。如需轉載此譯文,需注明英文出處:http://www.sitepoint.com/architecture-sass-project。

——作者:Hugo Giraudel

——譯者:大漠

回想起來,我們以前做的事情主要是圍繞著CSS打轉。你是否還記得,你曾徹夜不眠的在努力寫CSS。Year!寫了上千行的代碼——通常是寫得不好——為了解決一些IE的bug,或者為了找到一個屬性值,我們不得不努力去尋找這樣的一個值。

我的小伙伴們,那些苦逼的日子就將過去了。CSS處理變得更有趣,也更復雜。現在我們有CSS預處理器、響應式設計、漸進增強、優雅降級,和其他一些時尚的東西。可以說,CSS變得比以往任何時候都更加強大。

CSS變得更有趣,更復雜。——@Hugo Giraudel

所以我們有很多東西需要處理,這樣一來,如何組織項目文件就變得非常的重要。我想大家都同意這樣的觀點,但實現起來并不太容易。所以我寫了這篇文章,將會告訴你應該怎么去想,比告訴你怎么做要更好,否則,我就離開你了。

構建你的結構體系

CSS預處理器的特點之一是可以把你的代碼分割成很多個文件,而且不會影響性能。這都要歸功于Sass的@import命令,只要在你的開發環境下,你調用不管多少文件,最終將編譯出一個CSS樣式文件。

多個文件中開發,最終合并輸出一個文件。——@Bruce Lee

開始將你的CSS文件分割成多個文件和文件夾。正如我的一位導師說的“任何事物都有其正確的地方,每個地方都有其正確的事”。那么,這也是我喜歡做的事。

文件夾構建

文件夾的創建是必不可少的。就算在家里,你也不會把所有的紙張放在一個盒子里。你可能會使用一個文件夾。一個用于房子上,一個用于銀行,一個用于賬單等等。

你在創建CSS的架構的時候也應該如此:你不只是把所有的Sass文件放在一個文件夾下,你會將他們分類。

下面的示例屏示的是我將如何組織我的Sass文件:

sass/ 
| 
|– base/ 
|   |– _reset.scss       # Reset/normalize 
|   |– _typography.scss  # Typography rules 
|   ...                  # Etc… 
| 
|– components/ 
|   |– _buttons.scss     # Buttons | |– _carousel.scss # Carousel | |– _cover.scss # Cover | |– _dropdown.scss # Dropdown | |– _navigation.scss # Navigation | ... # Etc… | |– helpers/ | |– _variables.scss # Sass Variables | |– _functions.scss # Sass Functions | |– _mixins.scss # Sass Mixins | |– _helpers.scss # Class & placeholders helpers | ... # Etc… | |– layout/ | |– _grid.scss # Grid system | |– _header.scss # Header | |– _footer.scss # Footer | |– _sidebar.scss # Sidebar | |– _forms.scss # Forms | ... # Etc… | |– pages/ | |– _home.scss # Home specific styles | |– _contact.scss # Contact specific styles | ... # Etc… | |– themes/ | |– _theme.scss # Default theme | |– _admin.scss # Admin theme | ... # Etc… | |– vendors/ | |– _bootstrap.scss # Bootstrap | |– _jquery-ui.scss # jQuery UI | ... # Etc… | | `– main.scss # primary Sass file 

正如你所看到的,在根目錄底下只有一個main.scss文件,其他.scss文件都根據不同的分類放在對應的文件夾中,只是這些.scss文件前面都有一個下劃線(_),用來告訴Sass,這些.scss文件只是局部,不通過@import是不應該被編譯出.css文件。事實上,它們是導入和合并文件的基本文件而以。

一個文件可以解決所有問題,一個文件可以找到他們,一個文件給他們帶來了所有的一切,Sass只是將他們合并在一起。——@J.R.R. Tolkien

接下來,我們依次來看結構中的每一個文件目錄。

Base

base/文件夾包含了一些有關于你的項目中一些模板相關。在這里,你可以看到reset樣式(或者Normalize.css,或者其他),也有一些關于文本排版方面的,當然根據不同的項目會有一些其他的文件。

  • _reset.scss_normalize.scss
  • _typography.scss

Helpers

helpers/文件夾(有的地方也稱其為utils/)主要包含了項目中關于Sass的工具和幫助之類。在里面放置了我們需要使用的_function.scss,和_mixin.scss。在這里還包含了一個_variables.scss文件(有的地方也稱其為_config.scss),這里包含項目中所有的全局變量(比如排版本上的,配色方案等等)。

  • _variables.scss
  • _mixin.scss
  • _function.scss
  • _placeholders.scss(也有稱為_helpers.scss)

Layout

layout/文件夾(有時也稱為partials/)中放置了大量的文件,每個文件主要用于布局方面的,比如說"header",“footer”等。他也會包括_grid.scss文件,用來創建網格系統。

  • _grid.scss
  • _header.scss
  • _footer.scss
  • _sidebar.scss
  • _forms.scss

導航文件(_navigation.scss)文件放在這里也有意義,雖然我將他放在了components/文件夾中。但是我想將其放在layout/文件夾中更好些,當然最后還是由你自己來決定。

Components

對于一些小組件,都放在了components/文件夾(通常也稱為modules/),layout/是一個宏觀的(定義全局的線框),components/是一個微觀的。它里面放了一些特定的組件,比如說sliderloadingwidget或者其他的小組件。通常components/目錄下的都是一些小組件文件。

  • _media.scss
  • _carousel.scss
  • _thumbnails.scss

Page

如果你需要針對一些頁面寫特定的樣式,我想將他們放在page/文件夾中是非常酷的,并且以頁面的名稱來命名。例如,你的首頁需要制作一個特定的樣式,那么你就可以在page/文件夾中創建一個名叫_home.scss文件。

  • _home.scss
  • _contact.scss

根據你自己的布署,你可以根據自己的需求調用這些文件,避免與其他樣式文件合并在一起。這真的主取決于你自己,在我工作的地方,我是不允許這樣的事情發生,只在需要的頁面調用需要的文件。比如說,我們首頁有一個特定的布局樣式,編譯出來的CSS大約有200行代碼。為了防止每個頁面加載這些代碼,我只在主頁文件上引用這個文件。

Themes

如果你像我一樣要為一個大型的網站制作多個主題,那么有一個theme/文件夾是非常有意義的。你可以把主題相關的文件放在這個文件夾中。這絕對跟具體的項目有關,你只要覺得跟主題相關的,有必要引入。

  • _theme.scss
  • _admin.scss

Vendors

最后一個但并非不重要,創建vendors/文件夾,主要用來包含來自外部的庫和框架的CSS文件。比如Bootstrap,jQueryUI,FancyCarouselSliderjQueryPowered等等。把這些文件放在同一個文件夾中,你可以說,嘿,這些代碼不是我的,不是我寫的,跟我無關。

例如:

  • bootstrap.scss
  • jquery-ui.scss
  • select2.scss

從另一個角度來說,在我平時工作中,還創建了一個vendors-extensions/文件夾,用來放置一些覆蓋從外部引入進來的庫和框架中的小組件。例如,我們可以在_bootstrap.scss文件中用來覆蓋Bootstrap框架中的一些小組件。這為了避免和外部直接引來的組件升級造成的沖突,或許這不是一個很好的方案。

大致就是這些,但不同的項目可能會不一樣,但我可以肯定,你們都有了這樣的一個概念。在文件夾中嵌套一個文件夾,這樣的做法我一直不太反對,但我不太喜歡這樣的方式。我發現,在大多數情況之下,只需一個層級就足足夠,既保證結構的簡潔與清晰,而且不復雜。但話又說回來,如果你覺得你的項目有必要嵌套更深層次的文件夾,你也可以自由的發揮。

溫馨提示:如果你覺得你的架構并不能向大家說明SCSS文件夾的架構,你可以在根目錄下創建一個README.md文件(或者在main.scss文件中一步一步說明)解釋。

文件很酷?

有一個問題常被人問到“多少文件才算是很多文件呢?”我常回答“再多文件都不算多”。拆分成多個文件的宗旨是幫助你組織你的代碼。如果你覺得某事值得拆分成多個文件,可以自由的拆分。正如CHRIS COYIER在《Sass Style Guide》中所說:

拆分成盡可能多的小文件是有道理的。——@CHRIS COYIER

不過,我建議不把單個組件拆分成多個文件,除非你有很好的理由這樣做。通常我更傾向于一個組件一個文件。俗話說“沒有更多,只有更少”。用一個簡潔語義化的名稱,用來表示模塊的名稱。這樣我們就可以通過查找名稱找到你需要的東西。

總結

本文所有內容都是基于我當年在法國Crédit Agricole銀行做前端(唯一一前端)的工作經驗。針對于各人,有各自的情況和經驗,可以有不同的方法。

如果我們能給構建一個Sass項目挑選一個黃金法則,它可能會簡單一些:就如撿東西的一個道理。如果做為一個團隊,項目的結構要確認每個人用得都舒服,讓大家都要知道是怎么一回事。

你對構建Sass項目架構有任何想法和建議,我們都非常想聽聽。

能力越大,責任越大。——@Aquaman

譯者手語:整個翻譯依照原文線路進行,并在翻譯過程略加了個人對技術的理解。如果翻譯有不對之處,還煩請同行朋友指點。謝謝!

如需轉載煩請注明出處:

英文原文:http://www.sitepoint.com/architecture-sass-project

中文譯文:http://www.w3cplus.com/preprocessor/architecture-sass-project.html

著作權歸作者所有。
商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
原文:?http://www.w3cplus.com/preprocessor/architecture-sass-project.html???w3cplus.com

轉載于:https://www.cnblogs.com/zaifeng0108/p/7226514.html

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

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

相關文章

Spring—注解開發

Spring原始注解 Spring是輕代碼而重配置的框架,配置比較繁重,影響開發效率,所以注解開發是一種趨勢,注解代替xml配置文 件可以簡化配置,提高開發效率。 Component 使用在類上用于實例化BeanController 使用在web層類…

政府公開數據可視化_公開演講如何幫助您設計更好的數據可視化

政府公開數據可視化What do good speeches and good data visualisation have in common? More than you may think.好的演講和好的數據可視化有什么共同點? 超出您的想象。 Aristotle — the founding father of all things public speaking — believed that th…

C++字符串完全指引之一 —— Win32 字符編碼 (轉載)

C字符串完全指引之一 —— Win32 字符編碼原著:Michael Dunn翻譯:Chengjie Sun 原文出處:CodeProject:The Complete Guide to C Strings, Part I 引言  毫無疑問,我們都看到過像 TCHAR, std::string, BSTR 等各種各樣…

網絡計算機無法訪問 請檢查,局域網電腦無法訪問,請檢查來賓訪問帳號是否開通...

局域網電腦無法訪問,有時候并不是由于網絡故障引起的,而是因為自身電腦的一些設置問題,例如之前談過的網絡參數設置不對造成局域網電腦無法訪問。今天分析另一個電腦設置的因素,它也會導致局域網電腦無法訪問,那就是賓…

unity中創建游戲場景_在Unity中創建Beat Em Up游戲

unity中創建游戲場景Learn how to use Unity to create a 3D Beat Em Up game in this full tutorial from Awesome Tuts. 在Awesome Tuts的完整教程中,了解如何使用Unity來創建3D Beat Em Up游戲。 This tutorial covers everything you need to know to make a …

雷軍的金山云D輪獲3億美元!投后估值達19億美金

12月12日,雷軍旗下金山云宣布D輪完成3億美元融資,金額為云行業單輪融資最高。至此金山云投后估值達到19億美元,成為國內估值最高的獨立云服務商。金山集團相關公告顯示,金山云在本輪融資中總計發行3.535億股D系列優先股。驪悅投資…

轉:利用深度學習方法進行情感分析以及在海航輿情云平臺的實踐

http://geek.csdn.net/news/detail/139152 本文主要為大家介紹深度學習算法在自然語言處理任務中的應用——包括算法的原理是什么,相比于其他算法它具有什么優勢,以及如何使用深度學習算法進行情感分析。 原理解析 在講算法之前,我們需要先剖…

消費者行為分析_消費者行為分析-是否點擊廣告?

消費者行為分析什么是消費者行為? (What is Consumer Behavior?) consumer behavior is the study of individuals, groups, or organizations and all the activities associated with the purchase, use, and disposal of goods and services, and how the consu…

Spring—集成Junit

Spring集成Junit步驟 ①導入spring集成Junit的坐標 ②使用Runwith注解替換原來的運行期 ③使用ContextCon?guration指定配置文件或配置類 ④使用Autowired注入需要測試的對象 ⑤創建測試方法進行測試 ①導入spring集成Junit的坐標 <dependency> <groupId>org.s…

計算機的微程序存放在dram,計算機組成與結構

計算機組成與結構A/B卷填空1. 原碼一位乘法中&#xff0c;符號位與數值位(分開計算)&#xff0c;運算結果的符號位等于(相乘兩數符號位的異或值)。2. 微程序&#xff0c;微指令只存放在只讀存儲器中。3. 輔助磁道被分為若干個扇區4. 總線數據傳輸方式&#xff1a;_串行_,_并行_…

python算法面試_求職面試的Python算法

python算法面試During software job interviews, candidates often have to solve algorithm challenges. In this video from CupOfCode01, you will learn about common algorithm concepts in Python and how to solve algorithm challenges you may encounter in an interv…

vue實用難點講解

此篇文章是我基于研究vue文檔三遍的基礎上&#xff0c;覺得還有點難理解或者難記的知識點總結 列表渲染 1.渲染組件必須加key&#xff0c;并且屬性是手動傳遞給組件的<my-componentv-for"(item, index) in items"v-bind:item"item"v-bind:index"in…

leetcode 1208. 盡可能使字符串相等(滑動窗口)

給你兩個長度相同的字符串&#xff0c;s 和 t。 將 s 中的第 i 個字符變到 t 中的第 i 個字符需要 |s[i] - t[i]| 的開銷&#xff08;開銷可能為 0&#xff09;&#xff0c;也就是兩個字符的 ASCII 碼值的差的絕對值。 用于變更字符串的最大預算是 maxCost。在轉化字符串時&a…

魅族mx5游戲模式小熊貓_您不知道的5大熊貓技巧

魅族mx5游戲模式小熊貓重點 (Top highlight)I’ve been using pandas for years and each time I feel I am typing too much, I google it and I usually find a new pandas trick! I learned about these functions recently and I deem them essential because of ease of u…

可行性分析報告

1 引言1.1 編寫目的&#xff1a;闡明編寫可行性研究報告的目的&#xff0c;提出讀者對象。1.2 項目背景&#xff1a;應包括● 所建議開發軟件的名稱● 項目的任務提出者、開發者、用戶及實現軟件的單位● 項目與其他軟件或其他系統的關系。1.3 定義&#xff1a;列出文檔中用到的…

(Python的)__ name__中包含什么?

_名稱_變量及其在Python中的用法簡介 (An introduction to the _ _name_ _ variable and its usage in Python) You’ve most likely seen the __name__ variable when you’ve gone through Python code. Below you see an example code snippet of how it may look:通過Pytho…

畢業論文計算機附錄模板,畢業論文格式是什么,附錄又是什么?

畢業論文格式是什么&#xff0c;附錄又是什么?附錄對論文內用起到一個補充說明的作用&#xff0c;附錄應屬于論文的正文&#xff0c;有的論文需要寫明&#xff0c;有的論文可能不需要寫&#xff0c;大多數情況是不需要寫的&#xff0c;附錄的位置一般放在論文的結尾處&#xf…

文件上傳速度查詢方法

由于業務遷移&#xff0c;需要將大量文件拷貝到目標機器上的/mnt目錄&#xff0c;在拷貝過程中&#xff0c;想要查看上傳的速度&#xff0c;做法如下&#xff1a;[rootmail01 ~]# du -sh /mnt5.6G /mnt[rootmail01 ~]# watch -n1 du -sm /mnt/ #會出現下面的一屏現象 …

spring—AOP 的動態代理技術

AOP 的動態代理技術 常用的動態代理技術 JDK 代理 : 基于接口的動態代理技術 cglib 代理&#xff1a;基于父類的動態代理技術 JDK 代理 public class proxy {Testpublic void test() {final ImplDao dao new ImplDao();Dao pro (Dao) Proxy.newProxyInstance(ImplDao.cl…

非常詳細的Django使用Token(轉)

基于Token的身份驗證 在實現登錄功能的時候,正常的B/S應用都會使用cookiesession的方式來做身份驗證,后臺直接向cookie中寫數據,但是由于移動端的存在,移動端是沒有cookie機制的,所以使用token可以實現移動端和客戶端的token通信。 驗證流程 整個基于Token的驗證流程如下: 客戶…