Tumblr temamı etiketleri virgülle ayırmak için nasıl edinebilirim?


11

Tumblr temamdaki her gönderi türünün sonunda şu kodu aldım:

<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;Biraz tam olarak bir sınıf eylemi olmadığını biliyorum . Dört saniyelik geçici çözümümdü ve bu sorunun amacı değil, bu yüzden benimle kal!)

Birden fazla etiketi olan bir gönderide bu, aşağıdakileri sağlar:

işte böyle görünüyor

Sadece sonra virgül eklerseniz {Tag}yapma, <a href="{TagURL}">{Tag},</a>ben alıyorum:

çok fazla virgül

Son etiketin dışında bir virgül vardır ve yalnızca bir etikete sahip gönderiler de bu yöntem altında fazladan virgül gösterir.

Yalnızca doğru sayıda virgül nasıl ekleyebilirim?


Güncelleme :

Jeremy aşağıdaki cevabı istediğimi yaptı. Ancak, fantezi almak için "standartlara uygun" (IE8 kullanan herkesin tumblr'ımı neden okuyacağını bilmesem de), w3d'nin önerisini uygulamaya çalıştım. Şimdi CSS şöyle görünüyor:

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

Sonuç şimdi:

güncellenmiş ekran görüntüsü

( nb: satır sonu ilgisiz - bunu bilerek ekledim. )

Yani. Ne yanlış gitti?


Gerçekten "standartlara uygun" olma durumu değil , sadece IE8'in standart CSS modunda olması durumunda bu CSS'yi desteklemesi yeterlidir. IE9'a yükseltmek için Vista + 'ya ihtiyacınız olduğu için Windows XP'deki tüm kullanıcılar IE8 ile sınırlı olacaktır.
MrWhite

@ w3d Hm. Kayıt edilmiş. Shoulda 'fantezi olmak' için tuttu! :)
hairboat

Üzgünüm, sanki bir şeyleri karıştırıyormuşum gibi hissediyorum, çünkü tarayıcınızda sizin için iyi çalışıyor. Etiketten sonra ve işaretinden önceki ek beyaz boşluk ,, muhtemelen </a>işaretlemenizde / temanızda gerçekleşen beyaz boşluktur . Bunu kaldırmayı deneyebilirsiniz. İlk virgül hala mevcut mu? Sadece şov olup olmadığını görmek content:"";için değiştirmeyi deneyin ? (Her ne kadar cevabım hakkındaki yorumunuzda bunun bir etkisi olmayabileceğini content:"%";%
görsem de

Bunu hangi tarayıcılarda deneyiyorsunuz?
MrWhite

@ w3d,% görünmüyor. OS X Lion'da Chrome 13.0.782.220 kullanıyorum. Şimdilik Jeremy'nin çözümüne geri dönecek, ancak düzenlemeye devam edecek. Onu karıştırmaktan endişe etmeyin - çiğnemek eğlenceli bir problem!
hairboat

Yanıtlar:


4

Başka bir fikrim var.

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

Bu, her etiketten sonra "tagtail" sınıfıyla bir span ekleyecektir .

Sonra şu css'i ekleyin:

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

Bu, bir kuyruk kuyruğu açıklığından sonra gelen her etiket tutturucusunu seçecektir (bu nedenle birinciden başka her biri). Bu şekilde, ilk çocuk veya son çocuk seçicilerini kullanma ihtiyacından kaçınırız .


GÜNCELLEME:

Virgüllerin çapa dışında şekillendirildiğinden emin olmak istiyorsanız, şunları da yapabilirsiniz:

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

ve sonra şöyle stil verin:

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

Ancak, tarayıcılar geçersiz kılma kurallarında farklılık gösterdiğinden bunun ayarlanması gerekebilir.


+1 ... Ekstra işaretleme için bir utanç, ama hoşuma gitti! :)
MrWhite

Kendimi IE desteklemiyor CSS ile düzeni maç almak için tasarım bir sürü ekstra gereksiz işaretleme atma bulundu.
Jeremy

: Eğer virgül çapa dışında tarz olduğundan emin olmak istiyorsanız, ben de yapabileceğini varsayalım {block:Tags}<span class="taghead">, </span><a class="tag" href="{TagURL}">{Tag}</a>{/block:Tags}ardından tarzı neye ve: span.taghead { display:none; } a.tag + span.taghead { display:inline; }. Ancak, tarayıcılar geçersiz kılma kurallarında farklılık gösterdiğinden bunun ayarlanması gerekebilir.
Jeremy

@Jeremy, bu son parça mükemmel çalışıyor . tagtailYöntem virgülden önce boşluk render edilmiş, ama bu küçük tagheadgem şimdi beni çok mutlu yapıyor. Cevabınıza yorumunuzu tekrar eklemeyi düşünüyor musunuz?
hairboat

Bitti ve bitti! Senin için işe sevindim.
Jeremy

4

Bazı CSS hilelerini deneyin (IE 8'de çalışmasını sağlamak için, belgenin üstünde bir <! DOCTYPE> belirtmeniz gerekir).

<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>

Ardından, aşağıdaki CSS'yi ekleyin:

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

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

Sözde seçici eklemek için sözde seçici : after ve az kullanılan content özelliğini kullanır. İkinci kural, dizideki son etiketin content özelliğini geçersiz kılar.


Mükemmel. Büyük başarı. Teşekkürler, Jeremy!
hairboat

1
@Jeremy: IE8, last-childstandartlara uygun modda (yani bir DOCTYPE ile) sözde sınıfı desteklemez . first-child:beforeIE8'i (ve IE7) desteklemek için kullanmanız gerekecektir .
MrWhite

@ w3d: Bu berbat. Aptal IE. Neden ilk çocuğunuzun: Seçicinin Abby için düzgün çalışmadığından emin değilim, ancak açıklık ekleyen ve + seçiciyi kullanan başka bir fikirle başka bir cevap ekledim.
Jeremy

3

@ Jeremy'nin cevabından sonra ... IE8'i (ve IE7'yi) desteklemek için bunun first-childyerine sözde sınıfı kullanmanız gerekecek last-child. IE8, last-childstandartlara uygun modda bile (DOCTYPE ile) desteklemez.

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

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

DÜZENLEME: Bununla birlikte, bu yaklaşımla ilgili hafif bir uyarı </a>, işaretlemenizde / temanızda kapatıldıktan sonra görünen herhangi bir ek beyaz boşluğu muhtemelen kaldırmanız gerekeceğidir .

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

EDIT: OS 5.0 Safari 5.0'da keman çıktı ekran görüntüsü :

OS X'te Safari 5.0'daki keman çıktısının ekran görüntüsü


Ben kullanıyorum a.tag:before { content:", ";}ve a.tag:first-child:before { content:"# tagged: ";}, ama sadece diyor etiketlerin üst üste sonuçlanır , Mareen Fischinger , New York City , Times Square. Hm. Bu yorum kafa karıştırıcı. Soruyu güncelleyeceğim.
hairboat

0

:beforeÖnceki cevaplarda öneri üzerine inşa . Bir etiket listesiyle çalışıyorsanız, bunları bir listeye yerleştirmeniz oldukça olasıdır. Her lietiketi :beforeetiketin içindeki etiketi yerine kullanırsanız li- her etiket etiketin ilk alt öğesi olur, liancak yalnızca bir lietiket ulveya oletiketinin ilk alt öğesi olur ! Ben dt etiketi "Etiketler" koymak istedim bir açıklama listesi kullanıyorum böylece aynı dd etiketi için geçerlidir .

Ancak bir açıklama listesi kullanmanın ek bir karmaşıklığı vardır. İlk ddetiket asla etiketin ilk alt öğesi değildir, dletikettir, bu dtnedenle nth-child(2)hedeflemek için kullanmanız gerekir. Kullanmanın dezavantajı, nth-child(2)IE 8 uyumlu olmadığı için bu sorunun tekrar gelmesi.

İşte benim çözümüm.

{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}

Ayrıca önceki yanıtlardan, content ( content: ", ";) içinde bir alan kullanmanın işe yaradığını önerirler . Çalışıyor mu? Çalışamıyor ama "\ 00a0" olacak.

.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;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.