4

我发现了很多类似的问题,并尝试了几种解决方案(包括一些所谓的“圣杯”CSS 布局),但它们并不能完全满足我的需要。

我有一个包含 id 的 div (一个包含 CSS 的块)right。在它的左侧,我想要一个固定宽度的 div (一个分隔条,但它的用途并不重要; id splitpane);在右侧,填充其余空间,另一个 div(right-box下面的 id)。

我尝试制作两个内部 div display: inline-block(使用vertical-align: top),将左侧设置为width: 3px,但无法将右侧设置为 100% - 3px 的宽度。我也尝试过使用float: left//技巧margin-left: -100%margin-left: 3px但它有同样的问题:100% 加上 3px 溢出父包含块并导致滚动条弹出。(当然,问题不是滚动条本身;我可以用overflow: hidden它来删除它,但右边的内容会被截断。)

目前我正在使用width: 99.5%正确的 div,但这是一个可怕的 hack(并且会根据屏幕宽度溢出)。它看起来有点像这样:

<div id="right"><div id="splitpane"></div><div id="right-box">
  ...
</div></div>

使用 CSS 如下(浮动版本,但 inline-block 版本类似):

#right {
  display: inline-block;
  vertical-align: top;
  height: 100%;
  width: 85%;  /* this is part of a larger div */
}
#right-box {
  width: 99.5%; /* stupid hack; actually want 100% - 3px for splitter */
  height: 100%;
}
#splitpane {
  float: left;
  width: 3px;
  height: 100%;
  background: white;
  border-left: solid gray 1px;
  border-right: solid gray 1px;
  cursor: e-resize;
}

甚至有可能做到这一点吗?这是针对内部应用程序的。所以解决方案只需要在 Firefox 3 中运行(如果它们特定于 FF3,最好是因为该解决方案符合标准,但其他浏览器不符合标准,而不是因为它仅使用 Firefox代码)。

4

4 回答 4

3

DIV 是错误的元素类型,因为它们不会相互“交谈”。您可以使用表格轻松实现此目的:

<table style="width:200px">
<tr>
    <td id="splitpane" style="width: 3px">...</td>
    <td id="rightBox" style="width: 100%">...</td>
<tr>
</table>

100% 将使 rightBox 尽可能宽,但在表格的范围内。

于 2009-03-13T09:35:22.250 回答
2

为什么你没有在右框上使用margin-left(因为它是浮动布局)?

所以无需创建拆分器 div ...


#right{
width:200px; /*specify some width*/
}
#rightbox{
float:left;
margin-left: 3px; /*replace the splitter*/
/*margin: 0 3px; /*use this to give left & right splitter*/ */
}

是的,类似的东西,我讨厌空的 div,它不是语义的,就像在“旧”表方式上放置一个拆分器

于 2009-03-13T09:14:41.987 回答
2

这个有可能。由于块级元素会自动扩展以占用任何剩余的水平空间,因此您可以在具有所需宽度的未清除浮动元素旁边使用块级元素。

<style type="text/css">
    div {
        height: 100px;
    }
    #container {
        width: 100%;
    }
    #left {
        background: #FF0;
    }
    #splitpane {
        position: relative;
        float: right;
        background: #000;
        width: 3px;
    }
</style>

<div id="container">
    <div id="splitpane"></div>
    <div id="left"></div>
</div>

http://jsfiddle.net/georeith/W4YMD/1/

于 2013-03-16T23:26:46.920 回答
0

如果 div #right-box 仅包含非浮动内容,则将内容放在 #right 中并让它环绕浮动 #splitpane 可能是一个想法。

于 2009-03-13T09:11:02.697 回答