2011-09-15 7 views
7

私はこのpresentation about object oriented cssを見て、私は私のどちらかがそれを正しく理解していないか、オブジェクト指向のCSSを使用する利点を理解していないと思う:オブジェクト指向CSS

例HTML:

<div class="border-1 bg-2 color-1 font-1"> 
</div> 

例CSS :

/* borders */ 
.border-1 { border: 1px solid red; } 

/* backgrounds: */ 
.bg-2 { background: yellow; } 

/* other sections */ 

私は非常に有用であろうカラースキームを切り替えることができること、例えば、すぐに複数の要素のスタイルを変更することができるという利点を参照してください。

実際には、HTML内、またはその一部のスタイル/ルックを定義しています。もちろん、style属性を使用するよりも優れています。これは、一連のグループのスタイルを引き続き交換できるためです。

重要なのは、HTML内でスタイルグループを定義していることですが、HTML内に「論理」グループを作成する必要があることを学びました(例:class="nav-item"/class="btn submit-btn")。CSSはスタイルを完全に適用し、 (例えば.nav-item, .submit-btn { background: red; })、「文体的」な観点から一緒に属している。

多分私は完全にその概念を誤解しました。しかし、私はまだ私のCSSを構築する良い方法を知らない。

答えて

7

CSSはオブジェクト指向ではありません。私の提案は、あなたが "オブジェクト指向のCSS"について読んだことを忘れ、解決しようとしているCSSの問題に焦点を当てることです。 CSSを書く、読んだり維持したり、CSS変数のような多くの機能を入手しやすくするためには、LessまたはSassがあなたの必要性にぴったりでしょう。

「オブジェクト指向CSS」で提案されているようなCSSを使用するだけで、長期的には「普通の」CSSよりも保守が容易ではない、意味のない意味のないひどいCSSにつながります。 idclassの両方にsemantic and meaningful namesが必要です。したがって、プレゼンテーションの代わりにインテントを記述するセマンティックCSSを書くことができるフレームワークを使用することは、私の謙虚な意見でははるかに優れています。

+0

@madrは、あなたは[縮小](http://lesscss.org/)または[サス](HTTPを試してみました/sass-lang.com/)?オブジェクト指向であることが決して決して決して決まらないものに、オブジェクト指向を磨くことを試みることよりも、問題に対するはるかに良い解決策です。 –

+0

@asbjomuそうしない理由はないので、プリプロセッサーとOOCSSを組み合わせて、その両方からベストを得ることができます。私のチームはこの作業合意に本当に満足しています。 – madr

+0

@AsbjørnUlsberg、私の経験では、UI開発者がOCSSの知識なしにscss/sassに移行するためには、OOCSSの主な理由は、 CSSをスタンドアロンコンポーネントとして使用し、CSS devとしてこの質問をしないと、SCSSに移行することは、その人に良いことをするつもりはありません!この理由だけでも、大量のコードを救うことができます! –

3

これは実際の方法である「名前の削除」のほうが多いです。 あなたが示したコードは、しばしば "enterprise css"と呼ばれるものです。言い訳はありません。

以上のことから、要素に複数のクラスがあると、実際にはパフォーマンスが低下します。

他のブラウザでも同じように動作するCSSを作成する場合は、Mozilla's guidelinesに従うようにアドバイスしてください。 そして、専用の.cssファイルをIE6,7、および8のハッキングで作成してください。

+0

複数のクラスがパフォーマンス上悪いとみなされることを示すセクションを参照してください。複雑で長い複雑なCSSセレクタを使用すると、AFAIKは複数のクラスを使用するよりはるかに悪くなります。 http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/ – madr

+0

'子孫セレクター、ID、要素の参照、!importantを避けてください。 CSS LintとCSSグリッドを使用します。これはOOCSSですか? OK。良い。何も悪いことはありません。かなり一般的な知恵。しかし、「オブジェクト指向」の部分はどこですか? _プログラミングテクニックには、データ抽象化、カプセル化、メッセージング、モジュール性、多態性、継承などの機能が含まれます。[(c)wiki](http://en.wikipedia.org/wiki/Object-oriented_programming) CSSに何かをカプセル化しますか? CSSは変数をも持っていないし、 '