CSSファイルのコンテンツをどのように整理する必要がありますか?


80

この質問は、実際のCSSディレクティブ自体を.cssファイル内に編成することに関するものです。新しいページまたはページのセットを開発するとき、私は通常、.cssファイルに手動でディレクティブを追加し、可能な場合はリファクタリングを試みます。しばらくすると、数百(または数千)の行ができ、レイアウトを微調整するときに必要なものを見つけるのが難しくなる可能性があります。

ディレクティブを整理する方法について誰かアドバイスがありますか?

  • DOMを模倣して、トップダウンで整理する必要がありますか?
  • UIの同じ部分をサポートする要素のディレクティブをまとめて、機能的に整理する必要がありますか?
  • すべてをセレクターでアルファベット順に並べ替える必要がありますか?
  • これらのアプローチのいくつかの組み合わせ?

また、CSSを個別のファイルに分割することをお勧めする前に、1つのファイルに保持する必要のあるCSSの量に制限はありますか?言う、1000行?それとも、すべてを1か所にまとめておくのは常に良い考えですか?

関連する質問:CSSルールを整理するための最良の方法は何ですか?


1
FYI -私は<a href=" stackoverflow.com/questions/72911/...同じquestion</a>を尋ねたあなたはより多くの回答を読みたい場合には、。
ネイサンロング

1
素晴らしい質問、素晴らしい答えを生み出しました。便利なものがたくさん見つかりました。ありがとう。
Sebastien 2013年

回答:


54

開始するには、次の3つのスライドシェアプレゼンテーションをご覧ください。

まず、そして最も重要なこととして、CSSを文書化します。CSSを整理するために使用する方法が何であれ、一貫性を保ち、文書化します。各ファイルの上部に、そのファイルの内容を説明します。目次を提供し、一意のタグを簡単に検索できるように参照して、エディターでそれらのセクションに簡単にジャンプできるようにします。

CSSを複数のファイルに分割したい場合は、必ずそうしてください。Oliは、追加のHTTPリクエストは高額になる可能性があることをすでに述べましたが、両方の長所を活用できます。ある種のビルドスクリプトを使用して、十分に文書化されたモジュラーCSSを圧縮された単一のCSSファイルに公開します。YUIコンプレッサーは圧縮を支援することができます。

他の人がこれまでに言ったこととは対照的に、私は各プロパティを別々の行に記述し、インデントを使用して関連するルールをグループ化することを好みます。たとえば、Oliの例に従います。

#content {
    /* css */
}
    #content div {
        /* css */
    }
    #content span {
        /* css */
    }
    #content etc {
        /* css */
    }

#header {
    /* css */
}
    #header etc {
        /* css */
    }

これにより、ファイル構造を簡単に追跡できます。特に、グループ間に十分な空白と明確にマークされたコメントがあれば(すばやくざっと目を通すのは簡単ではありませんが)、編集も簡単です(CSSの1行の長い行をたどる必要がないため)。ルールごとに)。

カスケード特異性を理解して使用します(したがって、セレクターをアルファベット順にソートするのは簡単です)。

CSSを複数のファイルに分割するかどうか、およびどのファイルに分割するかは、サイトとCSSのサイズと複雑さによって異なります。私はいつも少なくとも持っていreset.cssます。サイトのナビゲーションメニューが少し複雑になり、フォームのスタイルを設定するためのCSSが十分にある場合はlayout.css、一般的なページレイアウトにこれが伴う傾向がありnav.cssますforms.css。それ以外は、私もまだそれを理解しています。私が持っているかもしれないcolors.cssし、type.css/fonts.css色/グラフィックスとタイポグラフィをオフに分割するために、base.cssすべてのHTMLタグのための完全な基本スタイルを提供します...


注:reset.cssデッドリンクになっています
Braden Best

@BradenBest、ありがとう、YUIリンクが更新されました。ただし、そのreset.cssリンクに元の情報と同じ情報が含まれているかどうかはわかりません。また、YUIはメンテナンスされなくなったため、グーグルを使用したほうがよいでしょう。
メルカトル2017年

18

私はこのように私のCSSを組織化する傾向があります:

  1. reset.css
  2. base.css:ページのメインセクションのレイアウトを設定しました
    1. 一般的なスタイル
    2. ヘッダ
    3. ナビゲーション
    4. コンテンツ
    5. フッター
  3. 追加-[ページ名] .css:1ページでのみ使用されるクラス

1ページでのみ使用されるCSSを追加する場合は、CSSファイルを使用せずにその1ページにCSSを配置してみませんか?
timetofly 2013

なんてこった、どうしてそんなこと考えなかったの?
Sebastien 2013年

2
@ user371699 <link>HTMLファイルを<style>タグで乱雑にするよりも、使用する方が効率的であると主張する人もいます。
DylRicho 2014年

1
@Sebastien cssファイルでcssを維持している場合は、さまざまなスタイルを簡単に切り替えることができます。<style>タグを使用すると、すべてを書き直す必要があります。
reinaldoluckman 2014

1
@AlexLeungより保守しやすくなります。私の側の言葉の悪い選択!
DylRicho 2016

9

ただし、読みやすいと思います。

真剣に、あなたは10億と5つの提案を得るでしょう、しかしあなたは2、3の方法だけが好きになるでしょう。

しかし、私が言うべきいくつかのこと:

  • CSSファイルをチャンクに分割すると、頭の中で整理するのに役立ちますが、ブラウザーからの要求が増えるため、最終的にサーバーの実行速度が低下し(要求が増える)、ブラウザーがページを表示するのに時間がかかります。心に留めておきます。
  • 任意の行数であるという理由だけでファイルを分割するのはばかげています(ひどいエディタがあることを除いて-その場合は新しいエディタを入手してください)

個人的には、CSSを次のようにコーディングしています。

* { /* css */ }
body { /* css */ }
#wrapper { /* css */ }
#innerwrapper { /* css */ }

#content { /* css */ }
#content div { /* css */ }
#content span { /* css */ }
#content etc { /* css */ }

#header { /* css */ }
#header etc { /* css */ }

#footer { /* css */ }
#footer etc { /* css */ }

.class1 { /* css */ }
.class2 { /* css */ }
.class3 { /* css */ }
.classn { /* css */ }

ルールを1行に保つことで、ファイルを非常に高速にざっと読み、ルールが何であるかを確認できます。それらが拡張されると、どのルールが適用されているかを見つけようとするのは大変な作業のように思えます。


開発目的で1つの大きなCSS(またはその他の)ファイルを作成することは、まったく悪い習慣です。たとえば、5000行以上の長さのCSSまたはJavaScriptファイルで作業したことがありますか?おそらくそうではありません。ただし、すべてのCSSを縮小してprod environemtn(およびその他のファイル)用の大きなCSSにマージするツールが存在し、開発段階でこのような問題が発生することなく、この作業を実行できます。
forsberg 2017

この回答は9歳であることに注意してください。当時存在していたツールは、現在使用しているものほど高度ではありませんでした(LESS / SASSプリプロセッサなど)。しかしとにかく、当時は1つの大きなスタイルシートは珍しくありませんでした...したがって、答えのスタイル。彼らは、インラインでなかった場合、彼らは考え万行の長さとなっています。最近は違うやり方をしていますが、ツールも違うし、ダウンロード間の待ち時間を最小限に抑えるためにHTTP2のようなものもあります。
オリ2017

9

CSSをフォーマットするための認識された方法論がいくつかあります。最終的には、最も快適に書くことができるかどうかはあなた次第ですが、これらは、より大規模で複雑なプロジェクトのCSSの管理に役立ちます。それは重要ではありませんが、私はBEMとSMACSSを組み合わせて使用​​する傾向があります。

BEM(ブロック、要素、修飾子)

BEMは、フロントエンドコードを読みやすく、理解しやすく、操作しやすく、スケーリングしやすく、堅牢で明示的で、より厳密にするための、非常に便利で強力でシンプルな命名規則です。

ブロック

次のような、それ自体で意味のあるスタンドアロンエンティティ。

header, container, menu, checkbox, input

素子

ブロックの一部であり、スタンドアロンの意味はありません。それらは意味的にそのブロックに結び付けられています:

menu item, list item, checkbox caption, header title

修飾子

ブロックまたは要素のフラグ。それらを使用して、外観や動作を変更します。

disabled, highlighted, checked, fixed, size big, color yellow

OOCSS

OOCSSの目的は、コードの再利用を促進し、最終的には、追加と保守が容易な、より高速で効率的なスタイルシートを促進することです。

OOCSSは、次の2つの主要な原則に基づいています。

  1. 皮膚からの構造の分離

これは、繰り返しの視覚的特徴(背景や境界線のスタイルなど)を個別の「スキン」として定義することを意味します。これをさまざまなオブジェクトと組み合わせて、多くのコードなしで大量の視覚的多様性を実現できます。モジュールオブジェクトとそのスキンを参照してください。

  1. コンテナとコンテンツの分離

基本的に、これは「場所に依存するスタイルをほとんど使用しない」ことを意味します。オブジェクトは、どこに置いても同じように見えるはずです。したがって、.myObject h2 {...}を使用して特定のスタイルを設定する代わりに、。のように、問題を説明するクラスを作成して適用します。これにより、次のことが保証されます。(1)クラス化されていないすべてのが同じように見える。(2)カテゴリクラス(ミックスインと呼ばれる)を持つすべての要素は同じように見えます。3)実際に.myObject h2を通常のように見せたい場合は、オーバーライドスタイルを作成する必要はありません。


SMACSS

SMACSSは、設計プロセスを調査する方法であり、これらの厳格なフレームワークを柔軟な思考プロセスに適合させる方法です。これは、CSSを使用する際のサイト開発への一貫したアプローチを文書化する試みです。

SMACSSの中核となるのは、分類です。CSSルールを分類することで、パターンがわかり始め、これらの各パターンに関するより良いプラクティスを定義できます。

カテゴリには5つのタイプがあります。

/* Base */

/* Layout */

/* Modules */

/* State */

/* Theme */

ベース リセットおよびデフォルトの要素スタイルが含まれます。また、特定の状況下でドキュメントの後半で上書きできるボタンやグリッドなどのコントロールの基本スタイルを持つこともできます。

レイアウトに は、すべてのナビゲーション、ブレッドクラム、サイトマップなどが含まれます。

モジュールには 、連絡先フォームスタイル、ホームページタイル、製品リストなどの領域固有のスタイルが含まれています。

国は 、このようななどなどisSelected、のisActive、hasError、wasSuccessfulような状態クラスが含まれています

テーマテーマに 関連するすべてのスタイルが含まれます。


ここで詳しく説明するには多すぎますが、これらの他のものも見てください。


4

私はこの順序で行きます:

  1. 一般的なスタイルのルール。通常は裸の要素(a、ul、olなど)に適用されますが、一般的なクラス(.button、.error)の場合もあります。
  2. ほとんど/すべてのページに適用されるページレイアウトルール
  3. 個々のページレイアウトルール

単一のページまたは小さなグループ化ページに適用されるスタイルルールのいずれについても、本文をIDとクラスに設定して、特定のページを簡単にターゲットにできるようにします。idはファイルのベース名であり、classはファイルが存在するディレクトリ名です。


私はこれに同意する傾向がありますが、説明方法が少し異なります... 1)グローバルルール(説明したものと同じですが、サイトのほとんどすべてに影響します)、2)マスターページルール(これはヘッダー、フッター、コンテンツ領域、サイドバー(存在する場合)は、ほとんどまたはすべてのページであり、3)必要に応じて、それぞれのページのファイルに分割された個々のページルール。このようにスタイルシートを分割するとリクエストが多すぎるというコメントがいくつかありますが、これは実際には2つのリクエストのみであり、不要なスタイルがすべてのページに読み込まれないようにします。
MQuiggGeorgia 2018

この元の回答は10年前のものであり、最先端のものと見なされるべきではありません。
Jonathan Arkell 2018年

編集するつもりはありません。これが何歳かを考慮して免責事項を追加するだけです。それで全部です。
Jonathan Arkell 2018年

4

私はさまざまな戦略を試しましたが、常にこのスタイルに戻ります。

.class {border: 1px solid #000; padding: 0; margin: 0;}

これは、大量の宣言に関して最も友好的です。

スヌーク氏はこれについてほぼ4年前に書いています:)


先日... 2年前=)
Oli

ハ!確かに彼はそうしました-興味深い:)彼は最近の記事からそれにリンクしたに違いありません。または、多分私はただ夢中です。
ニックサージェント

2

一般的なスタイルを除外します。たまたま同じスタイルではなく、同じこと目的としたスタイルです。一方のセレクターのスタイルを変更すると、もう一方のセレクターも変更する必要がある可能性があります。このスタイルの例を別の投稿に載せ ました。CSSファイル内で使用する変数をCSSファイルに作成します

それとは別に、関連するルールをグループ化します。そして、ルールを複数のファイルに分割します...すべてのページが実際にすべてのルールを必要としない限り。


1

実際の順序はCSSの適用方法の重要な部分であるため、「アルファベット順」の提案を進めるのは少しばかげているようです。

一般に、影響を受けるページの領域ごとにアイテムをグループ化する必要があります。たとえば、すべてに影響するメインスタイル、ヘッダーとフッターのスタイル、ナビゲーションスタイル、メインコンテンツのスタイル、セカンダリコンテンツのスタイルの順になります。

保守がより困難になる可能性があるため、この時点では複数のファイルに分割することは避けます。(6つのCSSファイルを開いている場合、カスケードの順序を頭の中で維持することは非常に困難です)。ただし、スタイルがページのサブセットにのみ適用される場合、たとえば、ページに実際にフォームが含まれている場合にのみフォームスタイルがページにリンクされる場合は、スタイルを別のファイルに移動し始めます。


1

私はこれを絶えず心配していましたが、Firebugが助けになりました。

最近では、Firebugを介してスタイルがどのように相互に関連しているかを確認し、そこから何をする必要があるかを理解するのがはるかに簡単になっています。

もちろん、関連するスタイルをグループ化する合理的な構造があることを確認してください。ただし、やりすぎないでください。Firebugを使用すると、追跡が非常に簡単になるため、完全なcss構造を事前に作成することを心配する必要はありません。


1

これが私がすることです。ディレクティブがなく、さまざまなファイルを呼び出すCSSインデックスページがあります。ここに短いサンプルがあります:

@import url("stylesheet-name/complete-reset.css");
@import url("stylesheet-name/colors.css");
@import url("stylesheet-name/structure.css");
@import url("stylesheet-name/html-tags.css");
@import url("stylesheet-name/menu-items.css");
@import url("stylesheet-name/portfolio.css");
@import url("stylesheet-name/error-messages.css");

完全なリセットから始まります。次のファイルは、簡単に参照できるようにカラーパレットを定義しています。それから私のスタイルの主<div/>なレイアウト、ヘッダー、フッター、彼らはフィットの列、などの数を決定するのは... HTMLタグdefinses <body/><h1/><p/>、トン等...次は、サイトの特定のセクションを来ります。

それは非常にスカラバレで非常に明確です。変更するコードを見つけたり、新しいセクションを追加したりする方がはるかに簡単です。


7
つまり、ブラウザはページのレンダリングを開始する前に、サーバーに対して9つのリクエストを行う必要があります。ほとんどのブラウザでは、サーバーへの接続を一度に2つ以上許可しないことに注意してください。これは開発者にとっては問題ありませんが、本番用にこれを1つのファイルに圧縮する必要があります。JSにも同じことが言えます
Oli

3
リンクは@importよりもはるかに効率的です。Yahoo YSlowルール#13
scunliffe 2008

1

CSSファイルはクライアントにキャッシュされます。したがって、すべてのスタイルを1つのファイルに保持することをお勧めします。しかし、開発するときは、ドメインに従ってCSSを構造化すると便利だと思います。

例えば:reset.cssdesign.csstext.cssなど。最終製品をリリースするときに、すべてのスタイルを1つのファイルにマッシュアップします。

もう1つの便利なヒントは、読みやすさをスタイルではなくルールに集中させることです。

一方:

ul li
{
    margin-left: 10px;
    padding: 0;
}

たとえば、100行のコードがある場合、ルールを見つけるのは簡単ではありません。

代わりに、次の形式を使用します。

rule { property: value; property: value; }

rule { property: value; property: value; }

0

ITCSS

ハリー・ロバーツ(CSS Wizardry)

グローバル名前空間とカスケードを定義し、セレクターの特異性を低く保つのに役立ちます。

構造

最初の2つは、プリプロセッサを使用している場合にのみ適用されます。

  1. (設定)
  2. (ツール)
  3. ジェネリック
  4. 要素
  5. オブジェクト
  6. コンポーネント
  7. トランプ

-2

通常、私はこれを行います:

  1. <link rel="stylesheet" href="css/style.css">
  2. style.cssで、次を@importします。

    @import url(colors.css);
    @import url(grid.css);
    @import url(custom.css); + some more files (if needed)
    
  3. ではcolors.cssI @import(CSSのカスタムプロパティを使用している場合)、以下:

    @import url(root/variable.css);
    

すべてが整然としていて、コードのどの部分でも簡単に編集できます。なんとなくお役に立てれば幸いです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.