Dapatkah daftar yang dipesan menghasilkan hasil yang terlihat seperti 1.1, 1.2, 1.3 (bukan hanya 1, 2, 3, ...) dengan CSS? Sejauh ini, menggunakan list-style-type:decimal
hanya menghasilkan 1, 2, 3, bukan 1.1, 1.2., 1.3.
Dapatkah daftar yang dipesan menghasilkan hasil yang terlihat seperti 1.1, 1.2, 1.3 (bukan hanya 1, 2, 3, ...) dengan CSS? Sejauh ini, menggunakan list-style-type:decimal
hanya menghasilkan 1, 2, 3, bukan 1.1, 1.2., 1.3.
Jawaban:
Anda dapat menggunakan penghitung untuk melakukannya:
Nomor style sheet berikut menyarungkan item daftar sebagai "1", "1.1", "1.1.1", dll.
OL { counter-reset: item } LI { display: block } LI:before { content: counters(item, ".") " "; counter-increment: item }
Contoh
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>
Lihat Penghitung bersarang dan ruang lingkup untuk informasi lebih lanjut.
li:before
: content: counters(item, ".")". ";
Tidak ada solusi di halaman ini yang berfungsi dengan benar dan universal untuk semua level dan paragraf panjang (terbungkus). Sangat sulit untuk mencapai lekukan yang konsisten karena ukuran variabel marker (1., 1.2, 1.10, 1.10.5, ...); itu tidak bisa hanya "dipalsukan," bahkan dengan margin / padding yang sudah ditentukan sebelumnya untuk setiap tingkat indentasi yang mungkin.
Saya akhirnya menemukan solusi yang benar - benar berfungsi dan tidak memerlukan JavaScript.
Ini diuji pada Firefox 32, Chromium 37, IE 9 dan Browser Android. Tidak berfungsi pada IE 7 dan sebelumnya.
CSS:
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, ".") " ";
}
Jawaban yang dipilih adalah awal yang baik, tetapi pada dasarnya memaksa list-style-position: inside;
gaya pada item daftar, membuat teks yang dibungkus sulit dibaca. Berikut adalah solusi sederhana yang juga memberikan kontrol atas margin antara angka dan teks, dan meluruskan angka sesuai dengan perilaku default.
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
perilaku default . Ini dapat dengan mudah dihapus dengan menghapus yang terakhir "."
dari content
properti, tetapi ini hanya terlihat agak aneh bagi saya.
Solusi yang diposting di sini tidak bekerja dengan baik untuk saya, jadi saya melakukan campuran dari pertanyaan ini dan pertanyaan berikut: Apakah mungkin untuk membuat daftar pesanan multi-level dalam 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 */
Hasil:
Catatan: tangkapan layar, jika Anda ingin melihat kode sumber atau apa pun dari pos ini: http://estiloasertivo.blogspot.com.es/2014/08/introduccion-running-lean-y-lean.html
Catatan: Gunakan CSS untuk membuat penomoran bersarang di peramban modern. Lihat jawaban yang diterima. Berikut ini hanya untuk kepentingan historis.counters
Jika browser mendukung content
dan 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()
fungsi seperti pada contoh di atas alih-alih counter()
fungsi.
<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>
Saya memiliki beberapa masalah ketika ada dua daftar dan yang kedua ada di dalam DIV. Daftar kedua harus mulai dari 1. bukan 2.1
<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/
EDIT: Saya memecahkan masalah dengan ini http://jsfiddle.net/hy5f6161/
Dalam waktu dekat Anda mungkin dapat menggunakan ::marker
elemen psuedo untuk mencapai hasil yang sama dengan solusi lain hanya dalam satu baris kode.
Ingatlah untuk memeriksa Tabel Kompatibilitas Browser karena ini masih merupakan teknologi eksperimental. Saat ini hanya menulis Firefox dan Firefox untuk Android, mulai dari versi 68, mendukung ini.
Berikut ini cuplikan yang akan ditampilkan dengan benar jika dicoba di peramban yang kompatibel:
::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>
Anda mungkin juga ingin memeriksa artikel hebat ini dengan menghancurkan majalah tentang topik ini.
Saya perlu menambahkan ini ke solusi yang diposting di 12 karena saya menggunakan daftar dengan campuran daftar daftar dan komponen daftar tidak terurut. konten: no-close-quote sepertinya aneh untuk ditambahkan, saya tahu, tapi berhasil ...
ol ul li:before {
content: no-close-quote;
counter-increment: none;
display: list-item;
margin-right: 100%;
position: absolute;
right: 10px;
}
Berikut ini bekerja untuk saya:
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, ".") ") ";
}
Lihatlah: http://jsfiddle.net/rLebz84u/2/
atau yang ini http://jsfiddle.net/rLebz84u/3/ dengan lebih banyak teks yang dibenarkan
ini adalah kode yang tepat jika Anda ingin mengubah ukuran anak pertama dari css lainnya.
<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>
dalam file 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>