Reputation: 4459
I am having getting a weird bug when I use a combination of overflow
, border-radius
, and transition
. I have a div with an img inside of it:
<a href="#" class="block size1 annualreport nonprofit">
<div class="inner_block">
<img src="http://i.imgur.com/8uuZB.jpg" />
</div>
</a>
The div has a border-radius
, and overflow is set to hidden:
body {background-color:#78735e;}
.block {
position: absolute;
left: 0px;
top: 0px;
border-radius: 10px;
margin: 6px;
box-shadow: 0px 0px 6px 2px rgba(0, 0, 0, 0.2);
overflow:hidden;
}
.size1 {
width: 226px;
height: 464px;
min-width: 160px;
max-width: 226px;
}
.inner_block {
overflow: hidden;
border-radius: 10px;
}
.block img {
width: 100%;
height: 100%;
transition: all 0.1s;
}
.block img:hover { width:115%; height:115%; }
When I hover over the img I have a transition that takes place which makes the image larger to create a zooming effect. The problem is that the overflow
seems to break on the bottom left and bottom right of the image.
I have created a JSFiddle for you to see what I'm talking about. http://jsfiddle.net/dmcgrew/HuMrC/1/
It works fine in Firefox, but breaks in Chrome and Safari.
Anyone know what might be causing this or how to fix it?
Upvotes: 44
Views: 34553
Reputation: 11104
I had the same exact issue. Adding this to the parent container solved it for me.
.transitionfix {
backface-visibility: hidden;
transform: translate3d(0, 0, 0);
}
Upvotes: 109
Reputation: 9
There's already an answer about a CSS property for creating a new stacking context:
isolation: isolate;
Upvotes: 0
Reputation: 39
It is a problem about stacking context.
We can use methods listed in MDN - stacking context to form a stacking context:
position: relative; z-index: 1;
-webkit-mask-image: -webkit-radial-gradient(white, black);
opacity: 0.999;
will-change: transform;
For me personally, the first method is the best.
Upvotes: -1
Reputation: 1843
On the same element that has the animation transition, simply add:
.animated-item {
will-change: transform; /* New line to add to your existing CSS */
}
The
will-change
CSS property hints to browsers how an element is expected to change. Browsers may set up optimizations before an element is actually changed. These kinds of optimizations can increase the responsiveness of a page by doing potentially expensive work before they are actually required. ~ https://developer.mozilla.org/en-US/docs/Web/CSS/will-change
Upvotes: 6
Reputation: 723
I have faced this issue on Safari(It's a known bug in safari); fixed it by applying -webkit-mask-image
and it works for me perfectly. cheers
.block {
-webkit-mask-image: -webkit-radial-gradient(white, black);
}
Upvotes: 3
Reputation: 1028
I've had an issue in the past like this while trying to zoom into a photo inside a div. I fixed it by adding rotation scale(1.05) rotate(0.02deg)
to the scale transform
(It actually removed the glitchy lines)
My issue today is getting the glitch lines off a translateY div hover effect. Surprisingly enough, I got rid of them by removing overflow: hidden;
Hopefully this helps future debuggers.
Upvotes: -1
Reputation: 2718
I added minus z-index value for image and higher value for parent
li {z-index:10; overflow: hidden;}
li img {z-index: -10;}
Upvotes: 2
Reputation: 4007
I don't know if I'm understanding the problem correctly as the image isn't loading. If you add height: 100%;
to .inner_block
does it help your issue?
Upvotes: 1