【发布时间】:2009-07-03 20:17:02
【问题描述】:
我希望 XHTML+CSS 进度条在填充和空白背景区域之间具有对比色。
我的文字颜色有问题。因为填充和空白背景的对比度太强(这是一项要求),为了保持可读性,文本应该是双色的,以与它们两者形成对比。图片应该比文字更好地解释它:
Progress bar with dark blue filled area and white empty background http://drdaeman.pp.ru/tmp/20090703/progress-bar-text-example.png Example of the problem http://drdaeman.pp.ru/tmp/20090703/progress-bar-text-problem.png
我目前的进度条实现是微不足道的,但如上例所示,在某些情况下,文本可能难以阅读,这正是我想要解决的问题。
我当前的(简化的)实现尝试(失败,因为如果没有定位 div.progress,overflow: hidden 将无法工作,因为内部 span 的 width 而我无法定位):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>Progress bar test</title>
<style type="text/css">
div.progress_bar {
border: 1px #ccc solid; position: relative;
text-align: center; height: 32px;
}
div.progress_bar .progress {
height: 32px;
overflow: hidden; /* This does NOT work! */
}
div.progress_bar .progress div {
position: absolute; width: 100%; height: 32px;
z-index: 30; overflow: hidden;
background-color: #44a;
}
div.progress_bar span {
position: absolute; top: 0; left: 0; width: 100%;
z-index: 20;
color: #000;
}
div.progress_bar .progress span {
position: absolute; top: 0; left: 0; width: 100%;
z-index: 40;
color: #eee;
}
</style>
</head>
<body>
<!-- Can be of any (unknown) width. Think of "width: auto".
The 400px value is just to keep it small on a big monitor.
DON'T rely on it! -->
<div id="container" style="width: 400px;">
<div class="progress_bar">
<!-- div.progress is a dark filled area container -->
<div class="progress" style="width: 51%;">
<!-- Actually dark filled area -->
<div style="width: 51%;"></div>
<!-- Text (white).
Does not clip, even with overflow: hidden on parent! -->
<span>This is a test</span>
</div>
<!-- Text (black) -->
<span>This is a test</span>
</div>
</div>
</body>
</html>
以上直播版本:http://drdaeman.pp.ru/tmp/20090703/test2.html
上一次尝试:http://drdaeman.pp.ru/tmp/20090703/test.html
图像是 GIMP 编辑的原型,与此代码显示的不完全相同。
添加:谢谢大家,尤其是 Meep3D、Nosredna 和 Lachlan!但是我仍然有一个问题——在我的情况下,进度条应该没有固定的宽度并且占据所有水平可用的空间(width: auto; 或width: 100% 是可以接受的)。但是如果没有width: 400px 规则,拉克兰的代码就会中断。如果可能的话,我仍然希望避免使用 JavaScript。
【问题讨论】:
-
0% 和 100% 到底有什么问题?
-
要么是深蓝色背景上的黑色文本(很难阅读),要么是白色背景上的白色文本(无法阅读)。
-
我一定错过了什么。为什么不让它在深蓝色的时候变成白色,在白色的时候变成黑色?
-
我认为 0-50% 或 50-100% 有问题,而不仅仅是 0 和 100%。就像图片所示,很难选择在两种背景颜色上都可读的单一颜色。
-
@Nosredna 这就是他想做的。但是怎么做?他如何仅使用可用的工具来完成这项相当复杂的任务?请注意,0 的一部分是白色,而同一字形的另一部分是黑色。
标签: css text progress-bar effects