為什麼看到有的前端工程師將css每個選擇器里的內容寫成一行?
之前在工作實習的時候發現一個同事將css選擇器內的所有樣式寫成一行(非壓縮),如下圖
問起原因也沒有得到解答,我以為只是個別情況,因為這樣寫真的好反人類後來發現有同學和我吐槽他同事也這樣寫,完全無法溝通.....最近又有人和我說碰到這樣寫css的人.所以好奇為什麼會有人這樣寫?優點是什麼或者原因是什麼?這種情況普遍么?
處女座,忍不住了,說兩句。如果是你一個人單打獨鬥,怎麼寫都行。但我相信大部分人是參與團隊合作的,所以這種寫在一行的模式存在如下幾點弊端:1. 不利於生成有效的 diff,這也是最重要的一點,當然如果你還沒有開始使用 Git 等版本管理工具,那快試試吧。2. 不能快速使用快捷鍵注釋,例如 Sublime Text 中可以使用 Cmd + / 快速注釋一行代碼,無需選中。3. 人眼左右移動是有很大的局限的,這也是為什麼開發使用的顯示器不是越寬越好,通常開源社區約定俗成的是一行 80 個字元。
所以,想要更好的代碼風格,我們可以細分一下:
- 選擇器內只有一個聲明時可以寫在一行。
這樣可以使得代碼顯得更加緊湊,注意保持空格。
h1 { font-size: 32px; }
h2 { font-size: 26px; }
h3 { font-size: 22px; }
- 包含多個前綴的聲明不強制對齊。對齊可以交給編輯器或其他工具來解決。
.selector {
-webkit-transition: .3s ease;
-moz-transition: .3s ease;
-ms-transition: .3s ease;
-o-transition: .3s ease;
transition: .3s ease;
}
- 較長的屬性值推薦放在多行,屬性值開頭保持一級縮進。
@media
only screen and (-o-min-device-pixel-ratio: 2/1), /* Opera */
only screen and (min--moz-device-pixel-ratio: 2), /* Firefox 16 之前 */
only screen and (-webkit-min-device-pixel-ratio: 2), /* WebKit */
only screen and (min-resolution: 192dpi), /* 不支持dppx的瀏覽器 */
only screen and (min-resolution: 2dppx) /* 標準 */
{
.selector {}
}
詳見《CSS 創作指南》GitHub - cssdream/css-creating: CSS創作指南
所謂的快速查找的優勢,你應該使用編輯器自帶的搜索或代碼縮略圖功能。例如 Sublime Text 中可以使用 Cmd + P,然後輸入 @選擇器快速查找並定位代碼。
當然如果你已經在使用 Sass 等預處理工具,根本不存在這些糾結。最後推薦幾個工具:Sublime Text 建議安裝以下幾個 CSS 相關的插件:
- CSS3,比自帶 CSS 語法高亮和提示更加豐富。
- SCSS,高亮 SCSS 語法。
- HTML-CSS-JS Prettify,快速格式化 HTML/CSS/JS。
- Emmet,快速書寫 CSS。
- sublime-perfectionist,我自己弄的一個 Sublime 快速格式化 CSS 的插件,擁有更多自定義配置。yisibl/sublime-perfectionist · GitHub
- 鼓勵使用預處理器的嵌套,但最好不要超過三層,否則生成的選擇器層級過深。
- 使用預處理器有條件的可以開啟 Source Map,特別是複雜一點的多人項目。
自帶混淆功能的代碼
方便整行注釋?然而注釋和修改某個屬性時痛苦死。
我遇到這樣的源碼是要格式化一下才舒服,代碼壓縮由構建工具來做。因為顯示器夠大,這樣寫才過癮
一屏全部放下:
也可以縮進換行寫,即便可以把屏幕立起來看,也得翻兩屏多才能看全。
不喜歡屬性換行的原因是不喜歡看代碼的時候滾滾動條……
一般一個模塊代碼樣式少則幾行,多則十幾行,要是換成換行的,估計就變成至少十幾行,總是上下閱讀累。
另外從左到右閱讀一行代碼習慣了就好,超過一定長度還是會手動換行。寫一行不好的點就是不好快速肉眼檢索屬性……其實吧,最終CSS還是需要壓縮的,如果能夠寫出一行能不亂,也算是快達到了電腦的即視感
壓縮應該交給工具去做,我支持這句話。
寫代碼,應該按照規矩,縮進,注釋一步一步來。偷工減料直接寫成一行不提倡,這是新手的做法,才工作的時候我也是這麼弄的,快速簡便,但是自己維護起來真的要死人:)更別說別人去維護了,我已經改掉了這個壞習慣。現在只要主動寫成一行,我都覺得彆扭。
壓縮歸壓縮,寫歸寫。我一眼掃過去就知道什麼效果了啊,況且大部分都是寫成模塊的,類似這樣
.a{} .a .b{} .a .b .c{} .a .b .d{} .a .b .c .d{}.b{}
.b .c{}.b .c .d{}
這樣模塊化非常清晰,就是粘貼複製起來都省事的多啊。
豎著來才奇怪呢,一個個間距這麼遠,誰知道你們什麼聯繫,而且及其浪費空間。這樣寫舒服啊,我就是這麼寫的。至於看著累,你模塊跟模塊之間寫個注釋不就行了。類似:
/* menu */
.menu li{float:left;padding:4px;}
.menu li a{display:block;color:red;background-color:#fff;}
/* left-nav */
.left-nav li{float:left;padding:4px;}
.left-nav li a{display:block;color:red;background-color:#fff;}
(感覺很舒服很清晰啊)
一行一個樣式,一屏幕就幾個選擇器,寫著不累么?當然,個人愛好,你不喜歡可以先格式化一下嘛。至於說SB么,樓上某位?至於壓縮代碼,那是上線前過一下grunt的事情,而且壓縮後會把注釋,所有的空格都幹掉的。所以代碼是這樣的就是未壓縮的,手寫出來的。有可能是用less自動生成的
我是橫著寫的啊,因為
- 好通過肉眼看選擇符而知道自己在改哪一塊的HTML
- 一般實現某一塊的樣式,這塊樣式也彼此有關聯性,所以彼此有關聯的選擇符放在一起,如果不橫著寫,上下滾來滾去的容易出錯也累啊
我不僅這樣寫,而且寫的時候都是按照從外到內,從布局到文字的順序寫,這樣子寫出來一目了然,找東西也非常方便,不用老是敲回車。
最重要每行一條規則,感覺好浪費屏幕的空間啊。
有人說版本管理中紅了一整行,很難看出哪些地方被修改過,說明對CSS還不夠熟悉,要一個個去找,熟悉的話掃一眼代碼,就能在腦子裡面呈現元素長什麼樣子好嗎
我最開始做前端是這樣子寫,後面寫了一年多換行的方式感覺效率實在太低,於是又改回一行的方式。
而且我寫css的方式是先寫出整個頁面的html結構定好class
然後在CSS文件中寫出所有需要的樣式選擇器:.a{ }.a .b1{ }.a .b2{ }.a .b2 .c{ }最後再去填充具體樣式,這樣子我寫到某個模塊,發現父級缺少某些樣式,一眼就能找到需要的位置,不用來回滾動代碼。
並且不同的模塊之間通過注釋或者兩行空白分割,並沒有感覺到非常亂,反而不同的模塊功能一目了然。
==================================
那些說換行對版本管理不友好的,請問你們寫HTML也要換行嘛???
&
嗯,你們可以這樣寫html
&
該說顯示器太大還是太小,居然只在意這種細節。
——當然從另一個角度說——
該說項目太大還是太小,可以只需要在意這種細節。這絕對是壞習慣難道都不用版本管理么
都寫一行沒什麼,花括弧前後、分號後沒有空格,才叫難受。其實這個例子,用less的nested rules不知多好…
能說這不是好習慣么。這樣寫起來是爽是快,可維護起來呢?其他人查找屬性、改代碼會很費勁。所謂「減小css文件,提高載入速度」的理由也很牽強,不提less或sass,難道寫完的css都不壓縮就直接上嗎?題主是在公司實習不是在自己玩。所謂「查找方便」的優點更不靠譜,難道查代碼定位是靠肉眼?所謂「基本功」的問題也不科學,基本功好的人是精簡合理地使用css屬性,不寫冗餘代碼,類似下面這樣,而不是人工壓縮代碼。如果公司有代碼規範的話,你應該去仔細看看再跟你同事討論,我想大部分應該會像下面這樣:如果公司代碼規範也要求寫成一行,,,那你就這麼寫吧。。補充下:即便真是如此,還是應該去學好的代碼規範和風格,這也是實習的意義。
呃…我也是這樣寫的,而且我沒意識到這樣寫會令人討厭。大哭…我這樣寫的根本原因是為了減少代碼行數,不想打開一個css就要拉很長的滾動條。(這屬於強迫症么?)
提問者問的是為什麼。回答的大多是現在大家的做法。
在sass之類的工具普及很少的時代。這種寫法是很常見的。那種時候寫css不像現在這樣有泛編程概念。寫成一行方便查找,文件小。。
之後的各類後處理工具完善,你再看這樣自然就覺得反常了。不過現在大多數情況下你也不會直接寫css這沒什麼,我剛開始沒用 gulp 的時候都是這樣寫 css,因為可以節約體積,而且在無法嵌套的原生 css 里,這樣的寫法反而更整齊。如果你使用 sass,這樣的書寫格式叫做 compact。
掃了一下現有答案,發現喜歡一行寫過去的,都匿名了。難道是怕被說政治不正確嗎?啊哈~
其實,我發現一個現象,大部分前端偏JS的同學喜歡豎著寫,而大部分前端偏CSS方向的同學喜歡橫著寫。騰訊有個崗位叫『重構工程師』,沒錯,我曾經就是。我以前在騰訊的主要工作內容就是寫HTML+CSS。
以前我們團隊的規範就是要求統一橫著寫。比如這樣:
不僅如此,我們的規範裡面還包含更變態的,寫css時,要先寫布局類css、然後寫表現類css、值比較長的放最後,比如background-image之類的。
想當年,你們在激烈的討論寫js時要不要加分號的問題,我們重構界也在討論css最後一個值要不要加分號。。。囧啊
我個人是比較喜歡一行寫,主要是因為:
1、寫得快。按空格的速度肯定是快過按回車的,因為你的拇指一直都在空格鍵上。2、看得多。一眼可以看到整個模塊、甚至整個頁面的css代碼,一行寫一個css屬性,滾軸要經常來回滾動,效率太低。當然,這個還是看個人習慣和團隊風格,喜歡怎麼寫就怎麼寫唄。
再多說兩句,看到很多同學說寫less。看過非常多的同學在寫less的時候,層級套的太深了,和dom結構一樣,一層套一層,簡直沒法看。
我個人不推崇使用less嵌套,原因很簡單:查找不方面。
舉個栗子,如圖,在調試css的時候,經常會先複製chrome的css選擇器,然後到編輯器里搜,如果嵌套了,就沒法快速定位到你要修改的行了。
最後,安利一下我一直在用的css命名規則,嘔心瀝血,多年行業經驗總結: CSS命名之姓氏命名法推薦閱讀:
※前端開發 全屏向下滾動怎麼設計——豆瓣2015電影案例???
※HTML+CSS有哪些常用的居中方法?
※html布局時,元素塊上下間距,用margin-top還是中間插入一個空元素給定height?