两个div,一个固定宽度,另一个固定


97

我有两个div容器。

虽然一个需要为特定宽度,但我需要对其进行调整,以便另一个div占用其余空间。有什么办法可以做到吗?

.left {
    float: left;
    width: 83%;
    display: table-cell;
    vertical-align: middle;
    min-height: 50px;
    margin-right: 10px;
    overflow: auto;
}

.right {
    float: right;
    width: 16%;
    text-align: right;
    display: table-cell;
    vertical-align: middle;
    min-height: 50px;
    height: 100%;
    overflow: auto;
}
<div class="left"></div>
<div class="right"></div> <!-- needs to be 250px -->


4
不要对古老的浏览器使用已有十年历史的黑客程序。向下滚动以获取最新的flexbox解决方案。
Evgeny

1
在您遵循Evgeny的链接之前,请考虑用户实际使用的浏览器,而不是您希望他们使用的浏览器。Flexbox无法很好地在您教授的IE 9上进行渲染:caniuse.com/#feat=flexbox
duhaime,

@duhaime IE9在全球的使用率为0.13%
Evgeny

因此,
千分之一的

Answers:


127

请参阅: http //jsfiddle.net/SpSjL/ (调整浏览器的宽度)

HTML:

<div class="right"></div>
<div class="left"></div>

CSS:

.left {
    overflow: hidden;
    min-height: 50px;
    border: 2px dashed #f0f;
}

.right {
    float: right;
    width: 250px;
    min-height: 50px;
    margin-left: 10px;
    border: 2px dashed #00f;
}

您也可以使用这样做display: table,这通常是一种更好的方法:如何将输入元素与其标签放在同一行?


4
它不和我一起工作。左侧宽度为100%,右侧为250px。两行:(

19
您需要交换divs 的顺序,就像在我的答案和演示中一样。right然后left
2011年

1
总的来说,这对我有用,但是有时候当我在左div中有文本而不是换行到下一行(并且有空格)时,它只是在右边被切断(右div开始的地方)。如何在左div中换行?
盖伊

1
不浮动的DIV会填满整个宽度。当内容高于浮动DIV或文本太长时,这是个坏主意。
netAction 2015年

47

现在是2017年,最好的方法是使用兼容IE10 +的 flexbox 。

.box {
  display: flex;
}

.left {
  flex: 1;  /* grow */
  border: 1px dashed #f0f;
}

.right {
  flex: 0 0 250px; /* do not grow, do not shrink, start at 250px */
  border: 1px dashed #00f;
}
<div class="box">
  <div class="left">Left</div>
  <div class="right">Right 250px</div>
</div>


1
您对问题的评论使我免于支持IE6。谢谢!
Mike Davlantes '17

这也是不错的,但计算()比柔性更好,由于与IE9和Chrome 26兼容性
唐Dilanga

这对我来说很好。甚至不需要定义.right宽度。
rotaercz

1
它杀死我,在2017/2018/2019我们依然相处的线条评论IE 9当心
麦克Devenney

43

您可以使用CSS的calc()函数。

演示:http//jsfiddle.net/A8zLY/543/

<div class="left"></div>
<div class="right"></div>

.left {
height:200px;
width:calc(100% - 200px);
background:blue;
float:left;
}

.right {
width:200px;
height:200px;
background:red;
float:right;   
}

希望这个能对您有所帮助!!


谢谢你的建议。我检查了浏览器之间的兼容性,并且对于稳定使用来说有点很高
Farside

1
应该选择此为最佳答案,因为在此答案中,DIV标签不会像最佳答案中那样交换。
唐·迪兰加

14

如果您可以在源代码中翻转订单,则可以这样做:

HTML:

<div class="right"></div> // needs to be 250px    
<div class="left"></div>

CSS:

.right {
  width: 250px;
  float: right;
}   

示例:http//jsfiddle.net/blineberry/VHcPT/

添加一个容器,您可以使用当前的源代码顺序和绝对位置进行操作:

HTML:

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

CSS:

#container {
  /* set a width %, ems, px, whatever */
  position: relative;
}

.left {
  position: absolute;
  top: 0;
  left: 0;
  right: 250px;
}

.right {
  position: absolute;
  background: red;
  width: 250px;
  top: 0;
  right: 0;
}

在这里,.leftDIV从获得的隐式设置宽度topleftright风格,允许它填补剩余空间#container

示例:http//jsfiddle.net/blineberry/VHcPT/3/


第一个例子似乎并不实际。jsFiddle中的.left div实际上是屏幕的整个宽度。如果两个div的高度相同,则很好,但是在这种情况下,只需向.left添加5px填充,您就会看到。
user3413723 2014年

1
第二种解决方案对我来说效果很好。天才!
user3413723 2014年

6

如果您可以将它们包装在容器中<div>,则可以使用定位使左侧<div>固定在该容器上left:0;right:250px,请参阅此演示。我现在要说的是,这在IE6中将不起作用,因为a的一个角<div>可以完全定位在页面上(有关完整说明,请参见此处)。


3

1-有一个包装div,根据需要设置填充和边距
2-使左侧div达到所需的宽度,使其向左浮动
3-将右侧div边距设置为等于左侧宽度

.left
{
    ***width:300px;***
    float: left;
    overflow:hidden;

}

.right
{
    overflow: visible;
    ***margin-left:300px;***
}



<div class="wrapper">
    <div class="left">
        ...
    </div>

    <div class="right" >
        ...
    </div>

</div>

希望这对您有用!



1

将您的右边设置为特定宽度并将其浮动,在您的左边将右边距设置为250px

.left {
vertical-align: middle;
min-height: 50px;
margin-right: 250px;
overflow: auto

}

.right {
width:250px;
text-align: right;
display: table-cell;
vertical-align: middle;
min-height: 50px;
height: 100%;
overflow: auto
}

杀死.right中的显示类型,并确保没有任何会影响.left的清晰设置
meteorainer11年

你有包装器div吗?我可以在线检查某些东西吗?还是完全本地化?
meteorainer 2011年

它完全是本地的,但是,让我尝试将其放在jsfiddle上。

哈哈,您卸下了花车:对。另外,不要忘记考虑边框的宽度,因此,如果要保留这些宽度,则应从div宽度之一减去宽度。
meteorainer 2011年

0

如果您需要跨浏览器解决方案,则可以使用我的方法,简单明了。

.left{
        position: absolute;
        height: 150px;
        width:150px;
        background: red;
        overflow: hidden;
        float:left;
}
.right{
        position:relative;
        height: 150px;
        width:100%;
        background: red;
        margin-left:150px;
        background: green;
        float:right;
}

-1

使用简单的方法可以帮助您

<table width="100%">
    <tr>
         <td width="200">fix width</td>
         <td><div>ha ha, this is the rest!</div></td>
    </tr>
</table>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.