Image Greyscale พร้อม CSS & re-color เมื่อวางเมาส์?


87

ฉันต้องการใช้ไอคอนที่เป็นสี (และจะเป็นลิงค์) และเปลี่ยนเป็นสีเทาจนกว่าผู้ใช้จะวางเมาส์เหนือไอคอน (ซึ่งจะทำให้ภาพเป็นสี)

เป็นไปได้หรือไม่และในลักษณะที่รองรับ IE & Firefox


2
เกือบจะซ้ำกัน ... stackoverflow.com/q/609273/670377
Tom Sarduy

มันจะไม่น่าสนใจไปกว่านี้หรือถ้าคุณทำในทางกลับกัน? ให้เคอร์เซอร์ของเมาส์เป็นเหมือนไม้กายสิทธิ์ที่นำสีสันมาสู่โลกมืด?
X10D

คำตอบ:


245

มีวิธีการมากมายในการทำสิ่งนี้ซึ่งฉันจะให้รายละเอียดพร้อมกับตัวอย่างด้านล่างนี้

CSS บริสุทธิ์ (ใช้ภาพสีเดียวเท่านั้น)

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 บริสุทธิ์ (ใช้ภาพสีเทาและสี)

วิธีนี้ต้องใช้สำเนาของภาพสองชุด: ภาพหนึ่งเป็นสีเทาและอีกภาพหนึ่งเป็นสีเต็ม เมื่อใช้ CSS :hoverpsuedoselector คุณสามารถอัปเดตพื้นหลังขององค์ประกอบของคุณเพื่อสลับระหว่างทั้งสอง:

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

สิ่งนี้สามารถทำได้โดยใช้เอฟเฟกต์โฮเวอร์ที่ใช้ Javascript เช่นhover()ฟังก์ชันของ jQuery ในลักษณะเดียวกัน

พิจารณาห้องสมุดของบุคคลที่สาม

Desaturateห้องสมุดเป็นห้องสมุดทั่วไปที่ช่วยให้คุณสามารถสลับไปมาระหว่างรุ่นสีเทาและรุ่นเต็มรูปแบบสีขององค์ประกอบที่กำหนดหรือภาพ


หากภาพดังกล่าวจำเป็นต้องเชื่อมโยงกับเว็บไซต์อื่นจะทำได้อย่างไรหากตั้งค่าภาพเป็นพื้นหลัง
Meta

1
มันจะทำงานในลักษณะเดียวกันตรวจสอบการสาธิตในหัวข้อที่ 1 หากคุณมีคำถามอื่น ๆ เรายินดีที่จะช่วยเหลือ
Rion Williams

1
มีใครสังเกตไหมว่าสิ่งนี้ใช้ไม่ได้ในซาฟารี ฉันเพิ่งตรวจสอบและพบปัญหานี้มีวิธีใดในการแก้ไขหรือไม่
Gajen

13

ตอบที่นี่: แปลงรูปภาพเป็นโทนสีเทาใน HTML / CSS

คุณไม่จำเป็นต้องใช้ภาพสองภาพที่ฟังดูน่าปวดหัวหรือไลบรารีการปรับแต่งรูปภาพคุณสามารถทำได้ด้วยการรองรับเบราว์เซอร์ข้าม (เวอร์ชันปัจจุบัน) และใช้ 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;
}

และไฟล์ filter.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/

การเปลี่ยนจาก b / w เป็นสีอย่างราบรื่นด้วยเอฟเฟกต์ขยาย (มาตราส่วน)

    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 ทำให้ภาพ 'กระตุก' เมื่อโรลโอเวอร์ ....
Ryan Coolwebs


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.