hình ảnh di chuyển khi di chuột - vấn đề về độ mờ của chrome


92

Có vẻ như có vấn đề với trang của tôi ở đây: http://www.lonewulf.eu

Khi di chuột qua các hình thu nhỏ, hình ảnh sẽ di chuyển một chút về bên phải và điều này chỉ xảy ra trên Chrome.

Css của tôi:

.img{
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
    filter:alpha(opacity=50);
    -moz-opacity: 0.5; 
    opacity: 0.5;
    -khtml-opacity: 0.5;
    display:block;
    border:1px solid #121212;
}
.img:hover{
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
    filter:alpha(opacity=100);
    -moz-opacity: 1; 
    opacity: 1;
    -khtml-opacity: 1;  
    display:block;
}

Không di chuyển cho tôi vào22.0.1229.94 m
Danny

3
Cách tốt nhất là đặt di chuột vào thẻ A, không phải chính hình ảnh.
Diodeus - James MacFarlane

Có .img là một lớp href. Tôi có nên đặt tên khác không? có thể bây giờ nó xung đột với <img src>? CHỈNH SỬA: Không, tôi đã đổi tên từ .img thành .thumb và vẫn gặp sự cố này. Bất kỳ đề nghị khác?
zefs 19/10/12

Đó có thể là điều mà Fancybox đang làm.
Diodeus - James MacFarlane

4
sử dụng bản dịch trên trục Z là giải pháp duy nhất phù hợp với tôi: stackoverflow.com/questions/12502234/…
Larry

Câu trả lời:


231

Một giải pháp khác sẽ là sử dụng

-webkit-backface-visibility: hidden;

trên phần tử di chuột có độ mờ. Khả năng hiển thị mặt sau liên quan đến transform, vì vậy @Beskow 's có một cái gì đó để làm với nó. Vì đây là một vấn đề cụ thể của bộ web nên bạn chỉ cần xác định khả năng hiển thị mặt sau cho bộ web. Có các tiền tố nhà cung cấp khác .

Xem http://css-tricks.com/almanac/properties/b/backface-visibility/ để biết thêm thông tin.


Đây là câu trả lời chính xác, nhưng bạn phải nói rằng thuộc backface-visibilitytính phải được đặt trên imgphần tử. Trong trường hợp của tôi, phần tử có độ mờ là aphần tử sẽ bao bọc img, vì vậy câu trả lời của bạn không hoàn hảo đối với tôi. Btw, tôi cũng thấy lỗi này trên Firefox dành cho Mac, vì vậy tôi khuyên bạn nên sử dụng mọi tiền tố của nhà cung cấp.
Oliboy 50

1
@ Oliboy50 Xin lỗi, tôi phải tranh luận điều đó. Tôi là trường hợp của tôi, các phần tử bị lỗi chỉ trống rỗng divvới background-image. @alpipego Cảm ơn vì giải pháp!
bonflash

1
Điều này có hiệu quả với tôi nhưng làm cho hình ảnh của tôi trông xấu, bị mờ thay vì mịn.
Kieran Hunter

1
Tôi không biết tại sao nó hoạt động, nhưng tôi đã tình cờ thấy điều này và đã thử. Điều này đã khắc phục một lỗi liên tục xuất hiện trên trang web của tôi trong nhiều tháng mà tôi không bao giờ có thể tìm ra. Cảm ơn bạn!
Shnibble

Tôi cũng phải thêm một z-indexđể hiệu ứng di chuột hoạt động chính xác đối với tôi.
Jack

34

Vì một số lý do, Chrome diễn giải vị trí của các phần tử không có độ mờ là 1 theo một cách khác. Nếu bạn áp dụng thuộc tính CSS position:relativecho các phần tử a.img của mình thì sẽ không còn chuyển động trái / phải nữa vì độ mờ của chúng thay đổi.


1
Có ai biết tại sao điều này? Chắc chắn đó không phải là một thứ hasLayout?
sidonaldson

7
Vừa gặp vấn đề tương tự trong Firefox. Relative đã không sửa được nó, nhưng việc đặt điều này trên phần tử đã làm được - transform: translate3d(0px,0px,0px);
ConorLuddy

Tôi đã gặp vấn đề tương tự trên Safari và transform: translate3d(0px,0px,0px);đã làm việc
zevnicsca

21

Tôi đã gặp vấn đề tương tự, tôi đã sửa nó bằng cách xoay chuyển đổi css. Như thế này:

-webkit-transform: rotate(0);
-moz-transform: rotate(0);
transform: rotate(0);

Nó hoạt động tốt trong các trình duyệt chính.


1
Cảm ơn vì điều đó. Điều này đã sửa nó trong Firefox! : D
Hans Wassink,

Yep me too. Thủ thuật backface không hoạt động với tôi (img bên trong a) nhưng thủ thuật này đã làm được! Cảm ơn!
mikmikmik

Đây là câu trả lời duy nhất phù hợp với tôi (Chrome). Cảm ơn!
Kid Diamond

14

Một giải pháp khác đã khắc phục sự cố này cho tôi là thêm quy tắc:

will-change: opacity;

Trong trường hợp cụ thể của tôi, điều này đã tránh được sự cố nhảy pixel tương tự đã translateZ(0)xuất hiện trong Internet Explorer, mặc dù đã sửa mọi thứ trong Chrome.

Hầu hết các giải pháp khác đề xuất ở đây có liên quan đến biến đổi (ví dụ. translateZ(0), rotate(0), translate3d(0px,0px,0px), Vv) làm việc bằng bàn vẽ của nguyên tố này giao cho GPU, cho phép dựng hình hiệu quả hơn. will-changecung cấp một gợi ý cho trình duyệt có lẽ có hiệu ứng tương tự (cho phép trình duyệt hiển thị quá trình chuyển đổi hiệu quả hơn), nhưng cảm thấy ít hack hơn (vì nó giải quyết vấn đề một cách rõ ràng thay vì chỉ thúc đẩy trình duyệt sử dụng GPU).

Phải nói rằng, cần lưu ý rằng hỗ trợ trình duyệt không tốt will-change(mặc dù nếu vấn đề chỉ xảy ra với Chrome thì đây có thể là một điều tốt!) Và trong một số tình huống, nó có thể tự gây ra các vấn đề , nhưng vẫn , đó là một giải pháp khả thi khác cho vấn đề này.


10

Tôi cần áp dụng cả hai backface-visibilitytransformcác quy tắc để ngăn chặn sự cố này. Như thế này:

a     {-webkit-transform: rotate(0);}
a img {-webkit-backface-visibility: hidden;}

10

Tôi đã gặp sự cố tương tự với các bộ lọc (không độ mờ) khi di chuột. Đã sửa bằng cách thêm quy tắc vào lớp cơ sở với:

filter: brightness(1.01);

Vấn đề tương tự với chuyển đổi bộ lọc khi di chuột. Điều này đã sửa nó cho tôi quá.
Josh Harrison

Sử dụng bộ lọc: độ sáng (1); trên phần tử img đã sửa nó cho tôi, cảm ơn bạn
Sai

điều này làm việc cho tôi, có vấn đề 1px khi áp dụng bộ lọc thang độ xám trên hình ảnh khi di chuột. Tại sao các nhà phát triển trình duyệt không thể sửa chữa tất cả những điều đó cuối cùng? Tại sao tôi phải sử dụng backface-tầm nhìn và tất cả những thứ ....
Varin

Điều này khắc phục được sự cố, nhưng hoạt ảnh chuyển tiếp ngừng hoạt động
Amin

6

khả năng hiển thị mặt sau (hoặc -webkit-khả năng hiển thị mặt sau) chỉ khắc phục sự cố trong Chrome cho tôi. Để khắc phục trong cả Firefox và Chrome, tôi đã sử dụng kết hợp các câu trả lời ở trên sau đây.

//fixes image jiggle issue, please do not remove
img {
  -webkit-backface-visibility: hidden; //Webkit fix
  transform: translate3d(0px,0px,0px); //Firefox fix
}

4

Tôi đã gặp sự cố tương tự trong Safari 8.0.2, nơi hình ảnh sẽ bị rung khi độ mờ của chúng chuyển đổi. Không có bản sửa lỗi nào được đăng ở đây hoạt động, tuy nhiên, cách sau đã làm:

-webkit-transform: translateZ(0);

Tất cả tín dụng cho câu trả lời này thông qua câu trả lời tiếp theo này


Đã thử tất cả các câu trả lời khác, đây là câu đầu tiên có hiệu quả!

2

Tôi gặp phải vấn đề này với các hình ảnh trong một lưới, mỗi hình ảnh được lồng trong một khối đã khai báo display: inline-block. Giải pháp mà Jamland đã đăng ở trên đã hoạt động để khắc phục sự cố khi hiển thị: inline-block; đã được khai báo trên phần tử cha.

Tôi có một lưới khác nơi các hình ảnh nằm trong danh sách không có thứ tự và tôi có thể chỉ khai báo display: block; và chiều rộng trên mục danh sách mẹ và khai báo backface -ibility: hidden; trên phần tử hình ảnh và dường như không có bất kỳ sự thay đổi vị trí nào khi di chuột.

li { width: 33.33333333%; display: block; }
li img { backface-visibility: hidden; }

2

Giải pháp alpipego đã được phục vụ cho tôi trong vấn đề này. Sử dụng -webkit-backface-visibility: hidden; Với điều này, hình ảnh không di chuyển trong quá trình chuyển đổi độ mờ khi di chuột

/* fix error hover image opacity*/
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
-ms-backface-visibility: hidden;
backface-visibility: hidden;

2

Tôi đã gặp sự cố với tất cả các giải pháp khác ở đây, vì chúng yêu cầu những thay đổi đối với CSS có thể phá vỡ những thứ khác - vị trí: tương đối yêu cầu tôi suy nghĩ lại hoàn toàn về cách tôi định vị các phần tử của mình, biến đổi: xoay (0) có thể can thiệp vào chuyển đổi và tạo ra các hiệu ứng chuyển tiếp nhỏ khi tôi đặt thời lượng chuyển tiếp và khả năng hiển thị mặt sau sẽ không hoạt động nếu tôi thực sự cần một mặt sau (và yêu cầu rất nhiều tiền tố.)

Giải pháp lười nhất mà tôi tìm thấy là chỉ đặt độ mờ trên phần tử của tôi rất gần nhưng không hoàn toàn là 1. Đây chỉ là vấn đề nếu độ mờ là 1, vì vậy nó sẽ không phá vỡ hoặc can thiệp vào bất kỳ kiểu nào khác của tôi:

opacity:0.99999999;

1

Sau khi đánh dấu câu trả lời của Rick Giner là đúng, sau đó tôi phát hiện ra rằng nó không giải quyết được vấn đề.

Trong trường hợp của tôi, tôi có các hình ảnh có chiều rộng đáp ứng nằm trong một div có chiều rộng tối đa. Khi chiều rộng trang web vượt qua chiều rộng tối đa đó, hình ảnh sẽ di chuyển khi di chuột (sử dụng biến đổi css).

Cách khắc phục trong trường hợp của tôi là chỉ cần sửa đổi chiều rộng tối đa thành bội số của ba, ba cột trong trường hợp này và nó đã sửa nó một cách hoàn hảo.


1
Cảm ơn bạn đã nhận xét, tôi cũng nhận thấy vị trí tương đối không phải lúc nào cũng hoạt động như một giải pháp vì vậy nếu vấn đề này xuất hiện một lần nữa, tôi cũng sẽ thử phương pháp của bạn.
zefs

0

Tôi nhận thấy bạn có độ mờ bao gồm trong CSS của bạn. Tôi đã gặp vấn đề chính xác tương tự với Chrome (hình ảnh di chuyển khi di chuột) .. tất cả những gì tôi làm là vô hiệu hóa độ mờ và nó đã được giải quyết, không còn hình ảnh di chuyển nữa.

.yourclass:hover {
  /* opacity: 0.6; */
}

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.