あなたが望んでいた解決策はうまくいきません:
dl.definition dd:last-child,
dl.definition dd.last-child {
margin-bottom: 0;
}
これが機能しない理由は、古いバージョンの IE に関する限り、dd:last-child
無効なセレクターであり、ブロック全体が破棄されるためです。有効なセレクターも含まれているかどうかは問題ではありません。無効なもののためにすべてが破棄されます。
物事を改善する方法に関するいくつかのオプションと、あちこちでコードを複製する手間を省く...
IE をアップグレードします。Selectivizrやie7.js/ie8.js/ie9.jsなど、 IE にパッチを適用してより多くの CSS セレクターをサポートするようにするJavaScript ライブラリが利用可能です。:last-child
これらのほとんどすべてのライブラリに含まれています。
CSS をダウングレードします。古い IE バージョンをサポートするために、既にクラスをコードに記述しているため、すべてにそれを使用し、セレクター.last-child
の使用は忘れてください。:last-child
そうすれば、すべてのブラウザーに必要なセレクターは 1 つだけです。
優雅な劣化。IE 固有のコードを削除し、古い IE ユーザーがわずかに壊れたページを表示できるようにします。使い勝手に問題ない程度であれば大したことないかもしれません。古い IE ユーザーはそれほど多くないかもしれません (そして、その数は減少し続けるでしょう)。また、古い IE をまだ使用しているユーザーは、最近、わずかに壊れた (またはさらに悪い) サイトを目にすることに慣れています。
:first-child
の代わりに使用するレイアウトを再配置します:last-child
。:first-child
のサポートははるかに優れています (古い IE にはバグがありますが、IE7 に戻ります)。
SASS や Lessなどの CSS コンパイラを使用すると、CSSをサイトにデプロイするときに実際の CSS コードに変換する前に、より論理的で構造化された形式で CSS を記述できます。
うまくいけば、これらのソリューションの1つがうまくいくでしょう。私の提案は Selectivizr ライブラリですが、上記のいずれも実行可能なソリューションを提供するはずです。