ブラウザ毎に動作する、しないを
アイコンをグレースケールにして表現したかったので
やってみました
チェックを操作すると動きます
SAMPLE
アイコンをグレースケールにして表現したかったので
やってみました
チェックを操作すると動きます
上段
- IE:×動作せず
- Firefox:×は2回目以降グレースケールにならない。なぜかは不明
- Chrome:●動作します
- safari(iOS)はアップするまで見れる環境無し・・
- IE:●動作します
- Firefox:●動作します
- Chrome:●動作します
- safari(iOS)はアップするまで見れる環境無し・・
違いは・・?
上段はブラウザ毎に1つずつアイコンがあり
cssでグレースケールで変色させてます
それに対し下段は1枚の画像の中にカラーとグレースケールがあり
cssでその座標の一部を表示しています
↓このような1枚の画像です
ではコードです。
画像が1枚で済む上、最近のブラウザならほぼ大丈夫でしょう
下段だけの処理だとコードが少ないです。
上段はfirefox用のグレースケール処理の「url("data:image・・・」が長すぎるんですけどね
他にもそもそもグレースケールしたアイコンを用意しておく手もあります
そっちのが楽かもしれませんが、やはり早いので1枚画像のが好みです
上段はブラウザ毎に1つずつアイコンがあり
cssでグレースケールで変色させてます
それに対し下段は1枚の画像の中にカラーとグレースケールがあり
cssでその座標の一部を表示しています
↓このような1枚の画像です
<span>
</span>
<span>
</span>
<span>
</span>
<span>
</span><br />
<div id= "c2"></div>
<div id= "f2"></div>
<div id= "i2"></div>
<div id= "s2"></div>
#c1 {
filter: url("data:image/svg+xml;utf8,#grayscale");
filter: gray;
-webkit-filter: grayscale(100%);
}
#f1 {
filter: url("data:image/svg+xml;utf8,#grayscale");
filter: gray;
-webkit-filter: grayscale(100%);
}
#i1 {
filter: url("data:image/svg+xml;utf8,#grayscale");
filter: gray;
-webkit-filter: grayscale(100%);
}
#s1 {
filter: url("data:image/svg+xml;utf8,#grayscale");
filter: gray;
-webkit-filter: grayscale(100%);
}
#c2 {
background-image:url("1枚画像のURL");
width:32px;
height:32px;
float: left;
}
#f2 {
background-image:url("1枚画像のURL");
width:32px;
height:32px;
float: left;
margin-left: 3px;
}
#i2 {
background-image:url("1枚画像のURL");
width:32px;
height:32px;
float: left;
margin-left: 3px;
}
#s2 {
background-image:url("1枚画像のURL");
width:32px;
height:32px;
margin-left: 3px;
float: left;
}
//チェックボタン押下時処理
function oncheck(){
var chromef = (document.getElementById("chk-chrome").checked);
var firefoxf = (document.getElementById("chk-firefox").checked);
var ief = (document.getElementById("chk-ie").checked);
var safarif = (document.getElementById("chk-safari").checked);
fncBrowserIco(chromef,firefoxf,ief,safarif);
}
//メイン処理
// chrome1 firefox1 ie1 safari1は上段用処理
// chrome2 firefox2 ie2 safari2は下段用処理
function fncBrowserIco(chromef, firefoxf, ief, safarif) {
var chrome1 = $('#c1');
var chrome2 = $('#c2');
var firefox1 = $('#f1');
var firefox2 = $('#f2');
var ie1 = $("#i1");
var ie2 = $("#i2");
var safari1 = $("#s1");
var safari2 = $("#s2");
if (chromef === true) {
chrome1.css({filter: 'none','-webkit-filter': 'grayscale(0%)'});
chrome2.css('background-position', '0px 0px');
} else {
chrome1.css('url("data:image/svg+xml;utf8,#grayscale")');
chrome1.css({filter: 'gray' , '-webkit-filter': 'grayscale(100%)'});
chrome2.css({'background-position': '0px -32px'});
}
if (firefoxf === true) {
firefox1.css({filter: 'none','-webkit-filter': 'grayscale(0%)'});
firefox2.css({'background-position': '96px 0px'});
}else{
firefox1.css('url("data:image/svg+xml;utf8,#grayscale")');
firefox1.css({filter: 'gray','-webkit-filter': 'grayscale(100%)'});
firefox2.css({'background-position': '96px 32px'});
}
if (ief === true) {
ie1.css({filter: 'none','-webkit-filter': 'grayscale(0%)'});
ie2.css({'background-position': '64px 0px'});
}else{
ie1.css('url("data:image/svg+xml;utf8,#grayscale")');
ie1.css({filter: 'gray','-webkit-filter': 'grayscale(100%)'});
ie2.css({'background-position': '64px 32px'});
}
if (safarif === true) {
safari1.css({filter: 'none','-webkit-filter': 'grayscale(0%)'});
safari2.css({'background-position': '32px 0px'});
}else{
safari1.css('url("data:image/svg+xml;utf8,#grayscale")');
safari1.css({filter: 'gray', '-webkit-filter': 'grayscale(100%)'});
safari2.css({'background-position': '32px 32px'});
}
}
//初回は全部グレースケールとする
fncBrowserIco(false, false, false, false);
個人的に下段のほうが良いです。画像が1枚で済む上、最近のブラウザならほぼ大丈夫でしょう
下段だけの処理だとコードが少ないです。
上段はfirefox用のグレースケール処理の「url("data:image・・・」が長すぎるんですけどね
他にもそもそもグレースケールしたアイコンを用意しておく手もあります
そっちのが楽かもしれませんが、やはり早いので1枚画像のが好みです