48

When I set overflow-y on a block, it seems to be affecting the overflow-x property. I've made a JSFiddle with an example of this problem. It seems to be happening in all browsers, so I think I'm missing something that should be obvious.

I have two non-overlapping blocks (blue and green) along with a third block (red) with the following requirements:

  • The blue and red blocks are adjacent
  • The red block is contained in the blue block, but it overlaps the green block
  • The blue block must allow vertical scrolling, but not horizontal scrolling

However, if I set overflow-x: visible so the red block overlaps to the right, instead it behaves as though I set it to scroll. However, if I remove the overflow-y property or set it to visible, the red block behaves as I expect.

I do need vertical scrolling, so I'm at a loss for what to do.

With the code below

HTML:

<div id="container">
    <div id="left">
        <div id="floater"></div>
    </div>
    <div id="right">
    </div>
</div>

CSS:

#container {
    height: 200px; width: 200px;
    position: relative;
    background-color: #ccc; border: solid 5px black;
}
#left {
    position: absolute;
    top: 0; left: 0; bottom: 0; width: 100px;
    overflow-x: visible;
    overflow-y: auto;    /** REMOVING THIS CHANGES THE RESULT **/
    background-color: blue;
    z-index: 2;
}
#right {
    position: absolute;
    top: 0; right: 0; bottom: 0; width: 100px;
    z-index: 1;
    background-color: green;
}
#floater {
    position: absolute;
    right: -20px; top: 30px; height: 40px; width: 40px;
    background-color: red;
}
Stephen Jennings
  • 12,494
  • 5
  • 47
  • 66
  • I think this is what you are trying to do: http://jsfiddle.net/audetwebdesign/jwXaj/ but the `#floater` block needs to be a sibling of the `#left` and `#right` blocks. – Marc Audet Aug 08 '13 at 20:34
  • I have this http://jsfiddle.net/7fNhx/1/ ...not sure what u try to achieve tho – Alex Garulli Aug 08 '13 at 20:41
  • @MarcAudet The #floater can't be a sibling because in the page where I'm actually having the problem, '#left' is actually a class and there are many of them, each with their own floater. – Stephen Jennings Aug 08 '13 at 21:09

1 Answers1

54

See: CSS overflow-x: visible; and overflow-y: hidden; causing scrollbar issue

If you are using visible for either overflow-x or overflow-y and something other than visible for the other, the visible value is interpreted as auto.

robsch
  • 9,358
  • 9
  • 63
  • 104
David Bradbury
  • 1,997
  • 3
  • 19
  • 23