Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 日本巨黄视频,日韩中文字幕精品免费一区,日本三级视频在线观看

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          是時(shí)候拯救我的 HTML 技術(shù)了

          JavaScript、CSS 相比,HTML 經(jīng)過三十多年的發(fā)展,似乎逐漸走進(jìn)無人問津的角落,如何才能讓 HTML 再次回到人們視野的中心。

          作者 | Yaser Adel Mehraban

          譯者 | 譚開朗,責(zé)編 | 屠敏

          出品 | CSDN(ID:CSDNnews)

          以下為譯文:

          有多少次,身為開發(fā)者的你編寫了一個(gè)HTML塊而沒有意識(shí)到可能編碼得并不理想?

          為什么

          HTML一直處于無人問津的角落,因?yàn)镴avaScript和CSS總是吸引人們的注意力。

          請(qǐng)?jiān)谀X海里先保留這種印象,因?yàn)槲乙靡恍┖?jiǎn)單的技巧來發(fā)揮作用,讓HTML再次回到人們視野的中心。

          以下是創(chuàng)建一目了然、可維護(hù)和可擴(kuò)展的代碼的一些方法,其很好的應(yīng)用了HTML5的語義標(biāo)記元素,并將在支持的瀏覽器中正確呈現(xiàn)。

          其緣由就不贅述了,讓我們來看看具體是什么吧。

          文檔類型

          在index.html的頂部位置,請(qǐng)確保聲明了DOCTYPE。這將在所有瀏覽器中激活標(biāo)準(zhǔn)模式,并告知瀏覽器該如何編譯文檔。請(qǐng)記住DOCTYPE不是HTML元素。

          HTML5是這樣的:

          <!DOCTYPE html>

          注意:如果應(yīng)用了框架,這已預(yù)先寫好。如果沒有,我強(qiáng)烈建議使用像Emmet這樣的代碼片段,它在VS代碼中可用。

          了解更多關(guān)于其他文檔類型的信息嗎?點(diǎn)擊這里查看參考文件:https://html.com/tags/doctype/。

          可選標(biāo)簽

          有些標(biāo)簽在HTML5中是可選的,主要是因?yàn)樵厥请[式呈現(xiàn)的。信不信由你,你可以省略<html>標(biāo)簽,而頁面呈現(xiàn)得也很好。

          <!DOCTYPE HTML>

          <head>
          <title>Hello</title>
          </head>
          <body>
          <p>Welcome to this example.</p>
          </body>
          </html>

          上面是一個(gè)有效的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>

          上面是無效的,因?yàn)樽⑨屛挥?lt;thml>標(biāo)簽之外,解析樹發(fā)生了更改。

          結(jié)束標(biāo)簽

          應(yīng)始終記得結(jié)束標(biāo)簽,否則某些瀏覽器在呈現(xiàn)頁面時(shí)會(huì)出現(xiàn)問題。出于可讀性和其他原因,建議保留這些內(nèi)容,稍后我會(huì)詳細(xì)介紹。

          <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>

          注意:普通元素永遠(yuǎn)不能有自閉合標(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)簽的另一個(gè)原因是在使用屬性時(shí)。在這種情況下,我們應(yīng)該定義web頁面的語言,這對(duì)于可訪問性和搜索非常重要。

          <html lang="fr-CA">
          ...
          </html>

          標(biāo)題

          永遠(yuǎn)不要忽略標(biāo)題標(biāo)簽,否則可訪問性太差了。我個(gè)人就永遠(yuǎn)不會(huì)使用這樣的網(wǎng)站,因?yàn)槲覄偞蜷_它即刻在20多個(gè)頁面后就找不到了(瀏覽器選項(xiàng)卡不會(huì)有任何顯示)。

          base標(biāo)簽

          這是一個(gè)非常有用的標(biāo)簽,應(yīng)該謹(jǐn)慎使用。它將設(shè)置應(yīng)用程序的基本URL。一旦設(shè)置好,所有鏈接都將相對(duì)于這個(gè)基本URL,這可能會(huì)導(dǎo)致一些不必要的行為:

          <base href="http://www.example.com/" />

          通過以上設(shè)置,href="#internal"將被編譯為href=http://www.example.com/#internal。或者h(yuǎn)ref="example.org"將被編譯為href="http://www.example.com/example.org"。

          描述

          這個(gè)meta標(biāo)簽非常有用,盡管嚴(yán)格來說它不是最佳寫法。但在搜索引擎時(shí),這是超級(jí)有用的。

          <meta name="description" content="HTML best practices">

          這有一個(gè)帖子“搜索引擎優(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)該進(jìn)行檢查,就好比寫作所用的筆,而我們有鼠標(biāo)。

          hr不應(yīng)該用于格式化

          <hr>不是格式化元素,所以不要用它來格式化內(nèi)容。在HTML5中,這個(gè)標(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屬性時(shí)要小心

          title屬性是一個(gè)功能強(qiáng)大的工具,它可以幫助闡明頁面上元素的操作或目的,比如工具提示。但是,它不能與圖像上的alt等其他屬性互換。

          HTML 5 規(guī)范道:

          目前不鼓勵(lì)依賴title屬性,因?yàn)楹芏嘤脩舸聿话凑找?guī)范的訪問方式來暴露該屬性(例如,使用鼠標(biāo)等設(shè)備來喚出提示框,而不包括只用鍵盤或觸控鍵盤的用戶,或者現(xiàn)代手機(jī)或平板電腦)。

          請(qǐng)閱讀有關(guān)如何正確使用此屬性的更多信息:https://html.spec.whatwg.org/multipage/dom.html#the-title-attribute。

          單引號(hào)或雙引號(hào)

          我見過的許多代碼庫,他們的標(biāo)記中混合了這兩種形式。這并不好,特別是當(dāng)你使用一個(gè)依賴于單引號(hào)的框架時(shí),比如php,當(dāng)你在一個(gè)句子中使用單引號(hào)時(shí),就像我現(xiàn)在做的一樣。另一個(gè)原因是保持一致,這總是好的。不要這樣寫:

          <img alt="super funny meme" src='/img/meme.jpg'>

          而寫為:

          <img alt="super funny meme" src="/img/meme.jpg">

          省略布爾值

          當(dāng)涉及到屬性的布爾值時(shí),建議省略,因?yàn)樗鼈儾惶砑尤魏沃担€會(huì)增加標(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)記驗(yàn)證工具)還會(huì)出現(xiàn)驗(yàn)證錯(cuò)誤。

          驗(yàn)證標(biāo)記

          可以使用W3C的標(biāo)記驗(yàn)證等服務(wù)以確保有效的標(biāo)記。

          拒絕內(nèi)聯(lián)樣式

          HTML中寫的是內(nèi)容,其如何展示取決于樣式。將展示形式留給CSS吧,不要使用內(nèi)聯(lián)樣式,這將有利于開發(fā)人員和瀏覽器理解你的標(biāo)記。

          總結(jié)

          這些只是編寫標(biāo)簽時(shí)要記住的冰山一角。還有很多很好的資源可以讓你深入了解,強(qiáng)烈建議你重復(fù)閱讀。

          • 《GitHub HTML最佳實(shí)踐》: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)載請(qǐng)注明來源出處。

          【END】

          者通過實(shí)踐來闡述HTML 優(yōu)先原則的主要目標(biāo)是擴(kuò)大能夠從事 Web 軟件編程工作的人員范圍。

          原文鏈接:https://html-first.com/

          未經(jīng)允許,禁止轉(zhuǎn)載!


          作者 | Tony Ennis 譯者 | 彎月
          責(zé)編 | 夏萌
          出品 | CSDN(ID:CSDNnews)

          HTML優(yōu)先是一組原則,旨在通過以下方式使構(gòu)建 Web 軟件更容易、更快、更具包容性且更易于維護(hù):

          1. 利用現(xiàn)代網(wǎng)絡(luò)瀏覽器的默認(rèn)功能。

          2. 利用 HTML 屬性語法的極致簡(jiǎn)單性。

          3. 利用 Web 的查看源代碼功能。

          目標(biāo)

          HTML優(yōu)先原則的主要目標(biāo)是擴(kuò)大能夠從事 Web 軟件編程工作的人員范圍。從個(gè)人角度來看,這是件好事,因?yàn)檫@可以讓更多的人成為Web 程序員,構(gòu)建出色的 Web 軟件,并提高他們的收入。從業(yè)務(wù)角度來看,這些原則也有好處,因?yàn)檫@可以降低構(gòu)建軟件的成本,并減少招聘所需的資源量(眾所周知,這是一個(gè)資源密集型流程)。

          HTML優(yōu)先原則的第二大目標(biāo)是讓構(gòu)建 Web 軟件的工作變得更加愉快和無縫。對(duì)于大多數(shù) Web 程序員來說,在快速構(gòu)建產(chǎn)品期間能夠流暢地在文本編輯器和瀏覽器之間來回切換,而不會(huì)遇到各種磕磕絆絆,也不需要切換上下文,他們會(huì)感到非常興奮。但如今程序員需要幾年的時(shí)間來掌握工具和框架才能達(dá)到這個(gè)階段。HTML 優(yōu)先原則能夠讓人們?cè)趯W(xué)習(xí)編程的早期階段體會(huì)這種感覺,并達(dá)到這種水平。

          為了實(shí)現(xiàn)這些目標(biāo),首先必須承認(rèn) HTML 非常容易理解,因此我們將 HTML 作為產(chǎn)品的基石,不僅用 HTML 來定義內(nèi)容和結(jié)構(gòu),還用它來設(shè)置樣式和行為。

          原則

          1. 推薦使用 HTML 原生的方法。

          2. 使用 HTML 屬性來設(shè)置樣式和行為。

          3. 使用利用了 HTML屬性的庫。

          4. 避開構(gòu)建過程。

          5. 推薦使用“裸” HTML。

          6. 保留查看源代碼的功能。

          1.使用 HTML 原有的方法通過外部框架實(shí)現(xiàn)所需的功能

          瀏覽器支持的開箱即用的功能范圍很廣,而且數(shù)量還在不斷增長(zhǎng)。在將庫或框架添加到代碼庫之前,請(qǐng)檢查是否可以使用原汁原味的 html/css 來實(shí)現(xiàn)它。

          鼓勵(lì)的寫法:

          不鼓勵(lì)的寫法:

          2.如有可能,默認(rèn)使用內(nèi)聯(lián) HTML 屬性定義樣式和行為

          我們可以使用 Tailwind 或 Tachyons等 SPC 庫來實(shí)現(xiàn)樣式。同時(shí)使用 hyperscript、Alpine 或類似的庫來實(shí)現(xiàn)行為。這意味著很多功能都需要使用 HTML 來實(shí)現(xiàn)。但這也意味著其他開發(fā)人員更容易找到和理解行為、瀏覽并修改它們。

          鼓勵(lì)的寫法:

          不鼓勵(lì)的寫法:

          你可能會(huì)注意到,這種方法似乎違反了關(guān)注點(diǎn)分離——備受吹捧的軟件設(shè)計(jì)原則之一。我們認(rèn)為,非黑即白的關(guān)注點(diǎn)分離原則是有缺陷的,因此我們提倡采用一種考慮到行為局部性以及兩者之間權(quán)衡的方法。

          3.如果需要庫,請(qǐng)使用利用 html 屬性的庫,不推薦使用圍繞 JavaScript 或自定義語法構(gòu)建的庫

          鼓勵(lì)的寫法:

          不鼓勵(lì)的寫法:

          4.避開構(gòu)建過程

          需要將文件從一種格式轉(zhuǎn)換為另一種格式的庫會(huì)導(dǎo)致維護(hù)開銷增加大量,嚴(yán)重影響查看源代碼的功能或?qū)е缕錈o法使用,而且通常開發(fā)人員需要學(xué)習(xí)新工具才能使用它們。現(xiàn)代瀏覽器已不再有當(dāng)初引入這些實(shí)踐時(shí)的性能限制。如果我們使用 HTML 優(yōu)先的庫(例如 static tailwind 或 htmx),則額外所需的 CSS 和JS 量為最少。

          鼓勵(lì)的寫法:

          不鼓勵(lì)的寫法:

          5.推薦使用“裸” HTML,不推薦編譯為 HTML的各個(gè)混亂層

          這條原則適用于后端實(shí)現(xiàn)。基本思想是可讀性。熟悉 HTML 但不熟悉后端框架的開發(fā)人員查看視圖文件,仍然應(yīng)該能夠理解 90% 以上的內(nèi)容。如上所述,這意味著犧牲簡(jiǎn)潔性而換取易于理解性。

          鼓勵(lì)的寫法:

          不鼓勵(lì)的寫法:

          6.如有可能,保留右鍵單擊查看源代碼的功能

          早期網(wǎng)絡(luò)的美妙之處在于,我們總能 "窺探 "到網(wǎng)頁任何部分的代碼。對(duì)于有抱負(fù)的開發(fā)人員來說,這是一項(xiàng)福利,因?yàn)檫@為我們?cè)诶碚摚ㄩ喿x代碼如何工作)和實(shí)踐之間架起了一座橋梁,將代碼和界面并排展示在我們眼前。對(duì)于許多網(wǎng)站來說,我們只需復(fù)制并粘貼 html 或 css,然后放到自己的網(wǎng)站上運(yùn)行,就可以獲得近乎相同的復(fù)制品。新舊代碼的混合不僅是一種學(xué)習(xí)方式,而且往往也是我們創(chuàng)作新作品的基礎(chǔ)。

          后來,業(yè)界采用了一些 "改進(jìn) "方法,導(dǎo)致這種做法變得更為罕見。例如,如果我們使用流行的前端框架 React,就不能點(diǎn)擊 "查看源代碼",復(fù)制代碼并重新混合,因?yàn)槭紫?React 有構(gòu)建過程,這意味著我們?cè)陂_發(fā)人員工具中看到的代碼與開發(fā)人員編寫的代碼不同;其次,React 代碼片段必須封裝在 react 應(yīng)用程序中才能工作。

          遵循 HTML 優(yōu)先原則的網(wǎng)站能夠重新獲得查看源代碼的功能。事實(shí)上,HTML 優(yōu)先的網(wǎng)站往往更進(jìn)一步。因?yàn)槿绻褂?HTML 屬性定義用戶界面交互,那么在復(fù)制粘貼到新的代碼庫時(shí),也可以保留這些交互(前提是目標(biāo)文件包含相同的 js 庫)。我們打算將來將其擴(kuò)展到 HTML 優(yōu)先的代碼片段庫。

          總結(jié)

          本文中描述的實(shí)踐和原則在整個(gè)行業(yè)中仍然很小眾,而且使用的社區(qū)也很少。我希望通過建設(shè)網(wǎng)站(https://html-first.com/)的方式來尋找同道合的人,共同探討并完善這些想法。

          我們開門見山:編寫優(yōu)秀的 CSS 代碼是件十分痛苦的事情。很多開發(fā)人員都不想做 CSS 開發(fā)。你讓我干什么都行,但是 CSS 還是算了吧。

          在我創(chuàng)建應(yīng)用的時(shí)候,從來都無法從 CSS 中享受到樂趣。但是你也躲不過去,是不是?我是說,我們?nèi)褙炞⒂谟脩趔w驗(yàn),但是如今設(shè)計(jì)也是不容忽視的部分。

          項(xiàng)目剛開始的時(shí)候,一切都很美好。你有一些 CSS 選擇器,諸如 .title、input、#app 等等,非常簡(jiǎn)單。但是隨著應(yīng)用逐漸變大,CSS 也越來越糟。你對(duì) CSS 選擇器感到困惑。你會(huì)發(fā)現(xiàn)自己寫了一些 div#app .list li.item a 之類的東西。然后你一遍又一遍地寫相同的代碼。最后你把所有代碼都扔到文件末尾,因?yàn)槟愀静辉诤酰珻SS 爛透了。結(jié)果你得到了 500 行根本無法維護(hù)的 CSS 代碼。

          我本人經(jīng)常和 CSS 苦苦糾纏

          今天我的目的是:讓你寫出更好的 CSS。我想讓你回顧一下舊項(xiàng)目,然后想一想:天啊,我怎么會(huì)寫這樣的東西?

          但是,你可能會(huì)想:好,你說的很對(duì),但是 CSS 框架呢?CSS 框架就是為了幫助我們寫出更好的 CSS 代碼,不是嗎?

          當(dāng)然,但是 CSS 框架也有一些缺點(diǎn):

          • 它經(jīng)常會(huì)使用平淡無奇的設(shè)計(jì)。
          • CSS 框架使得定制很困難,更不用說超越框架了。
          • 在使用之前,你必須先學(xué)習(xí)如何使用它們。

          既然你關(guān)注了這篇文章,那么你一定有自己的原因,對(duì)不對(duì)?好了,廢話不多說,讓我們開始學(xué)習(xí)如何寫出更好地 CSS 代碼。

          注意:這篇文章不是關(guān)于如何設(shè)計(jì)漂亮的應(yīng)用。本文是關(guān)于如何寫出便于維護(hù)的 CSS 代碼以及如何組織代碼。

          SCSS

          我將在我的例子中使用 SCSS。

          SCSS 是一個(gè) CSS 的預(yù)處理器。從根本上來說,它是一個(gè) CSS 的超集:它增加了一些很酷的功能,例如變量,嵌套,導(dǎo)入和混入(mixins)等。

          下面介紹一些我們即將使用的功能。

          變量

          你可以在 SCSS 中使用變量。主要的好處在于可重用性。我們假設(shè)你的應(yīng)用有一組顏色。主色是藍(lán)色。

          那么你處處都用到了藍(lán)色:按鈕的 background-color(背景色),標(biāo)題和鏈接的 color(顏色)。藍(lán)色無處不在。

          突然有一天,你不喜歡藍(lán)色,開始喜歡綠色。

          • 如果沒有變量:你需要修改所有包含藍(lán)色設(shè)置的代碼。
          • 如果使用了變量:你只需要修改這個(gè)變量。

          // 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;

          }

          }

          可讀性更好了,是不是?你可以利用嵌套在更短時(shí)間內(nèi)寫出復(fù)雜的選擇器。

          分塊與導(dǎo)入

          從可維護(hù)性和可讀性的角度來說,你無法將所有代碼都保存在一個(gè)大文件中。在實(shí)驗(yàn)或構(gòu)建小型應(yīng)用時(shí),這種做法尚且可行,但是到了專業(yè)的級(jí)別……想都不要想。很幸運(yùn)的是,有了 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;

          }

          哈哈!你可能想,你在這里犯了一個(gè)錯(cuò)誤!應(yīng)該是 _animations.scss,而不是 animations ;)

          非也。如果你使用這種命名方式,聰明的 SCSS 知道你指的是分塊文件。

          關(guān)于變量、嵌套、分塊和導(dǎo)入,我們需要了解的就這么多。SCSS 還有很多其他功能:比如混入、繼承和其他指令(@for,@if,等等),在此不做一一介紹了。

          如果你想了解更多信息,請(qǐng)查看相應(yīng)的文檔(https://sass-lang.com/guide)。文檔寫得很好,且易于理解。

          組織 CSS 代碼:BEM 方法論

          我記不清曾經(jīng)多少次在CSS類中使用包攬一切的名字了。比如:.button、.page-1、.page-2、.custom-input。

          我們常常不知道如何命名。然而命名很重要。假如你正在構(gòu)建某個(gè)應(yīng)用,并且由于某種原因不得不將其擱置數(shù)月,那該怎么辦?還有更糟的,假如有人想把項(xiàng)目拿回去,該怎么辦?如果你的 CSS 代碼沒有恰當(dāng)?shù)拿敲凑б豢瓷先ズ茈y明白你在說什么。

          BEM 可以幫助我們解決這個(gè)問題。BEM 是一種命名約定,是英文 Block Element Modifier(塊元素修飾符)的縮寫。

          這種方法可以使我們的代碼結(jié)構(gòu)化,并提高模塊化和可重用性。現(xiàn)在讓我們說一說什么是塊、元素和修飾符。

          你可以把塊視為組件。還記得你小時(shí)候玩過樂高積木嗎?讓我們回憶一下小時(shí)候。

          如果需要建造一個(gè)簡(jiǎn)單的房子,你會(huì)怎么做?你需要一個(gè)窗戶,一個(gè)屋頂,一扇門和一些墻壁。這些就是我們的塊。它們有著本身的意義。

          • 命名:塊名:.block
          • 示例:.card、.form、.post、.user-navigation

          元素

          接下來,你應(yīng)該如何用你的樂高積木建造一個(gè)窗口呢?可能有些積木看起來像框架,如果你把四個(gè)這樣的積木組裝起來,就會(huì)得到一個(gè)漂亮的窗戶。這些就是我們的元素。它們是塊的一部分,它們對(duì)于建塊必不可少。但是,在塊外面的時(shí)候,它們便無用武之地。

          • 命名:塊名+ __ +元素名:.block__element
          • 示例:.post__author、.post__date、.post__text

          修飾符

          現(xiàn)在窗戶已經(jīng)建好了,但是你可能想要一個(gè)綠色或一個(gè)小窗戶。這些我們稱之為修飾符。它們是塊或元素上的標(biāo)志,它們用于改變行為,外觀等等。

          • 命名:塊名稱或元素名稱+ -- +修飾符名稱:.block__element--修飾符,.塊--修飾符
          • 示例:.post--important,.post__btn--disabled

          注意事項(xiàng)

          • 在使用 BEM 的時(shí)候,你可以用且只能用類來命名。不能用 ID,不能用標(biāo)簽。只能用類。
          • 塊和元素可以嵌入其他塊和元素,但是它們必須是完全獨(dú)立的。請(qǐng)記住:獨(dú)立。所以如果你想將把一個(gè)按鈕放在標(biāo)題下的話,就不要在按鈕上加邊距,否則按鈕就會(huì)與標(biāo)題綁定。請(qǐng)改用工具類。
          • 是的,你的 HTML 文件會(huì)超負(fù)荷,但是不用擔(dān)心,與 BEM 帶來的好處相比,這只是個(gè)小小的缺點(diǎn)。

          示例

          以下是一個(gè)練習(xí)。你可以去你最喜歡或最常用的網(wǎng)站,然后想想看哪些是塊、元素和修飾符。

          例如,以下是我想象中的 Google 商店:

          現(xiàn)在該你了。認(rèn)真想想哪些地方可以改進(jìn)。與往常一樣,你必須自己搜索、實(shí)驗(yàn)和構(gòu)件,以便更好地滿足你的需求。

          融會(huì)貫通

          下面的示例演示了 BEM 的功能(https://codepen.io/thomlom/pen/RJvVdQ)。

          寫一個(gè)博文組件

          寫多個(gè)按鈕

          組織 CSS 文件:7-1模式

          你還跟得上我的節(jié)奏嗎?很好!現(xiàn)在讓我們來介紹如何組織 CSS 文件。這個(gè)部分可以真正幫助你提高工作效率,并幫助你立刻找到需要修改的 CSS 代碼。

          為此,讓我們了解一下 7-1 模式。

          你可能會(huì)想,我從未聽過這種模式。

          相信我,這很簡(jiǎn)單。你必須遵守以下兩條規(guī)則:

          1. 將所有內(nèi)容分別寫入7個(gè)不同的文件夾中。
          2. 將它們?nèi)繉?dǎo)入位于根級(jí)別的 main.scss 文件中。僅此而已。

          7 個(gè)文件夾:

          • base:你可以將所有的樣板代碼放入該文件夾中。對(duì)于這里的樣板,我指的是:每次開始一個(gè)新項(xiàng)目時(shí),你需要寫的所有CSS代碼。例如:排版規(guī)則、動(dòng)畫、工具程序(對(duì)于工具程序,我指的是margin-right-large、text-center、...等類)等等。
          • components:這里指組件。這個(gè)文件夾包含所有用于構(gòu)建頁面的組件,例如按鈕、表單、滑塊、彈出窗口等等。
          • layout:頁面不同部分用到的布局,也就是說:頁眉、頁腳、導(dǎo)航、分區(qū)、你自己的網(wǎng)格等等。
          • pages:頁面。有的頁面可能有特定的樣式,與通常的處理方式不同。那么你可以將它放入該文件夾。
          • themes:主題。如果你的應(yīng)用中有不同的主題(黑暗模式、管理員等等),那么可以將它們放入該文件夾。
          • abstracts:抽象。你可以將所有函數(shù)和變量與混入(mixin)放在這里。簡(jiǎn)而言之,就是你所有的幫手。
          • vendors:外部資源。應(yīng)用或項(xiàng)目怎么可能沒有外部的庫呢?你可以將所有不依賴于你的文件都放入該文件夾。例如,你可以放入Font Awesome文件、Bootstrap和其他類似的東西。

          主文件

          你需要將以上所有內(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)容有點(diǎn)太多,一時(shí)難以接受。這個(gè)架構(gòu)適合于大型項(xiàng)目,而非小項(xiàng)目。下面我們介紹一種更適合小項(xiàng)目的做法。

          首先,你不需要 vendors 文件夾。可以將所有外部 CSS 代碼放在頭部的link標(biāo)簽內(nèi)。接下來,如果你的應(yīng)用只有一個(gè)主題的話,可以省略 themes 文件夾。最后,你可能不會(huì)有大量頁面特定的風(fēng)格,所以也 pages 也沒必要。好了,現(xiàn)在只剩下 4 個(gè)文件夾了。

          然后,你有兩個(gè)選擇:

          1. 你可以按照7-1模式組織CSS代碼,那么你需要留下abstracts、components、layout 和 base 文件夾。
          2. 你想將所有的分塊文件和 mail.css 放在一個(gè)大文件夾內(nèi),那么你會(huì)得到如下結(jié)構(gòu):

          sass/

          _animations.scss

          _base.scss

          _buttons.scss

          _header.scss

          ...

          _variables.scss

          main.scss

          你可以隨便選。

          你可能會(huì)想:你說服了我!但是我該如何使用呢?我是說,哪些不支持scss文件的瀏覽器該怎么辦呢?

          說的好!這是我們的最后一步,我們現(xiàn)在就來學(xué)習(xí)如何將SCSS編譯為CSS。

          從 SCSS 到 CSS

          首先,你需要 Node.js 和 NPM(或 Yarn)。

          我們將使用一個(gè)名為 node-sass 的包,它可以讓我們將 .scss 文件編譯為 .css 文件。

          它的 CLI(命令行界面)相當(dāng)容易使用:

          node-sass <input> <output> [options]

          它有多個(gè)選擇,但我們只使用其中兩個(gè):

          • -w:監(jiān)視目錄或文件。這意味著node-sasswaits在時(shí)刻監(jiān)督你的代碼是否發(fā)生改動(dòng),一旦出現(xiàn)發(fā)生,它就會(huì)自動(dòng)編譯成CSS。這在開發(fā)時(shí)非常有用。
          • --output-style:CSS文件的輸出內(nèi)容。它的值可以是:嵌套、展開、緊湊、壓縮。我們將使用它來構(gòu)建你的CSS文件。

          如果你是一個(gè)好奇心很重的人(我希望如此,因?yàn)殚_發(fā)人員應(yīng)該好奇!)那么,請(qǐng)點(diǎn)擊這里查看完整的文檔(https://github.com/sass/node-sass#command-line-interface)。

          現(xiàn)在我們知道需要用哪些工具。其余的工作更簡(jiǎn)單。只需按以下步驟操作:

          • 創(chuàng)建項(xiàng)目:mkdirmy-app && cd my-app
          • 初始化:npm init
          • 添加node-sass庫:npm install node-sass --save-dev
          • 創(chuàng)建文件夾,index.html和main.scss文件:

          touch index.html

          mkdir -p sass/{abstracts,base,components,layout} css

          cd sass && touch main.scss

          • 將這些腳本加入到package.json文件中:

          {

          ...

          "scripts": {

          "watch": "node-sass sass/main.scss css/style.css -w",

          "build": "node-sass sass/main.scss css/style.css --output-style compressed"

          },

          ...

          }

          • 將包含編譯好的 CSS 文件的連接加入到 index.html 文件的 head 標(biāo)簽內(nèi):

          <!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)備好了!你可以在編程的時(shí)候運(yùn)行npm run watch,并在瀏覽器中打開index.html文件。如果你想縮小CSS,只需運(yùn)行npm run build。

          補(bǔ)充

          添加實(shí)時(shí)重新加載

          你可能希望添加實(shí)時(shí)重新加載以提高工作效率,而無需手動(dòng)重新加載本地index.html文件。

          你可以按照以下簡(jiǎn)單的步驟操作:

          • 安裝live-server軟件包:npm install -g live-server。注意:它是一個(gè)全局包。
          • 將npm-run-all添加到項(xiàng)目依賴項(xiàng)中:npm install npm-run-all --save-dev:有了它我們就可以同時(shí)運(yùn)行多個(gè)腳本。
          • 將這些腳本添加到package.json:

          {

          ...

          "scripts": {

          "start": "npm-run-all --parallel liveserver watch",

          "liveserver": "live-server",

          "watch": "node-sass sass/main.scss css/style.css -w",

          },

          ...

          }

          現(xiàn)在如果你運(yùn)行 npm run start,就可以立即看到代碼的變更。

          添加自動(dòng)前綴

          我們?cè)O(shè)置好了開發(fā)工具,太棒了!現(xiàn)在,讓我們來談?wù)剺?gòu)建工具,特別是:自動(dòng)前綴(Autoprefixer)。

          它是一個(gè)工具(尤其是postcss插件),它可以解析CSS,并利用這些值(https://caniuse.com/)將提供商的前綴加入到CSS規(guī)則中。

          實(shí)際上,在構(gòu)建網(wǎng)站時(shí),你可能會(huì)使用一些并非所有瀏覽器都完全支持的新功能。因此,提供商方案可以提供對(duì)這些功能的支持。

          以下是一個(gè)示例:

          -webkit-animation-name: myAnimation;

          -moz-animation-name: myAnimation;

          -ms-animation-name: myAnimation;

          你可能會(huì)想,這寫起來太乏味了。這就是為什么我們需要自動(dòng)前綴來幫助我們的CSS代碼獲得瀏覽器的兼容,而不用增加額外的復(fù)雜性。

          那么我們?nèi)绾斡酶斆鞯貥?gòu)建CSS呢?

          1. 將所有的SCSS文件編譯成一個(gè)主CSS文件。
          2. 使用自動(dòng)前綴為CSS文件添加前綴。
          3. 壓縮CSS文件

          還有最后幾步,請(qǐng)堅(jiān)持看下去,馬上就結(jié)束了。

          • 添加兩個(gè)依賴項(xiàng),postcss-cli和autoprefixer:npm install autoprefixer postcss-cli --save-dev
          • 修改build腳本,并將這些腳本添加到package.json:

          {

          ...

          "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)你運(yùn)行 npm run build 時(shí),可以生成經(jīng)過壓縮的 CSS 代碼,并且添加了提供商前綴!太棒了是不是嗎?

          但是你知道更酷的是什么嗎?我為你設(shè)置了一個(gè)代碼倉(cāng)庫(https://github.com/thomlom/scss-boilerplate),以幫助你迅速開始:)

          如果你想知道我是如何在項(xiàng)目中應(yīng)用這些技術(shù)的,請(qǐng)點(diǎn)擊這里查看我的代碼倉(cāng)庫(https://github.com/thomlom/portfolio)和結(jié)果(https://thomlom.github.io/portfolio/)。我希望你能通過這些例子更深入理解。

          呼~,今天就說這么多!現(xiàn)在,你已準(zhǔn)備好可以開始編寫具有可維護(hù)性、模塊化和可重用性的 CSS 代碼了。

          我希望你喜歡這篇文章。歡迎在下方留言分享你的想法。

          原文:https://medium.freecodecamp.org/how-to-get-better-at-writing-css-a1732c32a72f

          作者:homas Lombart,軟件開發(fā)。

          譯者:彎月,責(zé)編:屠敏

          “征稿啦”

          CSDN 公眾號(hào)秉持著「與千萬技術(shù)人共成長(zhǎng)」理念,不僅以「極客頭條」、「暢言」欄目在第一時(shí)間以技術(shù)人的獨(dú)特視角描述技術(shù)人關(guān)心的行業(yè)焦點(diǎn)事件,更有「技術(shù)頭條」專欄,深度解讀行業(yè)內(nèi)的熱門技術(shù)與場(chǎng)景應(yīng)用,讓所有的開發(fā)者緊跟技術(shù)潮流,保持警醒的技術(shù)嗅覺,對(duì)行業(yè)趨勢(shì)、技術(shù)有更為全面的認(rèn)知。

          如果你有優(yōu)質(zhì)的文章,或是行業(yè)熱點(diǎn)事件、技術(shù)趨勢(shì)的真知灼見,或是深度的應(yīng)用實(shí)踐、場(chǎng)景方案等的新見解,歡迎聯(lián)系 CSDN 投稿,聯(lián)系方式:微信(guorui_1118,請(qǐng)備注投稿+姓名+公司職位),郵箱(guorui@csdn.net)。


          主站蜘蛛池模板: 一区二区免费国产在线观看| 国产成人无码精品一区在线观看 | 人妻无码久久一区二区三区免费| 亚洲国产日韩一区高清在线| 91视频国产一区| 精品无码一区二区三区电影| 久久一区二区三区99| 亚洲色无码一区二区三区| 国产美女一区二区三区| 精品无码一区二区三区水蜜桃| 一区二区高清视频在线观看| 国产亚洲一区二区精品| 亚洲AV噜噜一区二区三区| 欧洲精品一区二区三区在线观看| 99久久国产精品免费一区二区| 亚拍精品一区二区三区| 波多野结衣的AV一区二区三区| 一区二区在线电影| 国产一区二区视频在线播放| 亚洲熟女综合一区二区三区| 无码中文人妻在线一区| 国产一区二区三区国产精品| 国产自产V一区二区三区C| 国模极品一区二区三区| 亚洲国产老鸭窝一区二区三区| 国产美女视频一区| 天天爽夜夜爽人人爽一区二区| 99精品国产一区二区三区2021| 日本美女一区二区三区| 一区二区三区四区在线视频| 亚洲一区二区三区无码国产| 亚洲中文字幕丝袜制服一区 | 国产精品伦子一区二区三区| 风间由美性色一区二区三区 | 亚洲日韩精品一区二区三区无码| eeuss鲁片一区二区三区| 亚洲色一区二区三区四区| 亚洲国产AV一区二区三区四区| 亚洲av无码成人影院一区| 麻豆果冻传媒2021精品传媒一区下载| 国产免费无码一区二区|