LearningjQuery.com 对其博客文章的日期进行了非常酷的展示。查看一下
字体和垂直显示的年份应该立即让您想到使用了图像来实现这一点。但请注意,日期信息以文本形式显示在标记中,正如它应该的那样。
在 Firebug 中快速查看一下,就能发现其简洁之美!
精灵图的最佳实践
希望很明显的是,每个日期都没有自己独特的图形。日期是从单个图形(css 精灵图!)中拼凑而成的,其中图形的不同较小部分显示在三个不同的区域:日、月和年。也许您会从 Joost de Valk 几乎一年前发布的类似技术 中认出这一点。
看看这个美丽的例子
HTML 代码
最终的 HTML 代码将类似于这样
<div class="postdate">
<div class="month m-06">Jun</div>
<div class="day d-30">30</div>
<div class="year y-2009">2009</div>
</div>
我们有一个包装器和三个区域。这为我们提供了匹配这些示意图所需的内容
在 WordPress 等 CMS 中,生成该代码的后端代码将类似于这样
<div class="postdate">
<div class="month m-<?php the_time('m') ?>"><?php the_time('M') ?></div>
<div class="day d-<?php the_time('d') ?>"><?php the_time('d') ?></div>
<div class="year y-<?php the_time('Y') ?>"><?php the_time('Y') ?></div>
</div>
CSS 代码
CSS 是精灵图真正发挥作用的地方。使用我们在 HTML 中设置的这些特殊类名,我们可以设置要使用的图像的哪些部分。
首先,我们在父元素上设置相对定位。然后我们在其中绝对定位这三个区域中的每一个。我们设置所有三个区域都使用相同的背景图像(我们的精灵图),设置它们各自的宽度和高度,并将文本移出页面。
然后,我们设置每个月(12 种可能性)、日(31 种可能性)和年(向后延伸 10 年),并使用显示所需特定区域所需的特定背景定位。
.postdate {
position: relative;
width: 50px;
height: 50px;
float: left;
}
.month, .day, .year {
position: absolute;
text-indent: -1000em;
background-image: url(/wp-content/themes/ljq/images/dates.png);
background-repeat: no-repeat;
}
.month { top: 2px; left: 0; width: 32px; height: 24px;}
.day { top: 25px; left: 0; width: 32px; height: 25px;}
.year { bottom: 0; right: 0; width: 17px; height: 48px;}
.m-01 { background-position: 0 4px;}
.m-02 { background-position: 0 -28px;}
.m-03 { background-position: 0 -57px;}
... more like this ...
.d-01 { background-position: -50px 0;}
.d-02 { background-position: -50px -31px;}
.d-03 { background-position: -50px -62px;}
... more like this ...
.y-2006 { background-position: -150px 0;}
.y-2007 { background-position: -150px -50px;}
.y-2008 { background-position: -150px -100px;}
... more like this ...
尽情享受吧!
哇。感谢分享这个技巧。
我应该试试这个… 一次,最少…
太棒了,现在我理解精灵图了… :-D
是的!这太棒了。
哇,真是个很棒的技巧!
喜欢它
我非常喜欢。
我只是在我的 RSS 阅读器中看到了标题,并认为,不,他不会谈论 learningjquery.com 上的日期问题…
:)
呵呵。是的。我也立即假设这篇文章将与 learningjquery.com 有关。
太棒了——巧妙的技巧。
一如既往,Chris,好技巧。干得好!
这种精灵图技术确实不错,我经常使用它,但是当在 IE6 中使用透明 PNG 精灵图时,我遇到了一些问题,您展示了 Unit PNG Fix,但是当我将其应用于精灵图时,似乎遇到了一些问题。关于我可能做错了什么,您有什么想法吗?
alphaimageloader 过滤器不支持 css background-position,因此您无法将其与精灵图一起使用。
DD_belatedPNG js 修复程序对 PNG 具有良好的 background-position 支持。您可以在此处获取它:http://is.gd/1Rcrt 希望对您有所帮助!
该死的 IE6。是的,这很糟糕,IE6 根本无法很好地处理透明的 png。一个解决方案是,如果它是一个静态元素(如日期示例),则使用条件 CSS 文件并使用纯色 png 图像。如果它是悬停时位置的变化,则在条件 CSS 中将其设置为不更改,它仍然可以正常工作,只是视觉反馈较少。
Fireworks 可以保存一个与 IE6 兼容的 PNG。对于了解情况的浏览器来说是 Alpha,对于疲惫/损坏的 IE6 来说是纯色透明度。在 http://www.sitepoint.com/blogs/2007/09/18/png8-the-clear-winner/ 阅读更多内容
嘿,谢谢!,DD_belated 工作得很好:),而且我不知道 Fireworks 的选项,尽管我一直都在使用它!!,谢谢。
我相信,8 位 PNG 在 IE 中可以正常工作。
这是一种与众不同且很酷的外观。
此致
Rata
精灵图的创造性使用!Chris,感谢您深入讲解如何完成它。
有点离题:颜色对比度太低,以至于在某些屏幕上很难看到(我现在在笔记本电脑上,不得不把屏幕弯得更厉害才能真正读懂它)。
令人印象深刻,我越来越爱精灵图了:D
这看起来是一种有趣的技术。我看到的唯一可能的缺点是显示所需的所有额外 CSS。为了获得花哨的日期显示,需要下载大量的 CSS。
你说得对。但是由于每个图形项目都位于可预测的位置,因此您可以使用 jq 生成 css。例如,每个日期可能距离下一个日期 50px,因此 dayycoord=day*50 之类的东西。
您需要添加代码来处理超过 16 的日期(或者使用更长的图形,其中只有两列:第 1 列 = 月份,然后是年份。第 2 列 = 天数)。
您还可以使用类似 LESS 的工具自动生成不同的背景位置。
非常有帮助的 CSS 提示。
这非常聪明 :)
我的大脑完全打开了。从未想过以这种方式使用它。我们很快就会看到同样巧妙的变体!
很棒的文章!
非常有创意,尽管它需要在样式表中键入更多内容(我懒惰吗?还是我没有?);)
感谢您的教程。
精灵的使用方法太棒了!
为什么使用 div 来容纳日期的各个部分?使用带有 display:block 的 span 不是更好吗?这样,当样式被移除或使用屏幕阅读器时,它会显示成这样
2009年6月30日
…而不是奇怪的
Jun
30
2009
添加一个逗号 (,) 用于“Jun 30, 2009”,并使用一个 display:none 的类。
你完全正确。Span 是更好的选择。应该一开始就那样做。我会尽快更新 HTML。
非常新颖的技术!现在我需要找到一个合适的案例来利用它。谢谢!我喜欢精灵 =)
哇哦,感谢提示,简单易行的方法!
感谢你为我们分解,Chris。这是一个很好的提醒,我应该更经常地剖析酷炫的视觉元素,尤其是在它们是由像 Karl Swedberg 这样的天才创建时。 :)
哇!真的很酷,Chris…
他们使用的这个小技巧很不错。对实现的解释很好,homefry。
我♥精灵!
非常巧妙地使用了精灵。
根据类来确定图像的位置不是更明智吗?
例如,div.d-20 将是(日期 div 的高度 * 20)
需要使用 js 或服务器生成的 css,但这肯定比键入大约 50 个声明要好。
非常酷。迫不及待地想做一个。
现在,我必须在 HiddenCSS 的重新思考中尝试一下。
或者使用大约 3 行 css,你可以使用这个 http://snook.ca/archives/html_and_css/css-text-rotation
是啊!这才像话!
谢谢你的链接
我在进入 CSS-Tricks 之前刚好在 LearningKquery.com 网站上。真奇怪!
非常酷,Chris!需要一些工作,但最终结果很棒!
大约一年前,我做了一个非常相似的事情,模仿 iCal 图标
http://lucassmith.name/pub/calendar/stamp.html
虽然这是一个巧妙的想法,而且看起来确实很酷,但从实际角度来说,精灵和 css 会导致页面需要加载更多数据来显示最多几个日期。
在这个特定的例子中,除了确保字体之外,也没有必要在精灵中包含月份或日期。
这太棒了,非常非常聪明。谢谢!
在 HTML5/CSS3 中,这种效果不是可以不用图片实现吗?我很想知道在这种情况下它是如何实现的,尽管精灵非常酷
好吧,精灵是我们必须学习的东西。但就我个人而言,我不习惯使用大型样式表来定义这么小的事情的大量精灵坐标列表。我更感兴趣的是一些更有效的方法,比如我在 is.gd/1RgZU 找到的方法。
这基本上是一个会破坏 CSS2.1 验证的黑客(谁在乎呢),但请继续关注 CSS3。
有一些评论提到了这有多少“额外的 CSS”。我只想明确一点,以上技术,以及一般的 css 精灵,实际上非常有效。
如果这些日期/月份/年份中的每一个都是一个单独的图形,它将需要**更多**的 css,并且由于所有额外的 http 请求而大大降低速度。
是的,但是你仍然可以通过对不需要旋转的日期部分使用实际文本,从而节省大量的规则。这样,在大多数情况下,仍然可以为那些需要放大文本的人放大文本大小。
在同意 John 的观点“月份”和“日期”可以/应该保持文本时,我考虑的不是文本大小调整(可访问性),而是效率。
只有“年份”被旋转并需要图像。
此外,为什么不将“年份”制作成旋转数字(0 到 9)的精灵图像,并以类似的方式将其组合在一起,以便可以表示任何年份,而不是硬编码的“年份范围”?
现在你引起了我的注意!
我不明白去掉日期和月份可以节省多少,因为这只会是一个很小的 png。此外,保持它们全部为图像可以保持字体显示的一致性。众所周知,字体在不同的计算机上显示效果不同。
我以一种稍微不同的方式实现了这一点,避免了样式表中的所有额外规则
http://tinyurl.com/ks7qkg
我喜欢这些信息,但如何减少一点 divitis 并将月份/日期/年份制作成段落,或者甚至使用一个段落和 3 个 span 来设置它。是的,你必须使用 display:block,但信息仍然可以传达。
这是所有代码中的一小部分。
更好的是,将每个条目制作成 .hentry,并使用微格式标记日期。
段落标签不适合这些部分。Span 可以,但这已经讨论过了。包装器的段落是一个很好的补充。
至于使用语义丰富的內容,包装器可以很好地成为一个标题,任何你喜欢的标题。日期线几乎都是副标题,通常我就是这样标记它们的。
有趣的精灵用法,值得思考!
标记中有点 divitis,但这是一个很好的精灵示例/文章。
巧妙地使用了 css 精灵,我喜欢它。
非常棒的技术,几个月前我保存了日期精灵的图片,也希望能学习这种技术,但不幸的是我忘记了在哪里下载和保存。非常感谢分享。
感谢分享。在需要日期的博客设计中可能很有用。我无法想象在更多企业网站上向客户展示旋转的日期,但这确实是 CSS 精灵的绝佳用途!
好的,这可能很有效,但使用 php 或类似的东西来仅输出适用于当前日期/时间的 css 会更有效。
我觉得 CSS 雪碧图很酷,但是如果以后要添加很多图片,在维护网站时会不会遇到问题呢?此外,除非雪碧图位于元素的角上,否则无法使用背景重复或将背景图片放置在元素的左上角或右上角…
我刚刚在那个网站上查找了一些信息来修饰手风琴,然后我看到了这个!我一直在欣赏这些数字——感谢你的解释和示例!总是很棒的。
你好,Chris,
我成为你的粉丝了。我真的很喜欢css-tricks.com
CSS 雪碧图是我从css-tricks.com学到的新技巧,它太棒了。
非常感谢大家提供的精彩评论!我已更新 HTML 代码使其更“语义化”,现在看起来像这样(例如)
<abbr class="postdate published" title="2009-06-30T11:32:22-05:00">
<span class="month m-06">Jun</span>
<span class="day d-30">30</span>
<span class="year y-2009">2009</span>
</abbr>
希望它能通过 WordPress 解析器。
很高兴看到网站所有者如此快速地做出更改!令人钦佩 :)
ABBR 是一个有趣的选择。标题属性时间戳是一个极好的补充。
优秀的重写,以及缩写标签的使用,以及用 span 替换嵌套的 div!
另一个快速补充,.postdate 样式需要更新以包含 display:block,因为缩写标签是内联元素。
纯粹的 CSS 美感/技巧
我一直在想如何做到这一点。这是一个很棒的技术,但我唯一的问题是,您如何让它识别月份、日期和年份,然后相应地选择正确的图像?
这有点引发了一个问题——至少在我的狂热思维中——关于能够编程或编写 CSS 脚本。
这可能吗?CSS 可以有多么条件化或参数驱动?
看起来很容易,但是…
不错,谢谢分享。
我一定会试一试。
我实际上会使用 span 而不是 div,这样文本就可以在一行上呈现(当 CSS 关闭时)。还可以将内容呈现为更易读的格式。
@Micheal Short 请查看 HTML 代码。生成日期的系统为每一天、一个月和一年编写唯一的类。例如:类“m-06”代表月份 06:六月。
阅读本文后,我决定使用图像雪碧图和相同的位置背景思想来玩弄时钟以显示正确的细节——它并不完美,但使用了与雪碧图类似的想法。
如果 JS 有点笨拙,请原谅我,这不是我的强项。
http://www.fludotlove.co.uk/examples/clock/index.html
我喜欢 CSS 雪碧图,在像这样明显需要将其放在一张图片中的情况下,比如“calender.png”或“date.png”。
一些新手可能会认为这是一种很难的技术,但其实一点也不难。我实际上只是首先在 Photoshop 的测量工具中查看以尽可能接近坐标,然后使用我的开发者工具栏动态编辑 CSS,并获得正确的位置。这样,如果偏差几个像素,我就不用刷新很多次,而你可能会认为你必须这样做。
我也反对生成器,但有一些用于雪碧图的生成器效果非常好。但我不喜欢它们的主要原因是你可以将它们放置在你想要的位置。
Chris,你能让评论输入保存你的详细信息吗?我以前可以点击它们来获取下拉菜单,或者它们已经全部填写好了。
无需使用雪碧图和图像,仅使用原始文本和 CSS 即可实现完全相同的效果
http://snook.ca/archives/html_and_css/css-text-rotation
Chris 总是很棒,再次干得好,伙计,我等了很久了,谢谢。
Chris,这是一篇好文章,我也想过在我的网站上写一篇关于这个的文章,但你抢先一步了。
在我的网站(www.mariuzzo.com)上,我使用了相同的技术,请查看一下。
这是一个很棒的技巧……我把它 Digg 了。
这真是一个很棒的技术。雪碧图来救援!
哇,关于雪碧图的好文章!通过清晰的示例真正有助于理解此技术。
很高兴看到更多使用雪碧图的不同且实用的内容,因为我认为这项技术将在不久的将来变得非常流行,并且是“每个人都应该做的事情”。
嘿,这个技巧在博客上有效吗?
我太印象深刻了,这是一项很棒的工作(我从未想过要这样做,但我很快就会在我的商业网站上这样做)
感谢你并提供更多提示
这是一个很棒的最终结果,具有出色的性能。很高兴看到您免费分享这种高质量的技术,继续努力 :)
雪碧图的绝佳应用,感谢分享,这太棒了。
感谢分享。雪碧图的非常有效的用法。
很酷。但我尝试了 IE 7。垂直年份 2009 比 FF 中的边距更大。如果我将其与日期一起放在一个框中,它就会超出框外。
非常聪明,完全是那种,“我希望我想到过这种技巧!”
非常棒的帖子。谢谢。
你好,
是否有可能将雪碧图用于背景图片。意思是重复它。我在谷歌上搜索过,但找不到任何可以帮助我将雪碧图用于背景图片的方法。
此致
谢谢
我很久以前就在期待这样的教程了
很酷。但我尝试了 IE 7。垂直年份 2009 比 FF 中的边距更大。如果我将其与日期一起放在一个框中,它就会超出框外。
也许您可以编辑以下内容
.year { bottom: 0; right: 0; width: 17px; height: 48px;
.y-2006 { background-position: -150px 0px;}
到
.year { bottom: 0; right: 0; width: 17px; height: 44px;
.y-2006 { background-position: -150px -5px;}
这就是我们所说的太棒了。最好的日期框之一,无需任何实际图像。
很棒的想法——我喜欢!
对于像我这样的懒人,你可以使用以下内容动态构建 CSS……
除非你想让规则变得很花哨……也许可以稍微调整一下高度,否则你必须将所有日期数字拉到一列中。
再次感谢分享!
看起来不错,但是仅仅为了一个效果而增加 50 多行代码有点过分了…
感谢您抽出时间展示那里的“简写”方法……我的 CSS 知识有点有限,但像这样的东西让我越来越好。