<body>に<style>を含めるのは間違った考えでしょうか?


12

以下のコードでは、headではなく、bodyタグを使用して内部スタイルシートを配置しました。単一ページアプリケーションの場合、個別のpagespecific.cssファイルを用意するのではなく、そのページだけに適用できるスタイルにこれを行うことを検討しています。

これをヘッドセクションに配置していないため、これがマイナス面になるシナリオはありますか?

<!-- myPartial.html starts here --> 
<!-- Like to keep styles unique to this html right here in this file --> 
<div>
  <style>
    body { background-color: red; }
    #myText { color: white; }
  </style>

  <span id='myText'>Hello</span>
</div>
<!-- myPartial.html ends here --> 

回答:


18

style内部の要素body要素は、HTMLの構文規則に違反します。(ただし、HTML5ドラフトによれば、scoped属性が存在する場合、条件によっては許可されます。この属性は一部のブラウザーでサポートされています。)一方、ブラウザーは気にしません。headおよびbody要素への分割は理論的なものです。

ただし、style内部に配置するのとは逆に、無効な構文を使用しても何も得られませんhead。唯一の言い訳は、一部のオーサリング環境における技術的な制限であり、それにより、headパーツに何かを入れることができなくなる可能性があります。

style要素と外部スタイルシートのビアの使用の問題はlink、この質問と完全に直交しています。


1
あなたの答えの最初の部分は必ずしも真実ではありません
patricksweeney 2014年

1
@patricksweeney、私はそれはこの文脈ではやや理論的だと思いますが、正しい観察です。回答を更新しました。
Jukka K. Korpela、2014年

私は、「ブラウザーは気にしない」を私のアプローチの前向きなものと見なしています。私のページはパーシャル(Single-Page-Application)なので、<head>セクションを含めることができません。これは、<body>内またはbody要素内に配置しようとしている理由です。
サラン2014年

2
@Galaxy、単一ページのアプリケーションにhead要素がない理由はわかりません。HTMLページには常に1つあります。
Jukka K.Korpela 14年

@ JukkaK.Korpela、私はあなたの質問に答えるために私の質問のコード部分を更新しました。
サラン2014年

6

(私たちはここSE.SXにいるので、より戦略的なアプローチは、通常の技術的な考慮事項への価値ある補強になるかもしれません。)

[序文] HTML5仕様は絶え間なく変化するターゲットであり、確立された一般的な慣習をフォローアップする方針があります。彼らは過去に時代遅れの機能を復活させ、他の人の意味を変え、系統的な推奨事項の焦点を変えました。人類のすべての知恵を一度に利用できるように、永遠に書かれたものではありません。仕様は神聖な真実の源ではありません。時々ブラウザが正しいのは当然です。[/前文]

OPの状況は圧倒的に一般的で有効です。

テーマが設計およびインストールされたCMSがあり、すべてのCSSがHEADから適切にロードされた後、ページエディターに「ソースモード」に切り替えられる(神に感謝します)おしゃれなWYSIWYGボックスが残っています。 HTMLマークアップに入力(貼り付け)(以前は別の場所で作成され、より適切なツールで)。幸いにも、STYLEタグを含めることもできます(たぶん、タグフィルターの偶発的な省略が原因です)...多くの反復的な魂を破壊する不快な作業から、その日は救われます。ただし、ページ編集シナリオからシステムのHEAD要素を妨害する手段は、まだありません。

仕様がそう言っているからといって、HTMLフラグメントで簡単にCSSを使用する必要はありませんか?

または、単一ページのAJAXアプリケーションがあります。

長いセッションの間、リロードなしで実行されており、さまざまなランダムソースからのシンジケートコンテンツがあり、それらはすべて任意に独立してスタイル設定されています。STYLE埋め込みSTYLE要素だけでなく、インライン属性のみを使用するように最初に変換することを要求するのはばかげたことでしょう。

さらに、a)属性BODYを介して、CSSをの任意の場所に既に埋め込むことができるSTYLEため、CSSは「理論的には」合法です。およびb)JavaScriptから(およびその他の)必要なときにいつでも、ほぼすべてのスタイルで必要なことをすべて実行できるため、CSSは病理学的にパフォーマンスの低い方法で誤用する可能性もあります。そして、私たちの誰もこれらの機能に異議を唱えることはありません。W3Cも同様です。

それで、のSTYLE要素について何がそんなに悪いのBODYですか?HTMLコンストラクトに対する悪用の幅広い武器庫に追加される、それらの余分な悪影響は何ですか?より悪いパフォーマンス?多分。時々。

それが理由ですべてのブラウザによってサポートされているこの信じられないほど有用な慣行を廃止する正当な理由ですか?100万マイルではありません!

私たちは馬鹿ではありません。すべてではありませんが、常にではない...;)パフォーマンスが低下するリスクのあるテクニックは、単に禁止するのではなく、単に文書化することもできます。私たちは、Webの初期の頃はJavaアプレットを使用していたが、生き残った。車は悪用され、悲惨な状態を引き起こし、食べ物でさえ邪魔で非効率的な方法で使用される可能性があり、食べることができるドライバーは、平均して、平均的なWebデザイナーよりもさらに愚かになる場合があります。その上、親愛なるW3C、心配する必要はありません。HTMLのいじくり屋の怒りの群れが、脚をスチールSTYLEエレメントで撃ち落とされてBODYも、W3Cを追いかけて復讐することはできません。彼らは住所を知らない。そして、彼らには足がありません。

ですので、STYLE合法になることについてあなたの声を聞いてくださいBODY!テキストを素直に引用しますが、現在の状況より優れた実行可能な代替案を提供し損なうことは役に立ちません。これは実際、この最後の手段の回避策に対する脅威です。

覚えておいてください:HTML5仕様はレコメンデーションと呼ばれています。


更新:最終的に仕様が追いついた:STYLE有効になりましたBODY!;)
lunakid

1
更新2:仕様が変更されたために取り掛かりませんでした(lunakidのリンクをクリックして、更新されました)。
Maximillian Laumeister

2

HTMLの仕様と述べています

スコープ属性のないスタイル要素は、ドキュメントの先頭にのみ表示されます。

scoped属性はブール値で、スタイル要素の親要素をルートとするサブツリーにのみ適用されることを示します。

現時点では、Firefoxのみがscoped属性をサポートしています。http://www.w3schools.com/tags/att_style_scoped.asp


5
w3schoolsサイトは参照として、またはまったく引用されるべきではありません。w3fools.comを
Jukka K. Korpela 14年

2
そして、これは質問に答えません。
Jukka K.Korpela 14年

1
@ JukkaK.Korpelaに感謝します。これは、スコープ属性ブラウザのサポートを引用して最初に見つけたリンクでした。他のコメントはより良い引用を提供します。+1答え-1建設的コメントより少ない。
crad

仕様を指すための+1と、スコープのサポートの欠如(仕様に準拠するために必要)に注意してください。私はあなたがそこに銃をジャンプする前に答えを読むべきだと思います@ JukkaK.Korpela、非常に貧弱です。あなたは本当に仕様以上に信頼できるものはありません、そしてそれは質問に完全に答えます。「体にスタイルを持たせるのは間違った考えでしょうか?」-仕様によると「そうです。
ファーガスインロンドン2014年

1

CSSをファイルで使用する場合とスタイルタグで使用する場合の技術的な理由はいくつかあります。

  • CSSミニファイアを使用する機能(ミニファイアがスタイルタグで機能するとは思わない)
  • ブラウザでcssファイルをキャッシュできるようにするため。

ファイルを使用するいくつかの意見に基づく理由:

  • Sass(Compass)やLessなどのすばらしいcssプリプロセッサを使用できます。
  • アプリケーションにCSSを追加する2つの方法を維持しています。

私の個人的な好みは、コンパスを使用してページごとに個別のファイルを保持し、それを使用してそれらをすべて1つのファイルにコンパイルすることです。その単一のファイルは、すべてのページに含まれます。将来、ファイルは常に何らかの理由で分離される必要がありますが、それまでの間、面倒なことはありません。

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