亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
Project Wallace 是什么?
命令行界面
Constyble 代碼檢查器
分析器
報(bào)告器
分析 CSS 復(fù)雜度
CSS 選擇器的循環(huán)復(fù)雜度
每條規(guī)則集的聲明數(shù)(內(nèi)聚性)
源代碼行數(shù)
每條規(guī)則的平均選擇器數(shù)
使用 Project Wallace 的收獲
首頁(yè) web前端 css教程 尋找可以監(jiān)視CSS質(zhì)量和復(fù)雜性的堆棧

尋找可以監(jiān)視CSS質(zhì)量和復(fù)雜性的堆棧

Apr 18, 2025 am 11:22 AM

In Search of a Stack That Monitors the Quality and Complexity of CSS

許多開發(fā)者撰寫關(guān)于如何維護(hù) CSS 代碼庫(kù)的文章,但很少有人寫到他們?nèi)绾?em>衡量代碼庫(kù)的質(zhì)量。當(dāng)然,我們有優(yōu)秀的代碼檢查工具,如 StyleLint 和 CSSLint,但它們只能在微觀層面防止錯(cuò)誤。使用錯(cuò)誤的顏色表示法、在已經(jīng)使用 Autoprefixer 的情況下添加供應(yīng)商前綴、以不一致的方式編寫選擇器……諸如此類。

我們一直在尋找改進(jìn) CSS 編寫方式的方法:OOCSS、BEM、SMACSS、ITCSS、實(shí)用優(yōu)先等等。但其他開發(fā)社區(qū)似乎已經(jīng)從單純的代碼檢查工具發(fā)展到像 SonarQube 和 PHP Mess Detector 這樣的工具,而 CSS 社區(qū)仍然缺乏比淺層 lint 規(guī)則更深入的檢查工具。為此,我創(chuàng)建了 Project Wallace,一套用于檢查和強(qiáng)制執(zhí)行 CSS 質(zhì)量的工具。

Project Wallace 是什么?

Project Wallace 的核心是一組工具,包括命令行界面、代碼檢查器、分析器和報(bào)告器。

以下是這些工具的簡(jiǎn)要概述。

命令行界面

這允許您在命令行上運(yùn)行 CSS 分析,并獲取您提供給它的任何 CSS 的統(tǒng)計(jì)信息。

Constyble 代碼檢查器

這是一個(gè)專門為 CSS 設(shè)計(jì)的代碼檢查器?;?Wallace 生成的分析結(jié)果,您可以設(shè)置不應(yīng)超過的閾值。例如,單個(gè) CSS 規(guī)則不應(yīng)包含超過 10 個(gè)選擇器,或者平均選擇器復(fù)雜度不應(yīng)高于 3。

分析器

Extract-CSS 正如其名:從網(wǎng)頁(yè)中提取所有 CSS,以便我們可以將其發(fā)送到 projectwallace.com 進(jìn)行分析。

報(bào)告器

Extract CSS 的所有分析結(jié)果都發(fā)送到 projectwallace.com,儀表板包含所有數(shù)據(jù)的報(bào)告。它類似于 CSS Stats,但它跟蹤更多指標(biāo),并隨時(shí)間推移存儲(chǔ)結(jié)果并在儀表板中顯示它們。它還顯示了兩個(gè)時(shí)間點(diǎn)之間的差異,以及許多其他功能。

分析 CSS 復(fù)雜度

關(guān)于 CSS 復(fù)雜度的文章不多,但 Harry Roberts (csswizardry) 寫的那一篇讓我印象深刻。其要點(diǎn)是每個(gè) CSS 選擇器基本上是一堆 if 語(yǔ)句,這讓我想起了上計(jì)算機(jī)科學(xué)課程時(shí),我必須手動(dòng)計(jì)算方法的循環(huán)復(fù)雜度。Harry 的文章對(duì)我來(lái)說(shuō)非常有意義,因?yàn)樗梢跃帉懸粋€(gè)模塊來(lái)計(jì)算 CSS 選擇器的復(fù)雜度——當(dāng)然,不要與特異性混淆,因?yàn)樵趶?fù)雜度方面,這是一個(gè)完全不同的問題。

基本上,CSS 中的復(fù)雜性可以以多種形式出現(xiàn),但以下是我在審核代碼庫(kù)時(shí)最關(guān)注的幾種:

CSS 選擇器的循環(huán)復(fù)雜度

選擇器的每個(gè)部分都意味著瀏覽器需要執(zhí)行另一個(gè) if 語(yǔ)句。較長(zhǎng)的選擇器比較短的選擇器更復(fù)雜。它們更難調(diào)試,瀏覽器解析速度更慢,也更難覆蓋。

<code>.my-selector {} /* 1 個(gè)標(biāo)識(shí)符 */
.my #super [complex^="selector"] > with ~ many :identifiers {} /* 6 個(gè)標(biāo)識(shí)符 */</code>

每條規(guī)則集的聲明數(shù)(內(nèi)聚性)

包含許多聲明的規(guī)則集比包含少量聲明的規(guī)則集更復(fù)雜。Tailwind 和 Tachyons 等函數(shù)式 CSS 框架的流行,可能歸因于 CSS 本身的相對(duì)“簡(jiǎn)單性”。

<code>/* 1 條規(guī)則,1 個(gè)聲明 => 內(nèi)聚性 = 1 */
.text-center {
  text-align: center;
}

/* 1 條規(guī)則,8 個(gè)聲明 => 內(nèi)聚性 = (1 / 8) = 0.125 */
.button {
  background-color: blue;
  color: white;
  padding: 1em;
  border: 1px solid;
  display: inline-block;
  font-size: normal;
  font-weight: bold;
  text-decoration: none;
}</code>

源代碼行數(shù)

代碼越多,復(fù)雜度越高。每一行編寫的代碼都需要維護(hù),因此包含在報(bào)告中。

每條規(guī)則的平均選擇器數(shù)

一條規(guī)則通常包含 1 個(gè)選擇器,但有時(shí)會(huì)更多。這使得很難刪除 CSS 的某些部分,從而使其更復(fù)雜。

所有這些指標(biāo)都可以使用 Constyble 進(jìn)行代碼檢查,Constyble 是 Project Wallace 在其工具集中使用的 CSS 復(fù)雜度代碼檢查器。在為指標(biāo)定義基線后,只需安裝 Constyble 并設(shè)置配置文件即可。以下是我直接從 Constyble 自述文件中提取的配置文件示例:

<code>{
  // 不要超過 4095 個(gè)選擇器,否則 IE9 將刪除任何后續(xù)規(guī)則
  "selectors.total": 4095,
  // 我們不需要 ID 選擇器
  "selectors.id.total": 0,
  // 如果出現(xiàn)除這些顏色之外的任何其他顏色,則報(bào)告錯(cuò)誤!
  "values.colors.unique": ["#fff", "#000"]
}</code>

最棒的是,Constyble 在您的最終 CSS 上運(yùn)行,因此它只在您來(lái)自 Sass、Less、PostCSS 或您使用的任何其他預(yù)處理器的所有預(yù)處理工作之后才執(zhí)行其操作。這樣,我們可以對(duì)選擇器的總數(shù)或平均選擇器復(fù)雜度進(jìn)行智能檢查——就像任何代碼檢查器一樣,您可以將其作為構(gòu)建步驟的一部分,如果出現(xiàn)任何問題,您的構(gòu)建將失敗。

使用 Project Wallace 的收獲

在使用 Project Wallace 一段時(shí)間后,我發(fā)現(xiàn)它非常適合跟蹤復(fù)雜度。雖然它主要用于此目的,但它也是一種查找 CSS 中代碼檢查器可能找不到的細(xì)微錯(cuò)誤的好方法,因?yàn)樗鼈冋跈z查預(yù)處理的代碼。以下是我發(fā)現(xiàn)的一些有趣的事情:

  • 我已經(jīng)停止計(jì)算沖刺中需要修復(fù)網(wǎng)站上顏色不一致的用戶故事數(shù)量。 已經(jīng)有幾年的項(xiàng)目,以及人員進(jìn)出公司:這是一個(gè)讓網(wǎng)站上每個(gè)品牌顏色都出錯(cuò)的秘訣。幸運(yùn)的是,我們實(shí)施了 Constyble 和 Project Wallace 以獲得利益相關(guān)者的認(rèn)可,因?yàn)槲覀兡軌蜃C明客戶的品牌在新項(xiàng)目中非常準(zhǔn)確。Constyble 阻止我們添加不在樣式指南中的顏色。
  • 我已經(jīng)在我的前雇主工作的項(xiàng)目中安裝了 Project Wallace webhooks。 任何時(shí)候向項(xiàng)目添加新的 CSS,它都會(huì)將 CSS 發(fā)送到 projectwallace.com,并且會(huì)在項(xiàng)目的儀表板中立即顯示。這使得很容易發(fā)現(xiàn)何時(shí)向 CSS 添加了特定的選擇器或媒體查詢。
  • 今年早些時(shí)候的 CSS-Tricks 重設(shè)計(jì)意味著復(fù)雜性和文件大小的大幅下降。 重設(shè)計(jì)非常棒,可以進(jìn)行分析。它使您有機(jī)會(huì)仔細(xì)查看幕后情況,并弄清楚作者如何更改了他們的 CSS。了解哪些部分不適用于站點(diǎn)以及哪些新部分適用,可能會(huì)讓您了解 CSS 的發(fā)展速度。
  • 一家位于荷蘭的大型國(guó)際公司曾經(jīng)在一個(gè) CSS 文件中擁有超過 4095 個(gè)選擇器。 我知道他們正在積極發(fā)展新興市場(chǎng),并且他們必須支持 Internet Explorer 8 。IE9 在 4095 個(gè)選擇器后停止讀取所有 CSS,因此他們的大部分 CSS 并未在舊版 IE 瀏覽器中應(yīng)用。我給他們發(fā)了一封電子郵件,他們驗(yàn)證了這個(gè)問題并立即通過將 CSS 分成兩個(gè)文件來(lái)修復(fù)它。
  • GitLab 目前使用超過 70 種獨(dú)特的字體大小。 我很確定他們的排版系統(tǒng)很復(fù)雜,但這似乎有點(diǎn)過于雄心勃勃。也許是因?yàn)橐恍┑谌?CSS,但這很難判斷。
  • 在繼承其他開發(fā)人員的項(xiàng)目時(shí),我會(huì)查看 CSS 分析結(jié)果,以便了解項(xiàng)目的難點(diǎn)。 他們是否大量使用了 !important?平均規(guī)則集大小是否易于理解,或者他們是否在每個(gè)規(guī)則集中添加了 20 多個(gè)聲明?平均選擇器長(zhǎng)度是多少,它們是否難以覆蓋?不必訴諸 .complex-selector-override\[class\][class][class]...[class] 將是很好的。
  • 檢查縮小是否有效的巧妙技巧是讓 Constyble 檢查代碼行數(shù)指標(biāo)是否不大于 1。 CSS 縮小意味著所有 CSS 都放在一行上,因此代碼行數(shù)應(yīng)等于 1!
  • 我的另一個(gè)項(xiàng)目中一直發(fā)生的事情是縮小失敗了。 我不知道,直到 Project Wallace 的差異顯示給我許多顏色突然像 #aaaaaa 而不是 #aaa 一樣被編寫出來(lái)。這本身并不是一件壞事,但它同時(shí)發(fā)生在如此多的顏色上,以至于肯定有什么地方出了問題??焖僬{(diào)查顯示我在縮小中犯了一個(gè)錯(cuò)誤。
  • StackOverflow 有四種獨(dú)特的編寫白色顏色方式。 這不一定是壞事,但這可能是 CSS 縮小程序損壞或設(shè)計(jì)系統(tǒng)不一致的跡象。
  • Facebook.com 在他們的 CSS 中有超過 650 種獨(dú)特的顏色。 損壞的設(shè)計(jì)系統(tǒng)也開始聽起來(lái)像是一種可能性。
  • 我前雇主的一個(gè)項(xiàng)目 顯示 input[type=checkbox]:checked .label input[type=radio] label:focus:after 是最復(fù)雜的選擇器。仔細(xì)檢查后,我們發(fā)現(xiàn)此選擇器定位嵌套在另一個(gè)輸入中的輸入。這在 HTML 中是不可能的,我們認(rèn)為我們一定忘記了 CSS 中的逗號(hào)。沒有代碼檢查器警告我們這一點(diǎn)。
  • CSS 預(yù)處理器中的嵌套很酷,但可能會(huì)導(dǎo)致錯(cuò)誤的事情,例如 @media (max-width: 670px) 和 (max-width: 670px),正如我在 Syntax.fm 中發(fā)現(xiàn)的那樣。

對(duì)于 Project Wallace 來(lái)說(shuō),這只是冰山一角。一旦您開始分析您的 CSS,還有更多的東西需要學(xué)習(xí)和發(fā)現(xiàn)。不要只查看您自己的統(tǒng)計(jì)數(shù)據(jù),還要查看其他人正在做什么。

我已經(jīng)將我的 Constyble 配置用作與經(jīng)驗(yàn)較少的開發(fā)人員進(jìn)行對(duì)話的談資,以解釋為什么他們?cè)趶?fù)雜的 CSS 塊上構(gòu)建失敗。與其他開發(fā)人員討論為什么我們要避免或推廣某些 CSS 編寫方式有助于知識(shí)轉(zhuǎn)移。它也幫助我腳踏實(shí)地。不得不向只想幫忙的 PHP 開發(fā)人員解釋我已經(jīng)做了多年的事情,讓我重新思考為什么我要按照自己的方式做事。

我的目標(biāo)不是告訴任何人 CSS 中什么正確或什么錯(cuò)誤,而是創(chuàng)建工具,以便您可以驗(yàn)證什么對(duì)您和您的同事有效。Project Wallace 在這里幫助我們理解我們編寫的 CSS。

以上是尋找可以監(jiān)視CSS質(zhì)量和復(fù)雜性的堆棧的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
CSS教程,用于創(chuàng)建加載旋轉(zhuǎn)器和動(dòng)畫 CSS教程,用于創(chuàng)建加載旋轉(zhuǎn)器和動(dòng)畫 Jul 07, 2025 am 12:07 AM

創(chuàng)建CSS加載旋轉(zhuǎn)器的方法有三種:1.使用邊框的基本旋轉(zhuǎn)器,通過HTML和CSS實(shí)現(xiàn)簡(jiǎn)單動(dòng)畫;2.使用多個(gè)點(diǎn)的自定義旋轉(zhuǎn)器,通過不同延遲時(shí)間實(shí)現(xiàn)跳動(dòng)效果;3.在按鈕中添加旋轉(zhuǎn)器,通過JavaScript切換類來(lái)顯示加載狀態(tài)。每種方法都強(qiáng)調(diào)了設(shè)計(jì)細(xì)節(jié)如顏色、大小、可訪問性和性能優(yōu)化的重要性,以提升用戶體驗(yàn)。

解決CSS瀏覽器兼容性問題和前綴 解決CSS瀏覽器兼容性問題和前綴 Jul 07, 2025 am 01:44 AM

處理CSS瀏覽器兼容性和前綴問題需理解瀏覽器支持差異并合理使用廠商前綴。1.了解常見問題如Flexbox、Grid支持不一,position:sticky失效,動(dòng)畫表現(xiàn)不同;2.查閱CanIuse確認(rèn)特性支持情況;3.正確使用-webkit-、-moz-、-ms-、-o-等廠商前綴;4.推薦使用Autoprefixer自動(dòng)添加前綴;5.安裝PostCSS并配置browserslist指定目標(biāo)瀏覽器;6.構(gòu)建時(shí)自動(dòng)處理兼容性;7.老項(xiàng)目可用Modernizr檢測(cè)特性;8.不必追求所有瀏覽器一致,確

顯示:內(nèi)聯(lián),顯示:塊和顯示:內(nèi)聯(lián)塊之間有什么區(qū)別? 顯示:內(nèi)聯(lián),顯示:塊和顯示:內(nèi)聯(lián)塊之間有什么區(qū)別? Jul 11, 2025 am 03:25 AM

Themaindifferencesbetweendisplay:inline,block,andinline-blockinHTML/CSSarelayoutbehavior,spaceusage,andstylingcontrol.1.Inlineelementsflowwithtext,don’tstartonnewlines,ignorewidth/height,andonlyapplyhorizo??ntalpadding/margins—idealforinlinetextstyling

使用CSS剪輯路徑創(chuàng)建自定義形狀 使用CSS剪輯路徑創(chuàng)建自定義形狀 Jul 09, 2025 am 01:29 AM

使用CSS的clip-path屬性可以裁剪元素為自定義形狀,如三角形、圓形缺口、多邊形等,無(wú)需依賴圖片或SVG。其優(yōu)勢(shì)包括:1.支持circle、ellipse、polygon等多種基本形狀;2.可響應(yīng)式調(diào)整,適配移動(dòng)端;3.易于動(dòng)畫化,可結(jié)合hover或JavaScript實(shí)現(xiàn)動(dòng)態(tài)效果;4.不影響布局流,僅裁剪顯示區(qū)域。常見用法如圓形裁剪clip-path:circle(50pxatcenter)和三角形裁剪clip-path:polygon(50%0%,1000%,00%)。注意

造型與CSS不同訪問的鏈接 造型與CSS不同訪問的鏈接 Jul 11, 2025 am 03:26 AM

設(shè)置訪問過鏈接的樣式能提升用戶體驗(yàn),尤其在內(nèi)容密集型網(wǎng)站中幫助用戶更好導(dǎo)航。1.使用CSS的:visited偽類可定義已訪問鏈接樣式,如顏色變化;2.注意瀏覽器出于隱私限制僅允許修改部分屬性;3.顏色選擇應(yīng)與整體風(fēng)格協(xié)調(diào),避免突兀;4.移動(dòng)端可能不顯示該效果,建議結(jié)合其他視覺提示如icon輔助標(biāo)識(shí)。

如何使用CSS創(chuàng)建響應(yīng)式圖像? 如何使用CSS創(chuàng)建響應(yīng)式圖像? Jul 15, 2025 am 01:10 AM

要使用CSS創(chuàng)建響應(yīng)式圖片,主要可通過以下方法實(shí)現(xiàn):1.使用max-width:100%和height:auto讓圖片在保持比例的同時(shí)自適應(yīng)容器寬度;2.結(jié)合HTML的srcset和sizes屬性智能加載適配不同屏幕的圖片源;3.利用object-fit和object-position控制圖片裁剪與焦點(diǎn)展示。這些方法共同確保圖片在不同設(shè)備上清晰、美觀地呈現(xiàn)。

揭開CSS單元的神秘面紗:PX,EM,REM,VW,VH比較 揭開CSS單元的神秘面紗:PX,EM,REM,VW,VH比較 Jul 08, 2025 am 02:16 AM

CSS單位的選擇取決于設(shè)計(jì)需求和響應(yīng)式要求。1.px用于固定尺寸,適合精確控制但缺乏彈性;2.em是相對(duì)單位,受父元素影響易導(dǎo)致級(jí)聯(lián)問題,rem則基于根元素更穩(wěn)定,適合全局縮放;3.vw/vh基于視口大小,適合響應(yīng)式設(shè)計(jì),但需注意極端屏幕下的表現(xiàn);4.選擇時(shí)應(yīng)根據(jù)是否需要響應(yīng)式調(diào)整、元素層級(jí)關(guān)系及視口依賴程度來(lái)決定,合理搭配使用可提升布局靈活性與維護(hù)性。

什么是常見的CSS瀏覽器不一致? 什么是常見的CSS瀏覽器不一致? Jul 26, 2025 am 07:04 AM

不同瀏覽器對(duì)CSS解析存在差異,導(dǎo)致顯示效果不一致,主要包括默認(rèn)樣式差異、盒模型計(jì)算方式、Flexbox和Grid布局支持程度及某些CSS屬性行為不一致。1.默認(rèn)樣式處理不一致,解決方法是使用CSSReset或Normalize.css統(tǒng)一初始樣式;2.舊版IE的盒模型計(jì)算方式不同,建議統(tǒng)一使用box-sizing:border-box;3.Flexbox和Grid在邊緣情況或舊版本中表現(xiàn)有差異,應(yīng)多測(cè)試并使用Autoprefixer;4.某些CSS屬性行為不一致,需查閱CanIuse并提供降級(jí)

See all articles