如何获得Tumblr主题,以逗号分隔标签?


11

在Tumblr主题的每个帖子类型的结尾,我都有以下代码:

<p class="permalink">
   <a href="{Permalink}">{NoteCountWithLabel}</a>
   {block:HasTags} &nbsp;&nbsp; # filed under:
      {block:Tags}  
         <a href="{TagURL}">{Tag}</a>
      {/block:Tags}
   {/block:HasTags}
</p>

(我知道这&nbsp;不完全是一种集体行为。这是我的四秒钟变通办法,这不是此问题的目的,请多多包涵!)

在带有多个标签的帖子上,结果如下:

这是它的样子

如果我只是在后面加上一个逗号{Tag},则会<a href="{TagURL}">{Tag},</a>得到:

太多逗号

最后一个标签有一个多余的逗号,只有一个标签的帖子也会在此方法下显示额外的逗号。

如何添加正确数量的逗号?


更新

杰里米(Jeremy)在下面的回答符合我的要求。但是,为了使自己变得“符合标准”(尽管我不知道为什么使用IE8的人会读我的tumblr),我尝试实现w3d的建议。所以现在CSS看起来像:

a.tag:before {
  content:", ";
}
a.tag:first-child:before {
  content:"";
}

现在的结果是:

更新截图

nb:换行符无关-我是故意添加的。

所以。什么地方出了错?


这不是真正的情况 “符合标准”,它只是IE8将只支持这个CSS如果是在标准兼容模式。不幸的是,由于您需要Vista +才能升级到IE9,因此Windows XP上的所有用户都只能使用IE8。
MrWhite 2011年

@ w3d嗯。注意。Shoulda保持它“花哨”!:)
hairboat

抱歉,我感觉好像搞砸了,因为它显然可以在您的浏览器中正常运行。标记之后和之前的额外空白,可能是</a>您的标记/主题中的之后的空白。您可以尝试删除它。第一个逗号仍然存在吗?尝试更改content:"";content:"%";仅查看是否%显示?(尽管我从您对我的回答的评论中看到,这可能没有任何效果?!)
怀特先生,2011年

您在哪个浏览器中尝试此操作?
怀特先生(MrWhite)2011年

@ w3d,%不显示。我在OS X Lion上运行Chrome 13.0.782.220。现在将回到Jeremy的解决方案,但会继续进行调整。不用担心弄乱它-咀嚼是一个有趣的问题!

Answers:


4

我有另一个主意。

{block:Tags}<a class="tag" href="{TagURL}">{Tag}</a><span class="tagtail"></span>{/block:Tags}

这将在每个标签之后添加一个带有“ tagtail”类的跨度

然后,添加以下CSS:

span.tagtail + a.tag:before {
   content:", ";
}

这将选择在尾标跨度之后的每个标记锚(因此,除了第一个以外的每个)。这样,我们避免了使用第一个最后一个选择器。


更新:

如果您想确保逗号的样式与锚点不同,那么我想您也可以这样做:

{block:Tags}<span class="taghead">, </span><a class="tag" href="{TagURL}">{Tag}</a>{/block:Tags}

然后将其样式设置为:

span.taghead { display:none; }
a.tag + span.taghead { display:inline; }

但是,这可能需要进行调整,因为浏览器在覆盖规则上有所不同。


+1 ...对额外的标记感到遗憾,但我喜欢!:)
MrWhite 2011年

我发现自己在很多设计中都添加了不必要的标记,以使IE将布局与不支持的CSS进行匹配。
杰里米(Jeremy)

如果您想确保逗号的样式与锚点不同,我想您也可以这样做:{block:Tags}<span class="taghead">, </span><a class="tag" href="{TagURL}">{Tag}</a>{/block:Tags}然后将样式设置为:span.taghead { display:none; } a.tag + span.taghead { display:inline; }。但是,这可能需要进行调整,因为浏览器在覆盖规则上有所不同。
杰里米

@杰里米,最后一点工作得很好。该tagtail方法是在逗号前绘制一个空格,但是这一点taghead让我现在非常高兴。考虑将您的评论重新添加到答案中?
hairboat

做完了!很高兴为您工作。
杰里米

4

尝试一些CSS技巧(要使其在IE 8中正常工作,您需要在文档顶部指定<!DOCTYPE>)。

<p class="permalink">
       <a href="{Permalink}">{NoteCountWithLabel}</a>
       {block:HasTags} &nbsp;&nbsp; # filed under:
          {block:Tags}  
             <a class="tag" href="{TagURL}">{Tag}</a>
          {/block:Tags}
       {/block:HasTags}
</p>

然后,添加以下CSS:

a.tag:after {
   content:",";
}

a.tag:last-child:after {
   content:"";
}

它使用伪选择器:after和很少使用的content属性在事实之后添加逗号。第二条规则将覆盖序列中最后一个标签的content属性。


优秀的。巨大的成功。谢谢,杰里米!

1
@杰里米:IE8 last-child即使在符合标准的模式(即DOCTYPE)下也不支持伪类。您将需要使用first-child:before来支持IE8(和IE7)。
MrWhite 2011年

@ w3d:糟透了。傻IE。我不确定为什么您的firstchild:before选择器无法在Abby上正常使用,但是我添加了另一个答案,并提出了一个跨度并使用+选择器的想法。
杰里米

3

接下来是@Jeremy的答案...要支持IE8(和IE7),您将需要使用first-child伪类,而不是last-child。IE8不支持last-child,即使在符合标准的模式(即DOCTYPE)下也是如此。

a.tag:before {
   content:", ";    /* comma + space */
}

a.tag:first-child:before {
   content:"";
}

编辑:但是,这种方法有一点警告,您可能必须删除</a>标记/主题关闭后出现的所有其他空白。

      {block:Tags}<a class="tag" href="{TagURL}">{Tag}</a>{/block:Tags}

编辑: OS X上Safari 5.0中的提琴输出的屏幕截图:

OS X上Safari 5.0中小提琴输出的屏幕截图


我正在使用a.tag:before { content:", ";}a.tag:first-child:before { content:"# tagged: ";},但是它会导致一行仅显示的标签, Mareen Fischinger , New York City , Times Square。嗯 此评论令人困惑。我将更新问题。

0

:before以先前答案中的建议为基础。如果您使用的是标签列表,则很有可能会将它们放在列表中。如果您确实使用每个li标签:before而不是标签内的li标签-每个标签将是该标签的第一个孩子,li但是只有一个li标签将是ulor ol标签的第一个孩子!我使用的是描述列表,因为我想在dt标签中放入“标签”,因此对dd标签也是如此。

然而,使用描述列表具有增加的复杂性。第一个dd标签永远不是标签的第一个子dl标签,它是dt标签,因此您需要使用nth-child(2)它来定位它。使用的不利之处nth-child(2)在于,它再次不符合IE 8,因此该问题再次出现。

这是我的解决方案。

{block:HasTags}
<div class="t">
<dl>
<dt>Tags</dt>
{block:Tags}
<dd><a href="{TagURL}" class="tag">{Tag}</a></dd>
{/block:Tags}
</dl>
</div>
{/block:HasTags}

此外,根据先前的答案,他们建议在content(content: ", ";)中使用空格是可行的。它行得通吗?我无法使其正常工作,但可以使用“ \ 00a0”。

.t dl {
    margin: 0px;
    list-style-type: none;
}
.t dt {
    margin: 0px 5px 0px 0px;
    float: left;
}
.t dd {
    margin: 0px;
    float: left;
}

.t dd:before {
    padding: 0px 5px 0px 0px;
    content: ",\00a0";
    float: left;
}

.t dd:nth-child(2):before {
    padding: 0px 0px 0px 0px;
    content: "";
    float: left;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.