自从埃里克罗迈耶突出的CSS是如何能够在他的CSS / EDGE的收集 ,我们一直在寻找各种方法来代替效果,唯一可能曾经使用JavaScript与CSS的基础现金等价物。替换可执行脚本,样式表往往与提高业绩和成果在一个更容易页。最早的例子,这是埃里克纯粹的CSS弹出 ,影响他简述文字出现和消失无JavaScript来驱动它 。
作为实现的CSS进步和提高,越来越多的是有可能纯粹和使用样式表,而不需要额外的脚本无论是网站的前端或后端,减少了可执行代码。一种可能性是领悟我最近的是,仅使用位CSS2.1的生成内容属性,我们可以汇总和揭露补充有关整个部分网页。
同其他许多博客, SitePoint的博客帖子有一个小的数据段结束时,每个帖子。该段让读者补充资料后,如它的发布日期,其标签,任何类别后提交下。就让我们来看看如何,我们可以很容易地添加新的资料,这只能使用的CSS 。
使用的CSS计数器
一个特点是仍然CSS2.1不足了很长一段时间是的CSS计数器。 他们表面上一种通用的机制,编号群体中出现的内容的文件树。 可悲的是,支持这一功能的CSS一直缺少某些浏览器中很长一段时间。
什么是真正有趣的CSS柜台是,由于该法的展示柜台脱钩计数机制本身,我们可以利用它们显示的内容总罪状除了仅仅编号要素一系列。
作为一个简短的复习,以下是CSS2.1规范说,我们可以代替数字标记的一个典型的命令列表的CSS反实现或多或少相当于视觉效果:
ol { counter-reset: item; } ol li { display: block; } ol li:before { counter-increment: item; content: counter(item)". "; }
此代码初始化一个反所谓item每ol内容。 然后,打开所有的li要素纳入block级的CSS盒子而不是它们的默认list-item盒所以他们将不会出现一个标记(即,一些或子弹从list-style-type属性) 。 最后,为每个清单项目,它增加了这个item计数器,然后使得其目前的价值。
现在,这里是我们可以使用相同的机制来显示总数清单项目结束时的名单,只有轻微的和完全有效的修改:
ol { counter-reset: item; } ol li { display: block; counter-increment: item; } ol:after { display: block; content: "Number of items in this list: " counter(item) "."; }
唯一的“帽子戏法”是不要求counter()函数一次以上。 具体来说,您呼叫只:after您完成递增计数器在每个元素你计数。 这种方式使用,可以看到的CSS柜台就像是有限的那种整数变量。
由于这两个广义能力,柜台的CSS和CSS生成的内容,我们就可以开始获得真正的创意空间。
入门创意:计数的事情在博客帖子
一个有趣的使用这种技术,以延长或,或许在某些情况下,完全取代方案代码,如JavaScript或服务器端脚本,指望的事情。例如,以下是我可能会利用上述技术的数量不同的章节中SitePoint博客帖子:
/* Initialize counter to 1 (not 0) since titles are outside .entrytext but may include intro paras. */ .post { counter-reset: num-post-sections 1; } .post .entrytext h2 { counter-increment: num-post-sections; } #thisentry:after { content: "This entry has " counter(num-post-sections) " sections."; }
上面的代码只是增加了反所谓num-post-sections每一次h2元素中遇到的entrytext的post ,然后显示结果结束时,就像以前的列表项目计数的例子。
当然,你不局限于仅仅指望一件事。 以下是我可能的数量部分和一些代码摘录在SitePoint博客中使用相同的模式:
.post { counter-reset: num-post-sections 1 /* titles outside .entrytext but may include intro paras */ num-code-listings ; } .post .entrytext h2 { counter-increment: num-post-sections; } /* match both with (pre>code) and without (table.dp-c) JavaScript code highlighting */ .post .entrytext pre > code, table.dp-c { counter-increment: num-code-listings; } #thisentry:after { content: "This entry has " counter(num-post-sections) " sections and " counter(num-code-listings) " code listings." ; }
画面显示这SitePoint博客帖子的CSS摘录与应用。
作为一个模式,这点变得更加有用,如果我们概括上述SitePoint具体的CSS规则,使他们的工作对任何博客文章的结构,其使用hAtom microformat ,因此您可以使用它在许多网站或插入自己的浏览器作为用户的样式表 。 唯一的变化是必要的CSS选择器 ,但你可以很喜欢。为了举例来说,我已经扔在一堆额外的柜台,说明更多的可能性,你可以指望。
/* Initialize counters. */ .hentry { counter-reset: num-post-sections num-code-listings num-code-listings-css /* code listings that are specifically CSS */ num-links num-links-internal /* links to other blog posts on this site */ num-links-rel-tag /* rel-tag microformat */ ; } /* Increment counters. */ .hentry h2, .hentry h3, .hentry h4, .hentry h5, /* consider any headline an additional "section" */ .hentry h6 { counter-increment: num-post-sections; } .hentry pre > code { counter-increment: num-code-listings; } .hentry pre > code.css { counter-increment: num-code-listings /* increment count of total code listings */ num-code-listings-css /* AND the subset that are just CSS samples */ ; } .hentry :link { counter-increment: num-links; } .hentry :link[href^="/blogs/"] { counter-increment: num-links num-links-internal ; } .hentry :link[rel="tag"] { counter-increment: num-links num-links-rel-tag; } /* Display results. */ .hentry:after { display: block; content: "This entry has a total of " counter(num-post-sections) " sections, " counter(num-code-listings) " code listings " "(" counter(num-code-listings-css) " are CSS) " " and " counter(num-links) " links, " "of which " counter(num-links-internal) " point to other blog posts on this site " " and " counter(num-links-rel-tag) " are tags." ; }
当然,你只能指望你可以有目标的CSS选择器,所以产生了字数统计是不可能的。 此外,您也可以只显示总数的内容来:after所有的标记要计数,而不是:before 。 显然,这执行细节可以限制了设计的灵活性。
最后,值得再次强调指出的CSS柜台不落实在IE 6或7 。此外,由于我们处理完全利用CSS生成的内容,显示的文字可能无法选择或由用户可通过进一步的DOM操纵。 当然,在许多情况下您可能需要把这些东西直接到您的标记为“真实”的内容。
有一点也许更重要的这些限制,不过,这是一个功能强大的演示如何您可以使用标记为一个API ,让推进能力的CSS事情你可以一次只与客户端或服务器端脚本。