17

是否有任何解决方法可以按预期进行类似的工作?我希望有类似的东西width:remainder;width:100% - 32px;

width: auto;不起作用。

我认为唯一可能的方法是使用填充/边距、负值或浮点数,或者一些 html 标签 hack。我也试过显示:块;。

我喜欢得到与此相同的结果,没有表格http://jsfiddle.net/LJGWY/

在此处输入图像描述

<div style="position: absolute; width: 100%; height: 100px; border: 3 solid red;" id="container">
    <div style="display:inline; width: (100%-100px); border: 3 solid green;">Fill</div>
    <div style="display:inline; width: 100px; border: 3 solid blue;">Fixed</div>
</div>
4

8 回答 8

18

更新的答案:

这里的答案很老了。今天,这可以通过 flexbox 轻松实现:

.container {
  border: 4px solid red;
  display: flex;
}
.content {
  border: 4px solid green;
  flex-grow: 1;
  margin: 5px;
}
.sidebar {
  border: 4px solid blue;
  margin: 5px 5px 5px 0;
  width: 200px;
}
<div class="container">
  <div class="content">
    Lorem ipsum dolor sit amet.
  </div>
  <div class="sidebar">
    Lorem ipsum.
  </div>
</div>

原答案:

像 <div> 这样的块级元素会自动填充 100% 的可用宽度。如果将其中一个浮动到右侧,另一个的内容将填充剩余空间。

<div style="height: 100px; border: 3px solid red;" id="container">
  <div style="float: right; width: 100px; border: 3px solid blue;">Fixed</div>
  <div style="border: 3px solid green;">Fill</div>
</div>

http://jsfiddle.net/5AtsF/

于 2011-11-24T05:20:19.307 回答
3

对于任何查看此内容的人来说,现在有一个名为 calc 的新 css 属性方法,它可以以更灵活的方式执行此操作。

<div class="container">
    <div class="fixedWidth"></div>
    <div class="variableWidth"></div>
</div>

.fixedWidth{
width:200px;
}
.variableWidth{
width:calc(100%-200px);
}

作为警告,这不是很便携,并且在移动设备上的支持很简单。我相信IOS 6+和andriod 4.4。不过,IE 9.0+ 对桌面的支持要好得多。

http://caniuse.com/calc

如果有人难以置信地卡住,我过去曾使用 JS hack 来实现此技术,尽管调整大小较慢,但建议使用不同的布局。

window.addEventListener('resize', function resize(){
    var parent = document.getElementById('parent');
    var child = document.getElementById('child');
    child.style.width = parseInt(parent.offsetWidth - 200) + "px"; //200 being the size of the fixed size element
}, false);
于 2014-07-11T14:33:45.923 回答
3

如果您不知道固定部分有多大,您可以使用 flex 9999 hack。

<div class="container">
  <div class="fixedWidth"></div>
  <div class="variableWidth"></div>
</div>
.container {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
}

.fixedWidth {
    flex: 1;
}

.variableWidth {
    flex: 9999;
}
于 2018-08-10T17:48:31.017 回答
2

这应该为你做:

<div style="position: absolute; width: 100%; height: 100px; border: 3px solid red;" id="container">
    <div style="float: right; width: 100px; border: 3px solid blue;">Fixed</div>
    <div style="display: block; margin-right: 100px; border: 3px solid green;">Fill</div>
</div>

见 jsFiddle

这是假设您要从最终结果中删除 3px 边框(它们在示例中重叠,因为边框宽度不包含在宽度中)。

于 2011-11-24T05:26:15.147 回答
1

您可以在不使用 usedisplay:table属性更改标记的情况下实现这一点:

.parent{
    position: absolute;
    left:0;
    right:0;
    height: 100px;
    border: 3px solid red;
    display:table;
}
.fill{
    margin-right: 100px;
    border: 3px solid green;
    display:table-cell;
    width:100%;
}
.fixed{
    width: 100px;
    border: 3px solid blue;
    display:table-cell;
}

检查没有的实时示例horizontal scrollbar

http://jsfiddle.net/WVDNe/5/

另一个例子,但以更好的方式检查这个:

http://jsfiddle.net/WVDNe/6/

注意:它不适用于 IE7 及以下版本

也检查一下

http://jsfiddle.net/LJGWY/4/

它适用于所有浏览器。

于 2011-11-24T05:51:09.470 回答
0

尝试像这样设置位置:

<div style="position: absolute; width: 100%; height: 100px; border: 3 solid red;" id="container">
    <div style="position:absolute; left: 0; top: 0; right: 100px; border: 3 solid green;">Fill</div>
    <div style="position:absolute; top: 0; right: 0; width: 100px; border: 3 solid blue;">Fixed</div>
</div>
于 2011-11-24T05:25:25.240 回答
0

你可以把fixed div里面的fill div.

<div id="container">
    <div>Fill
        <div>Fixed</div>
    </div>
</div>

CSS

#container{
    position:absolute;
    width:90%;
    height:100px;
    border:3px solid red;
}

#container div{
    height:95%;
    border:3px solid green;
    width:100%;
}

#container div div{
    height:95%; 
    width:100px;
    border:3px solid blue;
    float:right;
}

示例:http: //jsfiddle.net/EM8gj/3/

于 2011-11-24T05:26:15.940 回答
0

你可以使用表格样式。创建一个带有表格样式的 div 和子项目就是表格单元格样式

标签文本
于 2015-04-15T05:05:26.253 回答