Consider this example:
http://jsfiddle.net/treeface/P8JbW/
HTML:
<div id="test"> <img src="http://ycombinator.com/images/y18.gif" /> </div>
CSS:
#test { position:relative; margin-left:50px; margin-top:50px; border:1px solid black; height:50px; width:50px; overflow-x:visible; overflow-y:hidden; } img { position:absolute; left:-11px; }
I'm expecting to see this:
But I'm getting this:
It seems that the overflow-x property is being overridden here. Is that what's actually happening? Assuming that I have to keep the overflow-y set to hidden, is there a way around this behavior?
Definition and Usage The overflow-y property specifies whether to clip the content, add a scroll bar, or display overflow content of a block-level element, when it overflows at the top and bottom edges.
The hidden value of the overflow property hides all the content that is exceeding the box area. This property should be handled with care because the content that this property hide is completely invisible to the user, however, it is best suited for displaying content that is dynamic in nature.
It's because <body> has a default of 8px margin so when you hide the <body> the margin goes away.
overflow
is intended to be used with elements that are not absolutely positioned. If you want to handle the clipping of an absolutely positioned element, use the clip
css property. So to clip on the bottom and top of your containing div, but not the left or right, do this:
#test { position:relative; margin-left:50px; margin-top:50px; border:1px solid black; height:50px; width:50px; clip: rect(auto,auto,auto,-11px); }
Sample: http://jsfiddle.net/treeface/UJNcf/6/
From the CSS3 spec:
The computed values of
overflow-x
andoverflow-y
are the same as their specified values, except that some combinations withvisible
are not possible: if one is specified asvisible
and the other isscroll
orauto
, thenvisible
is set toauto
. The computed value ofoverflow
is equal to the computed value ofoverflow-x
ifoverflow-y
is the same; otherwise it is the pair of computed values ofoverflow-x
andoverflow-y
.
From this it would seem that some combinations of overflow-x
& overflow-y
are not valid, and sometimes one will override the other, which would explain what you're seeing here. Though I'm unsure as the wording as a bit unclear and the way browsers actually implement it could vary from the spec (especially when it's hard to decipher).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With