1. <tt id="5hhch"><source id="5hhch"></source></tt>
    1. <xmp id="5hhch"></xmp>

  2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

    <rp id="5hhch"></rp>
        <dfn id="5hhch"></dfn>

      1. 如何搭建系統(tǒng)CSS架構(gòu)

        時間:2022-12-31 23:30:56 系統(tǒng)架構(gòu)師 我要投稿
        • 相關(guān)推薦

        如何搭建系統(tǒng)CSS架構(gòu)

          css是英文Cascading Style Sheets的縮寫。 它是一種用來表現(xiàn)HTML(標(biāo)準通用標(biāo)記語言的一個應(yīng)用)或XML(標(biāo)準通用標(biāo)記語言的一個子集)等文件樣式的計算機語言。那么如何搭建系統(tǒng)CSS架構(gòu)呢,一起來學(xué)習(xí)學(xué)習(xí)!

          搭建CSS法則

          在項目開始的時候,我們談?wù)摿碎_發(fā)者關(guān)于他們的流程和痛點,并問他們的接口設(shè)計系統(tǒng)如何讓他們的工作量變簡單。

          完成我的前端指導(dǎo)問卷,這些導(dǎo)致一系列前端規(guī)則和系統(tǒng)封裝。這里有些我們創(chuàng)建的CSS具體規(guī)則。

          模塊化 —— 設(shè)計系統(tǒng)在每一個方面都是模塊,這是非常實用寫CSS的方法。這在組件之間需要清晰分隔。

          可讀性是關(guān)鍵 ——開發(fā)者必須在第一眼理解CSS代碼,并且理解每一個選擇器的目的。

          清晰勝過簡潔 —— 設(shè)計系統(tǒng)有時候看上去很冗長,但是作為交換,它提供清晰和韌性。保持CSS可讀性和可擴展性意味著犧牲簡潔的語法。

          保持平面化 —— 長的選擇器要回避,無論什么地方,盡可能保持CSS獨立DOM和模塊化。

          避免沖突 —— 因為組件會部署許多不同的應(yīng)用,保證設(shè)計系統(tǒng)之間的CSS不會和其他的庫和系統(tǒng)有沖突,這很重要。通過系統(tǒng)空間命名Class名可以完成這個,更多的會在之后描述。

          從這些規(guī)則中,我們搭建了制約和語法,包含了這些規(guī)則,以滿足開發(fā)者的需求。這里有一個我們總結(jié)出的class語法:

          全局命名空間

          所有的Class都和設(shè)計系統(tǒng)關(guān)聯(lián)的都以全局命名空間為前綴,這就是公司名稱后面加一個連體符

          .cn-

          如果你工作的CSS框架是用于單個網(wǎng)站或者如果你對你的開發(fā)環(huán)境有絕對控制,那么引入全局命名空間是不需要的。但是如果你的設(shè)計系統(tǒng)是混合的技術(shù),那么為系統(tǒng)特定代碼創(chuàng)建一個標(biāo)識是很重要的。作為第三方開發(fā)者,在多個環(huán)境中利用他們的系統(tǒng),營銷團隊可能會失控,因此Lightning Design System引用了相似的方法到他們的系統(tǒng)之中(通過前綴.slds-),在我們的例子中,許多我們客戶的開發(fā)者使用Angular,因此他們已經(jīng)很熟悉命名空間的概念,因為Angular使用ng-作為命名空間,為Angular特殊的代碼。

          Class前綴

          除了命名空間,我們添加前綴到每個Class,為了使之更加明顯,這個這個Class是做什么的。下面是我們使用的類前綴:

          c- 用于UI組件,比如.cn-c-card 或.cn-c-header

          l- 用于布局相關(guān)樣式, 比爾.cn-l-grid__item或.cn-l--two-column

          u- 用于公共部分, 比如.cn-u-margin-bottom-double 或.cn-u-margin-bottom-double

          is- 和 has- 用于特定狀態(tài), 比如.cn-is-active或 .cn-is-disabled. 適用于這些狀態(tài)為基礎(chǔ)的樣式。

          js- 用于目標(biāo)特定功能, 比如.js-modal-trigger. 這些class沒有綁定樣式; 他們只是為了行為而保留的. 對于大多數(shù)案例, 這些 js- 類將在元素上會切換基于狀態(tài)的類。

          我被灌輸來自Harry Roberts的一個概念,并且一開始在我認為這有道理的同事,我還是持有質(zhì)疑的態(tài)度的,僅僅因為這是額外的字符并且我認為前綴會降低代碼可讀性。然而我的想法是不對的。在實施類前綴之后,我發(fā)現(xiàn)他們對于分清每個類的角色十分有幫助并且對于破譯一個應(yīng)用的代碼庫十分容易一目了然。對于設(shè)計系統(tǒng)用戶,這種清晰的代碼能夠整理清楚頭緒,特別有用。

          BEM語法

          BEM 代表了“塊元素修飾”,這意味著:

          Block 主要組件塊, 比如.cn-c-card或者.cn-c-btn

          Element 是主要塊的一個子類,比如.cn-c-card__title

          Modifier 是一個組件樣式的各種變化, 比如.cn-c-alert--error

          這種方法論已經(jīng)很受歡迎了,將這些概念和全局命名空間和類前綴結(jié)合在一起,允許我們創(chuàng)造更明顯封裝的類名。

          把它們都放到一起:解剖一個類

          全局命名空間的結(jié)合,類別前綴,和BEM語法引出了一個明確的(是的,冗長的)類字符創(chuàng),允許開發(fā)者們在構(gòu)造UI的時候演繹他在之間扮演的角色。

          讓我們檢查下以下的例子:

          .cn-c-btn--secondary

          cn- 是來自設(shè)計系統(tǒng)的用于所有樣式的全局命名空間。

          c- 是class的類別, 在案例中,c- 一位置“組件”

          btn 是塊名(“Block(塊)” 就是BEM中的“B”)

          --secondary 是一個修飾成分, 指向一個塊的變化多端的樣式 (“Modifier(修飾)” 就是BEM中的“M”)

          這里有另一個例子:

          .cn-l-grid__item

          cn- 再一次出現(xiàn)就是系統(tǒng)的全局命名空間。

          l- 是類的類別, 在這種情況下l- 意味著 “布局”

          grid 是塊名

          __item 是一個元素, 表明那是塊中的一個分支(“Element”在BEM中指“E”)

          還有一個:

          .cn-c-primary-nav__submenu

          cn- 是系統(tǒng)的全局命名空間。

          c- 是類的類別, 在這個例子中c- 意味著 “component”

          primary-nav 是塊名

          __submenu是一個元素, 指出他是塊的子元素 (“Element” 在BEM中是“E”)

          此外,毫無疑問,這些類比大多數(shù)其他方法的類更加冗長,但是對于這種特殊的系統(tǒng),這些約定很有意義。

          其他技巧

          明確細節(jié)

          為了防止代碼瓦解,我們詳細說明如何處理這么多細小的細節(jié),就像注釋、代碼塊之間的空間距,tab還是space等等。感謝上天,Harry Roberts已經(jīng)將一個極佳的綜合的資源整合在了一起,稱之為CSS Guidelines,對于這些類型的約定,這個作為我們的底線。我們梳理所有的代碼并且標(biāo)記出我們偏離Harry指出地方的計劃。

          Sass父選擇器

          我一直有個關(guān)于CSS的一個問題,是找出究竟在哪里放一個規(guī)定的規(guī)則。如果我有一個主要的導(dǎo)航組件,我要把這些樣式放在頭部還是在部分的主要導(dǎo)航Sass?謝天謝地,Sass父元素原則器出現(xiàn)了,這允許我們把所有的組件特定的樣式放在一個根元素下:

          .cn-c-primary-nav {

          /**

          * Nav appearing in header

          * 1) Right-align navigation when it appears in the header

          */

          .cn-c-header & {

          margin-left: auto; /* 1 */

          }}

          這意味著,所有的主要導(dǎo)航樣式都可以在一個主導(dǎo)航Sass部分中找到,而不是將他們分成好幾個文件。

          Sass嵌套的明確規(guī)則

          在Sass中嵌套可能十分方便,但是增加了糟糕輸出的危險,會有過長的選擇器字符創(chuàng)。我們遵循《盜夢空間》規(guī)則,嵌套永遠不超過3層。

          牢記設(shè)計系統(tǒng)的CSS平坦規(guī)則,我們希望在下列情況中限制嵌套:

          一個樣式塊修飾

          媒體查詢

          父元素選擇器

          狀態(tài)

          樣式塊裝飾 對于裝飾來說,如果規(guī)則只有幾行長度,裝飾塊可以被嵌套在父元素中,就像下面這樣:

          .cn-c-alert {

          border: 1px solid gray;

          color: gray;

          /**

          * 錯誤彈出

          */

          &--error {

          border-color: red;

          color: red;

          }}

          由于&符號,這會編譯成:

          .cn-c-alert {

          border: 1px solid gray;

          color: gray;}.cn-c-alert--error {

          border-color: red;

          color: red;}

          對于長樣式塊,我們不會嵌套裝飾代碼,因為這減少了代碼的可讀性。

          媒體查詢器

          組件特定媒體查詢器能夠在組件塊中嵌套。

          .cn-c-primary-nav {

          /* Base styles */

          /**

          * 1) On larger displays, convert to a horizontal list

          */

          @media all and (min-width: 40em) {

          display: flex;

          }}

          這個會被編譯成:

          .cn-c-primary-nav {

          /* Base styles */}@media all and (min-width: 40em) {

          .cn-c-primary-nav {

          display: flex;

          }}

          父元素選擇器

          設(shè)計系統(tǒng)會充分使用Sass的父元素選擇器原理。這里允許所有的給定組件的規(guī)則在一個地方維護。

          .cn-c-primary-nav {

          /**

          * Nav appearing in header

          * 1) Right-align navigation when it appears in the header

          */

          .cn-c-header & {

          margin-left: auto; /* 1 */

          }}

          這會被編譯成:

          .cn-c-header .cn-c-primary-nav {

          display: flex;}

          cn-c-primary-nav所有樣式都會在一個地方找到,而不是分散在許多部分文件之中。

          狀態(tài)

          組件的狀態(tài)必須包括在一個嵌套的元素之中。這包括了hover, focus,和active狀態(tài):

          .cn-c-btn {

          background: blue;

          &:hover, &:focus {

          background: red;

          }}

          這需要編譯為:

          .cn-c-btn {

          background: blue;}.cn-c-btn:hover, .cn-c-btn:focus {

          background: red;}

          狀態(tài)同樣可以選用通用類的形式,比如is-和 has-:

          .cn-c-accordion__panel {

          overflow: hidden;

          max-height: 0;

          &.cn-is-active {

          max-height: 40em;

          }}

          者會被編譯成:

          .cn-c-accordion__panel {

          overflow: hidden;

          max-height: 0;}.cn-c-accordion__panel.cn-is-active {

          max-height: 40em;}

          為了創(chuàng)建一個堅固的系統(tǒng),將這些規(guī)則都放入一個地方中,給我們需要堅持的一些制約和規(guī)定。當(dāng)我們遇到一些規(guī)定不是很明顯或者有多重解決方案的情況下,我們需要一次談話,討論如何處理這些問題,如果需要的話可以更新方針。


        【如何搭建系統(tǒng)CSS架構(gòu)】相關(guān)文章:

        什么是系統(tǒng)架構(gòu)師-如何成為系統(tǒng)架構(gòu)師05-11

        如何成為優(yōu)秀的系統(tǒng)架構(gòu)師08-30

        企業(yè)大規(guī)模系統(tǒng)整合架構(gòu)如何選型08-13

        智慧健康系統(tǒng)架構(gòu)05-15

        秒殺系統(tǒng)架構(gòu)分析05-18

        如何成為一名系統(tǒng)架構(gòu)師05-14

        Web系統(tǒng)架構(gòu)的性能優(yōu)化06-10

        SAP系統(tǒng)架構(gòu)是什么06-10

        linux系統(tǒng)集群的架構(gòu)與實現(xiàn)06-19

        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码

        1. <tt id="5hhch"><source id="5hhch"></source></tt>
          1. <xmp id="5hhch"></xmp>

        2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

          <rp id="5hhch"></rp>
              <dfn id="5hhch"></dfn>