Ký tự Unicode dưới dạng dấu đầu dòng cho mục danh sách trong CSS


114

Ví dụ, tôi cần sử dụng biểu tượng dấu sao (★) làm gạch đầu dòng cho một mục danh sách.

Tôi đã đọc mô-đun CSS3: Danh sách , mô tả, cách sử dụng văn bản tùy chỉnh làm dấu đầu dòng, nhưng nó không hoạt động với tôi. Tôi nghĩ, các trình duyệt chỉ đơn giản là không hỗ trợ ::markerphần tử giả.

Làm thế nào tôi có thể làm điều đó, mà không cần sử dụng hình ảnh?


bạn có thể đặt mã bạn đang sử dụng không? Và bạn đang thử nghiệm điều này trên trình duyệt nào?
Jonny Haynes

1
stackoverflow.com/questions/3068199/… có một số dấu đầu dòng Unicode. Biểu tượng ngôi sao bạn có ở trên cũng không hiển thị 26AB (vòng tròn màu đen trung bình) trên máy Windows của tôi, mặc dù chúng ổn trên Ubuntu.
Pete Kirkham

Câu trả lời này (cho một câu hỏi tương tự) đã giải quyết vấn đề đó cho tôi: stackoverflow.com/a/12216973/907575
Piotr Migdal,

Câu trả lời:


77

BIÊN TẬP

Tôi có lẽ sẽ không khuyên bạn nên sử dụng hình ảnh nữa. Tôi muốn sử dụng một ký tự Unicode, như sau:

li:before {
  content: "\2605";
}

CÂU TRẢ LỜI CŨ

Tôi có lẽ sẽ chọn một nền hình ảnh, chúng linh hoạt và thân thiện với nhiều trình duyệt hiệu quả hơn nhiều .

Đây là một ví dụ:

<style type="text/css">
  ul {list-style:none;} /* you should use a css reset too... ;) */
  ul li {background:url(images/icon_star.gif) no-repeat 0 5px;}
</style>

<ul>
  <li>List Item 1</li>
  <li>List Item 2</li>
  <li>List Item 3</li>
</ul>

47
Làm thế nào là "hiệu quả hơn nhiều"? Bạn đang gửi một yêu cầu HTTP bổ sung để tìm nạp hình ảnh và tổng số tệp tăng lên khi bạn tải hình ảnh cho một thứ gì đó có thể được thực hiện thông qua việc sử dụng một ký tự Unicode duy nhất.
Mathias Bynens

2
bạn nói đúng, có lẽ "hiệu quả" không phải là từ tôi nên sử dụng nếu bạn đang tìm kiếm hiệu suất, nhưng sử dụng nền hình ảnh chắc chắn linh hoạt hơn nhiều so với sử dụng văn bản.
agbb

3
Thay đổi kích thước hình ảnh không phải là rất tốt, nhưng một ký tự là hoàn hảo trên mọi kích thước, vì vậy tôi sẽ nói rằng một ký tự linh hoạt hơn: PI nghĩ rằng tương thích với backword hoặc với phạm vi hỗ trợ trình duyệt rộng nhất sẽ là từ ...
JustGoscha

Điều này không hoạt động tốt khi <li>văn bản kết thúc: Dấu đầu dòng không được giữ nguyên và trông giống như phần đầu của một đoạn văn bản. Câu trả lời này khắc phục sự cố này: stackoverflow.com/a/14301918/1450294
Michael Scheper

105

Sử dụng văn bản dưới dạng dấu đầu dòng

Sử dụng li:beforevới Thực thể HTML Hex đã thoát (hoặc bất kỳ văn bản thuần túy nào).


Thí dụ

Ví dụ của tôi sẽ tạo ra các danh sách có dấu kiểm là dấu đầu dòng.

CSS :

ul {
    list-style: none;
    padding: 0px;
}

ul li:before
{
    content: '\2713';
    margin: 0 1em;    /* any design */
}

tính tương thích của trình duyệt web

Tôi chưa thử nghiệm bản thân mình, nhưng nó sẽ được hỗ trợ từ IE8. Ít nhất đó là những gì quirksmode & css-trick nói.

Bạn có thể sử dụng nhận xét có điều kiện để áp dụng các giải pháp cũ hơn / chậm hơn như hình ảnh hoặc tập lệnh. Tốt hơn, sử dụng cả hai với <noscript>cho hình ảnh.

HTML :

<!--[if lt IE 8]>
    *SCRIPT SOLUTION*
    <noscript>
        *IMAGE SOLUTION*
    </noscript>
<![endif]-->

Giới thiệu về hình nền

Hình nền thực sự dễ xử lý, nhưng ...

  1. Hỗ trợ trình duyệt cho background-size IE9.
  2. Màu văn bản HTML và đặc biệt ( điên rồ phông chữ ) có thể làm được nhiều việc, với ít yêu cầu HTTP hơn.
  3. Một giải pháp tập lệnh chỉ có thể đưa Thực thể HTML vào và để cho cùng một CSS thực hiện công việc.
  4. Việc đặt lại mã CSS tốt có thể giúp list-style(lựa chọn hợp lý hơn) dễ dàng hơn.

Thưởng thức.


1
công cụ chuyển đổi hữu ích cho thoát ký tự đặc biệt rishida.net/tools/conversion
iiz

23
Điều này không hoạt động đúng nếu nội dung của liphần tử nằm trên nhiều dòng; những dòng được bọc đó sẽ không được thụt vào một cách chính xác.
Richard Ev

5
float: left; margin-left: -12px;về: trước khi chăm sóc điều đó, @RichardEverett
Dudo

1
Tôi làm việc cho một dòng nhưng không hoạt động nếu nhiều dòng đang quấn.
VDarricau

1
Chỉ hoạt động cho các mục danh sách một dòng. Nhiều dòng sẽ giảm xuống bên dưới dấu đầu dòng thay vì thụt lề.
Clarus Dignus

35

Bạn có thể xây dựng nó:

#modal-select-your-position li {
/* handle multiline */
    overflow: visible;
    padding-left: 17px;
    position: relative;
}

#modal-select-your-position li:before {
/* your own marker in content */
   content: "—";
   left: 0;
   position: absolute;
}

4
Đây là một kỹ thuật tuyệt vời bởi vì nếu bạn không thực hiện định vị tuyệt đối của nhân vật, thì bạn sẽ có "Bullet" nằm thẳng hàng với phần còn lại của mục danh sách. Đó là hành vi không giống như viên đạn. Vì vậy, với cách sửa lỗi này, bạn sẽ tắt "dấu đầu dòng" ở bên trái của mục danh sách giống như bạn làm với dấu đầu dòng thông thường.
General Redneck

Cảm ơn vì điều này! Chính xác những gì tôi cần để đạn của tôi hoạt động trở lại.
tubaguy50035

1
Điều này tạo nên một cây điều hướng tuyệt vời khi sử dụng '\21B3'! Cảm ơn! Nó hoạt động tốt hơn các câu trả lời khác ở đây. Cũng đã thay đổi padding-leftthiết kế của tôi thành 1em, điều này thích ứng tốt khi các cấp độ cây của bạn thay đổi kích thước.
ndm13

23

Đây là giải pháp W3C. Bạn có thể sử dụng nó vào năm 3012!

ul { list-style-type: "*"; }
/* Sets the marker to a "star" character */

https://drafts.csswg.org/css-lists/#text-markers


12
Tôi nghe nói rằng vào năm 3012, Internet Explorer cuối cùng cũng hoạt động!
Mark K Cowan

2
Tính năng này hoạt động trên Firefox 48, nhưng không hoạt động trong Chromium 51 hoặc trên điện thoại / máy tính bảng của tôi. On sẽ phải sử dụng li:beforegiải pháp.
CoderGuy123

1
Làm. Chào mừng đến với tương lai, thưa quý vị.
Mikko Ohtamaa

12

Hình ảnh không được khuyến nghị vì chúng có thể xuất hiện theo pixel trên một số thiết bị (thiết bị Apple có màn hình Retina) hoặc khi được phóng to. Với một ký tự, danh sách của bạn trông luôn tuyệt vời.

Đây là giải pháp tốt nhất mà tôi đã tìm thấy cho đến nay. Nó hoạt động tuyệt vời và là trình duyệt chéo (IE 8+).

ul {
    list-style: none;
    padding-left: 1.2em;
    text-indent: -1.2em;
}

li:before {
    content: "►";
    display: block;
    float: left;
    width: 1.2em;
    color: #ff0000;
}

Điều quan trọng là phải có ký tự trong một khối nổi với chiều rộng cố định để văn bản vẫn được căn chỉnh nếu nó quá dài để vừa trên một dòng. 1.2em là chiều rộng bạn muốn cho nhân vật của mình, hãy thay đổi nó theo nhu cầu của bạn. Đừng quên đặt lại đệm và lề cho các phần tử ul và li.

CHỈNH SỬA: Lưu ý rằng kích thước "1,2em" có thể thay đổi nếu bạn sử dụng phông chữ khác trong ul và li: trước đây. Sẽ an toàn hơn khi sử dụng pixel.


Có lẽ thêm "height: 1px" hoặc tương tự với li: before? Điều đó đảm bảo rằng phao không kéo dài xuống <li> tiếp theo, gây ra sự lồng ghép không mong muốn.
Alan De Smet

Tại sao hiển thị: khối; trên li: trước đây? có phải vì theo mặc định nội tuyến của nó và bạn không thể chỉ định chiều rộng không?
Alexander Solonik

6

Để thêm dấu sao, hãy sử dụng ký tự Unicode 22C6.

Tôi đã thêm một khoảng trống để tạo ra một khoảng cách nhỏ giữa lidấu sao và dấu sao. Mã cho khoảng trắng là A0.

li:before {
    content: '\22C6\A0';
}

4

Một ví dụ đầy đủ hơn về câu trả lời của 222 :

ul {
    list-style:none;
    padding: 0 0 0 2em;     /* padding includes space for character and its margin */

    /* IE7 and lower use default */
    *list-style: disc;
    *padding: 0 0 0 1em;
}
ul li:before {
    content: '\25BA';
    font-family: "Courier New", courier, "Lucida Sans Typewriter", "Lucida Typewriter", monospace;
    margin: 0 1em 0 -1em;   /* right margin defines spacing between bullet and text. negative left margin pushes back to the edge of the parent <ul> */

    /* IE7 and lower use default */
    *content: none;
    *margin: 0;
}
ul li {
    text-indent: -1em;      /* negative text indent brings first line back inline with the others */

    /* IE7 and lower use default */
    *text-indent: 0;
}

Tôi đã bao gồm các thuộc tính star-hack để khôi phục các kiểu danh sách mặc định trong các phiên bản IE cũ hơn. Bạn có thể kéo chúng ra và đưa chúng vào một bao gồm có điều kiện nếu muốn hoặc thay thế bằng giải pháp dựa trên hình ảnh nền. Ý kiến ​​khiêm tốn của tôi là các kiểu dấu đầu dòng đặc biệt được triển khai theo cách này sẽ giảm hiệu quả trên một số trình duyệt không hỗ trợ các bộ chọn giả.

Đã thử nghiệm trên Firefox, Chrome, Safari và IE8-10 và hiển thị chính xác tất cả.


text-indent: -1em;là một thuộc tính quan trọng nếu bạn có các mục danh sách nhiều dòng. Nếu không có nó, dòng thứ hai và các dòng tiếp theo sẽ đứng với viên đạn hơn là dòng trước đó.
Andris

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

ul li:before {
    content:'*'; /* Change this to unicode as needed*/
    width: 1em !important;
    margin-left: -1em;
    display: inline-block;
}

1

Tôi đã xem qua toàn bộ danh sách này và có một phần đúng và một phần sai cho đến năm 2020.

Tôi nhận thấy rằng thụt lề và bù trừ là vấn đề lớn nhất khi sử dụng UTF-8, vì vậy tôi đăng bài này dưới dạng giải pháp CSS tương thích năm 2020 bằng cách sử dụng dấu đầu dòng "hình tam giác thẳng" làm ví dụ.

ul {
    list-style: none;
    text-indent: -2em; // needs to be 1 + ( 2 x margin), and the result 'negative'
}

ul li:before {
    content: "\25B2";
    margin: 0 0.5em; // 0.5 x 2 = 1, + 1 offset to get the bullet back in the right spot
}

sử dụng emlàm đơn vị để tránh xung đột với định cỡ phông chữ


0

Hãy thử mã này ...

li:before {
    content: "→ "; /* caractère UTF-8 */
}

-1

Chủ đề này có thể đã cũ, nhưng đây là một bản sửa lỗi nhanh chóng ul {list-style:outside none square;}hoặc ul {list-style:outside none disc;}, v.v.

sau đó thêm phần đệm bên trái vào phần tử danh sách

ul li{line-height: 1.4;padding-bottom: 6px;}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.