Для вашего вопроса о позиции:
&:before {
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%); // vertical center
width: 5em; // keep the number left aligned
z-index: 1; // to stay above the color bar
}
Для вашего вопроса об изменении цвета текста:
Что вы имеете в виду, «перекрывает» его ? Потому что, если вы имеете в виду момент, когда он начинает перекрываться, то вы можете сделать что-то вроде:
color: ${props => props.percent > 98 ? 'white' : 'black'};
И вы можете получить больше фантазии и изменить цвет для каждой буквы за раз:
<div>
<span>1</span>
<span>0</span>
<span>0</span>
<span>%</span>
</div>
span {
&:nth-child(0) {
color: ${props => props.percent > 98 ? 'white' : 'black'};
}
&:nth-child(1) {
color: ${props => props.percent > 98.1 ? 'white' : 'black'};
}
&:nth-child(2) {
color: ${props => props.percent > 98.2 ? 'white' : 'black'};
}
&:nth-child(3) {
color: ${props => props.percent > 98.3 ? 'white' : 'black'};
}
}
Но если вы хотите, чтобы один символ имел несколько цветов одновременно, вам понадобится значок SVG для каждого числа.
Рассмотрите GreenSock , чтобы увидеть, может ли это помочь вы, у них есть некоторые действительно интересные функции.