ฉันจะทำให้ธีม 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 นี้เท่านั้นหากอยู่ในโหมดที่ได้มาตรฐาน น่าเสียดายที่ผู้ใช้ทุกคนใน Windows XP จะถูก จำกัด ที่ IE8 เนื่องจากคุณต้องใช้ Vista + เพื่ออัปเกรดเป็น IE9
MrWhite

@ w3d อืม ข้อสังเกต. น่าจะเก็บไว้ที่ 'เริ่มแฟนซี'! :)
hairboat

ขออภัยฉันรู้สึกสับสนเพราะเห็นได้ชัดว่าทำงานได้ดีในเบราว์เซอร์ของคุณ พื้นที่สีขาวเพิ่มเติมหลังแท็กและก่อนหน้า,นั้นอาจเป็นพื้นที่สีขาวที่เกิดขึ้นหลังจาก</a>ในมาร์กอัป / ธีมของคุณ คุณสามารถลองลบสิ่งนี้ เครื่องหมายจุลภาคแรกยังคงอยู่? ลองเปลี่ยนcontent:"";เป็นcontent:"%";เพียงเพื่อดูว่ามีการ%แสดง? (แม้ว่าฉันจะเห็นจากความคิดเห็นของคุณในคำตอบของฉันว่านี้อาจไม่มีผลใด ๆ !)
MrWhite

คุณลองใช้เบราว์เซอร์ตัวใด
MrWhite

@ w3d,% จะไม่ปรากฏขึ้น ฉันใช้ Chrome 13.0.782.220 ใน OS X Lion จะกลับไปที่วิธีแก้ปัญหาของ Jeremy ในตอนนี้ แต่ยังคงปรับเปลี่ยน ไม่ต้องห่วงเรื่องล้อเล่นมันเป็นปัญหาที่สนุกที่จะเคี้ยว
เรือยนต์

คำตอบ:


4

ฉันมีความคิดอื่น

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

สิ่งนี้จะเพิ่มการขยายด้วยคลาส "tagtail" หลังทุกแท็ก

จากนั้นเพิ่ม css นี้:

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

สิ่งนี้จะเลือกสมอแท็กทุกอันที่เกิดขึ้นหลังจากช่วงหางของแท็ก ด้วยวิธีนี้เราหลีกเลี่ยงความต้องการใช้ตัวเลือกลูกคนแรกหรือลูกคนสุดท้าย


UPDATE:

หากคุณต้องการให้แน่ใจว่าเครื่องหมายจุลภาคแยกออกจากสมอฉันคิดว่าคุณสามารถทำได้:

{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

ฉันพบว่าตัวเองทิ้งมาร์กอัพพิเศษที่ไม่จำเป็นในการออกแบบจำนวนมากเพื่อให้ 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; }อย่างไรก็ตามสิ่งนี้อาจต้องมีการปรับแต่งเนื่องจากเบราว์เซอร์แตกต่างกันไปตามกฎการเอาชนะ
Jeremy

@ Jeremy นี้บิตสุดท้ายคือการทำงานอย่างสมบูรณ์แบบ tagtailวิธีการได้รับการแสดงผลช่องว่างก่อนจุลภาค แต่น้อยtagheadนิดจะทำให้ฉันมีความสุขมากในขณะนี้ ลองเพิ่มความคิดเห็นของคุณกลับไปที่คำตอบหรือไม่
เรือยนต์

เสร็จแล้ว! ดีใจที่ได้ผลกับคุณ
Jeremy

4

ลอง CSS trickery (เพื่อให้มันทำงานได้ใน 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และคุณสมบัติเนื้อหาที่ใช้น้อยเพื่อเพิ่มเครื่องหมายจุลภาคหลังจากความจริง กฎข้อที่สองจะแทนที่คุณสมบัติเนื้อหาสำหรับแท็กสุดท้ายในลำดับ


ยอดเยี่ยม ประสบความสำเร็จอย่างมาก. ขอบคุณเจเรมี!
เรือยนต์

1
@ Jeremy: IE8 ไม่รองรับlast-childคลาสหลอกแม้ในโหมดที่เป็นไปตามมาตรฐาน (เช่นด้วย DOCTYPE) คุณจะต้องใช้first-child:beforeเพื่อรองรับ IE8 (และ IE7)
MrWhite

@ w3d: นั่นห่วย Silly IE ฉันไม่แน่ใจว่าทำไมลูกคนแรกของคุณ: ก่อนที่ตัวเลือกจะทำงานไม่ถูกต้องสำหรับแอ๊บบี้ แต่ฉันได้เพิ่มคำตอบอื่นด้วยแนวคิดอื่นที่เพิ่มช่วงกว้างและใช้ตัวเลือก +
Jeremy

3

ต่อจาก @ คำตอบของเจเรมี ... เพื่อสนับสนุน IE8 (และ IE7) คุณจะต้องใช้หลอกชั้นมากกว่าfirst-child last-childIE8 ไม่รองรับ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}

แก้ไข:ภาพหน้าจอของผลลัพธ์ซอใน Safari 5.0 บน OS X:

สกรีนช็อตเอาต์พุตซอใน Safari 5.0 บน OS X


ฉันใช้a.tag:before { content:", ";}และแต่มันจะส่งผลในแถวของแท็กที่เพิ่งกล่าวว่าa.tag:first-child:before { content:"# tagged: ";} , Mareen Fischinger , New York City , Times Squareฮึ่ม ความคิดเห็นนี้ทำให้เกิดความสับสน ฉันจะอัปเดตคำถาม
hairboat

0

การสร้าง:beforeข้อเสนอแนะในคำตอบก่อนหน้า หากคุณกำลังทำงานกับรายการแท็กเป็นไปได้มากที่คุณจะวางแท็กเหล่านั้นในรายการ หากคุณใช้แต่ละliแท็กที่มี:beforeมากกว่าแท็กภายในที่liแท็ก - แท็กแต่ละคนจะเป็นคนแรกที่ลูกของliแท็ก แต่เพียงหนึ่งliแท็กจะเป็นครั้งแรกของเด็กของulหรือolแท็ก! ฉันกำลังใช้รายการคำอธิบายเนื่องจากฉันต้องการวาง "แท็ก" ในdแท็ก t ดังนั้นจึงใช้กับdแท็ก d

อย่างไรก็ตามการใช้รายการคำอธิบายมีความซับซ้อนเพิ่มขึ้น 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: ", ";) ใช้ได้ มันใช้งานได้หรือไม่ ฉันไม่สามารถทำงานได้ แต่จะเป็น "\ 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;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.