Hình ảnh Greyscale với CSS và tô màu lại khi di chuột qua?


86

Tôi đang tìm cách lấy một biểu tượng có màu (và sẽ là một liên kết) và chuyển nó sang thang độ xám cho đến khi người dùng đặt chuột lên biểu tượng (khi đó nó sẽ tô màu cho hình ảnh).

Điều này có thể thực hiện được không và IE & Firefox có hỗ trợ theo cách nào không?


2
Hầu như nhân đôi ... stackoverflow.com/q/609273/670377
Tom Sarduy

Nó sẽ không phải là một hiệu ứng thú vị hơn nếu bạn làm theo cách khác? để con trỏ chuột giống như một cây đũa thần mang màu sắc đến một thế giới đen tối?
X10D

Câu trả lời:


242

Có rất nhiều phương pháp để thực hiện điều này, tôi sẽ trình bày chi tiết bằng một vài ví dụ bên dưới.

CSS thuần túy (chỉ sử dụng một hình ảnh màu)

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

Bạn có thể tìm thấy một bài báo liên quan đến kỹ thuật này tại đây .

CSS thuần túy (sử dụng thang màu xám và hình ảnh có màu)

Cách tiếp cận này yêu cầu hai bản sao của một hình ảnh: một bản có thang độ xám và bản còn lại có đầy đủ màu sắc. Sử dụng :hoverpsuedoselector CSS , bạn có thể cập nhật nền của phần tử của mình để chuyển đổi giữa hai:

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

Điều này cũng có thể được thực hiện bằng cách sử dụng hiệu ứng di chuột dựa trên Javascript như hover()hàm của jQuery theo cách tương tự.

Xem xét thư viện của bên thứ ba

Các Desaturate thư viện là một thư viện phổ biến mà cho phép bạn dễ dàng chuyển đổi giữa các phiên bản màu xám và phiên bản đầy đủ màu của một nguyên tố hoặc hình ảnh.


Nếu nói hình ảnh cần được liên kết với trang web khác tho, làm thế nào điều này có thể được thực hiện nếu hình ảnh được đặt làm nền?
Meta

1
Nó sẽ hoạt động theo cách tương tự, hãy kiểm tra bản demo trong phần 1. Nếu bạn có bất kỳ câu hỏi nào khác, tôi sẽ sẵn lòng trợ giúp.
Rion Williams

1
guys, có ai nhận thấy rằng điều này không hoạt động trong safari? Tôi vừa kiểm tra và tìm thấy vấn đề này, có cách nào để giải quyết nó không?
Gajen

13

Đã trả lời ở đây: Chuyển đổi hình ảnh sang thang độ xám trong HTML / CSS

Bạn thậm chí không cần phải sử dụng hai hình ảnh nghe có vẻ đau đớn hoặc một thư viện thao tác hình ảnh, bạn có thể làm điều đó với sự hỗ trợ của nhiều trình duyệt (phiên bản hiện tại) và chỉ cần sử dụng CSS. Đây là một phương pháp tiếp cận nâng cao tiến bộ chỉ trở lại phiên bản màu trên các trình duyệt cũ hơn:

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;
}

và tệp filter.svg như thế này:

<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

Tôi sử dụng mã sau trên http://www.diagnomics.com/

Chuyển đổi mượt mà từ b / w sang màu với hiệu ứng phóng đại (tỷ lệ)

    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);
    }

Hoạt động tốt trên trình duyệt webkit! Mã của bạn không hoạt động đối với tôi trong trình duyệt Firefox nhưng sau đó, tôi nghĩ rằng nó có liên quan gì đó đến tệp SVG và tôi đang sử dụng bitmap trong fiddle jsfiddle.net/coolwebs/num04rya/10 Có điều gì đó kỳ lạ - sự chuyển đổi hiệu lực thi hành trong Safari làm cho hình ảnh 'giật' trên rollover ....
Ryan Coolwebs

0

Bạn có thể sử dụng một sprite có cả hai phiên bản — màu và đơn sắc — được lưu trữ trong đó.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.