У меня есть структура HTML с заданным CSS.
И caption
, и progress
элементы должны отображаться в одной строке. caption
элементы не должны иметь фиксированную ширину, а элементы progress
должны заполнить остальную часть пространства рядом с caption
на основе их ширины встроенного набора, что означает, что каждый элемент progress
будет иметь разную общую ширину пикселя, но должен заполнить только заданные процент доступного пространства.
Структура HTML и правила CSS могут быть изменены любым способом.Установка переменной процентной ширины элементов HTML рядом с другими элементами переменной ширины
Можно ли решить эту проблему только с помощью 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>
Я вижу ... Не знаю о flexbox, действительно ... Однако это не решает мою проблему. Если я добавлю только это правило, вторая строка получает разрыв строки перед последним словом в 'caption' по какой-то причине. Хотя поддержка браузера flexbox сомнительна (думая об IE, как обычно), я обязательно посмотрю на это! – errata
Спасибо за внимание, но есть и небольшая проблема с этим, то есть, если текст '.value' достаточно широк, ширина' progress' не будет отражать фактический процент. Например. попробуйте заменить первый «прогресс» на 1.65% и введите одно и то же значение в 'span.value', и вы заметите, что строка' progress' не будет отображать ширину 1%, но будет оставаться такой же, как и ширина текста. – errata
@errata Я улучшил ответ, чтобы перелить текст. Скажи мне, если это сработает для тебя. – ncardeli