2012-11-26 182 views
18

我的CSS是这样的:垂直滚动条会导致水平滚动条

div.SOMECLASS { 
    position: absolute; 
    max-height: 300px 
    height: auto; 
    width: auto; 
    overflow: auto; 
    ... 
} 

DIV的高度和宽度比例自动创建。虽然高度固定为最大,但只要达到此值,就会出现垂直滚动条。这工作都很漂亮。

现在的问题:
如果垂直滚动条出现,他们使用了周围的水平空间 10px的,因为滚动条将被放置div
然而,宽度是自动定标的,以允许由所述垂直滚动条用完这些额外的10多岁的像素。作为添加垂直滚动条之前的水平宽度只是完全正确的内容(如从width:auto设定期望的),则现在div显示水平滚动条 - 以允许丢失的10个像素。这很愚蠢。

  • 我该如何避免让这些水平滚动条自动缩放以使垂直滚动条适合的宽度div

如果可能,我正在寻找一种不依赖于完全禁用水平滚动的解决方案,因为这可能在某些时候(即对于某些输入)需要。

+0

尝试使用'overflow-y:auto'代替。这只会垂直放置滚动条。 – Bojangles

回答

10

我发现这是工作,但离完美远的解决方案:

我添加了一个padding-right : 15px我的div自动增长整个股利。现在,如果出现垂直滚动条,它们就会填充到填充内,因此水平宽度仍然可以。

遗憾的是,当不需要垂直滚动时,填充当然也会出现,这使得我的div只比它的宽度稍微宽一些::/在我眼中,这仍然比不需要的水平滚动条。

+3

问题是,15px不是一个跨平台的幻数。出于可访问性原因,您的一些用户可能会有非常胖的滚动条。不幸的是,为了确保安全,您必须使用JavaScript来查找宽滚动条的宽度。 –

+0

你是对的...这个问题真的可以总结一切与互联网有关的错误。 :/ – fgysin

+0

...好吧,无论如何,用CSS3。除了CSS2中引入的系统颜色之外,也许CSS4将有办法访问更多的系统数据。 –

6

只是想出了一个漂亮的差强人意的解决方案(至少我的版本这个问题)。

我承担与width: auto的问题是,它的行为类似于width: 100vw;问题是,当垂直滚动条出现时,视窗宽度保持不变(尽管〜10px滚动条),但可视区域(我称之为)减少了10px。

通过它定义在这个“可视区域”的条款显然定义的宽度,因此改变你的代码:

div.SOMECLASS { 
    position: absolute; 
    max-height: 300px 
    height: auto; 
    width: 100%; 
    overflow: auto; 
    ... 
} 

应该允许内容正确重新调整!

p.s.您也可以改为添加overflow-x: hidden,这将停止显示水平滚动条,而只需在垂直滚动条出现时从div的右侧减去〜10px。

+0

刚注意到这是2岁 - 希望它对任何人都有用! – Spencer

+0

添加宽度:100%我的所有子divs删除滚动条:) –