我有 2 个 div 漂浮在容器 div 中。第二个 div 有width: 20px
. 我需要第一个 div 来填充所有可用空间并保持内联。将第一个 div 宽度设置为 100% 不起作用,因为具有固定宽度的第二个 div 会下降。我能怎么做?
代码在这里描述:http: //jsfiddle.net/7EW5h/4/
谢谢
我有 2 个 div 漂浮在容器 div 中。第二个 div 有width: 20px
. 我需要第一个 div 来填充所有可用空间并保持内联。将第一个 div 宽度设置为 100% 不起作用,因为具有固定宽度的第二个 div 会下降。我能怎么做?
代码在这里描述:http: //jsfiddle.net/7EW5h/4/
谢谢
您可以使用calc
CSS3 函数并为 div 设置动态宽度,#inner1
如下所示:
width: calc(100% - 20px);
它将与 Firefox 16(或更高版本)和 Internet Explorer 9(或更高版本)兼容。
您可以添加供应商前缀,如下所示:
width: -moz-calc(100% - 20px);
width: -webkit-calc(100% - 20px);
width: calc(100% - 20px);
使其与 Chrome 19(或更高版本)、Firefox 4(或更高版本)、Internet Explorer 9(或更高版本)和 Safari 6(或更高版本)兼容。
您可以在此处查看兼容表:http: //caniuse.com/#search=calc
关于您的示例,我必须设置border: 0
为#inner1
和#inner2
div。
我已经在 Chrome、IE9、Firefox 和 Opera 中测试并制定了一个解决方案:
display
为block
(这是div
元素的默认值)。margin-right
较大容器的 设置为右侧元素的总宽度。在这里,我们还需要考虑两个元素的边框、边距和填充。HTML:
<div id="container">
<div id="inner2">
<input />
</div>
<div id="inner1">
<input />
</div>
</div>
CSS:
#inner2 {
float: right;
}
#inner2 input {
height: 20px;
width: 20px;
border: 1px solid #000;
}
#inner1 {
margin-right: 24px;
}
#inner1 input {
width: 100%;
height: 20px;
border: 1px solid #000;
}
现场示例:http: //jsfiddle.net/7EW5h/22/。另请注意,我已明确设置两个input
元素的边框。
如果不更改 HTML 或不使用绝对定位的两个元素的顺序,我无法让它工作。
我认为,在不使事情复杂化的情况下,您可以执行以下操作。
将 padding-right 添加到第一个输入以避免内容重叠。另外,即使我下面的代码中没有显示,也不要忘记默认边框、边距和填充的存在。</p>
#container {
overflow: hidden;
background-color: red;
}
#inner1 {
width: 100%;
background-color: blue;
padding-right:45px;
}
#inner2 {
height: 20px;
width: 20px;
background-color: green;
position:absolute;
right:0;
top:0;
}
</p>
您是否尝试过使用position:absolute;
来根据需要定位元素?
请参阅小提琴 - JSFiddle 示例