2009-10-04 7 views
48

के रूप में अनियंत्रित सूचियों को कैसे स्टाइल किया जाए, मैं एक्सएचटीएमएल में सीएसएस के साथ एक अनियंत्रित सूची शैली बनाने का एक तरीका ढूंढ रहा हूं, जैसे कि इनलाइन प्रदान की जाती है और सूची आइटम अल्पविराम से अलग होते हैं।सीएसएस में कॉर्ड से अलग टेक्स्ट

उदाहरण के लिए, निम्नलिखित सूची apple, orange, banana के रूप में प्रस्तुत की जानी चाहिए (सूची के अंत में लापता कॉमा नोट करें)।

<ul id="taglist"> 
    <li>apple</li> 
    <li>orange</li> 
    <li>banana</li> 
</ul> 

वर्तमान में, मैं इस सूची स्टाइल है, जो लगभग करता है कि मैं क्या चाहता हूँ, लेकिन (ध्यान दें केले के बाद अनुगामी अल्पविराम) apple, orange, banana, के रूप में सूची प्रस्तुत करने के लिए निम्नलिखित सीएसएस का उपयोग कर रहा हूँ।

#taglist { 
    display: inline; 
    list-style: none; 
} 

#taglist li { 
    display: inline; 
} 

#taglist li:after { 
    content: ", "; 
} 

क्या शुद्ध सीएसएस के साथ इस समस्या को हल करने का कोई तरीका है?

+2

मुझे यह पसंद है कि आप कहां जा रहे हैं। जितना अधिक आप डेटा संरचना को बरकरार रख सकते हैं, जो आपका दस्तावेज़ दर्शाता है, उतना ही आप सीएसएस की शक्ति का लाभ उठाते हैं। हमेशा के रूप में, आपको इस तथ्य से अवगत होना चाहिए कि पुराने ब्राउज़र 'सामग्री' संपत्ति को समझ नहीं पाएंगे। – Jakob

+0

मुझे अतिरिक्त नियमों के बिना समाधान मिला और आईई 8 समर्थन –

उत्तर

54

अनुगामी अल्पविराम निकालने के लिए, :last-child छद्म वर्ग है, इसलिए की तरह उपयोग करें:

#taglist li:last-child:after { 
    content: ""; 
} 
+0

यह निश्चित रूप से सबसे आसान तरीका है, लेकिन 'अंतिम-बच्चा' पहले बच्चे के मुकाबले कम-से-कम लागू होता है, हालांकि यह साइट के उपयोग पर निर्भर करता है और मुआवजा दिया जा सकता है जेएस/jQuery के साथ, आईई आदि के लिए सशर्त टिप्पणियां (संदर्भ: http://www.quirksmode.org/css/contents.html) –

+3

मेरे पास इस पर डेटा नहीं है, लेकिन मैं इस धारणा के तहत था कि ब्राउज़र 'प्रथम-बच्चे' और 'अंतिम-बच्चे' को लागू न करें 'पहले', 'बाद' और 'सामग्री' के साथ शुरू करने के लिए लागू न करें। – Jakob

+0

बहुत बढ़िया। बहुत बहुत धन्यवाद। यह समाधान सफारी 4.0.3 और फ़ायरफ़ॉक्स 3.5.2 में मैक ओएस एक्स पर ठीक काम करता है। – SwedishChef

6

यह ब्राउज़र कार्यान्वयन पर निर्भर करता है, लेकिन यह काम करना चाहिए। हालांकि यह first-child पर निर्भर करता है, जो इसके उपयोग को सीमित कर सकता है, लेकिन अनिवार्य रूप से इसके बाद सूची-आइटम से पहले कॉमा-स्पेस ", " डालता है। मुझे यकीन नहीं है कि कैसे padding/margin एस इसे प्रभावित करेगा, लेकिन यदि आप 'प्रदर्शन: इनलाइन का उपयोग करते हैं; मार्जिन और पैडिंग शून्य पर सेट के साथ, यह ठीक होना चाहिए।

#taglist li:before {content: ", ";} 
#taglist first-child {content: ""; } /* empty string */ 

संपादित: जैकब द्वारा टिप्पणी में की पेशकश की सुधार के लिए प्रतिक्रिया करने।

निम्नलिखित काम करता है (डेमो यहाँ पेज: http://davidrhysthomas.co.uk/so/liststyles.html:

#taglist {width: 50%; 
     margin: 1em auto; 
     padding: 0; 
     } 

li  {display: inline; 
     margin: 0; 
     padding: 0; 
     } 

li:before {content: ", "; 
     } 

#taglist li:first-child:before 
     {content: ""; 
     } 

हालांकि अल्पविराम का अजीब चल-इन-द-मिडल-ऑफ-द कहीं नहीं रहे हैं, और, ईमानदारी से, मैं स्वीकार किए जाते हैं जवाब वैसे भी पसंद करते हैं। लेकिन अभी तो मैं एक बुरी तरह टूटा जवाब चारों ओर झूठ बोल रही है नहीं जा रहा था, मैंने सोचा। मैं इसे ठीक करना चाहिए

धन्यवाद, जेकब।

+1

का उपयोग करें, वास्तव में, यह ' टी काम नहीं 'प्रथम-बच्चा' एक छद्म वर्ग है, इसलिए इसे किसी तत्व ('इस मामले में' li') का पालन करना होगा, और वांछित परिणाम प्राप्त करने के लिए इसे 'पहले से' भी किया जाना चाहिए, जैसे: '#taglist li: पहला बच्चा: {सामग्री: ""}} से पहले। – Jakob

+0

@ जैकोब मैंने '+ 'selector =) –

0

कोई शुद्ध सीएसएस जिस तरह से यह है कि ऐसा करने के लिए (धन्यवाद पार ब्राउज़र संगत है माइक्रोसॉफ्ट के लिए)। मैं सु सर्वर-साइड लॉजिक के साथ बस इसे करें।

आप आखिरी ली पर last कक्षा का उपयोग करके और सभी लिस के लिए पृष्ठभूमि छवियों का उपयोग करने के साथ निकटतम हो सकते हैं लेकिन अंतिम, लेकिन आप ऐसा करने में सक्षम नहीं होंगे: अंतिम-बच्चे और सामग्री: आईईएस में।

+1

समाधान के साथ केवल एक नियम के साथ ही बनाया है, यदि आप' 8' से पहले क्रॉस-ब्राउज़र संगत बन गए हैं, तो आप 'अंतिम-बच्चे' के बजाय '+' चयनकर्ता का उपयोग करेंगे, और पहले 'इसके बजाय' –

1

इस तरह है कि A List Apart पर लोग उनके लेख "Taming Lists" में सलाह देते हैं:

#taglist ul li:after { 
    content: ","; 
} 

#taglist ul li.last:after { 
    content: ""; 
} 

यह आपकी सूची में अंतिम आइटम "पिछले" का एक class विशेषता मान के साथ टैग होने की आवश्यकता है:

<ul id="taglist"> 
    <li>apple</li> 
    <li>orange</li> 
    <li class="last">banana</li> 
</ul> 
19

बदलें एक अपने नियम

#taglist li:after { 
    content: ", "; 
} 
सिर्फ एक और एक

#taglist li + li:before { 
    content: ", "; 
} 

पेशेवरों के साथ

:

  • एक नियम सब काम है।
  • पिछले नियम को रद्द करने के लिए कोई नियम नहीं,
  • IE8 समर्थन
+0

के बाद यह बहुत स्मार्ट है, लेकिन जहां तक ​​मैं कह सकता हूं कि इसे प्रत्येक तर्क वस्तु से पहले दिखाई देने वाली रिक्त स्थान को हटाने के लिए अतिरिक्त तर्क या परिवर्तित HTML की आवश्यकता होती है क्योंकि 'li' नोड्स के बीच व्हाइटस्पेस है। – Jakob

+0

@ जैकोब ओएच हाँ। मुझ पर शर्म की बात है। सूची वस्तुओं के लिए 'फ्लोट: बाएं' रखने की केवल एक आवश्यकता है। –

+6

चालाक, लेकिन मुझे यह पसंद नहीं है। यदि आपकी लाइन लपेटती है तो यह खराब व्यवहार करता है। –

3

यह CSS3 आप छद्म चयनकर्ता last-child और not एक ही बार में उपयोग कर सकते हैं के साथ आसान है:

ul#taglist li:not(:last-child):after { 
    content: ", "; 
} 

चेक यहाँ परिणाम https://jsfiddle.net/vpd4bnq1/

संबंधित मुद्दे