JavaScript、CSS 相比,HTML 經(jīng)過三十多年的發(fā)展,似乎逐漸走進無人問津的角落,如何才能讓 HTML 再次回到人們視野的中心。
作者 | Yaser Adel Mehraban
譯者 | 譚開朗,責(zé)編 | 屠敏
出品 | CSDN(ID:CSDNnews)
以下為譯文:
有多少次,身為開發(fā)者的你編寫了一個HTML塊而沒有意識到可能編碼得并不理想?
為什么
HTML一直處于無人問津的角落,因為JavaScript和CSS總是吸引人們的注意力。
請在腦海里先保留這種印象,因為我要用一些簡單的技巧來發(fā)揮作用,讓HTML再次回到人們視野的中心。
以下是創(chuàng)建一目了然、可維護和可擴展的代碼的一些方法,其很好的應(yīng)用了HTML5的語義標(biāo)記元素,并將在支持的瀏覽器中正確呈現(xiàn)。
其緣由就不贅述了,讓我們來看看具體是什么吧。
文檔類型
在index.html的頂部位置,請確保聲明了DOCTYPE。這將在所有瀏覽器中激活標(biāo)準(zhǔn)模式,并告知瀏覽器該如何編譯文檔。請記住DOCTYPE不是HTML元素。
HTML5是這樣的:
<!DOCTYPE html>
注意:如果應(yīng)用了框架,這已預(yù)先寫好。如果沒有,我強烈建議使用像Emmet這樣的代碼片段,它在VS代碼中可用。
想了解更多關(guān)于其他文檔類型的信息嗎?點擊這里查看參考文件:https://html.com/tags/doctype/。
可選標(biāo)簽
有些標(biāo)簽在HTML5中是可選的,主要是因為元素是隱式呈現(xiàn)的。信不信由你,你可以省略<html>標(biāo)簽,而頁面呈現(xiàn)得也很好。
<!DOCTYPE HTML>
<head>
<title>Hello</title>
</head>
<body>
<p>Welcome to this example.</p>
</body>
</html>
上面是一個有效的HTML,但在某些情況下就不能這樣做了。例如標(biāo)簽后面跟著注釋:
<!DOCTYPE HTML>
<!-- where is this comment in the DOM? -->
<head>
<title>Hello</title>
</head>
<body>
<p>Welcome to this example.</p>
</body>
</html>
上面是無效的,因為注釋位于<thml>標(biāo)簽之外,解析樹發(fā)生了更改。
結(jié)束標(biāo)簽
應(yīng)始終記得結(jié)束標(biāo)簽,否則某些瀏覽器在呈現(xiàn)頁面時會出現(xiàn)問題。出于可讀性和其他原因,建議保留這些內(nèi)容,稍后我會詳細介紹。
<div id="example">
<img src="example.jpg" alt="example" />
<a href="#" title="test">example</a>
<p>example</p>
</div>
以上都是有效的標(biāo)簽,但也有一些特例,如下。
自閉合標(biāo)簽是有效的,但不是必需的。這些元素包括:
<br>, <hr>, <img>, <input>, <link>, <meta>,
<area>, <base>, <col>, <command>, <embed>, <keygen>, <param>, <source>, <track>, <wbr>
注意:普通元素永遠不能有自閉合標(biāo)簽。
<title />
上面顯然是無效的。
字符集
預(yù)先定義字符集。最好是將它放在頂部元素中。
<head>
<title>This is a super duper cool title, right ?</title>
<meta charset="utf-8">
</head>
上面是無效的,標(biāo)題無法正確呈現(xiàn)。正確寫法是將字符集移到頂部位置。
<head>
<meta charset="utf-8">
<title>This is a super duper cool title, right ?</title>
</head>
語言
不忽略可選標(biāo)簽的另一個原因是在使用屬性時。在這種情況下,我們應(yīng)該定義web頁面的語言,這對于可訪問性和搜索非常重要。
<html lang="fr-CA">
...
</html>
標(biāo)題
永遠不要忽略標(biāo)題標(biāo)簽,否則可訪問性太差了。我個人就永遠不會使用這樣的網(wǎng)站,因為我剛打開它即刻在20多個頁面后就找不到了(瀏覽器選項卡不會有任何顯示)。
base標(biāo)簽
這是一個非常有用的標(biāo)簽,應(yīng)該謹(jǐn)慎使用。它將設(shè)置應(yīng)用程序的基本URL。一旦設(shè)置好,所有鏈接都將相對于這個基本URL,這可能會導(dǎo)致一些不必要的行為:
<base href="http://www.example.com/" />
通過以上設(shè)置,href="#internal"將被編譯為href=http://www.example.com/#internal。或者href="example.org"將被編譯為href="http://www.example.com/example.org"。
描述
這個meta標(biāo)簽非常有用,盡管嚴(yán)格來說它不是最佳寫法。但在搜索引擎時,這是超級有用的。
<meta name="description" content="HTML best practices">
這有一個帖子“搜索引擎優(yōu)化正盛行”:https://yashints.dev/blog/2019/06/11/seo-tips。
語義標(biāo)簽
雖然可以使用div創(chuàng)建UX工程師的線框,但這并不意味著必須這樣做。語義HTML為頁面提供了意義,而不單純是內(nèi)容顯示。像p、section、h{1-6}、main、nav等標(biāo)簽都是語義標(biāo)簽。如果使用p標(biāo)簽,用戶將知道這表示一段文本,瀏覽器也知道如何展示它們。
語義HTML超出了本文的范圍。但是我們應(yīng)該進行檢查,就好比寫作所用的筆,而我們有鼠標(biāo)。
hr不應(yīng)該用于格式化
<hr>不是格式化元素,所以不要用它來格式化內(nèi)容。在HTML5中,這個標(biāo)簽代表了內(nèi)容的主題分離。正確的用法是這樣的:
<p>Paragraph about puppies</p>
<p>Paragraph about puppies' favourite foods</p>
<p>Paragraph about puppies' breeds</p>
<hr>
<p>Paragraph about why I am shaving my head </p>
使用title屬性時要小心
title屬性是一個功能強大的工具,它可以幫助闡明頁面上元素的操作或目的,比如工具提示。但是,它不能與圖像上的alt等其他屬性互換。
HTML 5 規(guī)范道:
目前不鼓勵依賴title屬性,因為很多用戶代理不按照規(guī)范的訪問方式來暴露該屬性(例如,使用鼠標(biāo)等設(shè)備來喚出提示框,而不包括只用鍵盤或觸控鍵盤的用戶,或者現(xiàn)代手機或平板電腦)。
請閱讀有關(guān)如何正確使用此屬性的更多信息:https://html.spec.whatwg.org/multipage/dom.html#the-title-attribute。
單引號或雙引號
我見過的許多代碼庫,他們的標(biāo)記中混合了這兩種形式。這并不好,特別是當(dāng)你使用一個依賴于單引號的框架時,比如php,當(dāng)你在一個句子中使用單引號時,就像我現(xiàn)在做的一樣。另一個原因是保持一致,這總是好的。不要這樣寫:
<img alt="super funny meme" src='/img/meme.jpg'>
而寫為:
<img alt="super funny meme" src="/img/meme.jpg">
省略布爾值
當(dāng)涉及到屬性的布爾值時,建議省略,因為它們不添加任何值,還會增加標(biāo)記的權(quán)重。
public class MyActivity extends AppCompatActivity {
<audio autoplay="autoplay" src="podcast.mp3">
<!-- instead -->
<audio autoplay src="podcast.mp3">
省略類型屬性
不需要向scriptand樣式標(biāo)簽添加type屬性。某些服務(wù)(如W3C的標(biāo)記驗證工具)還會出現(xiàn)驗證錯誤。
驗證標(biāo)記
可以使用W3C的標(biāo)記驗證等服務(wù)以確保有效的標(biāo)記。
拒絕內(nèi)聯(lián)樣式
HTML中寫的是內(nèi)容,其如何展示取決于樣式。將展示形式留給CSS吧,不要使用內(nèi)聯(lián)樣式,這將有利于開發(fā)人員和瀏覽器理解你的標(biāo)記。
總結(jié)
這些只是編寫標(biāo)簽時要記住的冰山一角。還有很多很好的資源可以讓你深入了解,強烈建議你重復(fù)閱讀。
《GitHub HTML最佳實踐》:https://github.com/hail2u/html-best-practices
《W3C School HTML樣式指南》:https://www.w3schools.com/html/html5_syntax.asp
希望你喜歡本文,并能寫出優(yōu)雅的標(biāo)簽。
原文:https://dev.to/yashints/let-s-write-html-like-a-pro-28h5
本文為 CSDN 翻譯,轉(zhuǎn)載請注明來源出處。
【END】
者通過實踐來闡述HTML 優(yōu)先原則的主要目標(biāo)是擴大能夠從事 Web 軟件編程工作的人員范圍。
原文鏈接:https://html-first.com/
未經(jīng)允許,禁止轉(zhuǎn)載!
HTML優(yōu)先是一組原則,旨在通過以下方式使構(gòu)建 Web 軟件更容易、更快、更具包容性且更易于維護:
利用現(xiàn)代網(wǎng)絡(luò)瀏覽器的默認功能。
利用 HTML 屬性語法的極致簡單性。
利用 Web 的查看源代碼功能。
HTML優(yōu)先原則的主要目標(biāo)是擴大能夠從事 Web 軟件編程工作的人員范圍。從個人角度來看,這是件好事,因為這可以讓更多的人成為Web 程序員,構(gòu)建出色的 Web 軟件,并提高他們的收入。從業(yè)務(wù)角度來看,這些原則也有好處,因為這可以降低構(gòu)建軟件的成本,并減少招聘所需的資源量(眾所周知,這是一個資源密集型流程)。
HTML優(yōu)先原則的第二大目標(biāo)是讓構(gòu)建 Web 軟件的工作變得更加愉快和無縫。對于大多數(shù) Web 程序員來說,在快速構(gòu)建產(chǎn)品期間能夠流暢地在文本編輯器和瀏覽器之間來回切換,而不會遇到各種磕磕絆絆,也不需要切換上下文,他們會感到非常興奮。但如今程序員需要幾年的時間來掌握工具和框架才能達到這個階段。HTML 優(yōu)先原則能夠讓人們在學(xué)習(xí)編程的早期階段體會這種感覺,并達到這種水平。
為了實現(xiàn)這些目標(biāo),首先必須承認 HTML 非常容易理解,因此我們將 HTML 作為產(chǎn)品的基石,不僅用 HTML 來定義內(nèi)容和結(jié)構(gòu),還用它來設(shè)置樣式和行為。
1. 推薦使用 HTML 原生的方法。
2. 使用 HTML 屬性來設(shè)置樣式和行為。
3. 使用利用了 HTML屬性的庫。
4. 避開構(gòu)建過程。
5. 推薦使用“裸” HTML。
6. 保留查看源代碼的功能。
瀏覽器支持的開箱即用的功能范圍很廣,而且數(shù)量還在不斷增長。在將庫或框架添加到代碼庫之前,請檢查是否可以使用原汁原味的 html/css 來實現(xiàn)它。
鼓勵的寫法:
不鼓勵的寫法:
我們可以使用 Tailwind 或 Tachyons等 SPC 庫來實現(xiàn)樣式。同時使用 hyperscript、Alpine 或類似的庫來實現(xiàn)行為。這意味著很多功能都需要使用 HTML 來實現(xiàn)。但這也意味著其他開發(fā)人員更容易找到和理解行為、瀏覽并修改它們。
鼓勵的寫法:
不鼓勵的寫法:
你可能會注意到,這種方法似乎違反了關(guān)注點分離——備受吹捧的軟件設(shè)計原則之一。我們認為,非黑即白的關(guān)注點分離原則是有缺陷的,因此我們提倡采用一種考慮到行為局部性以及兩者之間權(quán)衡的方法。
鼓勵的寫法:
不鼓勵的寫法:
需要將文件從一種格式轉(zhuǎn)換為另一種格式的庫會導(dǎo)致維護開銷增加大量,嚴(yán)重影響查看源代碼的功能或?qū)е缕錈o法使用,而且通常開發(fā)人員需要學(xué)習(xí)新工具才能使用它們。現(xiàn)代瀏覽器已不再有當(dāng)初引入這些實踐時的性能限制。如果我們使用 HTML 優(yōu)先的庫(例如 static tailwind 或 htmx),則額外所需的 CSS 和JS 量為最少。
鼓勵的寫法:
不鼓勵的寫法:
這條原則適用于后端實現(xiàn)。基本思想是可讀性。熟悉 HTML 但不熟悉后端框架的開發(fā)人員查看視圖文件,仍然應(yīng)該能夠理解 90% 以上的內(nèi)容。如上所述,這意味著犧牲簡潔性而換取易于理解性。
鼓勵的寫法:
不鼓勵的寫法:
早期網(wǎng)絡(luò)的美妙之處在于,我們總能 "窺探 "到網(wǎng)頁任何部分的代碼。對于有抱負的開發(fā)人員來說,這是一項福利,因為這為我們在理論(閱讀代碼如何工作)和實踐之間架起了一座橋梁,將代碼和界面并排展示在我們眼前。對于許多網(wǎng)站來說,我們只需復(fù)制并粘貼 html 或 css,然后放到自己的網(wǎng)站上運行,就可以獲得近乎相同的復(fù)制品。新舊代碼的混合不僅是一種學(xué)習(xí)方式,而且往往也是我們創(chuàng)作新作品的基礎(chǔ)。
后來,業(yè)界采用了一些 "改進 "方法,導(dǎo)致這種做法變得更為罕見。例如,如果我們使用流行的前端框架 React,就不能點擊 "查看源代碼",復(fù)制代碼并重新混合,因為首先 React 有構(gòu)建過程,這意味著我們在開發(fā)人員工具中看到的代碼與開發(fā)人員編寫的代碼不同;其次,React 代碼片段必須封裝在 react 應(yīng)用程序中才能工作。
遵循 HTML 優(yōu)先原則的網(wǎng)站能夠重新獲得查看源代碼的功能。事實上,HTML 優(yōu)先的網(wǎng)站往往更進一步。因為如果使用 HTML 屬性定義用戶界面交互,那么在復(fù)制粘貼到新的代碼庫時,也可以保留這些交互(前提是目標(biāo)文件包含相同的 js 庫)。我們打算將來將其擴展到 HTML 優(yōu)先的代碼片段庫。
本文中描述的實踐和原則在整個行業(yè)中仍然很小眾,而且使用的社區(qū)也很少。我希望通過建設(shè)網(wǎng)站(https://html-first.com/)的方式來尋找同道合的人,共同探討并完善這些想法。
我們開門見山:編寫優(yōu)秀的 CSS 代碼是件十分痛苦的事情。很多開發(fā)人員都不想做 CSS 開發(fā)。你讓我干什么都行,但是 CSS 還是算了吧。
在我創(chuàng)建應(yīng)用的時候,從來都無法從 CSS 中享受到樂趣。但是你也躲不過去,是不是?我是說,我們?nèi)褙炞⒂谟脩趔w驗,但是如今設(shè)計也是不容忽視的部分。
項目剛開始的時候,一切都很美好。你有一些 CSS 選擇器,諸如 .title、input、#app 等等,非常簡單。但是隨著應(yīng)用逐漸變大,CSS 也越來越糟。你對 CSS 選擇器感到困惑。你會發(fā)現(xiàn)自己寫了一些 div#app .list li.item a 之類的東西。然后你一遍又一遍地寫相同的代碼。最后你把所有代碼都扔到文件末尾,因為你根本不在乎,CSS 爛透了。結(jié)果你得到了 500 行根本無法維護的 CSS 代碼。
我本人經(jīng)常和 CSS 苦苦糾纏
今天我的目的是:讓你寫出更好的 CSS。我想讓你回顧一下舊項目,然后想一想:天啊,我怎么會寫這樣的東西?
但是,你可能會想:好,你說的很對,但是 CSS 框架呢?CSS 框架就是為了幫助我們寫出更好的 CSS 代碼,不是嗎?
當(dāng)然,但是 CSS 框架也有一些缺點:
既然你關(guān)注了這篇文章,那么你一定有自己的原因,對不對?好了,廢話不多說,讓我們開始學(xué)習(xí)如何寫出更好地 CSS 代碼。
注意:這篇文章不是關(guān)于如何設(shè)計漂亮的應(yīng)用。本文是關(guān)于如何寫出便于維護的 CSS 代碼以及如何組織代碼。
SCSS
我將在我的例子中使用 SCSS。
SCSS 是一個 CSS 的預(yù)處理器。從根本上來說,它是一個 CSS 的超集:它增加了一些很酷的功能,例如變量,嵌套,導(dǎo)入和混入(mixins)等。
下面介紹一些我們即將使用的功能。
變量
你可以在 SCSS 中使用變量。主要的好處在于可重用性。我們假設(shè)你的應(yīng)用有一組顏色。主色是藍色。
那么你處處都用到了藍色:按鈕的 background-color(背景色),標(biāo)題和鏈接的 color(顏色)。藍色無處不在。
突然有一天,你不喜歡藍色,開始喜歡綠色。
// Declare a variable
$primary-color: #0099ff;
// References a variable
h1 {
color: $primary-color;
}
嵌套
你可以在 SCSS 中使用嵌套。那么如下代碼:
h1 {
font-size: 5rem;
color: blue;
}
h1 span {
color: green;
}
可以寫成:
h1 {
font-size: 5rem;
color: blue;
span {
color: green;
}
}
可讀性更好了,是不是?你可以利用嵌套在更短時間內(nèi)寫出復(fù)雜的選擇器。
分塊與導(dǎo)入
從可維護性和可讀性的角度來說,你無法將所有代碼都保存在一個大文件中。在實驗或構(gòu)建小型應(yīng)用時,這種做法尚且可行,但是到了專業(yè)的級別……想都不要想。很幸運的是,有了 SCSS 后,我們依然可以繼續(xù)沿用這種做法。
你可以通過使用前下劃線給文件命名,來創(chuàng)建分塊的文件:_animations.scss,_ base.scss,_variables.scss 等。
至于導(dǎo)入,你可以使用 @import 指令。例如,你可以這么做:
// _animations.scss
@keyframes appear {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
// header.scss
@import "animations";
h1 {
animation: appear 0.5s ease-out;
}
哈哈!你可能想,你在這里犯了一個錯誤!應(yīng)該是 _animations.scss,而不是 animations ;)
非也。如果你使用這種命名方式,聰明的 SCSS 知道你指的是分塊文件。
關(guān)于變量、嵌套、分塊和導(dǎo)入,我們需要了解的就這么多。SCSS 還有很多其他功能:比如混入、繼承和其他指令(@for,@if,等等),在此不做一一介紹了。
如果你想了解更多信息,請查看相應(yīng)的文檔(https://sass-lang.com/guide)。文檔寫得很好,且易于理解。
組織 CSS 代碼:BEM 方法論
我記不清曾經(jīng)多少次在CSS類中使用包攬一切的名字了。比如:.button、.page-1、.page-2、.custom-input。
我們常常不知道如何命名。然而命名很重要。假如你正在構(gòu)建某個應(yīng)用,并且由于某種原因不得不將其擱置數(shù)月,那該怎么辦?還有更糟的,假如有人想把項目拿回去,該怎么辦?如果你的 CSS 代碼沒有恰當(dāng)?shù)拿敲凑б豢瓷先ズ茈y明白你在說什么。
BEM 可以幫助我們解決這個問題。BEM 是一種命名約定,是英文 Block Element Modifier(塊元素修飾符)的縮寫。
這種方法可以使我們的代碼結(jié)構(gòu)化,并提高模塊化和可重用性。現(xiàn)在讓我們說一說什么是塊、元素和修飾符。
塊
你可以把塊視為組件。還記得你小時候玩過樂高積木嗎?讓我們回憶一下小時候。
如果需要建造一個簡單的房子,你會怎么做?你需要一個窗戶,一個屋頂,一扇門和一些墻壁。這些就是我們的塊。它們有著本身的意義。
元素
接下來,你應(yīng)該如何用你的樂高積木建造一個窗口呢?可能有些積木看起來像框架,如果你把四個這樣的積木組裝起來,就會得到一個漂亮的窗戶。這些就是我們的元素。它們是塊的一部分,它們對于建塊必不可少。但是,在塊外面的時候,它們便無用武之地。
修飾符
現(xiàn)在窗戶已經(jīng)建好了,但是你可能想要一個綠色或一個小窗戶。這些我們稱之為修飾符。它們是塊或元素上的標(biāo)志,它們用于改變行為,外觀等等。
注意事項
示例
以下是一個練習(xí)。你可以去你最喜歡或最常用的網(wǎng)站,然后想想看哪些是塊、元素和修飾符。
例如,以下是我想象中的 Google 商店:
現(xiàn)在該你了。認真想想哪些地方可以改進。與往常一樣,你必須自己搜索、實驗和構(gòu)件,以便更好地滿足你的需求。
融會貫通
下面的示例演示了 BEM 的功能(https://codepen.io/thomlom/pen/RJvVdQ)。
寫一個博文組件
寫多個按鈕
組織 CSS 文件:7-1模式
你還跟得上我的節(jié)奏嗎?很好!現(xiàn)在讓我們來介紹如何組織 CSS 文件。這個部分可以真正幫助你提高工作效率,并幫助你立刻找到需要修改的 CSS 代碼。
為此,讓我們了解一下 7-1 模式。
你可能會想,我從未聽過這種模式。
相信我,這很簡單。你必須遵守以下兩條規(guī)則:
7 個文件夾:
主文件
你需要將以上所有內(nèi)容導(dǎo)入到該文件中。
@import abstracts/variables;
@import abstracts/functions;
@import base/reset;
@import base/typography;
@import base/utilities;
@import components/button;
@import components/form;
@import components/user-navigation;
@import layout/header;
@import layout/footer;
...
我知道你覺得以上內(nèi)容有點太多,一時難以接受。這個架構(gòu)適合于大型項目,而非小項目。下面我們介紹一種更適合小項目的做法。
首先,你不需要 vendors 文件夾。可以將所有外部 CSS 代碼放在頭部的link標(biāo)簽內(nèi)。接下來,如果你的應(yīng)用只有一個主題的話,可以省略 themes 文件夾。最后,你可能不會有大量頁面特定的風(fēng)格,所以也 pages 也沒必要。好了,現(xiàn)在只剩下 4 個文件夾了。
然后,你有兩個選擇:
sass/
_animations.scss
_base.scss
_buttons.scss
_header.scss
...
_variables.scss
main.scss
你可以隨便選。
你可能會想:你說服了我!但是我該如何使用呢?我是說,哪些不支持scss文件的瀏覽器該怎么辦呢?
說的好!這是我們的最后一步,我們現(xiàn)在就來學(xué)習(xí)如何將SCSS編譯為CSS。
從 SCSS 到 CSS
首先,你需要 Node.js 和 NPM(或 Yarn)。
我們將使用一個名為 node-sass 的包,它可以讓我們將 .scss 文件編譯為 .css 文件。
它的 CLI(命令行界面)相當(dāng)容易使用:
node-sass <input> <output> [options]
它有多個選擇,但我們只使用其中兩個:
如果你是一個好奇心很重的人(我希望如此,因為開發(fā)人員應(yīng)該好奇!)那么,請點擊這里查看完整的文檔(https://github.com/sass/node-sass#command-line-interface)。
現(xiàn)在我們知道需要用哪些工具。其余的工作更簡單。只需按以下步驟操作:
touch index.html
mkdir -p sass/{abstracts,base,components,layout} css
cd sass && touch main.scss
{
...
"scripts": {
"watch": "node-sass sass/main.scss css/style.css -w",
"build": "node-sass sass/main.scss css/style.css --output-style compressed"
},
...
}
<!DOCTYPE html>
<html lang=”en”>
<head>
<meta charset=”UTF-8">
<meta name=”viewport” content=”width=device-width, initial-scale=1.0">
<meta http-equiv=”X-UA-Compatible” content=”ie=edge”>
<link rel=”stylesheet” href=”css/style.css”>
<title>My app</title>
</head>
<body>
<h1 class=”heading”>My app</h1>
</body>
</html>
然后就可以了,你準(zhǔn)備好了!你可以在編程的時候運行npm run watch,并在瀏覽器中打開index.html文件。如果你想縮小CSS,只需運行npm run build。
補充
添加實時重新加載
你可能希望添加實時重新加載以提高工作效率,而無需手動重新加載本地index.html文件。
你可以按照以下簡單的步驟操作:
{
...
"scripts": {
"start": "npm-run-all --parallel liveserver watch",
"liveserver": "live-server",
"watch": "node-sass sass/main.scss css/style.css -w",
},
...
}
現(xiàn)在如果你運行 npm run start,就可以立即看到代碼的變更。
添加自動前綴
我們設(shè)置好了開發(fā)工具,太棒了!現(xiàn)在,讓我們來談?wù)剺?gòu)建工具,特別是:自動前綴(Autoprefixer)。
它是一個工具(尤其是postcss插件),它可以解析CSS,并利用這些值(https://caniuse.com/)將提供商的前綴加入到CSS規(guī)則中。
實際上,在構(gòu)建網(wǎng)站時,你可能會使用一些并非所有瀏覽器都完全支持的新功能。因此,提供商方案可以提供對這些功能的支持。
以下是一個示例:
-webkit-animation-name: myAnimation;
-moz-animation-name: myAnimation;
-ms-animation-name: myAnimation;
你可能會想,這寫起來太乏味了。這就是為什么我們需要自動前綴來幫助我們的CSS代碼獲得瀏覽器的兼容,而不用增加額外的復(fù)雜性。
那么我們?nèi)绾斡酶斆鞯貥?gòu)建CSS呢?
還有最后幾步,請堅持看下去,馬上就結(jié)束了。
{
...
"scripts": {
"start": "npm-run-all --parallel liveserver watch",
"liveserver": "live-server",
"watch": "node-sass sass/main.scss css/style.css -w",
"compile": "node-sass sass/main.scss css/style.css",
"prefix": "postcss css/style.css --use autoprefixer -o css/style.css",
"compress": "node-sass css/style.css css/style.css --output-style compressed",
"build": "npm-run-all compile prefix compress"
...
}
現(xiàn)在當(dāng)你運行 npm run build 時,可以生成經(jīng)過壓縮的 CSS 代碼,并且添加了提供商前綴!太棒了是不是嗎?
但是你知道更酷的是什么嗎?我為你設(shè)置了一個代碼倉庫(https://github.com/thomlom/scss-boilerplate),以幫助你迅速開始:)
如果你想知道我是如何在項目中應(yīng)用這些技術(shù)的,請點擊這里查看我的代碼倉庫(https://github.com/thomlom/portfolio)和結(jié)果(https://thomlom.github.io/portfolio/)。我希望你能通過這些例子更深入理解。
呼~,今天就說這么多!現(xiàn)在,你已準(zhǔn)備好可以開始編寫具有可維護性、模塊化和可重用性的 CSS 代碼了。
我希望你喜歡這篇文章。歡迎在下方留言分享你的想法。
原文:https://medium.freecodecamp.org/how-to-get-better-at-writing-css-a1732c32a72f
作者:homas Lombart,軟件開發(fā)。
譯者:彎月,責(zé)編:屠敏
“征稿啦”
CSDN 公眾號秉持著「與千萬技術(shù)人共成長」理念,不僅以「極客頭條」、「暢言」欄目在第一時間以技術(shù)人的獨特視角描述技術(shù)人關(guān)心的行業(yè)焦點事件,更有「技術(shù)頭條」專欄,深度解讀行業(yè)內(nèi)的熱門技術(shù)與場景應(yīng)用,讓所有的開發(fā)者緊跟技術(shù)潮流,保持警醒的技術(shù)嗅覺,對行業(yè)趨勢、技術(shù)有更為全面的認知。
如果你有優(yōu)質(zhì)的文章,或是行業(yè)熱點事件、技術(shù)趨勢的真知灼見,或是深度的應(yīng)用實踐、場景方案等的新見解,歡迎聯(lián)系 CSDN 投稿,聯(lián)系方式:微信(guorui_1118,請備注投稿+姓名+公司職位),郵箱(guorui@csdn.net)。
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。