2015-05-06 26 views
6

Ngăn không cho ảnh có các cạnh mờ không xác định bằng cách thêm lề âm, nhưng trong quá trình chuyển đổi CSS thì không thành công. Làm thế nào bạn có thể giữ cho các cạnh của một hình ảnh được xác định trong quá trình chuyển đổi CSS trong khi thêm hoặc xóa lớp lọc mờ?Làm mờ bộ lọc CSS: Ngăn không cho ảnh xác định trên ảnh mờ trong quá trình chuyển đổi CSS

Tested trong:

  • Firefox 37: hoạt động tuyệt vời!
  • Chrome 42: biên giới nơi mà các hình ảnh và các yếu tố phụ huynh đáp ứng hình ảnh lóe lên/mờ/không xác định
  • IE9: không có quá nhiều ...

Kiểm tra ví dụ của tôi: Codepen

HTML:

<link href='http://fonts.googleapis.com/css?family=Montserrat' rel='stylesheet' type='text/css'> 
<link href='http://fonts.googleapis.com/css?family=Hind' rel='stylesheet' type='text/css'> 
<div class="container"> 
    <img class="blur" src="http://budgetstockphoto.com/bamers/stock_photo_spectrum.jpg"/> 
</div> 
<div class="col"> 
<h2 class="montserrat">Hover Over Image</h2> 
<hr> 
    <p class="hind">Preventing an image from having undefined blurry edges can be achieved by adding negative margin, but during a CSS transition this fails. As you can see, on-hover, the edges of the image become undefined/blurred. How can you keep the edges of an image defined during a CSS transition while applying or removing filter blur?<br><br>Hover over the image!</p> 
</div> 

CSS:

html,body{ 
    margin:0; 
    text-align:center; 
    background:#F8F8F8; 
    height:100%; 
} 

h2{ 
    margin:1em 0; 
    padding:0; 
    line-height:1; 
    color:#111; 
} 
p{ 
    margin:1em 0; 
    padding:0; 
    line-height:1; 
    text-align:justify; 
    color:#999; 
} 

.montserrat{ 
    font-family: 'Montserrat', sans-serif; 
} 
.hind{ 
    font-family: 'Hind', sans-serif; 
} 
hr { 
    width:100%; 
    display: block; 
    height: 1px; 
    border: 0; 
    border-top: 1px solid #222; 
    margin: 1em 0; 
    padding: 0; 
    line-height:0; 
} 

.col{ 
    max-width:400px; 
    display:inline-block; 
    height:100%; 
    float:left; 
    background:#333; 
    padding-left:20px; 
    padding-right:20px; 
} 

.container{ 
    top: 50%; 
    left: 50%; 
    transform: translate(-50%,-50%); 
    width:10%; 
    display:inline-block; 
    padding-top:10%; 
    position:absolute; 
    overflow:hidden !important; 
    border-radius:50%; 
    -webkit-filter: blur(0px); -moz-filter: blur(0px); -o-filter: blur(0px); -ms-filter: blur(0px); filter: blur(0px);/*prevents image from overflowing*/ 
} 

.container img{ 
    position:absolute; 
    min-width:calc(100% + 30px); 
    height:calc(100% + 30px); 
    left:-15px; 
    right:-15px; 
    top:-15px; 
    bottom:-15px; 
    -webkit-transition: .5s ease-in-out; 
} 

.blur{ 
     -webkit-filter: blur(5px); -moz-filter: blur(5px); -o-filter: blur(5px); -ms-filter: blur(5px); filter: blur(5px); 
} 

Chỉ cần một smidge của jQuery:

$(document).ready(function(){ 
    $('img').hover(function(){ 
     $(this).toggleClass('blur'); 
    }); 
}); 
+0

Tôi đoán bạn đang thử nghiệm trong chrome, tôi có đúng không Bởi vì nó hoạt động tốt trên firefox. – Vandervals

+0

Đúng, tôi đang thử nghiệm trong Chrome. Tôi chắc chắn nên bao gồm cái tid-bit đó. Tôi sẽ thêm nó vào phần mô tả. Nó hoạt động tốt trong Firefox, nó trông bình thường trong IE9. Tôi không quan tâm đến IE9 như tôi về Chrome. Nếu bạn thử nghiệm trong Chrome, bạn sẽ thấy cách thức trong quá trình chuyển đổi, đường viền nơi phần tử cha và hình ảnh gặp phải được nhấp nháy/trở nên không xác định. –

+0

bạn có thể chụp ảnh màn hình không? Bởi vì tôi tìm thấy một cái gì đó kỳ lạ trong chrome nhưng tôi sẽ không nói rằng biên giới làm mờ, tôi muốn nói nó mẫu nền và cho thấy một biên giới tối hơn so với sau đó biến mất. Nếu đúng như vậy, có thể do tính năng mới của tính năng này, có thể bạn không nên lo lắng, chúng sẽ khắc phục nó trong tương lai. Btw, tôi đã kiểm tra nó làm cho hình ảnh lớn hơn nhưng không. Nếu điều này là rất quan trọng đối với bạn, có lẽ bạn có thể thêm một svg blur đó là tiêu chuẩn hơn? Chỉ cần một gợi ý – Vandervals

Trả lời

1

Mở Chrome bạn có thể thêm

backface-visibility: hidden; 

Mở hình ảnh của bạn, nó sửa chữa một chút vấn đề làm mờ.

+0

Điều này chắc chắn cũng đã giúp một chút. Tôi kết hợp điều này và hack3 dịch. Nó ít nhiều giải quyết vấn đề chuyển tiếp. Chỉ cần vẫn đối phó với các cạnh không xác định. Như những người khác đã chỉ ra, nó có thể chỉ là một vấn đề kỳ lạ của Chrome. –

2

Bộ lọc trên hình ảnh (cũng như một số hoạt ảnh và chuyển tiếp) có kết quả tốt hơn nhiều khi được áp dụng cho nội dung ở chế độ tăng tốc HW. Hãy thử buộc trình duyệt sử dụng chế độ đó, chỉ cần nhất bằng cách sử dụng một số 3d transform:

.container img{ 
    transform: translateZ(0.1px) 
} 

Xem này: http://codepen.io/ondrakoupil/pen/GJpaJo Đó là mịn bây giờ (Chrome 39 trên OS X)

+0

Lưu ý: Tôi đã bật Autoprefixer trong Bút đó, vì vậy bạn có thể cần phải thêm một số tiền tố của nhà cung cấp để làm cho nó hoạt động trong tất cả các trình duyệt. –

+0

Điều này chắc chắn đã giúp dọn dẹp quá trình chuyển đổi. Có vẻ tốt hơn nhiều. Vấn đề duy nhất tôi vẫn gặp phải là làm mờ biên giới. Nhưng đó là lúc tôi không nghĩ rằng nó nhất thiết phải làm giảm kinh nghiệm của người dùng. Tôi chỉ bối rối là tại sao đường viền gặp hình ảnh vẫn có vùng mờ và tạo tác này. –

Các vấn đề liên quan