Вы можете использовать linear-gradient
для этого
Например, если вам нужно 50% красного
td {
background: linear-gradient(to right, red 50%, transparent 0);
}
Демонстрация:
table {
border-collapse: collapse;
}
td {
border: 1px solid gray;
padding: 10px;
}
.half {
background: linear-gradient(to right, red 50%, transparent 0);
}
.one-third {
background: linear-gradient(to right, red 33.33%, transparent 0);
}
.three-quaters {
background: linear-gradient(to right, red 75%, transparent 0);
}
<table>
<tr>
<td class="half">50%</td>
</tr>
<tr>
<td class="one-third">33%</td>
</tr>
<tr>
<td class="three-quaters">75%</td>
</tr>
</table>
Второе значение Zero 0
используется намеренно, чтобы избежать дублирования первого значения. Это работает, потому что следующее значение в градиенте не может быть меньше предыдущего.