CSS-Fortschrittsbalken Textfarbe für mit Kontrast gefüllte und leere Hintergründe?

7

Ich möchte XHTML + CSS Fortschrittsbalken mit Kontrastfarben zwischen gefüllten und leeren Hintergrundbereichen haben.

Ich habe ein Problem mit der Textfarbe. Da gefüllte und leere Hintergründe zu kontrastreich sind (dies ist eine Voraussetzung), sollte der Text, um lesbar zu bleiben, zweifarbig sein, um ein Kontrast zu beiden zu sein. Das Bild sollte es besser erklären als Worte:

Fortschrittsbalken mit dunkelblauem gefülltem Bereich und weißem leerem Hintergrund http: // drdaeman. pp.ru/tmp/20090703/progress-bar-text-example.png Beispiel für das Problem http://drdaeman.pp.ru/tmp/20090703/progress- bar-text-problem.png

Meine aktuelle Fortschrittsbalkenimplementierung ist trivial, aber wie das obige Beispiel zeigt, kann der Text in einigen Fällen schwer zu lesen sein, was genau ein Problem ist, das ich lösen möchte.

Mein aktueller (vereinfachter) Implementierungsversuch (fehlgeschlagen, weil overflow: hidden nicht funktioniert, ohne div.progress zu positionieren, was ich wegen inner span 's width nicht positionieren kann):

%Vor%

Live-Version von oben: Ссылка Vorheriger Versuch: Ссылка

Die Bilder sind GIMP-bearbeitete Prototypen und nicht genau das, was dieser Code anzeigt.

Hinzufügen: Vielen Dank, besonders Meep3D, Nosredna und Lachlan! Allerdings habe ich noch ein Problem - in meinem Fall sollte der Fortschrittsbalken keine feste Breite haben und den gesamten horizontal verfügbaren Platz einnehmen ( width: auto; oder width: 100% sind akzeptabel). Aber ohne width: 400px rule bricht Lachlans Code. Und ich würde immer noch vermeiden, JavaScript zu verwenden, wenn das möglich ist.

    
drdaeman 03.07.2009, 20:17
quelle

5 Antworten

8

Nehmen Sie gemäß Meep3D's Vorschlag 2 Kopien des Textes.

Wickeln Sie jedes in ein div mit der gleichen Breite wie der Container. Das "obere" div wird mit einem anderen div umschlossen, das den gewünschten Prozentsatz schneidet.

Update: entfernte die festen Breiten.
Das "obere" div wird auf den umgekehrten Prozentsatz seines Wrappers skaliert.

%Vor%     
Lachlan Roche 04.07.2009, 12:43
quelle
8

Wie wäre es, wenn Sie eine zweite Kopie des Fortschrittsbalken-Texts in das div einfügen und den Überlauf des divs auf versteckt setzen, damit er damit sichtbar wird?

-

Update: Ich bin auch kein Javascript-Experte, aber ich bin sicher, dass Sie die Breite eines Objekts herausfinden und dann den Offset basierend darauf einstellen können, wenn die Breite flexibel ist, wie Sie sagen.

    
Meep3D 03.07.2009 20:20
quelle
1

Sie könnten:

  • Finde ein Grau, das zu
  • passt
  • Verwenden Sie JavaScript, um die Farbe dynamisch zwischen weiß und schwarz zu ändern, je nachdem, wo es sich befindet
  • Machen Sie die mittlere Farbe des Hintergrund-Farbverlaufs näher an Weiß und verwenden Sie immer dunklen Text
  • Setzen Sie den Fortschritt outisde das Feld:
%Vor%     
Lucas Jones 03.07.2009 20:19
quelle
1

Sie könnten einen Textschatten für Ihren "Prozent" -Text verwenden. Der einzige Nachteil ist, dass es nur in den neuesten Browsern funktioniert. Nur Firefox 3.5, Safari (alle Versionen) und Chrome 2+ unterstützen es.

Hier ist eine Demo von der Verwendung von Text-Schatten in einer Weise, die Ihren Fortschritt lesbar machen würde.
Ссылка

Wenn Sie mehr JavaScript verwenden möchten, können Sie dieses jQuery-Plugin ausprobieren:

Ссылка

Der Artikel sagt, es funktioniert nur in IE, aber es funktioniert in Chrome 3 (was ich verwende), Firefox 3.5, Internet Explorer und Safari. Es kann in älteren Browsern funktionieren, aber ich habe es nicht getestet.

    
Dan Herbert 03.07.2009 20:33
quelle
1

Meep3D hat die richtige Antwort. Zwei Versionen der Box. Zeige n% des obersten.

Weitere Optionen:

  • Legen Sie eine durchsichtige Box unter die Zahl, die den Bereich entweder verdunkelt für eine weiße Zahl oder hellt die Bereich für eine schwarze Nummer.
  • Verwenden Sie rot und weiß als Hintergrund und eine schwarze Nummer. (Problem hier ist rot ist mit Fehler verbunden, so können Sie spiele mit anderen Kombinationen von drei Farben, die alle kontrastreich sind gegeneinander.)
Nosredna 03.07.2009 20:34
quelle

Tags und Links