インラインCSSの何が悪いのですか?


170

Webサイトのスターターコードと例を見ると、CSSは常に「main.css」、「default.css」、または「Site.css」のような名前の別のファイルにあります。しかし、ページをコーディングしているとき、画像に "float:right"を設定するなどして、DOM要素を使用してインラインでCSSをスローしたくなることがよくあります。例ではめったに行われないので、これは「悪いコーディング」だと感じます。

スタイルが複数のオブジェクトに適用される場合、 "Do n't Repeat Yourself"(DRY)に従って、各要素によって参照されるCSSクラスに割り当てるのが賢明であることを理解しています。ただし、別の要素でCSSを繰り返さない場合は、HTMLを記述するときにCSSをインライン化しないでください。

質問:インラインCSSの使用は、その要素でのみ使用されるとしても、悪いと考えられていますか?もしそうなら、なぜですか?

例(これは悪いですか?):

<img src="myimage.gif" style="float:right" />

1
私は常にインラインcssに反対していますが、単一のアイテムであっても、スタイル属性がはびこっている商業サイトがたくさんあるので、実際に受け入れられている慣習は何なのか疑問に思いますか?
yu_ominae

3
インラインスタイルは怠惰だと思います。私は自分で頻繁に行うので、こう言います。スタイルを維持するかどうかわからないので、なぜそうしているのかわかります。そのため、以前はhtmlのすぐ隣で行っていました。最近、html5と<style> </ style>の実用的なサポートにより、レイアウトをいじるときに近くの<style>タグを代わりに使用し、その後コア/メインCSSファイルに移行します。速度と即時性の利点は同じですが、欠点はほとんどありません(特異性が1であるためにページ外要素に副作用が発生します)。
Kzqai 2013年

3
@yu_ominae-「商用サイト」は常にベストプラクティスに準拠しているとは限らないことに注意してください。実際にはかなりまれです。決定的な要素は、開発者が時間を知っていて、気にして、時間があるかどうかです。または、マネージャーが時間を割り当ててスタッフに実装するように指示する用意がある場合。仕事の優先順位が期限を守ることである場合、品質は通常低下します。
BryanH 2014

1
「商用サイト」はインラインスタイルを使用しているように見えますが、これはcss()インラインスタイルを適用する特定のjQuery呼び出し(など)を使用した結果である可能性があることに注意してください。
Dave Becker

回答:


203

サイトの外観を変えたい場合は、100行のコードを変更する必要があります。これはあなたの例では当てはまらないかもしれませんが、インラインcssを次のようなものに使用している場合

<div style ="font-size:larger; text-align:center; font-weight:bold">

各ページでページヘッダーを示すため、次のように維持する方がはるかに簡単です。

<div class="pageheader">  

ページヘッダーが単一のスタイルシートで定義されているため、サイト全体でページヘッダーの外観を変更する場合は、CSSを1か所で変更します。

しかし、私は異端者であり、あなたの例では問題ないと思います。あなたはおそらく単一のページで正しく見える必要がある単一の画像の動作をターゲットにしているので、実際のCSSをスタイルシートに入れるのはおそらくやり過ぎでしょう。


18
あなたは私の例は問題ではないと言いますが、あなたは異端者であることも認めます。私はそのアプローチが好きです。
ChessWhiz

8
毎回ニッケルを使用した場合、元々「1つの要素だけ」になるはずだった画像のフロートやその他のCSSを変更する必要がありました... ...まあ、私は夕食に出かけます素敵なレストランで。
Kzqai 2013年

8
インラインスタイリングを使用するだけでなく、何かをスタイルする唯一の方法であるHTMLメールの別のシナリオ。
Christophe Marois 2016年

ただし、htmlファイル自体もキャッシュされます。

user663031:複数のページがあるWebサイトには多くの異なるHTMLページがありますが、簡単にキャッシュできる1つのCSSファイルのみですべてのスタイルを組み合わせることができます。
Sinthorion

68

別のcssファイルを持つ利点は

  1. HTMLページの管理が簡単
  2. ルックアンドフィールへの変更は簡単で、ページ上の多くのテーマをサポートできます。
  3. あなたのCSSファイルはブラウザ側でキャッシュされます。したがって、ページが更新されるたびに、またはユーザーがサイトに移動するたびに、数KBのデータを読み込まないことで、インターネットトラフィックに少し貢献します。

2
私は毎月この質問をします(Webプログラミングはかなり新しいです)。キャッシュされているcssファイルについて何かを読んだのはこれが初めてです。それは私にとってすぐそこにあります!
2014

私はキャッシュについても考えていましたが、私の場合、15,000行のマージされたCSSを処理する必要があります。1つのページで1回しか使用されなかったジャンクの大部分をすべて維持することは不可能です。もう存在しません。つまり、トラフィックの1%だけが表示する1つの一時ページの訪問ごとに、CSSコードを全員に投げています。インターネットのトラフィックに関する議論がすべてのケースで有効であるかどうかはわかりません。幸いなことに、Webコンポーネントは状況を変えるでしょう。
Shadoweb

@Shadowbob-大きなCSSファイルではなく小さなCSSファイルを使用する方が良いでしょうか?すべてのページに使用されるジェネリックを1つ用意しますが、他のページには小さな個別のスタイルシートを用意します。維持しやすいはずです。トラフィックに問題がある場合、本番環境ではビルドプロセスでおそらく1つにマージできます。
Darius.V 2018年

26

高速CSSプロトタイピングへのHTML5アプローチ

または:<style>タグはもはや頭だけではありません!

CSSのハッキング

デバッグしていて、ページCSSを変更したい場合、特定のセクションの見栄えをよくするだけです。迅速かつダーティでメンテナンス不可能な方法でインラインでスタイルを作成する代わりに、最近行っていることを実行して段階的なアプローチをとることができます。

インラインスタイル属性なし

インラインでcssを作成しないでください。 <element style='color:red'>つまり<img style='float:right'>、非常に便利ですが、実際のセレクターの具体性は実際のcssファイルに後で反映されません。それを保持すると、後でメンテナンス負荷を後悔することになります。

<style>代わりにプロトタイプ

インラインCSSを使用する場合は、代わりにページ内<style> 要素を使用します。試してみてください!すべてのブラウザで正常に動作するため、テストには最適ですが、必要なときに必要に応じて、そのようなCSSをグローバルCSSファイルに適切に移動できます。(*セレクターはサイトレベルの特定性ではなく、ページレベルの特定性しか持たないことに注意してください。そのため、一般的すぎることに注意してください)cssファイルと同じようにクリーン:

<style>
.avatar-image{
    float:right
}
.faq .warning{
    color:crimson;
}
p{
    border-left:thin medium blue;
    // this general of a selector would be very bad, though.
    // so be aware of what'll happen to general selectors if they go
    // global
}
</style>

他の人のインラインCSSのリファクタリング

時々、あなたは問題でなくても、他の誰かのインラインcssを扱っていて、それをリファクタリングしなければなりません。これは<style>、ページ内でのもう1つの優れた使用方法です。これにより、インラインcssを直接取り除き、リファクタリング中に、クラス、ID、またはセレクターのページのすぐ上に配置できます。セレクタを慎重に進めていくと、コピーと貼り付けだけで、最終結果を最後にグローバルCSSファイルに移動できます。

cssのすべてのビットをすぐにグローバルcssファイルに転送するのは少し難しいですが、ページはめ込み<style>要素があるため、代替手段があります。


23

他の回答に加えて... 国際化

コンテンツの言語に応じて、要素のスタイルを調整する必要があることがよくあります。

明らかな例の1つは、右から左へ記述する言語です。

コードを使用したとしましょう:

<img src="myimage.gif" style="float:right" />

今あなたがあなたのウェブサイトがRTL言語をサポートすることを望んでいると言ってください-あなたは必要です

<img src="myimage.gif" style="float:left" />

したがって、両方の言語をサポートする場合、インラインスタイルを使用して浮動小数点に値を割り当てる方法はありません。

CSSでは、これはlang属性で簡単に処理されます

だからあなたはこのようなことをすることができます:

img {
  float:right;
}
html[lang="he"] img { /* Hebrew. or.. lang="ar" for Arabic etc */
  float:left;
}

デモ


16

インラインCSSは常に、リンクされたスタイルシートのCSSよりも常に優先されます。これは、適切なカスケードスタイルシートを作成して作成し、プロパティが正しく適用されない場合に、大きな頭痛の種となる可能性があります。

また、CSSは表示をマークアップから分離することを意味します。2つを絡めると、物事を理解し、維持するのがはるかに難しくなります。これは、サーバー側でコントローラーのコードからデータベースのコードを分離するのと同じような原理です。

最後に、それらのイメージタグが20個あるとします。あなたがそれらを左に浮かせるべきだと決めたとき、何が起こりますか?


12
「常に、常に勝つ」-スタイルシートで!importantが使用されていない限り
James Westgate

6
私は人々が人道的であり、そのような怪物を使用しないという仮定の下に住んでいます。=)
issa marie tseng

3
@JamesWestgateは、誰かがインラインCSSで!importantを使用してオーバーライドをオーバーライドするまで...
Kzqai

11

CSSの要点は、コンテンツをそのプレゼンテーションから分離することです。したがって、あなたの例では、コンテンツとプレゼンテーションを混在させており、これは「有害であると考えられる」かもしれません。


7
「有害と見なされるインラインCSSスタイル」をACMに提出するために5ドルを支払います。
BalinKingOfMoriaのCMを回復2015

11

インラインCSSの使用は、維持するのがはるかに困難です。

変更するすべてのプロパティについて、インラインCSSを使用する場合は、明確に定義された、うまく構成されたCSSファイルを単に調べるのではなく、対応するHTMLコードを探す必要があります。


3
+1-何かを整列させるために、デザイナーが簡単な修正としてそれを行うとき、私は本当に不満を感じます。外部CSSを使用することは、もちろん単一のスタイルシートで操作しない限り、大量のテキスト置換を行う必要がないことを意味します。昨日、コントロールパネルテンプレートがリリースされました。アイコンがインラインスタイルで調整されているインスタンスを見つけるのに2時間半かかりました。Maddening私はあなたに言います.. maddening :)
Tim Post

1
50以上のSCSSがあり、Inspect要素が圧縮されたCSSのみを指している場合、そのCSSがシンプルさを勝ち取るかどうかはわかりません!
Shadoweb

1
@Shadowbobがソースマップの目的です。thesassway.com/intermediate/using-source-maps-with-sass
Mike Chamberlain

@TimPost「要素の検査」機能が生まれた理由があります
Norielle Cruz

9

これは手書きのコードにのみ適用されます。コードを生成する場合、特に要素やコントロールに特別な処理が必要な場合は、インラインスタイルをここで使用しても問題ないと思います。

DRYは手書きコードに適したコンセプトですが、機械で生成されたコードでは、「法則の法則」を選択します。別の「リモート」CSSファイルでグローバルスタイルをもう一度編集するよりも、Styleタグを生成するコードを操作する方が簡単です。

あなたの質問への答え:それは異なります...


7
これが正解だと思います。「懸念の分離」というスローガンは、1つの基準にすぎません。「局所性」もメンテナンスを容易にするために重要です。重要な側面は、スタイルが単なる構文ではなく、セマンティックレベルで再利用可能かどうかです。その場合、シートは理にかなっています。たとえば、「float:right」のクラスを作成するつもりはありません。2つの要素がそれを使用しているからです。それは、意味的に同じ要素に依存します。「色」スタイルは通常、意味的に関連しており(テーマの一部)、通常はシートになります。
コリアンダー2015

5

1つの要素に特定のスタイルを設定したい場合でも、異なるページの同じ要素に同じスタイルを適用する可能性を考慮する必要があると思います。

ある日、誰かがすべてのページの同じ要素を変更したり、スタイルの変更を追加したりするように依頼する場合があります。外部CSSファイルでスタイルを定義している場合は、そこに変更を加えるだけで、すべてのページの同じ要素に反映されるため、頭痛の種を省くことができます。:-)


4

どのようにコーディングするかをコーディングしますが、それを他の誰かに渡す場合は、他の誰もが行うことを使用するのが最善です。CSSには理由があり、インラインには理由があります。どちらも使いやすいので、両方を使用しています。同じ繰り返しがたくさんある場合は、CSSを使用すると便利です。ただし、さまざまなプロパティを持つさまざまな要素がたくさんある場合は、問題になります。私の1つの例は、ページ上に要素を配置するときです。上部と左側の異なるプロパティとしての各要素。それをすべてCSSに入れると、htmlページとcssページの間を行き来するのが本当に面倒になります。したがって、CSSは、すべてに同じフォント、色、ホバー効果などを持たせたい場合に最適です。ただし、すべての位置が異なる場合は、各要素にCSSインスタンスを追加するのは本当に面倒です。それは私の意見ですが。CSSは、コードを掘り下げる必要がある場合、大規模なアプリケーションとの関連性が非常に高いです。Mozilla Web開発者プラグインを使用すると、要素のIDとクラスを見つけるのに役立ちます。


2

この例のようにスタイルを1度だけ使用しても、CONTENTとDESIGNが混在しています。「懸念の分離」の検索。


1

インラインスタイルを使用すると、同じソースファイルでマークアップとスタイルを効果的に混在させるため、関心の分離の原則に違反します。また、クラスは単一の要素にのみ適用できるため、ほとんどの場合、DRY(Do n't Repeat Yourself)の原則に違反しています。 )。

さらに、サイトにスクリプトが含まれている場合は、クラスを慎重に使用することが有益です。たとえば、JQueryなどのいくつかの一般的なJavaScriptライブラリは、セレクターとしてクラスに大きく依存しています。

最後に、クラスを使用すると、DOMがさらに明確になります。これは、指定されたノードがどのような要素であるかを示す記述子を効果的に提供するためです。例えば:

<div class="header-row">It's a row!</div>

よりもはるかに表現力があります:

<div style="height: 80px; width: 100%;">It's...something?</div>

1

ページはめ込みcssは、Googleが別のファイルから読み込まれたcssよりも優れたユーザーエクスペリエンスを提供すると評価しているため、現時点ではインページです。可能な解決策は、CSSをテキストファイルに入れ、PHPを使用してオンザフライでロードし、ドキュメントヘッドに出力することです。で<head>セクションこれを次のとおりです。

<head> ...

<?php
$codestring = file_get_contents("styles/style1.txt");
echo "<style>" . $codestring . "</style>";
?>

... </head>

必要なcssをstyles / style1.txtに入れてください。 <head>、ドキュメントのセクションに表示されます。このようにして、ページ内CSSを作成し、すべてのページで共有できるスタイルテンプレートstyle1.txtを使用して、その1つのファイルだけでサイト全体のスタイルを変更できるようにします。さらに、この方法ではすべてがphpによって一度に配信されるため、ブラウザーがサーバーから個別のcssファイルを要求する必要がないため(検索/レンダリング時間を最小限に抑えることができます)。

これを実装すると、個別の1回限りのスタイルを必要に応じて手動でコーディングできます。


はい!これは、すべてのCSSがファイル内にある場合に「最初のペイントまでの時間」を最小限に抑えるために重要であり、スタイルシートがユーザーによってダウンロードされるまでDOMを延期します。重要なスタイルをヘッド内のインライン<styles>ノードに含めると、すぐにDOMのレンダリングを開始して、外部スタイルシートを遅延させることができます。〜3G接続と知覚速度に大きな影響を与えます。回答の+1
DOfficial 2017

1

インラインCSSは、機械で生成されたコードに適しています。ほとんどの訪問者がサイトの1ページしか閲覧しない場合は問題ありませんが、メディアクエリを処理して、さまざまなサイズの画面のさまざまな外観を許可することはできません。そのためには、CSSを外部スタイルシートまたは内部スタイルタグに含める必要があります。


0

上記のすべての回答に完全に同意しますが、CSSを別のファイルに書き込むことは、コードの再利用性、保守性、懸念の分離から常に優れていると言えます。

外部CSSファイルにより、ブラウザーへのHTTP呼び出しが1つ増えるため、レイテンシが長くなります。代わりに、CSSがインラインで挿入されている場合、ブラウザはすぐにCSSの解析を開始できます。特にSSL経由のHTTP呼び出しはよりコストがかかり、ページのレイテンシが増加します。インラインコードとして外部CSSファイルを挿入することにより、静的なHTMLページ(またはページスニペット)を生成するのに役立つ多くのツールが利用可能です。これらのツールは、プロダクションバイナリが生成されるビルドおよびリリースフェーズで使用されます。これにより、外部CSSのすべての利点が得られ、ページが高速になります。


3
あなたは何かを逃しています:待ち時間。はるかに大きな問題は、本当に:CSSを埋め込むと、すべてのページリクエストがそうでないのに対し、ブラウザはそれをキャッシュすることができ、そのCSSが含まれていなければならないことを意味します。
Andrew Barber

あなたが正しいです。そのため、コードサイズが非常に小さい場合にCSSをインライン化し、ページサイズに大きなオーバーヘッドが発生しないようにします。Yahoo!には非常に興味深い記事があります。Perfのガイドラインページdeveloper.yahoo.com/performance/rules.htmlには、ユーザーの60〜80%が毎日キャッシュを空にしてサイトにアクセスすることを記載しています(yuiblog.com/blog/2007/01/04/performance-research-part -2)もちろん、それはウェブサイトの人気に完全に依存します-サイトが人気であるほど、空でないキャッシュを持つ可能性が高くなります。
Diptendu 2014年

ユーザーが空のキャッシュを使用してサイトにアクセスする可能性は高いですが、空のキャッシュを使用してページにアクセスすることはほとんどありません。ページが使い捨てでない場合(つまり、各ユーザーが一度だけ表示する場合)は、個別のcssファイルを使用するとパフォーマンスが向上します。
astex

最近の多くの最新のWebページはシングルページアプリケーションとして設計されており、ページ全体が初めて読み込まれます。次回以降は、AJAX呼び出しによってページが変更されます。したがって、ページが多目的である場合でも、外部CSSは一度だけ読み込まれます。
ディプテンドゥ2015

0

AMP HTML仕様によれば、パフォーマンス向上のために、CSSをHTMLファイル(外部スタイルシートではない)に配置する必要があります。これはインラインCSSを意味しませんが、外部スタイルシートを指定しません

このようなサービングシステムが行う可能性のある最適化の不完全なリストは次のとおりです。

  • 画像参照を、ビューアのビューポートに合わせたサイズの画像に置き換えます。
  • スクロールせずに見える範囲にあるインライン画像。
  • インラインCSS変数。
  • 拡張コンポーネントをプリロードします。
  • HTMLとCSSを縮小します。

0

他の回答に加えて、インラインCSSの疑似クラスまたは疑似要素をターゲットにすることはできません

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