Subscribe to get my new tutorials in your inbox.

CSS3 Transformations showing content outside overflow:hidden region in Firefox/Android

Some time back I was implementing a functionality for Firefox browsers on Android devices and I found a strange problem – For Firefox > 18 on Android devices if I move an element using CSS3 Transformations inside a parent container with overflow:hidden, then part of the element being moved is displayed outside the overflowed region. It seems like when you move the element it just discards the overflow:hidden property and everything is revealed rather. Normally the content outside overflow:hidden should be cut off from view.

I have a simple demo http://rialab.jbk404.site50.net/ffandroidissue/ – an image which is bigger than the container div is moved using CSS3 Transformations. The  div has a overflow:hidden set to it. There are two buttons. Click on them to see the various results. The first button causes the issue whereas the second button resolves it.

So this is what causes the issue – moving the image using CSS3 Transformations (for eg. transform:translateX(value);) inside a container with overflow:hidden

And this is what solves it – strange !!
Adding a background color and an opacity to the container element like this,

#container.noissue{
-moz-perspective: 1000px;
overflow: hidden;
background:#ccc;
width: 100px;
height: 50px;
display: block;
position:absolute;
top:50px;
right:50px;
  background:#ccc;
  opacity:0.99;
}

Check out the demo in Firefox on an Android device. I am not sure if anybody has encountered this situation. But this definitely seems to be a bug in Firefox for Android’s. This is not seen for other browsers.

  1. Istvan Halmen

    Great! I was searching a lot to find a workaround for this, also posted a question on SO (http://stackoverflow.com/questions/15405054/firefox-mobile-element-animated-with-translate3d-flows-out-from-parent-containe)
    Your solution with opacity kind of works (I already had background on the element), but still has some rendering problems.
    Btw, my problem occurs with the mobiscroll picker, it can be reproduced here: http://demo.mobiscroll.com/datetime#display=inline

  2. Michael

    For me, the Opacity and Background were unnecessary, and it didn’t work without the “position: absolute”. I tried removing just this part to test, and indeed the “absolute” is what makes the “overflow: hidden” work in my case. If it matters, I’m using a DIV container with a TABLE inside, and I’m using all three translations with all three rotations.

  3. Random Guy

    As said before it have to do with the GPU painting layers, it’s not a bug. To fix it you just need to force the overflow: hidden element to be painted by the GPU too. So if you use a translate(0,0), translate3d(0,0,0) or opacity you will force the element being painted by GPU.

Write a Comment

Your email address will not be published. Required fields are marked *