691

私は自分が取り組んでいるウェブサイトをCSSに大きく依存してきました。現在、すべてのCSSスタイルはタグごとに適用されているため、将来の変更に役立つように、より多くの外部スタイルに移行しようとしています。

しかし、問題は、「CSS爆発」が発生していることに気付いたことです。CSSファイル内のデータを最適に整理および抽象化する方法を決定することが難しくなっています。

div非常にテーブルベースのWebサイトから移動して、Webサイト内で多数のタグを使用しています。だから私はこのようなCSSセレクターをたくさん手に入れています:

div.title {
  background-color: blue;
  color: white;
  text-align: center;
}

div.footer {
  /* Styles Here */
}

div.body {
  /* Styles Here */
}

/* And many more */

まだそれほど悪くはありませんが、私は初心者なので、CSSファイルのさまざまな部分をどのように整理するのが最善かについての推奨事項を作成できるかどうか疑問に思いました。Webサイトの要素ごとに個別のCSS属性を設定する必要はありません。また、CSSファイルは常にかなり直感的で読みやすいものにする必要があります。

私の最終的な目標は、CSSファイルを簡単に使用できるようにし、Web開発の速度を上げるためのCSSファイルの能力を実証することです。このようにして、将来このサイトで作業する可能性のある他の個人も、私が行ったようにそれを習得するのではなく、優れたコーディング手法を使用する練習に入るでしょう。

4

15 に答える 15

573

これはとても良い質問です。どこを見ても、CSS ファイルはしばらくすると制御不能になる傾向があります。特に、チームで作業している場合はそうではありません。

以下は、私自身が遵守しようとしているルールです (常に管理しているわけではありません)。

  • 早期にリファクタリングし、頻繁にリファクタリングします。CSS ファイルを頻繁にクリーンアップし、同じクラスの複数の定義を融合します。古い定義はすぐに削除してください。

  • バグの修正中に CSS を追加する場合は、変更内容についてコメントを残してください (「これは、IE < 7 でボックスが左に配置されるようにするためです」)

  • .classnameとで同じものを定義するなど、冗長性​​を避けてください.classname:hover

  • コメント/** Head **/を使用して、明確な構造を構築します。

  • 一定のスタイルを維持するのに役立つ整形ツールを使用します。私はPolystyleを使用していますが、これには非常に満足しています (15 ドルかかりますが、お金は十分に使われています)。無料のものもあります (たとえば、オープンソース ツールであるCSS Tidyに基づくCode Beautifierなど)。

  • 賢明なクラスを構築します。これに関するいくつかの注意事項については、以下を参照してください。

  • セマンティクスを使用し、DIV スープを避け<ul>ます。たとえば、メニューには s を使用します。

  • 可能な限り低いレベルですべてを定義し (例: デフォルトのフォント ファミリ、 の色とサイズ)、可能な場合はbody使用します。inherit

  • 非常に複雑な CSS を使用している場合は、CSS プリコンパイラが役立つ場合があります。近いうちに同じ理由でxCSSを検討する予定です。周りには他にもいくつかあります。

  • チームで作業する場合は、CSS ファイルの品質と標準の必要性も強調します。誰もが自分のプログラミング言語で標準をコーディングすることに熱心ですが、これが CSS にも必要であるという認識はほとんどありません。

  • チームで作業する場合は、バージョン管理の使用を検討してください。物事を追跡しやすくし、編集の競合を解決しやすくします。HTML と CSS が「ただ」好きなだけでも、それだけの価値はあります。

  • を使用しないでください!important。IE =< 7 では処理できないという理由だけではありません。複雑な構造では、 を使用すると!important、ソースが見つからない動作を変更したくなることがよくありますが、長期的なメンテナンスには毒です。

賢明なクラスの構築

これが、私が賢明なクラスを構築するのが好きな方法です。

最初にグローバル設定を適用します。

body { font-family: .... font-size ... color ... }
a { text-decoration: none; }

次に、ページのレイアウトのメイン セクション (トップ エリア、メニュー、コンテンツ、フッターなど) を特定します。適切なマークアップを記述した場合、これらの領域は HTML 構造と同じになります。

次に、CSS クラスの作成を開始し、適切な範囲でできるだけ多くの祖先を指定し、関連するクラスをできるだけ密接にグループ化します。

div.content ul.table_of_contents 
div.content ul.table_of_contents li 
div.content ul.table_of_contents li h1
div.content ul.table_of_contents li h2
div.content ul.table_of_contents li span.pagenumber

CSS 構造全体を、ルートから離れれば離れるほど具体的な定義を持つツリーと考えてください。クラスの数をできるだけ少なくし、繰り返しをできるだけ少なくしたいと考えています。

たとえば、3 つのレベルのナビゲーション メニューがあるとします。これら 3 つのメニューは、見た目は異なりますが、いくつかの特徴を共有しています。たとえば、それらはすべて<ul>であり、すべて同じフォント サイズであり、アイテムはすべて互いに隣り合っています (デフォルトの のレンダリングとは対照的ですul)。また、どのメニューにも箇条書き ( list-style-type) はありません。

最初に、という名前のクラスで共通menuの特性を定義します。

div.navi ul.menu { display: ...; list-style-type: none; list-style-image: none; }
div.navi ul.menu li { float: left }

次に、3 つのメニューそれぞれの特定の特性を定義します。レベル 1 の高さは 40 ピクセルです。レベル 2 および 3、20 ピクセル。

注:複数のクラスを使用することもできますが、Internet Explorer 6では複数のクラスに問題があるため、この例ではids.

div.navi ul.menu#level1 { height: 40px; }
div.navi ul.menu#level2 { height: 20px; }
div.navi ul.menu#level3 { height: 16px; }

メニューのマークアップは次のようになります。

<ul id="level1" class="menu"><li> ...... </li></ul>
<ul id="level2" class="menu"><li> ...... </li></ul>
<ul id="level3" class="menu"><li> ...... </li></ul>

これらの 3 つのメニューのように、意味的に類似した要素がページにある場合は、最初に共通点を見つけてクラスに入れてみてください。次に、特定のプロパティを作成し、それらをクラスに適用するか、Internet Explorer 6 をサポートする必要がある場合は ID に適用します。

その他の HTML のヒント

これらのセマンティクスを HTML 出力に追加すると、デザイナーは後で純粋な CSS を使用して Web サイトやアプリの外観をカスタマイズできます。これは大きな利点であり、時間の節約にもなります。

  • 可能であれば、すべてのページの本文に一意のクラスを指定してください。<body class='contactpage'>これにより、ページ固有の微調整をスタイル シートに簡単に追加できます。

    body.contactpage div.container ul.mainmenu li { color: green }
    
  • メニューを自動的に作成する場合は、後で広範なスタイル設定ができるように、できるだけ多くの CSS コンテキストを追加してください。例えば:

    <ul class="mainmenu">
     <li class="item_first item_active item_1"> First item </li> 
     <li class="item_2"> Second item </li> 
     <li class="item_3"> Third item </li> 
     <li class="item_last item_4"> Fourth item </li> 
    </ul>
    

    このようにして、すべてのメニュー項目にアクセスして、そのセマンティック コンテキストに従ってスタイルを設定できます。リストの最初の項目か最後の項目か。現在アクティブなアイテムかどうか。そして番号で。

上記の例で説明した複数のクラスの割り当ては、IE6 では正しく機能しないことに注意してください。IE6 で複数のクラスを処理できるようにするための回避策があります。回避策がない場合は、最も重要なクラス (アイテム番号、アクティブまたは最初/最後) を設定するか、ID を使用する必要があります。

于 2010-02-12T16:12:32.740 に答える
89

以下に 4 つの例を示します。

4 つすべてで、私の回答には、Natalie Downe の PDF CSS Systemsをダウンロードして読むためのアドバイスが含まれていました。(PDF には、スライドにない大量のメモが含まれているので、PDF を読んでください!)。組織に関する彼女の提案に注意してください。

編集 (2014/02/05) 4 年後、私は言うだろう:

  • CSS プリプロセッサを使用して、ファイルをパーシャルとして管理します (個人的には Sass with Compass を好みますが、Less も非常に優れており、他にもあります)。
  • OOCSSSMACSS、およびBEMまたはgetbemなどの概念を読んでください。
  • BootstrapZurb Foundationなどの一般的な CSS フレームワークがどのように構成されているかを見てみましょう。また、あまり人気のないフレームワークも軽視しないでください。Inuitは興味深いフレームワークですが、他にもたくさんあります。
  • 継続的インテグレーション サーバーや Grunt や Gulp などのタスク ランナーでビルド ステップを使用してファイルを結合/縮小します。
于 2010-02-12T16:39:18.870 に答える
73

CSSで見出しを書かない

セクションをファイルに分割するだけです。すべての CSS コメントは、まさにそのコメントである必要があります。

reset.css
base.css
somepage.css
someotherpage.css
some_abstract_component.css

スクリプトを使用してそれらを 1 つに結合します。必要であれば。適切なディレクトリ構造を作成して、スクリプトでファイルを再帰的にスキャンすることも.cssできます。

見出しを書く必要がある場合は、ファイルの先頭に TOC を配置します

TOC の見出しは、後で書く見出しと完全に一致する必要があります。見出しを探すのが面倒。問題をさらに悪化させるために、最初のヘッダーの後に別のヘッダーがあることを正確に知るにはどうすればよいでしょうか? ps。TOC を書くとき、各行の先頭に doc のような * (スター) を追加しないでください。テキストを選択するのが面倒になるだけです。

/* Table of Contents
   - - - - - - - - -
   Header stuff
   Body Stuff
   Some other junk
   - - - - - - - - -
 */
...
/* Header Stuff 
 */
...
/* Body Stuff 
 */

ブロック外ではなく、ルール内またはルール内でコメントを書く

まず、スクリプトを編集するとき、50/50 の確率で、ルール ブロックの外側にあるものに注意を払うことになります (特に、それが大きなテキストの塊である場合は ;))。第二に、外部で「コメント」が必要になるケースは (ほとんど) ありません。外だと99%タイトルなのでそのままで。

ページをコンポーネントに分割する

ほとんどの場合、コンポーネントにはposition:relative、 no padding、および noが必要marginです。これにより、 % ルールが大幅に簡素化されabsolute:position、要素の単純化が可能になります。これは、絶対位置のコンテナーがある場合、絶対位置の要素がtop, right, bottom,leftプロパティを計算するときにコンテナーを使用するためです。

通常、HTML5 ドキュメント内のほとんどの DIV はコンポーネントです。

コンポーネントは、ページ上の独立した単位と見なすこともできます。素人の言葉で言えば、何かをblackboxのように扱うことが理にかなっている場合は、何かをコンポーネントのように扱います。

再び QA ページの例を使用します。

#navigation
#question
#answers
#answers .answer
etc.

ページをコンポーネントに分割することで、作業を管理しやすい単位に分割できます。

累積効果のあるルールを同じ行に配置します。

たとえばbordermarginpadding(ただし ではないoutline) はすべて、スタイリングする要素の寸法とサイズに追加されます。

position: absolute; top: 10px; right: 10px;

それらが 1 行で読みにくい場合は、少なくともそれらを近接して配置します。

padding: 10px; margin: 20px;
border: 1px solid black;

可能な場合は省略形を使用します。

/* the following... */
padding-left: 10px;
padding-right: 10px;
/* can simply be written as */
padding: 0 10px;

セレクターを繰り返さない

同じセレクターのインスタンスが複数ある場合、必然的に同じルールの複数のインスタンスになる可能性が高くなります。例えば:

#some .selector {
    margin: 0;
    font-size: 11px;
}
...
#some .selector {
    border: 1px solid #000;
    margin: 0;
}

id/classes を使用できる場合は、TAG をセレクターとして使用しないでください。

まず、DIV タグと SPAN タグは例外です。絶対に使用しないでください。;) クラス/ID をアタッチするためにのみ使用してください。

これ...

div#answers div.answer table.statistics {
    border-collapse: collapsed;
    color: pink;
    border: 1px solid #000;
}
div#answers div.answer table.statistics thead {
    outline: 3px solid #000;
}

次のように記述します。

#answers .answer .statistics {
    border-collapse: collapsed;
    color: pink;
    border: 1px solid #000;
}
#answers .answer .statistics thead {
    outline: 3px solid #000;
}

そこに余分な DIV がぶら下がっているため、セレクターには何も追加されません。また、不要なタグルールを強制します。たとえば、.answera から adivに変更するとarticle、スタイルが崩れます。

または、より明確にしたい場合:

#answers .answer .statistics {
    color: pink;
    border: 1px solid #000;
}
#answers .answer table.statistics {
    border-collapse: collapsed;
}
#answers .answer .statistics thead {
    outline: 3px solid #000;
}

プロパティである理由は、border-collapseに適用された場合にのみ意味をなす特別なプロパティですtable。でない場合.statisticsは、table適用しないでください。

一般的なルールは悪です!

  • 可能であれば、一般的/魔法のルールを書くことは避けてください
  • CSS リセット/リセット解除の場合を除き、すべての一般的な魔法は少なくとも 1 つのルート コンポーネントに適用する必要があります。

彼らはあなたの時間を節約しません、あなたの頭を爆発させます。メンテナンスを悪夢にします。ルールを書いているときに、それらがどこに適用されるかを知っているかもしれませんが、後でルールが混乱しないという保証はありません。

この一般的なルールに追加することは、スタイルを設定しているドキュメントについてある程度の知識があったとしても、混乱を招き、読みにくいものです。これは、ジェネリック ルールを書くべきではないと言っているのではありません。本当にジェネリックにするつもりがない限り、それらを使用しないでください。また、可能な限り多くのスコープ情報をセレクターに追加します。

このようなもの...

.badges {
    width: 100%;
    white-space: nowrap;
}

address {
    padding: 5px 10px;
    border: 1px solid #ccc;
}

...プログラミング言語でグローバル変数を使用するのと同じ問題があります。あなたは彼らにスコープを与える必要があります!

#question .userinfo .badges {
    width: 100%;
    white-space: nowrap;
}

#answers .answer .userinfo address {
    padding: 5px 10px;
    border: 1px solid #ccc;
}

基本的には次のようになります。

components                   target
---------------------------- --------
#answers .answer   .userinfo address
-------- --------- --------- --------
domain   component component selector 

コンポーネントがページ上のシングルトンであることがわかっている場合は常に ID を使用するのが好きです。あなたのニーズは異なるかもしれません。

注: 理想的には、必要十分なだけ記述してください。ただし、セレクターでより多くのコンポーネントに言及することは、より少ないコンポーネントに言及することに比べて、より寛容な間違いです。

コンポーネントがあると仮定しましょうpagination。サイト全体の多くの場所で使用します。これは、一般的なルールを作成する場合の良い例です。display:block個々のページ番号のリンクに濃い灰色の背景を付けるとしましょう。それらを表示するには、次のようなルールが必要です。

.pagination .pagelist a {
    color: #fff;
}

ここで、回答のリストにページネーションを使用するとしましょう。次のようなものに遭遇する可能性があります

#answers .header a {
    color: #000;
}
...
.pagination .pagelist a {
    color: #fff;
}

これにより、白いリンクが黒くなりますが、これは望ましくありません。

それを修正する間違った方法は次のとおりです。

.pagination .pagelist a {
    color: #fff !important;
}

それを修正する正しい方法は次のとおりです。

#answers .header .pagination .pagelist a {
    color: #fff;
}

複雑な「論理」コメントは機能しません:)

「この値は、何とか高さを組み合わせた何とかに依存しています」のようなものを書いた場合、間違いを犯すことは避けられず、すべてがトランプの家のように倒れます。

コメントは簡潔にしてください。「論理演算」が必要な場合は、SASSLESSなどの CSS テンプレート言語のいずれかを検討してください。

カラーパレットの書き方は?

これを最後に残します。カラー パレット全体のファイルを用意します。このファイルがなくても、スタイルには使用可能なカラー パレットがルールに含まれているはずです。カラー パレットが上書きされます。非常に高レベルの親コンポーネント (例: #page) を使用してセレクターをチェーンし、スタイルを自己完結型のルール ブロックとして記述します。それはただの色でも、それ以上でもかまいません。

例えば。

#page #header .description,
#page #categories .description,
#page #answers .answer .body
{
    color: #222; background: #fff; 
    border-radius: 10px;
    padding: 1em;
}

アイデアは単純です。カラー パレットは、カスケードする基本スタイルから独立したスタイルシートです。

名前が少なく、必要なメモリが少なくて済み、コードが読みやすくなります

使用する名前は少ないほど良いです。テキスト、本文、ヘッダーなど、非常に単純な (そして短い!) 単語を使用するのが理想的です。

また、postbody、posthead、userinfo などの長い「適切な」単語を組み合わせるよりも、単純な単語を組み合わせた方が理解しやすいと思います。

スタイル スープを読みに来た見知らぬ人 (数週間後のあなたのように ;)) が、すべてのセレクターがどこで使用されているかではなく、単語がどこで使用されているかだけを理解する必要がある場合でも、この方法で語彙を少なくしてください。たとえば.this、要素が「選択されたアイテム」または「現在のアイテム」などであると思われる場合はいつでも使用します。

自分の後片付けをする

CSS を書くことは食べるようなものです。その混乱を確実に片付けてください。そうしないと、ガベージ コードが積み重なってしまいます。使用しないクラス/ID を削除します。使用しない CSS ルールを削除します。すべてが適切で、競合するルールや重複するルールがないことを確認してください。

私が提案したように、いくつかのコンテナーをスタイルのブラックボックス (コンポーネント) として扱い、それらのコンポーネントをセレクターで使用し、すべてを 1 つの専用ファイルに保持した場合 (または TOC とヘッダーを含むファイルを適切に分割した場合)、作業が大幅に楽に...

Firefox 拡張機能の Dust-Me Selectors (ヒント: sitemap.xml を指す) などのツールを使用して、CSS の核とカーニーに隠されたジャンクを見つけることができます。

unsorted.cssファイルを保管する

QA サイトのスタイルを設定していて、「回答ページ」用のスタイルシートが既にあるとします。これを と呼びますanswers.css。多くの新しい css を追加する必要がある場合は、それをスタイルシートに追加してから、unsorted.cssスタイルシートにリファクタリングしますanswers.css

これにはいくつかの理由があります。

  • 完了後にリファクタリングする方が高速です。次に、ルール (おそらく存在しない) を検索してコードを挿入します。
  • 削除するものを作成します。コードを挿入すると、そのコードを削除するのが難しくなります
  • 元のファイルに追加すると、ルール/セレクターの複製が簡単に発生します
于 2011-01-20T17:16:54.380 に答える
55

1. SASS 2.コンパスをご覧ください

于 2010-08-08T12:57:51.827 に答える
31

CSS肥大化に対抗するために私が見た最善の方法は、オブジェクト指向の CSS 原則を使用することです。

かなり優れたOOCSSフレームワークさえあります。

いくつかのイデオロギーは、ここで上位の回答で述べられていることの多くに反していますがCSS、オブジェクト指向の方法で設計する方法を理解すると、実際にコードを効率的かつ平均的に保つことができることがわかります。

ここで重要なことは、サイト内の「オブジェクト」または構成要素のパターンを特定し、それらを使用して設計することです。

Facebook は、OOCSS の作成者であるNicole Sullivanを雇って、フロント エンド コード (HTML / CSS) を大幅に節約しました。はい、実際にはCSSだけでなくHTMLでも節約できます。tableベースレイアウトを多くのにdiv変換することについて言及しているように、それは非常に可能です。

もう 1 つの優れたアプローチは、いくつかの点で OOCSS に似ています。CSS を最初からスケーラブルでモジュール化できるように計画して記述することです。Jonathan SnookはSMACSS - Scalable and Modular Architecture for CSSについて素晴らしい記事と書籍/電子書籍を作成しました。

いくつかのリンクをご紹介します:
大規模な CSS の 5 つの間違い - (ビデオ)
大規模な CSS の 5 つの間違い - (スライド)
CSS Bloat - (スライド)

于 2011-01-27T05:18:19.450 に答える
16

また、カスケードと重み、およびそれらがどのように機能するかについても理解する必要があります。

クラス識別子 (div.title) のみを使用していることに気付きました。ID も使用できること、ID はクラスよりも重要であることをご存知ですか?

例えば、

#page1 div.title, #page1 ul, #page1 span {
  // rules
}

これらすべての要素がフォントサイズ、たとえば色、またはあなたのルールが何であれ共有するようにします。#page1 の子孫であるすべての DIV に特定のルールを適用することもできます。

重みに関しては、CSS 軸が最も一般的/最も軽いものから最も具体的/最も重いものへと移動することに注意してください。つまり、CSS セレクターでは、要素指定子がクラス指定子によって無効にされ、ID 指定子によって無効にされます。数字は重要なので、要素指定子が 2 つあるセレクター (ul li) は、指定子が 1 つだけのセレクター (li) よりも重みが大きくなります。

数字のように考えてください。1 の列の 9 は、10 の列の 1 よりも小さいです。ID 指定子、クラス指定子、および 2 つの要素指定子を持つセレクターは、ID を持たないセレクター、500 個のクラス指定子、および 1,000 個の要素指定子よりも重みが大きくなります。もちろん、これはばかげた例ですが、アイデアはわかります。重要なのは、この概念を適用すると、多くの CSS をクリーンアップするのに役立つということです。

ところで、class="title" を持つ他の要素と競合しない限り、要素指定子をクラス (div.title) に追加する必要はありません。後でその重みを使用する必要がある場合があるため、不必要な重みを追加しないでください。

于 2010-02-12T16:46:11.193 に答える
12

Less CSS Dynamicフレームワークを提案できますか

前述の SASS に似ています。

親クラスごとに CSS を維持するのに役立ちます。

例えば

 #parent{     
  width: 100%;

    #child1
    {    
     background: #E1E8F2;    
     padding: 5px;    
    }

    #child2
   {
     background: #F1F8E2;
     padding: 15px
   }
 }

動作: width:100% を #child1 と #child2 の両方に適用します。

また、#child1 固有の CSS は #parent に属します。

これはにレンダリングされます

#parent #child1
{
 width: 100%;
 background: #E1E8F2;
 padding: 5px;
}

#parent #child2
{
 width: 100%;
 background: #F1F8E2;
 padding: 15px;
}
于 2011-04-07T19:28:06.847 に答える
12

難しいのは、サイトに必要なデザインを一連のルールに変換することです。サイトのデザインが明確でルールに基づいている場合、クラス名と CSS 構造はそこから派生できます。しかし、時間の経過とともに、あまり意味のない小さなビットをサイトにランダムに追加している場合、CSS でそれについてできることはあまりありません。

私は、CSS ファイルを大まかに次のように整理する傾向があります。

  1. Eric Meyerの. (そうでなければ、ほとんどの要素について、デフォルトのブラウザー スタイルをリセットするだけのルールが少なくとも 1 つまたは 2 つあることがわかったからです。たとえば、私のリストのほとんどは、リストのデフォルトの HTML スタイルのようには見えません。)

  2. サイトで必要な場合は、グリッド システムの CSS。(私は960.gsに基づいています)

  3. すべてのページに表示されるコンポーネントのスタイル (ヘッダー、フッターなど)

  4. サイトのさまざまな場所で使用されるコンポーネントのスタイル

  5. 個々のページにのみ関連するスタイル

ご覧のとおり、そのほとんどはサイトのデザインに依存しています。デザインが明確で整理されていれば、CSS もそうです。そうでなければ、あなたはめちゃくちゃです。

于 2010-02-12T16:32:24.500 に答える
7

私の答えは、あなたが質問で提起した高レベルの懸念に対処するための高レベルです。より見栄えを良くするためにできる低レベルの組織的なトリックや微調整があるかもしれませんが、それらのどれも方法論的な欠陥を修正することはできません. CSS エクスプロージョンに影響を与えるものはいくつかあります。明らかに、サイトの全体的な複雑さだけでなく、ネーミングのセマンティクス、CSS のパフォーマンス、CSS ファイルの編成、テストの容易性/受容性なども含まれます。

あなたは命名セマンティクスで正しい道を進んでいるように見えますが、さらに一歩進めることができます。構造を変更せずにサイトに繰り返し表示される HTML のセクション (「モジュール」と呼ばれる) は、セレクター ルートと見なすことができ、そこから、そのルートに関連する内部レイアウトのスコープを設定できます。これは、オブジェクト指向 CSSの基本原則であり、Yahoo エンジニアによるこのトークで詳細を読む/見ることができます。

このクリーンなアプローチは、id または tag name に基づく短いセレクターを優先するパフォーマンスの懸念とは逆になる可能性があることに注意することが重要です。そのバランスを見つけるのはあなた次第ですが、大規模なサイトを持っていない限り、これは頭の後ろにあるガイドであり、セレクターを短くすることを思い出させるものです. パフォーマンスの詳細については、こちらをご覧ください

最後に、サイト全体に対して単一の CSS ファイルを使用する予定ですか、それとも複数のファイル (ページごとまたはセクション ファイルで使用される単一の基本ファイル) を使用する予定ですか? 単一ファイルの方がパフォーマンスは優れていますが、複数のチーム メンバーがいる場合は理解/維持が難しく、テストが難しくなる可能性があります。テストのために、サポートされているすべての CSS モジュールを含む単一の CSS テスト ページを用意して、衝突や意図しないカスケードをテストすることをお勧めします。

別の方法として、CSS ルールの範囲をページまたはセクションに限定するために、複数ファイル アプローチを使用することもできます。これには、ブラウザーが複数のファイルをダウンロードする必要があり、これはパフォーマンスの問題です。サーバー側プログラミングを使用して、CSS ファイルを動的に指定し、1 つのファイルに集約 (および縮小) できます。ただし、これらのファイルは別々であり、それらのテストも別々になるため、ページ/セクション間で一貫性のないルック アンド フィールが発生する可能性があります。したがって、テストは難しくなります。

顧客の特​​定のニーズを分析し、それに応じてこれらの懸念のバランスを取るのはあなた次第です。

于 2010-02-12T16:46:52.253 に答える
5

私の前に言ったように: OOCSS に入ります。Sass/Less/Compass は使いたくなりますが、Vanilla CSS が正しい方法で使用されるまでは、Sass/Less/Compass は事態を悪化させるだけです。

まず、効率的なCSSについて読んでください。Google Page Speed を試して、Souders が効率的な CSS について書いたことを読んでください。

次に、OOCSS を入力します。

  • カスケードの操作方法を学びます。(結局のところ、これをCascading Stylesheets と呼んでいます)。
  • 粒度を適切にする方法を学ぶ (トップダウンではなくボトムアップ)
  • 構造と皮膚を分離する方法を学びます (何がユニークで、これらのオブジェクトのバリエーションは何ですか?)
  • コンテナとコンテンツを分離する方法を学びます。
  • グリッドを愛することを学びましょう。

CSS の記述に関するすべてのビットに革命をもたらします。私は完全に更新され、それを愛しています。

更新: SMACSS は OOCSS に似ていますが、一般的に適応する方が簡単です。

于 2011-01-27T21:21:58.613 に答える
2

多くの場合、個人がファイルをセクションに分割し、セクション間に見出しコメントを付けているのを目にします。

何かのようなもの

/* Headings and General Text */

.... stuff here for H1, etc..

/* Main page layout */

.... stuff here for layout page setup etc.

これは非常にうまく機能し、後で戻って作業中の内容を簡単に見つけることができます。

于 2010-02-12T16:08:48.880 に答える
1

BEMを見る必要があります。

仮説

BEM は、CSS セレクターを整理して命名するための一連の指示を提供する試みであり、物事をより再利用可能でモジュール化し、しばしばスパゲッティ コードと特異性の問題につながるようなセレクター間の衝突を回避しようとしています。

正しく使用すると、実際には非常に良い効果があります。

  • スタイルは、要素に追加されたときに期待どおりに動作します
  • スタイルはリークせず、追加されたもののみに影響します
  • スタイルはドキュメント構造から完全に切り離されています
  • スタイルを強制的にオーバーライドする必要はありません

BEM は SASS とうまく連携して、ほぼオブジェクト指向のスタイルを CSS にもたらします。単一の UI 要素の表示を処理し、色や内部要素の処理方法などの「メソッド」などの変数を含むモジュラー ファイルを作成できます。筋金入りの OO プログラマーはこのアイデアに躊躇するかもしれませんが、実際には、適用された概念は、モジュール性、疎結合、緊密な結束、コンテキストフリーの再利用性など、OO 構造の優れた部分を数多くもたらします。Sass と&演算子rを使用して、カプセル化されたオブジェクトのように見える方法で構築することもできます。

Smashing Magazine のより詳細な記事は、こちらでご覧いただけます。また、CCS Wizardry の Harry Roberts (css に関係する人は誰でも読んでおくべき人物) からの 1 つが hereです。

実際には

私はこれを数回使用しましたが、SMACSS と OOCSS を使用したこともあり、それらを比較するものもあります。私はまた、多くの場合、経験の浅い私自身の創造物である、いくつかの大きな混乱で働いてきました.

実世界で BEM を使用するときは、いくつかの追加の原則を使用してテクニックを強化します。私はユーティリティ クラスを利用しています。良い例はラッパー クラスです。

.page-section {
    width: 100%;
}
@media screen and (min-width: 1200px) {
    margin: 0 auto;
    width: 1200px;
}

また、カスケードと特異性にも多少依存しています。ここに BEM モジュールが.primary-boxあり、これ.headerが特定のオーバーライドのコンテキストになります

.header {
  .primary-box {
    color: #000;
  }
}

(私は、すべてを可能な限り汎用的かつコンテキストフリーにするために最善を尽くしています。つまり、優れたプロジェクトとは、ほとんどすべてが再利用可能なモジュールに含まれていることを意味します)

ここで最後に 1 つ強調しておきたいのは、プロジェクトがいかに小さくて複雑ではないように見えても、最初からこれを行うべきだということです。これには 2 つの理由があります。

  • プロジェクトは複雑になるため、適切な基盤を構築することが重要です。css を含めます。
  • WordPress で構築されているため単純に見えるプロジェクトでさえ、JavaScript がほとんど含まれていないため、CSS では非常に複雑になる可能性があります。には 20 のモジュールとそれぞれの 3 つのバリエーションがあります。非常に複雑な css があります。

Web コンポーネント

2015 年には、Web コンポーネントに注目し始めています。私はこれらについてまだ多くのことを知りませんが、それらはすべてのフロントエンド機能を自己完結型モジュールにまとめ、BEM からフロントエンド全体にある種の原則を効果的に適用し、分散しているが完全に結合されたコンポーネント化しようとしています。すべて同じ UI ウィジェットを構築する DOM フラグメント、Js (MVC)、CSS などの要素。

これを行うことで、theyb は、私たちが BEM のようなもので解決しようとしてきた css に存在する元の問題のいくつかに対処し、その過程で、他のフロント エンド アーキテクチャのいくつかをより健全なものにします。

ここにいくつかの詳細な読み物があり、フレームワークのPolymer here一見の価値があります

ついに

また、これは優れた最新のベスト プラクティス css ガイドだと思います。大規模な css プロジェクトが乱雑になるのを防ぐために特別に設計されています。私はこれらのほとんどに従うようにしています。

于 2015-07-23T11:57:12.637 に答える
0

ここにはいくつかの優れた資料があり、この質問に答えるのにかなりの時間を費やした人もいますが、個別または個別のスタイルシートのいずれかになると、開発用に個別のファイルを使用してから、サイト全体で使用されるすべての汎用 css をマージします展開時に単一のファイルに。

このようにして、両方の長所を活用し、パフォーマンスを向上させ (ブラウザーから要求される HTTP 要求が少なくなります)、開発中のコードの問題を分離します。

于 2012-04-17T17:05:06.250 に答える
0

「コンパス スタイル」の CSS フレームワークを参照することをお勧めします。

于 2011-02-16T15:54:58.850 に答える