1

我有一个带有给定 CSS 的 HTML 结构。和元素
都应该在同一行中呈现。元素不应具有固定宽度,并且元素应根据其内联集宽度填充旁边的其余空间,这意味着每个元素将具有不同的总像素宽度,但应仅填充给定百分比的可用空间. 可以以任何方式更改 HTML 结构和 CSS 规则。 captionprogresscaptionprogresscaptionprogress

是否可以仅使用 CSS 解决此问题?

.table {
    padding: 15px;
    width: 280px;
    border: 1px solid black;
    font-family: sans-serif;
    font-size: 12px;
}

.caption {
    float: left;
}

.progress {
    height: 14px;
    border: 1px solid white;
    border-radius: 4px;
    background-color: green;
    overflow: hidden;
}

.value {
    margin-left: 5px;
}
<div class="table">
    <div class="row">
        <div class="caption">Short text: </div>
        <div class="progress" style="width:11.65%">
            <span class="value">11.65</span>
        </div>
    </div>
    
    <div class="row">
        <div class="caption">A bit longer text: </div>
        <div class="progress" style="width:100%">
            <span class="value">100.00</span>
        </div>
    </div>
    
    <div class="row">
        <div class="caption">X: </div>
        <div class="progress" style="width:45.50%">
            <span class="value">45.50</span>
        </div>
    </div>
</div>

4

3 回答 3

1

你考虑过使用Flexbox吗?

只需添加此规则:

.row {
    display: flex;
}

如果您担心浏览器支持,另一种方法是使用 display:table。您应该更改标记和 CSS,如下所示:

.table {
        border: 1px solid black;
        font-family: sans-serif;
        font-size: 12px;
        padding: 15px;
        width: 280px;
    }
    .inner-table {
        display: table;
    }
    .row {
        display: table-row;
    }
    .caption {
        display: table-cell;
        white-space: nowrap;
        width: 1%;
    }
    .progress {
        background-color: green;
        border: 1px solid white;
        border-radius: 4px;
        display: table-cell;
        height: 14px;
    }
    .value {
        margin-left: 5px;
        display:block;
        width:0;
        overflow: visible;
    }
<div class="table">
        <div class="inner-table">
            <div class="row">
                <div class="caption">Short text: </div>
                <div style="width:1.65%" class="progress">
                    <span class="value">1.65</span>
                </div>
                <div class="remainder"></div>
            </div>
        </div>
        
        <div class="inner-table">
            <div class="row">
                <div class="caption">A bit longer text: </div>
                <div style="width:100%" class="progress">
                    <span class="value">100.00</span>
                </div>
                  <div class="remainder"></div>
            </div>
        </div>
        
        <div class="inner-table">
            <div class="row">
                <div class="caption">X: </div>
                <div class="progress" style="width:45.50%">
                    <span class="value">45.50</span>
                </div>
                <div class="remainder"></div>
            </div>
        </div>
    </div>

于 2014-09-17T03:24:47.887 回答
0

请试试这个 - padding-right: 5px; 显示:内联;添加这些属性进行中类,并删除正在进行中的宽度。

于 2014-09-17T04:20:29.687 回答
0

好吧,只是为了将来的参考,我玩了一下 flexbox 的东西并想出了这个:

.table {
    padding: 15px;
    width: 280px;
    border: 1px solid black;
    font-family: sans-serif;
    font-size: 12px;
}

.row {
    display: flex;
}

.caption {
    margin: 1px 5px 1px 0;
}

.progress {
    flex-grow: 1;
  	margin: auto;
}

.progress-content {
    height: 14px;
    border-radius: 4px;
    background-color: green;
}

.value {
    margin-left: 5px;
}
<div class="table">
    <div class="row">
        <div class="caption">Short text:</div>
        <div class="progress">
            <div class="progress-content" style="width:11.65%">
                <span class="value">11.65</span>
            </div>
        </div>
    </div>
    
    <div class="row">
        <div class="caption">A bit longer text:</div>
        <div class="progress">
            <div class="progress-content" style="width:100%">
                <span class="value">100.00</span>
            </div>
        </div>
    </div>
    
    <div class="row">
        <div class="caption">X:</div>
        <div class="progress">
            <div class="progress-content" style="width:45.50%">
                <span class="value">45.50</span>
            </div>
        </div>
    </div>
</div>

如果我得到一个没有 flexbox 的解决方案,我会接受它作为答案:)

于 2014-09-17T14:19:13.567 回答