読者です 読者をやめる 読者になる 読者になる

きよくらの備忘録

「三日坊主と呼ばせない!日記」改め。主にソフトウェア開発関連の話題。

Themeを侮っていたかもしれない。

ASP.NET

というか、今までまったく具体的にどんなものか理解しようとすらしていなかったのですが。

今日、職場で雑談ベースの話をしてた時に「マスターページを使った時、同じマスターに対する個々のコンテンツページでつかうスタイルって変えれないのが嫌だよね」みたいな文脈の話になりました(というか僕が一方的にしゃべってた)。


何のことかというと、style要素はbodyの中には書けない*1ので、基本的にマスター側に書くしかありません。linkで外部から読み込む場合も同じ。ですので、同じマスターを使うコンテンツページで必要なスタイルは全てそのマスターに定義しないといけないことになってしまう。つまり、あるコンテンツページにとっては必要無い定義であっても、読み込まれることになってしまう。セレクタが競合しないように定義する必要があるのは別に構わないし、画面遷移中に一度は必要になると仮定するならばキャッシュされるだろうからパフォーマンス面でもそう神経質にならなくても良いかもしれません。しかし、特定のスタイルがどのコンテンツページで使われているのか解り難くなって、保守性の面ではあまり歓迎すべき状況ではなくなってしまいます。スタイルを必要とされる単位で外部ファイルに小分けする意味が薄くなる可能性が出てきます。


無理やりコード側(サーバサイド処理)でマスター側のhead要素内に書き出すことは可能*2ですが、それをやってもデザイナで反映されないので、あまりおいしくないです。


という内容の話をしていたら、「Themeでやったらうまく行くんでは?」みたいな流れになって。僕は今まで、themeについてはあまり触れていなかったというか、なぜか触れる気が起きていなかったんですけれど、使い方を教えてもらったら。……これはいいかも。


themeって、今まで、なんとなく『styleを一括して定義して置くもので、割と大層なもの』みたいな認識だったんですが、これって、styleもそうですが、どちらかというと『各コントロールの、見てくれに関するプロパティ設定をそのまま書き出しておく』のがウリだったんですね。いや、そうに違いない。


で、思ったより小回りも利くし、ページディレクディブで設定しておけばデザイナでも反映されるし。これはいい。


ということで、ちゃんとthemeについて勉強してみようと思いました。

*1:ブラウザによっては解釈してくれるけど、VS2005の場合はエラー扱いになってデザイナが開けなくなる

*2:やったことはないですが、たぶんマスタ側になんらかプロパティを設定しておいてコンテンツ側で読み込むスタイルを指定、マスター側でレンダリング前に発生するイベント内で適当にhead要素内に書けばよいだけなので、何とでもなりそう