Подтвердить что ты не робот

Как создать панель прогресса с цветом перевернутого текста для "продвинутой" части

Я пробовал это с часами, но я не получаю никакого решения, которое работает. Задача: создать индикатор прогресса с динамической шириной и центрированной меткой, которая изменяет цвет текста между прогрессивной и непрогретой частью. Вот изображение для уточнения:

Example

Итак, это отлично работает, если я знаю ширину всей панели прогресса. Но он не может использоваться в гибкой конструкции, где ширина вычисляется автоматически.

Вот мой код:

<div class="progress" style="width: 400px;">
 <div class="progressValue" style="width: 50%">
  <div class="progressInnerLabel" style="width: 400px;">I'm a progress text</div>
 </div>
 <div class="progressLabel">I'm a progress text</div>
</div>

И мой CSS:

.progress {
    position: relative;
}

.progressValue {
    overflow: hidden;
    position: absolute;
    height: 20px;
    background-color: blue;    
}

.progressInnerLabel {
    position: absolute;
    text-align: center; 
    color: white;  
    height: 20px;    
}

.progressLabel {
    background-color: #eee; 
    text-align: center; 
    color: black;    
}

Я также создал скрипку, поэтому вы можете поиграть с ней: http://jsfiddle.net/Q82kF/2/

Я хотел бы удалить ширину: 400px моего первого div (class= progress) моего html, поэтому прогресс автоматически получит полную доступную ширину. У кого-нибудь есть решение для этого?

Я НЕ WAND, чтобы сделать это с помощью javascript (или любой lib). Я думаю, что должно быть только решение CSS/HTML.

4b9b3361

Ответ 1

Я не считаю, что это возможно в чистом CSS, потому что текст внутри заполненной части панели должен быть на уровне 100% от его родительской ширины. Один из вариантов может заключаться в использовании маскирования веб-кары, но, конечно же, он будет работать только в Chrome и Safari.

Я знаю, что вы сказали, что не хотите решения JS, но это единственный способ, о котором я мог думать. Вот как вы это сделаете с помощью jQuery: http://jsfiddle.net/kthornbloom/zkL29/

CSS

.progress-bar {
    background:#ccc;
    padding:10px 0;
    width:100%;
    text-align:center;
    position:relative;
}

.progress-fill {
    background:blue;
    color:#fff;
    width:50%;
    padding:10px 0;
    position:absolute;
    left:0;
    top:0;
    overflow:hidden;
}

JS:

function barWidth() {
    var barWidth = $('.progress-bar').width();
    $('.progress-fill-text').css('width',barWidth);
}
barWidth();
window.onresize = function() {
    barWidth();
}