क्या एक आदेशित सूची सीएसएस के साथ 1.1, 1.2, 1.3 (बजाय केवल 1, 2, 3, ...) की तरह दिखने वाले परिणाम उत्पन्न कर सकती है? अब तक, उपयोग list-style-type:decimalने केवल 1, 2, 3, 1.1, 1.2, 1.3, 1.3 का उत्पादन किया है।
क्या एक आदेशित सूची सीएसएस के साथ 1.1, 1.2, 1.3 (बजाय केवल 1, 2, 3, ...) की तरह दिखने वाले परिणाम उत्पन्न कर सकती है? अब तक, उपयोग list-style-type:decimalने केवल 1, 2, 3, 1.1, 1.2, 1.3, 1.3 का उत्पादन किया है।
जवाबों:
आप ऐसा करने के लिए काउंटरों का उपयोग कर सकते हैं :
निम्नलिखित शैली पत्रक संख्या नेस्ट आइटम को "1", "1.1", "1.1.1", आदि के रूप में सूचीबद्ध किया है।
OL { counter-reset: item } LI { display: block } LI:before { content: counters(item, ".") " "; counter-increment: item }
उदाहरण
ol { counter-reset: item }
li{ display: block }
li:before { content: counters(item, ".") " "; counter-increment: item }
<ol>
<li>li element
<ol>
<li>sub li element</li>
<li>sub li element</li>
<li>sub li element</li>
</ol>
</li>
<li>li element</li>
<li>li element
<ol>
<li>sub li element</li>
<li>sub li element</li>
<li>sub li element</li>
</ol>
</li>
</ol>
देखें नेस्टेड काउंटर और गुंजाइश अधिक जानकारी के लिए।
li:before: content: counters(item, ".")". ";
इस पृष्ठ पर कोई भी समाधान सभी स्तरों और लंबे (लिपटे) पैराग्राफ के लिए सही और सार्वभौमिक रूप से काम नहीं करता है। मार्कर (1., 1.2, 1.10, 1.10.5,…) के चर आकार के कारण एक निरंतर इंडेंटेशन प्राप्त करना वास्तव में मुश्किल है; यह सिर्फ "फेक" नहीं हो सकता है, यहां तक कि प्रत्येक संभावित इंडेंटेशन स्तर के लिए पूर्व निर्धारित मार्जिन / पैडिंग के साथ भी नहीं।

मैंने आखिरकार एक समाधान निकाला जो वास्तव में काम करता है और किसी भी जावास्क्रिप्ट की आवश्यकता नहीं है।
यह फ़ायरफ़ॉक्स 32, क्रोमियम 37, IE 9 और एंड्रॉइड ब्राउज़र पर परीक्षण किया गया है। IE 7 और पिछले पर काम नहीं करता है।
सीएसएस:
ol {
list-style-type: none;
counter-reset: item;
margin: 0;
padding: 0;
}
ol > li {
display: table;
counter-increment: item;
margin-bottom: 0.6em;
}
ol > li:before {
content: counters(item, ".") ". ";
display: table-cell;
padding-right: 0.6em;
}
li ol > li {
margin: 0;
}
li ol > li:before {
content: counters(item, ".") " ";
}
चुना हुआ उत्तर एक शानदार शुरुआत है, लेकिन यह अनिवार्य रूप list-style-position: inside;से सूची की वस्तुओं पर स्टाइल करने के लिए मजबूर करता है , जिससे लिपटे पाठ को पढ़ना मुश्किल हो जाता है। यहाँ एक सरल समाधान है जो संख्या और पाठ के बीच के मार्जिन पर नियंत्रण देता है, और डिफ़ॉल्ट व्यवहार के अनुसार संख्या को सही-संरेखित करता है।
ol {
counter-reset: item;
}
ol li {
display: block;
position: relative;
}
ol li:before {
content: counters(item, ".")".";
counter-increment: item;
position: absolute;
margin-right: 100%;
right: 10px; /* space between number and text */
}
JSFiddle: http://jsfiddle.net/3J4Bu/
olव्यवहार के अनुसार प्रत्येक संख्या के अंत में एक अवधि जोड़ता है । संपत्ति "."से अंतिम को हटाकर इसे आसानी से हटाया जा सकता है content, लेकिन यह मुझे थोड़ा अजीब लगता है।
यहां पोस्ट किए गए समाधान मेरे लिए अच्छी तरह से काम नहीं करते थे, इसलिए मैंने इस प्रश्न के लोगों और निम्नलिखित प्रश्न का मिश्रण किया: क्या HTML में बहु-स्तरीय ऑर्डर की गई सूची बनाना संभव है?
/* Numbered lists like 1, 1.1, 2.2.1... */
ol li {display:block;} /* hide original list counter */
ol > li:first-child {counter-reset: item;} /* reset counter */
ol > li {counter-increment: item; position: relative;} /* increment counter */
ol > li:before {content:counters(item, ".") ". "; position: absolute; margin-right: 100%; right: 10px;} /* print counter */
परिणाम:

नोट: स्क्रीनशॉट, यदि आप स्रोत कोड या जो कुछ भी इस पोस्ट से देखना चाहते हैं: http://estiloasertivo.blogspot.com.es/2014/08/introduccion-running-lean-y-lean.html
नोट: आधुनिक ब्राउज़र में नेस्टेड नंबरिंग बनाने के लिए CSS का उपयोग करें । स्वीकृत उत्तर देखें। निम्नलिखित केवल ऐतिहासिक हित के लिए है।counters
यदि ब्राउज़र समर्थन करता है contentऔर counter,
.foo {
counter-reset: foo;
}
.foo li {
list-style-type: none;
}
.foo li::before {
counter-increment: foo;
content: "1." counter(foo) " ";
}
<ol class="foo">
<li>uno</li>
<li>dos</li>
<li>tres</li>
<li>cuatro</li>
</ol>
.foo > ol > li।
counters()फ़ंक्शन के बजाय ऊपर दिए गए उदाहरणों में फ़ंक्शन का उपयोग करें counter()।
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="author" content="Sandro Alvares - KingRider">
</head>
<body>
<style type="text/css">
li.title {
font-size: 20px;
font-weight: lighter;
padding: 15px;
counter-increment: ordem;
}
.foo {
counter-reset: foo;
padding-left: 15px;
}
.foo li {
list-style-type: none;
}
.foo li:before {
counter-increment: foo;
content: counter(ordem) "." counter(foo) " ";
}
</style>
<ol>
<li class="title">TITLE ONE</li>
<ol class="foo">
<li>text 1 one</li>
<li>text 1 two</li>
<li>text 1 three</li>
<li>text 1 four</li>
</ol>
<li class="title">TITLE TWO</li>
<ol class="foo">
<li>text 2 one</li>
<li>text 2 two</li>
<li>text 2 three</li>
<li>text 2 four</li>
</ol>
<li class="title">TITLE THREE</li>
<ol class="foo">
<li>text 3 one</li>
<li>text 3 two</li>
<li>text 3 three</li>
<li>text 3 four</li>
</ol>
</ol>
</body>
</html>
जब मुझे दो सूचियाँ मिलती हैं तो मुझे कुछ समस्या होती है और दूसरा एक DIV के अंदर होता है। दूसरी सूची १.१ पर नहीं २.१ पर शुरू होनी चाहिए
<ol>
<li>lorem</li>
<li>lorem ipsum</li>
</ol>
<div>
<ol>
<li>lorem (should be 1.)</li>
<li>lorem ipsum ( should be 2.)</li>
</ol>
</div>
http://jsfiddle.net/3J4Bu/364/
संपादित करें: मैंने इस समस्या को हल किया है http://jsfiddle.net/hy5f6161/
निकट भविष्य में आप प्यूसीडो-तत्व का उपयोग करने में सक्षम हो सकते हैं::marker कोड के सिर्फ एक लाइन में अन्य समाधानों के समान परिणाम प्राप्त करने के लिए ।
ब्राउज़र संगतता तालिका की जांच करना याद रखें क्योंकि यह अभी भी एक प्रायोगिक तकनीक है। एंड्रॉइड के लिए केवल फ़ायरफ़ॉक्स और फ़ायरफ़ॉक्स लिखने के समय, संस्करण 68 से शुरू, यह समर्थन करता है।
यहाँ एक स्निपेट है जो संगत ब्राउज़र में कोशिश करने पर सही ढंग से प्रस्तुत होगा:
::marker { content: counters(list-item,'.') ':' }
li { padding-left: 0.5em }
<ol>
<li>li element
<ol>
<li>sub li element</li>
<li>sub li element</li>
<li>sub li element</li>
</ol>
</li>
<li>li element</li>
<li>li element
<ol>
<li>sub li element</li>
<li>sub li element</li>
<li>sub li element</li>
</ol>
</li>
</ol>
तुम भी विषय पर smashingmagazine द्वारा इस महान लेख की जाँच करना चाहते हो सकता है ।
मुझे इसे 12 में पोस्ट किए गए समाधान में जोड़ने की आवश्यकता थी क्योंकि मैं एक सूची का उपयोग कर रहा था जिसमें आदेशित सूची और अनऑर्डेड सूचियों के मिश्रण शामिल थे। कंटेंट: नो-क्लोज़-क्वैड मुझे पता है कि जोड़ने के लिए एक अजीब बात की तरह लगता है, लेकिन यह काम करता है ...
ol ul li:before {
content: no-close-quote;
counter-increment: none;
display: list-item;
margin-right: 100%;
position: absolute;
right: 10px;
}
निम्नलिखित ने मेरे लिए काम किया:
ol {
list-style-type: none;
counter-reset: item;
margin: 0;
padding: 0;
}
ol > li {
display: table;
counter-increment: item;
margin-bottom: 0.6em;
}
ol > li:before {
content: counters(item, ".") ") ";
display: table-cell;
padding-right: 0.6em;
}
li ol > li {
margin: 0;
}
li ol > li:before {
content: counters(item, ".") ") ";
}
यहां देखें: http://jsfiddle.net/rLebz84u/2/
या यह एक http://jsfiddle.net/rLebz84u/3/ अधिक और उचित पाठ के साथ
यह उचित कोड है यदि आप पहले बच्चे को अन्य सीएसएस के बच्चे का आकार बदलना चाहते हैं।
<style>
li.title {
font-size: 20px;
counter-increment: ordem;
color:#0080B0;
}
.my_ol_class {
counter-reset: my_ol_class;
padding-left: 30px !important;
}
.my_ol_class li {
display: block;
position: relative;
}
.my_ol_class li:before {
counter-increment: my_ol_class;
content: counter(ordem) "." counter(my_ol_class) " ";
position: absolute;
margin-right: 100%;
right: 10px; /* space between number and text */
}
li.title ol li{
font-size: 15px;
color:#5E5E5E;
}
</style>
html फ़ाइल में।
<ol>
<li class="title"> <p class="page-header list_title">Acceptance of Terms. </p>
<ol class="my_ol_class">
<li>
<p>
my text 1.
</p>
</li>
<li>
<p>
my text 2.
</p>
</li>
</ol>
</li>
</ol>