15

背景のグラデーションを表示しようとして、IE9 で奇妙なことに遭遇しました。

基本的に、コンテナ オブジェクトに複数のクラスを適用しています。

<div class="gradient corners"></div>

この CSS を使用します。

.gradient {
background-color: #96A7C5;
background-image: -webkit-gradient(
linear,
left bottom,
left top,
color-stop(0.19, #6C86AD),
color-stop(0.6, #96A7C5)
);
background-image: -moz-linear-gradient(
center bottom,
#75A33A 19%,
#8DC447 60%
);

.corners {
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
}

IE でグラデーションを取得するには、フィルタ ガベージを .gradient クラスに適用します。

filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#8DC447', endColorstr='#75A33A');

これで、グラデーションは機能しますが、丸みを帯びた角はなくなります。

ということで、フィルタ宣言に条件文を入れてみました。

<!--[if IE]>
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#8DC447', endColorstr='#75A33A');
<![endif]-->

それは私のコーナーを取り戻しますが、グラデーションは消えます.

4

5 に答える 5

25

グラデーションは IE9 で丸みを帯びた角に適用されるため、現時点では div を 1 つ追加するのが最善の解決策です。

 <div class="corners"><div class="gradient"></div></div>

.corners のオーバーフローを非表示にします

.corners {
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;

overflow: hidden;
}

クロスブラウザーのグラデーションを作成するには、この Photoshop のようなツールをお勧めします: http://www.colorzilla.com/gradient-editor/

そして、これはボーダー半径を作成するためのものです: http://border-radius.com/

于 2011-09-25T07:36:17.100 に答える
2

if IEブロックは必要ありません。

3 つすべて (両方の IE を含める場合は 4 つ) のルールをスタイル宣言に入れるだけで、ブラウザーは理解できるものだけを選択します。

例:

.gradient {
background-image: -moz-linear-gradient(top, #81a8cb, #4477a1); /* Firefox 3.6 */
background-image: -webkit-gradient(linear,left bottom,left top,color-stop(0, #4477a1),color-stop(1,#81a8cb)); /* Safari & Chrome */
filter:  progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#81a8cb', endColorstr='#4477a1'); /* IE6 & IE7 */
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#81a8cb', endColorstr='#4477a1')"; /* IE8 */
}

また、IE のグラデーションは、要素hasLayout( http://reference.sitepoint.com/css/haslayoutを参照)

于 2011-05-25T20:13:52.197 に答える
2

これは、IE9 のグラデーションとコーナーの問題に対するかなり堅実な回避策です。js を使用してその場で SVG を生成します - しかも高速です。

http://abouthalf.com/2011/10/04/updated-ie9-gradients-with-rounded-corners/

于 2012-07-17T14:55:52.743 に答える
1

角丸とフィルターが合わない。IE の場合、私は常にhttp://css3pie.comを含め、それを使用して IE で境界半径とグラデーションを実行します。サンプル css は次のようになります。

.someElement {
    behavior: url(assets/js/PIE.htc);
    border-radius: 10px;
    background: #8cb2d1;
    background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzhjYjJkMSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjQyJSIgc3RvcC1jb2xvcj0iIzQwODBiMyIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSJ1cmwoI2dyYWQtdWNnZy1nZW5lcmF0ZWQpIiAvPgo8L3N2Zz4=);
    background: -moz-linear-gradient(top,  #8cb2d1 0%, #4080b3 42%);
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#8cb2d1), color-stop(42%,#4080b3));
    background: -webkit-linear-gradient(top,  #8cb2d1 0%,#4080b3 42%);
    background: -o-linear-gradient(top,  #8cb2d1 0%,#4080b3 42%);
    background: -ms-linear-gradient(top,  #8cb2d1 0%,#4080b3 42%);
    background: linear-gradient(top,  #8cb2d1 0%,#4080b3 42%);
    -pie-background: linear-gradient(top, #8cb2d1 0%,#4080b3 42%);
}

手順:

  1. 動作を介してPIE.htcを含める
  2. 通常どおり境界線の半径を追加します (border-radius: 10px;)
  3. 特別な -pie-background 属性を追加します: (-pie-background: linear-gradient(top, #8cb2d1 0%,#4080b3 42%);)
于 2012-07-05T14:04:15.897 に答える
1

IE9の半径をクリップするには、ラッパーdiv(丸められたオーバーフローが非表示)を使用するだけです。シンプルで、クロスブラウザで動作します。SVG や JS は不要です。

<div class="ie9roundedgradient"><div class="roundedgradient">text or whatever</div></div>

.ie9roundedgradient { 
display:inline-block; overflow:hidden; -webkit-border-radius: 8px; -moz-border-radius: 8px; border-radius: 8px; 
}
.roundedgradient { 
-webkit-border-radius: 8px; -moz-border-radius: 8px; border-radius: 8px; 
/* use colorzilla to generate your cross-browser gradients */ 
}
于 2013-02-12T18:42:40.103 に答える