CSSのうまいまとめ方

CSSがまだよくわかっていないのでアレなんだが、現在、「経済思想の歴史」の訳で、オリジナルのかなりめちゃくちゃな html を、xhtml1.1 にきちんと対応しようとしてるんだが……

やりたいことは簡単で、タイトル(h1) の部分をバナー状にして、そこに画像も表示させること。で、だいたいできました。以下のようなのをcssに書き:

.margrev_topbanner {margin-left:auto; margin-right:auto;
text-align:left; padding:5ex; background-color:black; color:white;width:70%; /* necessary for ie win */
background-position: 75% center;
background-repeat: no-repeat;
background-size: contain;
background-image: url("./essays/margrev/image/margrevcont.jpg");
}

.keynes_topbanner {margin-left:auto; margin-right:auto;
text-align:left; padding:5ex; background-color:black; color:white;width:70%; /* necessary for ie win */
background-position: 75% center;
background-repeat: no-repeat;
background-size: contain;
background-image: url("./essays/keynes/image/keynesicon.jpg");
}

.classical_topbanner {margin-left:auto; margin-right:auto;
text-align:left; padding:5ex; background-color:black; color:white;width:70%; /* necessary for ie win */
background-position: 75% center;
background-repeat: no-repeat;
background-size: contain;
background-image: url("./essays/keynes/image/keynesicon.jpg");
}

でもってタイトルのところは div class="keynes_topbanner" とかで囲ってやればいい。

<div class="margrev_topbanner">
<h1 id="top">新古典派</h1>
    <h2>- はじめに -</h2>
</div>


これでだいたいやりたいことは実現できて、とりあえずは結構。タイトルはこんなふうになる。

ただ、このcssを見ると、それぞれのclassでちがうのは唯一最後の画像のurlだけだ。でも画像が変わるだけで新しい class を作るのも効率が悪い。このままだとほとんど同じものを20種類くらい作ることになる。cssにはたとえば

.topbanner {margin-left:auto; margin-right:auto;
text-align:left; padding:5ex; background-color:black; color:white;width:70%; /* necessary for ie win */
background-position: 75% center;
background-repeat: no-repeat;
background-size: contain;
background-image: url("%1");
}

とでも書いておいて、htmlのところに

<div class="topbanner" %1="./image/margrevcont.jpg">
<h1 id="top">新古典派</h1>
    <h2>- はじめに -</h2>
</div>

とやると%1のところに画像のurlが代入されて、cssもすっきり、というような仕掛けはないもんだろうか? 一方であまり大げさなスクリプトをここで持ち出すのも面倒だし…… PHPなんて持ち出すほどのもんじゃないし(というよりいまから勉強したくないし)……*1

それにしても、表の中央ぞろえだけで左右margin:autoとかcounterintuitive すぎ。表の罫線面倒すぎ。うー。

追記

実は、上を実現するためのhtmlはこんなふうになっていて、構造的にはとっても汚い。

<!-- SiteSearch Google -->
<form method="get" action="http://www.google.co.jp/search">
<table style="float:right; margin-right:12%;">
<tr valign="top">
<td style="text-align:right">
<a href="http://www.hetwebsite.org/het/essays/margrev/ncintro.htm" style="color:white; text-align:right">原ページ </a><br /><br />
</td>
</tr>
<tr valign="top">
<td>
<input type="text" name="q" size="15" maxlength="255" value="" />
<input type="hidden" name="hl" value="ja" />
<input type="hidden" name="ie" value="utf-8" /><br />
<input style="vertical-align: top" type="submit" name="btnG" value="検索" /><a href="http://www.google.co.jp/"><img src="http://www.google.co.jp/intl/ja/logos/Logo_25blk.gif" style="border-width: 0; vertical-align: absmiddle;" height="32" width="75" alt="Google" /></a>
<br />
<span style="font-size:small;color:white">
<input type="hidden" name="domains" value="cruel.org" />
<input type="radio" name="sitesearch" value="" />WWW 検索<br />
<input type="radio" name="sitesearch" value="cruel.org" checked="checked" />cruel.org 検索
</span>
</td>
</tr>
</table>

</form>
<!-- SiteSearch Google -->
</p>
<div class="margrev_topbanner">
<h1 id="top">新古典派</h1>
    <h2>- はじめに -</h2>
</div>

要するに、バナーの右側にあるgoogle検索部分は、h1の上にfloatしている表で、それが右マージンをそろえることでその下のdiv classによる黒バナー部分の空きに垂れ下がっている構造。ほんとは、同じ divのtopbannerのcssをうまく書けば、一つの構造として一体的に処理できるんだろうが……

追記

一瞬でコメントがきて、一瞬で解決した。すばらしい! ありがとうございます!



クリエイティブ・コモンズ・ライセンス
山形浩生の「経済のトリセツ」 by 山形浩生 Hiroo Yamagata is licensed under a Creative Commons 表示 - 継承 3.0 非移植 License.

*1:cssも、classで指定するのと#hogehogeでidで指定するのとなんか使い分けよくわからんし、階層構造的な使い方もあんまりわかってない……うーめんどい。