CSSを使用した画像のグレースケールとマウスオーバーでの色の変更?


86

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

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


2
ほぼ重複しています... stackoverflow.com/q/609273/670377
Tom Sarduy 2012年

逆にするともっと面白い効果になりませんか?マウスカーソルを、暗い世界に色をもたらす魔法の杖のようなものにしましょう。
x10D

回答:


242

これを実現する方法はたくさんありますが、以下にいくつかの例を示します。

純粋な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%);
}

あなたは見つけることができ、ここで、この技術に関連した記事を

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

このアプローチでは、画像の2つのコピーが必要です。1つはグレースケールで、もう1つはフルカラーです。CSS :hoverpsuedoselectorを使用すると、要素の背景を更新して、次の2つを切り替えることができます。

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

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

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

非飽和のライブラリを使用すると、簡単に特定の要素や画像のグレースケールバージョンとフルバージョンの色を切り替えることができます一般的なライブラリです。


上記の画像を他のウェブサイトにリンクする必要がある場合、画像が背景として設定されているとしたら、どうすればよいでしょうか。
メタ2011

1
同じように機能します。セクション1のデモを確認してください。他にご不明な点がございましたら、お気軽にお問い合わせください。
リオンウィリアムズ

1
みんな、これがサファリで機能していないことに気づいた人はいますか?この問題を確認して見つけましたが、解決する方法はありますか?
Gajen 2014

13

ここで回答: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>

6

私はhttp://www.diagnomics.com/で次のコードを使用しています

拡大効果のある白黒からカラーへのスムーズな移行(スケール)

    img.color_flip {
      filter: url(filters.svg#grayscale); /* Firefox 3.5+ */
      filter: gray; /* IE5+ */
      -webkit-filter: grayscale(1); /* Webkit Nightlies & Chrome Canary */
      -webkit-transition: all .5s ease-in-out;
    }

    img.color_flip:hover {
      filter: none;
      -webkit-filter: grayscale(0);
      -webkit-transform: scale(1.1);
    }

Webkitブラウザでうまく機能します!あなたのコードはFirefoxブラウザでは機能しませんが、SVGファイルと関係があると思います。このフィドルでビットマップを使用していますjsfiddle.net/coolwebs/num04rya/10奇妙なことですが-移行Safariで効果が....ロールオーバーの画像「ジャーク」を作る
ライアンCoolwebs


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.