CSS全宽减去边距左边div,20px同一行右边div

Joh*_*ohn 2 css margin css-float

我试图让第一个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>
Run Code Online (Sandbox Code Playgroud)

这应该能够用CSS一级(这意味着没有position跛脚)完成,虽然我知道我错过了什么.此外anchors,两个div元素中都必须使用100%的可用宽度,因此这里有一个技巧float可以让它以某种方式运行......

Dan*_*eld 10

解决方案#1

利用overflow: hidden(或溢出:自动)填充剩余的水平空间.

(注意:要使其正常工作,您需要先在标记的右侧放置元素)

小提琴

<div>
    <div class="div2">DIV 2</div>
    <div class="div1">DIV 1</div>   
</div>
Run Code Online (Sandbox Code Playgroud)

CSS

.div1 {
    background:yellow;
    overflow: hidden;
}
.div2 {
    background:brown;
    float:right;
    width: 50px;
}
Run Code Online (Sandbox Code Playgroud)

解决方案#2

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

小提琴

<div>
    <div class="div1">DIV 1</div>
    <div class="div2">DIV 2</div>
</div>
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

解决方案#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;
}
Run Code Online (Sandbox Code Playgroud)

解决方案#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;
}
Run Code Online (Sandbox Code Playgroud)