92

色付きのアイコン(リンクになる)を取得し、ユーザーがマウスをアイコンの上に置くまで(画像に色を付けるまで)グレースケールにします。

これは可能で、IE と Firefox がサポートされている方法ですか?

4

5 に答える 5

257

これを実現する方法は数多くありますが、以下にいくつかの例を挙げて詳しく説明します。

純粋な CSS (1 つのカラー画像のみを使用)

img.grayscale {
  filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale"); /* Firefox 3.5+ */
  filter: gray; /* IE6-9 */
  -webkit-filter: grayscale(100%); /* Chrome 19+ & Safari 6+ */
}

img.grayscale:hover {
  filter: none;
  -webkit-filter: grayscale(0%);
}

img.grayscale {
  filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale");
  /* Firefox 3.5+, IE10 */
  filter: gray;
  /* IE6-9 */
  -webkit-filter: grayscale(100%);
  /* Chrome 19+ & Safari 6+ */
  -webkit-transition: all .6s ease;
  /* Fade to color for Chrome and Safari */
  -webkit-backface-visibility: hidden;
  /* Fix for transition flickering */
}

img.grayscale:hover {
  filter: none;
  -webkit-filter: grayscale(0%);
}

svg {
  background: url(http://4.bp.blogspot.com/-IzPWLqY4gJ0/T01CPzNb1KI/AAAAAAAACgA/_8uyj68QhFE/s400/a2cf7051-5952-4b39-aca3-4481976cb242.jpg);
}

svg image {
  transition: all .6s ease;
}

svg image:hover {
  opacity: 0;
}
<p>Firefox, Chrome, Safari, IE6-9</p>
<img class="grayscale" src="http://4.bp.blogspot.com/-IzPWLqY4gJ0/T01CPzNb1KI/AAAAAAAACgA/_8uyj68QhFE/s1600/a2cf7051-5952-4b39-aca3-4481976cb242.jpg" width="400">
<p>IE10 with inline SVG</p>
<svg xmlns="http://www.w3.org/2000/svg" id="svgroot" viewBox="0 0 400 377" width="400" height="377">
  <defs>
     <filter id="filtersPicture">
       <feComposite result="inputTo_38" in="SourceGraphic" in2="SourceGraphic" operator="arithmetic" k1="0" k2="1" k3="0" k4="0" />
       <feColorMatrix id="filter_38" type="saturate" values="0" data-filterid="38" />
    </filter>
  </defs>
  <image filter="url(&quot;#filtersPicture&quot;)" x="0" y="0" width="400" height="377" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://4.bp.blogspot.com/-IzPWLqY4gJ0/T01CPzNb1KI/AAAAAAAACgA/_8uyj68QhFE/s1600/a2cf7051-5952-4b39-aca3-4481976cb242.jpg" />
   </svg>

この手法に関連する記事は、こちらにあります。

Pure CSS (グレースケールとカラー画像を使用)

このアプローチでは、イメージの 2 つのコピーが必要です。1 つはグレースケールで、もう 1 つはフル カラーです。CSS:hover疑似セレクターを使用すると、要素の背景を更新して 2 つの間で切り替えることができます。

#yourimage { 
    background: url(../grayscale-image.png);
}
#yourImage:hover { 
    background: url(../color-image.png};
}

#google {
  background: url('http://www.google.com/logos/keystroke10-hp.png');
  height: 95px;
  width: 275px;
  display: block;
  /* Optional for a gradual animation effect */
  transition: 0.5s;
}

#google:hover {
  background: url('https://graphics217b.files.wordpress.com/2011/02/logo1w.png');
}
<a id='google' href='http://www.google.com'></a>

hover()これは、jQuery の関数などの Javascript ベースのホバー効果を同じ方法で使用することによっても実現できます。

サードパーティのライブラリを検討する

度ライブラリは、特定の要素または画像のグレースケール バージョンとフルカラー バージョンを簡単に切り替えることができる共通ライブラリです。

于 2011-09-01T17:18:58.140 に答える
13

ここで回答: Convert an image to grayscale in HTML/CSS

面倒に思える 2 つの画像や画像操作ライブラリを使用する必要さえありません。クロス ブラウザー サポート (現在のバージョン) を使用して、CSS を使用するだけで実行できます。これは、古いブラウザーのカラー バージョンにフォールバックする漸進的な拡張アプローチです。

img {
  filter: url(filters.svg#grayscale);
  /* Firefox 3.5+ */
  filter: gray;
  /* IE6-9 */
  -webkit-filter: grayscale(1);
  /* Google Chrome & Safari 6+ */
}
img:hover {
  filter: none;
  -webkit-filter: none;
}

そして、次のようなfilters.svgファイル:

<svg xmlns="http://www.w3.org/2000/svg">
  <filter id="grayscale">
    <feColorMatrix type="matrix" values="0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0" />
  </filter>
</svg>
于 2012-07-22T16:24:55.880 に答える
0

カラーとモノクロの両方のバージョンが格納されたスプライトを使用できます。

于 2011-09-01T17:19:05.977 に答える
-1

これがデモです。IE7 でも動作します:

http://james.padolsey.com/demos/grayscale/

http://james.padolsey.com/javascript/grayscaling-in-non-ie-browsers/

于 2011-09-01T17:20:08.750 に答える