Tanda hubung jenis daftar HTML


222

Apakah ada cara untuk membuat daftar-gaya dalam HTML dengan tanda hubung (yaitu - atau - –atau - —) yaitu

<ul>
  <li>abc</li>
</ul>

Keluaran:

- abc

Terpikir oleh saya untuk melakukan ini dengan sesuatu seperti li:before { content: "-" };, meskipun saya tidak tahu kontra dari opsi itu (dan akan sangat berkewajiban untuk umpan balik).

Secara lebih umum, saya tidak keberatan mengetahui bagaimana menggunakan karakter umum untuk item daftar.


79
karena dash biasanya digunakan dalam daftar mengapa tidak disertakan secara default di css?
temirbek

101
yang lebih penting, mengapa ada penomoran armenian dan katakana ... tetapi tidak putus-putus?
Henry C

Jawaban:


108

Anda dapat menggunakan :beforedan content:mengingat bahwa ini tidak didukung di IE 7 atau di bawah. Jika Anda setuju dengan itu maka ini adalah solusi terbaik Anda. Lihat Can I Use atau QuirksMode tabel kompatibilitas CSS untuk detail lengkap.

Solusi yang agak nastier yang bisa digunakan di browser lama adalah dengan menggunakan gambar untuk poin-poin dan hanya membuat gambar terlihat seperti tanda hubung. Lihat halaman W3Clist-style-image untuk contohnya.


27
Masalahnya :beforeadalah ketika item daftar membentang beberapa baris, indentasi pada baris ke-2 dimulai di mana tanda hubung, sehingga merusak efek daftar indentasi. Anda perlu menggunakan indentasi gantung untuk menghindari ini. Lihat ini: alistapart.com/articles/taminglists
chiborg

3
Untuk menempatkan mdash contentdigunakancontent: "\2014\a0"
Ivan Z

Lihat jawaban @tiga, yang lebih umum dan lebih sedikit bertele-tele!
Ben Vertonghen

221

Ada perbaikan mudah (teks-indent) untuk menjaga efek daftar indentasi dengan :beforekelas pseudo.

ul {
  margin: 0;
}
ul.dashed {
  list-style-type: none;
}
ul.dashed > li {
  text-indent: -5px;
}
ul.dashed > li:before {
  content: "-";
  text-indent: -5px;
}
Some text
<ul class="dashed">
  <li>First</li>
  <li>Second</li>
  <li>Third</li>
</ul>
<ul>
  <li>First</li>
  <li>Second</li>
  <li>Third</li>
</ul>
Last text


14
Berhasil, tapi jangan lupa untuk menempatkan list-style-type: none;ke <ul>elemen.
toesslab

5
tanpa indentasi sajaul li:before{ content:"- ";}
Qlimax

4
Saya lebih memilih untuk menambahkan display: block; float: left;ke li:beforeyang dapat lebih mudah menariknya keluar dari aliran konten, jika tidak cukup sulit / kereta untuk mendapatkan baris pertama dan berikutnya untuk berbaris dengan benar. Atau jawaban Keyan Zhang juga melakukan ini dengan penentuan posisi absolut.
Simon Timur

8
cukup bodoh yang list-style-type dashbelum menjadi bagian dari CSS
Pixelomo

Apa yang akan menjadi solusi hanya HTML yang mirip dengan yang Anda usulkan?
pluton

74

Ini versi tanpa posisi relatif atau absolut dan tanpa indentasi teks:

ul.dash {
    list-style: none;
    margin-left: 0;
    padding-left: 1em;
}
ul.dash > li:before {
    display: inline-block;
    content: "-";
    width: 1em;
    margin-left: -1em;
}

Nikmati ;)


1
Bagus! saya sarankan 'ul.dash> li: before'. jika tidak, uls dalam akan kacau.
w.stoettinger

1
Saya lebih memilih untuk menambahkan display: block; float: left;ke li:beforeyang dapat lebih mudah menariknya keluar dari aliran konten, jika tidak cukup sulit / kereta untuk mendapatkan baris pertama dan berikutnya untuk berbaris dengan benar. Atau jawaban Keyan Zhang juga melakukan ini dengan penentuan posisi absolut.
Simon East

Saya menggunakan ini sebagai .activekelas navigasi dengan li:before { visibility: hidden; }danli.active:before { visibility: visible; }
sshow

Imo saran terbaik!
Ben Vertonghen

64

Gunakan ini:

ul
{
    list-style: square inside url('data:image/gif;base64,R0lGODlhBQAKAIABAAAAAP///yH5BAEAAAEALAAAAAAFAAoAAAIIjI+ZwKwPUQEAOw==');
}

3
Sayangnya, itu tidak menghormati warna teks css.
Hereblur

7
Satu-satunya solusi yang mungkin untuk email
Oleg

Ini tidak berfungsi untuk Gmail (Nov 2018) dan Outlook 2016 sekarang.
user2875289

33
ul {
  list-style-type: none;
}

ul > li:before {
  content: "–"; /* en dash */
  position: absolute;
  margin-left: -1.1em; 
}

demo biola


25

Izinkan saya menambahkan versi saya juga, terutama bagi saya untuk menemukan solusi pilihan saya sendiri lagi:

ul {
  list-style-type: none;
  /*use padding to move list item from left to right*/
  padding-left: 1em;
}

ul li:before {
  content: "–";
  position: absolute;
  /*change margin to move dash around*/
  margin-left: -1em;
}
<!-- 
Just use the following CSS to turn your
common disc lists into a list-style-type: 'dash' 
Give credit and enjoy!
-->
Some text
<ul>
  <li>One</li>
  <li>Very</li>
  <li>Simple Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</li>
  <li>Approach!</li>
</ul>

https://codepen.io/burningTyger/pen/dNzgrQ


IMHO ini solusi terbaik sejauh ini. Terima kasih untuk berbagi!
Axel

14

Dalam kasus saya menambahkan kode ini ke CSS

ul {
    list-style-type: '- ';
}

sudah cukup. Sederhana seperti itu.


1
Dengan asumsi ini adalah tambahan yang relatif baru untuk CSS karena saya tidak dapat menemukan jawaban lain yang menyebutkannya, tetapi ini benar-benar harus menjadi jawaban yang diterima hari ini.
ahstro

4
Ini sepertinya hanya didukung di desktop Firefox: developer.mozilla.org/en-US/docs/Web/CSS/list-style-type
dave


9

Salah satu jawaban teratas tidak berfungsi untuk saya, karena, setelah sedikit coba-coba, li: sebelumnya juga memerlukan tampilan aturan css: inline-block.

Jadi ini adalah jawaban yang berfungsi penuh untuk saya:

ul.dashes{
  list-style: none;
  padding-left: 2em;
  li{
    &:before{
      content: "-";
      text-indent: -2em;
      display: inline-block;
    }
  }
}

ini ditulis dalam KURANG / SASS.
Arslan Ameer

7
ul {
margin:0;
list-style-type: none;
}
li:before { content: "- ";}

mungkin `` ul {margin: 0; daftar-gaya-jenis: tidak ada; } ul li: before {content: "-";} `` `kalau tidak, itu juga mempengaruhi daftar ol
Sasha Bond

5

Ini versi biola saya :

The (modernizr) kelas .generatedcontentatas <html>praktis berarti IE8 + dan setiap browser waras lainnya.

<html class="generatedcontent">
  <ul class="ul-dash hanging">
    <li>Lorem ipsum dolor sit amet stack o verflow dot com</li>
    <li>Lorem ipsum dolor sit amet stack o verflow dot com</li>
  </ul>

CSS:

.ul-dash {
  margin: 0;
}

.ul-dash {
  margin-left: 0em;
  padding-left: 1.5em;
}

.ul-dash.hanging > li { /* remove '>' for IE6 support */
  padding-left: 1em;
  text-indent: -1em;
}  

.generatedcontent .ul-dash {
  list-style: none;
}
.generatedcontent .ul-dash > li:before {
  content: "–";
  text-indent: 0;
  display: inline-block;
  width: 0;
  position: relative;
  left: -1.5em;
}

3

Saya tidak tahu apakah ada cara yang lebih baik, tetapi Anda bisa membuat grafik titik peluru khusus yang menggambarkan tanda hubung, dan kemudian beri tahu browser bahwa Anda ingin menggunakannya di daftar Anda dengan properti tipe-tipe-daftar . Contoh di halaman itu menunjukkan cara menggunakan grafik sebagai bullet.

Saya tidak pernah mencoba menggunakan: sebelumnya dengan cara yang Anda miliki, meskipun mungkin berhasil. Kelemahannya adalah tidak akan didukung oleh beberapa browser lama. Reaksi saya adalah bahwa ini masih cukup penting untuk dipertimbangkan. Di masa depan, ini mungkin tidak sepenting itu.

EDIT: Saya telah melakukan sedikit pengujian dengan pendekatan OP. Di IE8, saya tidak bisa mendapatkan teknik untuk bekerja, jadi itu pasti belum cross-browser. Selain itu, di Firefox dan Chrome, pengaturan tipe-tipe-daftar untuk tidak bersama-sama tampaknya diabaikan.


3

Solusi saya adalah menambahkan tag rentang ekstra dengan mdash di dalamnya:

<ul class="mdash-list">
    <li><span class="mdash-icon">&mdash;</span>ABC</li>
    <li><span class="mdash-icon">&mdash;</span>XYZ</li>
</ul>

dan menambahkan ke css:

ul.mdash-list 
{
    list-style:none;
}

ul.mdash-list  li
{
    position:relative;
}

ul.mdash-list li .mdash-icon
{
    position:absolute;
    left:-20px;
}

3

Cara lain:

li:before {
  content: '\2014\00a0\00a0'; /* em-dash followed by two non-breaking spaces*/
}
li {
  list-style: none;
  text-indent: -1.5em;
  padding-left: 1.5em;    
}

3

CSS:

li:before {
  content: '— ';
  margin-left: -20px;
}

li {
  margin-left: 20px;
  list-style: none;
}

HTML:

<ul>
  <li>foo</li>
  <li>bar</li>
</ul>

1
ini tidak berfungsi untuk item yang menjangkau lebih dari satu baris
jenlampton

2

Alih-alih menggunakan lu li, digunakan dl (definition list) and dd. <dd>dapat didefinisikan menggunakan gaya css standar seperti {color:blue;font-size:1em;}dan gunakan sebagai penanda simbol apa pun yang Anda tempatkan setelah tag html. Ini bekerja seperti ul li, tetapi memungkinkan Anda untuk menggunakan simbol apa pun, Anda hanya perlu indentasi untuk mendapatkan efek daftar lekukan yang biasanya Anda dapatkan ul li.

CSS:
dd{text-indent:-10px;}

HTML
<dl>
<dd>- One</dd>
<dd>- Two</dd>
<dd>- Three</dd></dl>

Memberi Anda kode lebih bersih! Dengan begitu, Anda bisa menggunakan semua jenis karakter sebagai penanda! Indent terdiri dari sekitar -10pxdan berfungsi dengan sempurna!


7
Ini sangat buruk karena dua alasan. Pertama, Anda meletakkan karakter bullet Anda langsung di teks, mencampur konten dan gaya. Kedua, Anda menyalahgunakan elemen dl, inilah artikel tentang penggunaan yang benar .
mzgajner

1

Bagi siapa pun yang memiliki masalah ini hari ini, solusinya adalah:

daftar-gaya: "-"


-1

Apa yang berhasil untuk saya adalah

<ul>
    <li type= "none">  &ndash; line 1 </li>
    <li type= "none">  &ndash; line 2 </li>
    <li type= "none">  &ndash; line 3 </li>
</ul>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.