外部スタイルシートが反映されない問題

外部スタイルシートを指定して、

<link type="text/css" href="/style.css" rel="stylesheet" />

サーバのログにはきちんとそのスタイルシートへのアクセスがあって200 OKが返されている

"GET /style.css HTTP/1.1" 200 -

にも関わらず、ブラウザ上でその外部スタイルシートで定義されたスタイルが当たっていないという現象が起きた。


原因は、HTTPレスポンスのcontent-typeがtext/htmlになっていたことで、text/cssを返すように修正したら解決した。

ApacheでもGoogle App Engineでもデフォルトで「拡張子が.cssの際にはcontent-type: text/css」という設定になっているのだろう。試しにPNGの画像の拡張子を.cssにしてみたらtext/cssでレスポンスが来た。

慣習的にスタイルシートの拡張子を.cssにしているので今まで意識せずにいたが、今回CSSをテンプレートエンジンでレンダリングしようとしたので発覚した。重要なのはcontent-type: text/css。覚えた。


追記:
http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#the-link-element
via id:yukoba