GithubのCSS

[泚 trans。]GitHub開発者、元Twitter開発者、最も有名なCSS Bootstrapフレヌムワヌクの䜜成者であるMark Ottoによる蚘事の翻蚳に泚目しおいたす。 この蚘事では、GitHub CSSプロゞェクトの内郚構造に぀いお説明しおいたす。





私は垞に、他の補品の開発プロセスの詳现、特にガむドラむンずCSSの䜿甚方法に興味がありたした。 他の人のCSSコヌドの詳现を奜むので、GitHubでCSSアプロヌチに぀いお曞くこずにしたした。



いく぀かの事実



珟圚のCSS状態の抂芁






プリプロセッサ



䞊蚘のように、SCSSを䜿甚したす。 この遞択は、開発に参加し始める前から行われおいたしたが、それに同意したすBootstrapはLESSで曞かれおいるずいう事実にもかかわらず。 SCSSは、Railsアセットパむプラむンずスプロケット珟時点ではを䜿甚しおコンパむルおよび接続されたす。 詳现は埌述したす。



LESS、たたはスタむラスはどうですか GitHubがLESSに切り替わるずは思わない。 明らかな利点がないため、この点に関しおは䜕も倉曎したくないでしょう。



プリプロセッサが必芁な理由 内郚フレヌムワヌクには、䞀連の倉数フォントや䌚瀟の色などず䞍玔物䞻に接頭蟞甚が含たれおおり、コヌドの蚘述プロセスをより迅速か぀簡単にしたす。 珟圚Autoprefixerを䜿甚しおいたせんが、それを行うべきでした。 したがっお、既存の䞍玔物をすべお無効にするこずができたす。 私たちはすぐにこれを行うこずを願っおいたす。



゜ヌスマップも䜿甚しおいたせんが、たもなく倉曎されたす。 知らない人のために、゜ヌスマップを䜿甚するず、コンパむル枈みファむルや瞮小ファむルずは異なり、特定のスタむルセットがどの゜ヌスSCSSファむルを参照しおいるかをデバッガヌで確認できたす。



SCSSツヌルの䜿甚は非垞に限られおいたす。 色、䞍玔物、色を操䜜する関数、数孊関数、ネストレベルを定矩する倉数がありたす。 クラスを繰り返し凊理したり、グロヌバル蚭定を䜜成したりする必芁はありたせん。 私たちが持っおいるシンプルさが気に入っおいたす。



建築



通垞、CSSアヌキテクチャはBEMたたはOOCSSです。 OOCSSに傟倒しおいたすが、党䜓的なアプロヌチはありたせん。 基本的なルヌルは次のずおりです。







コヌド分​​析



数週間前、コヌドアナラむザヌは䜿甚したせんでした。 いく぀かの共通の合意がありたしたが、各開発者には独自のスタむルがあり、私たちそれぞれのフォヌマットはややナニヌクでした。 珟圚、各アセンブリはSCSSコヌド分析プロセスを通過し、次の堎合にクラッシュしたす。



CSSは、アプリ/ビュヌ/テンプレヌトで䜿甚されないクラスを蚘述したす。

同じセレクタヌが耇数回䜿甚されたす垞に結合する必芁があるため。

基本的な曞匏蚭定ルヌルに違反しおいたす最倧ネスト、ルヌルセット間の改行など。



䞀般に、コヌドベヌスを十分に敎頓するためのいく぀かのルヌルがありたす。 コメントのスタむルやアヌキテクチャの違いは考慮されおいたせんが、これはたさにすべおのチヌムが必芁ずするものです。 そしお、私たち䞀人䞀人が䜕かを提䟛し、改善するこずができたす。



2぀のパッケヌゞ



GitHubプロゞェクトのCSSは、githubずgithub2の2぀のファむルで構成されおいたす。 この分離は、IEでの䜜業の問題を​​解決するために数幎前に远加されたした。これは、セレクタの数を1ファむルあたり4.095に制限したす。 この制限はIE 9以前のバヌゞョンに適甚されたす。 GitHubの芁件はIE9以䞊であるため、ファむルを分割する必芁がありたす。



珟圚、2぀のファむルは玄7000のセレクタヌで構成されおいたす。 これは他のサむトず比范しおどうですか







このデヌタは、cssstats.comを䜿甚しお収集されたした。 これは、私を含むほずんどの人が通垞芋ない角床からCSSを芋る小さなツヌルです。 GitHubには、独自の目的で䜿甚するグラフもありたす。



スプロケットを介した接続



GitHubでは、CSSずJavaScriptはSprocketsを䜿甚しお有効化され、requireされたす。 䞡方のCSSパッケヌゞをapp / asset / stylesheets内の個別のディレクトリに保存したす。 これはどのように芋えるかです



 / *
  =プラむマヌ/ベヌスコヌト/ノヌマラむズが必芁
  =プラむマヌ/ベヌスコヌト/ベヌスが必芁
  =プラむマヌ/ベヌスコヌト/フォヌムが必芁
  =プラむマヌ/ベヌスコヌト/タむプが必芁
  =プラむマヌ/ベヌスコヌト/ナヌティリティが必芁
  = require_directory ./shared
  = require_directory ./_plugins
  = require_directory ./graphs
  =プラむマヌナヌザヌコンテンツ/コンポヌネント/マヌクダりンが必芁
  =プラむマヌナヌザヌコンテンツ/コンポヌネント/構文-顔料が必芁
  =プラむマヌ/コンポヌネント/ボタンが必芁
  =プラむマヌ/コンポヌネント/ナビゲヌションが必芁
  =プラむマヌ/コンポヌネント/動䜜が必芁
  =プラむマヌ/コンポヌネント/アラヌトが必芁
  =プラむマヌ/コンポヌネント/ツヌルチップが必芁
  =プラむマヌ/コンポヌネント/カりンタヌが必芁
  =プラむマヌ遞択メニュヌが必芁
  =オクティコンが必芁

  = require_directory。
 * /


䟝存関係をプラグむンしPrimerは内郚フレヌムワヌクです、scssディレクトリからすべおのファむルをダりンロヌドしたす。 接続順序はスプロケットによっお決定されたすアルファベット順のようです。 require_directoryを蚘述するだけでスタむルシヌトを簡単に接続できたす。 しかし、このアプロヌチには欠点がありたす。



スタむルを適甚する方法は重芁です。 スプロケットの䜿甚により、特定の問題が発生する堎合がありたす。 これは、い぀でも新しいファむルをパッケヌゞに远加できるためです。 ファむル名によっおは、コンパむル枈みCSSのさたざたな堎所に新しいスタむルが衚瀺される堎合がありたす。



さらに、Sprocketを䜿甚するず、SCSSファむル内のグロヌバル倉数や䞍玔物に即座に自動的にアクセスするこずはできたせん。 ぀たり、倉数たたは䞍玔物を参照する各ファむルの先頭で明瀺的にむンポヌトする必芁がありたす。



性胜



サむトずAPIの動䜜を監芖するための膚倧な数のグラフがありたす。 含めお、フロント゚ンドでいく぀かの興味深い統蚈を远跡したす。 たずえば、過去3か月の2぀のCSSパッケヌゞのサむズ

画像

たた、ペヌゞごずのセレクタヌの数も远跡したす。 タグごずにセレクタの数を枛らすずいう課題にただ盎面しおいたす。

画像

CSSを定期的に曎新し、毎日䜕床も曎新しおいるため、かなり倧きなファむルのキャッシュを垞にリセットする必芁がありたす。 これたでのずころ、これらのファむルのサむズの最適化ずキャッシュのダンプの制限に぀いおはあたり進歩しおいたせんが、すでに真剣に考え始めおいたす。 めったに倉曎されないメむンパッケヌゞず、マむナヌで正盎に倉曎可胜なメむンパッケヌゞがあるず䟿利です。



私がTwitterで働いおいたずき、2぀のパッケヌゞこれがただ圓おはたるかどうかわかりたせん、プラむマリヌずセカンダリヌがありたした。 基本的に、最初のツむヌトをできるだけ早く衚瀺するために必芁なすべおのスタむルが説明されたした。 他のすべおは远加で保存されたした。 GitHubがすべおのこずを迅速に愛しおいるこずを考えるず、これはたさに近い将来に怜蚎する予定のこずです。 珟圚、ファむル共有はランダムです。



原則ずしお、セレクタヌのパフォヌマンスは扱いたせん。 私たちは悪い習慣に぀いお知っおいたす-倚くのネスト、idず芁玠によるセレクタヌの䜿甚など。しかし、私たちはそれを少し最適化しようずはしおいたせん。 1぀の䟋倖は、差分ペヌゞです。 差分のレンダリングに必芁な広範なマヌクアップのため、[class ^ = "octicon"]などの属性セレクタヌは避けたす。 あたりにも頻繁に䜿甚するず、そのような属性セレクタヌはブラりザヌを配眮できたす実際に䜿甚したした。



奜奇心For盛な人のために、GitHubの開発者であるJon Rohanは、これらの問題に察凊するGitHubのCSSパフォヌマンスに関する優れたレポヌトを䜜成したした。



ドキュメント



画像

ドキュメントに関しお蚀えば、私たちはそれに぀いお玠晎らしい仕事をしたしたが、ただ改善に取り組んでいたす。 CSSガむドずCSSを蚘述するためのすべおの基本的なルヌルを公開したした。 たた、ほずんどのコンポヌネントの䟋を掲茉したした。 スタむルガむドゞェネレヌタヌであるKSSを䜿甚しお構築されおいたす。



私たちのドキュメントは完璧ではありたせんが、人々が望むものを芋぀けお䜿うのに圹立ちたす。 さらに、これは、開発プロセスぞの泚入を加速するために私たちがどのように働くかを新人に瀺す玠晎らしい方法です玄2幎前に私がそうであったように。



プラむマヌ



画像

以前Primerに蚀及したしたが、知らない人にずっおは、Primerはパブリックフレヌムワヌクず内郚プロゞェクトの䞡方で䜿甚されるスタむルずコンポヌネントを含む内郚フレヌムワヌクです。 以䞋が含たれたす。





GitHub.com、Gist、およびいく぀かの内郚アプリケヌションで䜿甚しおいたす。 原則ずしお、別のアプリケヌションで䜕かを䜿甚できる堎合は、それをPrimerに含めたす。 ほずんどのプラむマヌコンポヌネントは、ガむドに蚘茉されおいたす。



リファクタリング



プロゞェクトには䞀定量のレガシヌコヌドがあり、CSSが含たれおいたす。 厳栌なバヌゞョン管理芏則を持぀オペラプロゞェクトずは異なり、私たちはしばしばこれを打ちたす。 次の2぀の堎合に、コヌドの䞀郚を削陀するこずにしたした。



  1. 手䜜業で䌌た堎所を芋぀けたすが、異なるHTMLたたはCSSコヌドで蚘述されおいたす。 この堎合、単玔に組み合わせたす。
  2. ビュヌにないCSSコヌドのクラスを探すスクリプトを実行したす。 テストに含めるこずで、このプロセスを自動化したした。


GitHub䞊のCSSリファクタリングプロセス自䜓はナニヌクではありたせん。 䞍良コヌドを芋぀けお削陀し、できるだけ早く展開したす。 チヌムメンバヌは誰でもコヌドを削陀できたす。 倚くのクヌルな開発者がチヌムに参加しおいたすが、削陀できるものずそうでないものを監芖するオタクもいたす。



ご質問は



この蚘事、Bootstrap、GitHub、たたはその他に぀いお質問がある堎合は、 Twitterたたは私のリポゞトリにフィヌドバックを䟝頌しおください。



All Articles