2

我试图让div下面的第一个孩子用完100%可用空间减去20px,然后使用第二个div孩子使用20px并与第一个孩子在同一行div

<div style="width: 10%;">

<div style="float: left; margin-right: 20px;">Left side, should use up all space except margin!</div>

<div style="float: left; margin-left: -20px; width: 20px;">Should only use 20px no matter what.</div>

</div>

这应该可以通过 CSS 一级(这意味着没有position跛脚)来完成,尽管我知道我错过了一些东西。此外anchors,两个div元素中都必须使用 100% 的可用宽度,所以这里有一个技巧可以让float它们以某种方式表现......

4

3 回答 3

10

解决方案#1

利用overflow: hidden(或溢出:auto)填充剩余的水平空间。

注意:为此,您需要先将元素放在标记的右侧)

小提琴

<div>
    <div class="div2">DIV 2</div>
    <div class="div1">DIV 1</div>   
</div>

CSS

.div1 {
    background:yellow;
    overflow: hidden;
}
.div2 {
    background:brown;
    float:right;
    width: 50px;
}

解决方案#2

你可以这样做box-sizing: border-box

小提琴

<div>
    <div class="div1">DIV 1</div>
    <div class="div2">DIV 2</div>
</div>

CSS

.div1 {
    background:yellow;
    float:left;
    padding-right: 50px;
    margin-right: -50px;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    width: 100%;
}
.div2 {
    background:brown;
    float:left;
    width: 50px;
}

解决方案#3

使用 css 表:

小提琴

<div class="container">
    <div class="div1">DIV 1</div>
    <div class="div2">DIV 2</div>
</div>

.container
{
    display:table;
}
.div1 {
    background:yellow;
    display: table-cell;
    width: 100%;
}
.div2 {
    background:brown;
    width: 50px;
    display: table-cell;
    word-break: break-word;
    min-width: 50px;
}

解决方案 #4(需要 CSS3)

采用calc

小提琴

在第一个子集上width: calc(100% - 50px)

在第二个 div 集上width: 50px;

.div1 {
    background:yellow;
    width: calc(100% - 50px);
    float: left;

}
.div2 {
    background:brown;
    width: 50px;
    float: left;
}
于 2013-10-24T23:58:34.350 回答
1

你能稍微改变一下 HTML 结构吗?

<div style="width: 10%;">
    <div style="display: block; width: 100%;">
        <div style="width: 20px; float: right;"></div>
    </div>
</div>
于 2013-10-25T00:26:45.287 回答
1

这是另一种使用display:table.

<html>
<style>
body { padding:0; margin:0; display:table; width:100%; }
#content { display:table-row; }
#b1, #b2 { display:table-cell; }
#b1 { background-color:#eee; padding:2em; }
#b2 { width:20px; background-color:#bbb; }
</style>
</head>
<body>
<div id="content">
<div id="b1">
<h1>Main content here</h1>
<p>Side bar on right is 20 px wide.</p>
</div>
<div id="b2">
</div>
</div>
</body>
</html>
于 2013-10-25T00:40:18.933 回答