あなたの考えはうまくいきません
条件ステートメントのポイントは、IE の古いバージョンのグラデーションsvg
だけでなく、バックグラウンドでグラデーションが定義されている場合に IE9 をオーバーライドすることです (たとえば、この SO の質問を参照してください)。filter
IE9 で をsvg
適切に使用するには、以前のバージョンのフィルター セットを上書きするように設定する必要があります。これは通常、css のカスケードを使用してフィルターをリセットすることによって行われます。したがって、グラデーションを定義する元の css に続く条件付きコメントで同じセレクター名が使用されるのはなぜですか。より新しい IE9 css が自動的に使用されます。これは、同じセレクターですが、カスケードで後で来るためです。
2 番目の方法は、IE9 条件付きのセレクターを、適用されたどのグラデーション セレクターよりも具体的にすることです。ただし、LESS でさまざまなセレクターを使用しているだけなので、これは困難ですが、克服できないわけではありません。
では、なぜあなたのアイデアはうまくいかないのか
*
セレクターは0
特定のものです。それはすべての要素に影響を与えますが、パワーはありません。そのため、カスケード内の他のセレクターをオーバーライドしたり、力ずくでオーバーライドしたりすることはできません。基本的に、あなたの場合、セットを持つようにフィルターが定義されていないセット要素以外は何もしません。定義されているもの(グラデーションコードを含む)filter: none
の他のすべてのコードを保持します。filter
回避策として成功する可能性が最も高い
グラデーションを使用してさまざまな要素に単一のクラスを設定したくないため (おそらくそれを処理する最も簡単な方法)、代わりに、グラデーションを含む可能性のある LESS によって生成されたさまざまなセレクターを処理しているため、次のようになります。これらのセレクターの CSS を展開して処理します。これを行うにはさまざまな方法がありますが、他のブラウザーが表示しないように条件にフィードできる可能性がある方法もありますが、1 つの例 (すべてのブラウザーで選択される) を計画することです。html
IE9 の場合にクラスを設定してから、次のようにします。
以下
.someClass {
filter: gradientFilter;
.ie9resetFilter();
}
.someOtherClass {
filter: gradientFilter;
.ie9resetFilter();
}
.ie9resetFilter() {
html.ie9 & {
filter: none;
}
}
CSS出力
.someClass {
filter: gradientFilter;
}
html.ie9 .someClass {
filter: none;
}
.someOtherClass {
filter: gradientFilter;
}
html.ie9 .someOtherClass {
filter: none;
}
IE9 で他のフィルタを使用していない場合は...
IE9 のフィルター呼び出しのすべてのインスタンスを (フィルターの種類に関係なく) オーバーライドすることを気にしない場合はid
、html
orbody
要素に を設定し、条件付きコメントを使用してオーバーロード選択を行うことができます (事実を使用して) 「同じ単純なセレクターの繰り返し発生は許可されており、特異性が向上します。」 )。id
で「myID」が設定されているとしましょう。条件付きでこれを行うと、IE9body
の any のオーバーライドがほぼ保証されます。filter
<!--[if gte IE 9]>
<style type="text/css">
#myID#myID#myID#myID * { filter: none; } /* specificity is 400 */
</style>
<![endif]-->
LESS に、4 つの ID に等しい特異性を持つ通常のセレクター文字列がないことを前提としています (とにかくそうならないことを願っています)。
これは理想とはほど遠いものですが、個々のセレクターのオーバーライドを回避するための回避策です。