Các dấu đầu dòng đến từ đâu trên các phần tử <li>?


76

Sự hiểu biết hiện tại của tôi là các phần tử HTML khác nhau được phân tách về chức năng của chúng bằng kiểu CSS mặc định, sang một bên ngữ nghĩa.

Sử dụng CSS tùy chỉnh, bạn có thể (không thể ngờ được) làm cho bất kỳ phần tử HTML nào hoạt động giống như bất kỳ phần tử nào khác.

Nếu điều đó là chính xác, điều duy nhất tôi không thể giải thích là các dấu đầu dòng trên <li>các phần tử. CSS gây ra chúng? Làm thế nào bạn có thể thêm nó vào các phần tử khác?


Lưu ý cho độc giả trong tương lai: Gần đây tôi đã biết các phần tử HTML cũng khác nhau theo danh mục nội dung .



2
Các viên đạn đến từ list-style, viết tắt của list-style-type, list-style-imagelist-style-position.
Terry


1
Cảm ơn tiền thưởng hậu hĩnh của bạn, Aerovistae! Tôi thực sự đánh giá cao lòng tốt của bạn và tôi rất vui vì tôi có thể giải đáp thắc mắc của bạn :) Chúc một ngày tốt lành !!
bytecode77

Câu trả lời:


77

Các dấu đầu dòng được chứa "trong" phần đệm của <ul>phần tử:

Phần đệm được đánh dấu màu xanh lá cây và lề màu cam:

1

Giảm phần đệm cho thấy rằng các viên đạn nằm "trong" phần đệm đó:

4

<ul>Ví dụ, tăng lợi nhuận của ví dụ, sẽ dịch chuyển nó sang phải.

2

Tài list-stylesản tự điều khiển đạn. Đặt nó thành nonesẽ ẩn chúng. Bạn sẽ cần đặt lề và đệm 0nếu bạn cũng muốn loại bỏ thụt lề.

ul
{
    list-style: none;
}

3

Nếu bạn muốn loại bỏ tất cả các lề / đệm và các dấu đầu dòng, hãy sử dụng điều này:

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

5


Tất nhiên, bạn cũng có thể áp dụng dấu đầu dòng cho các điều khiển HTML khác:

div
{
    padding-left: 40px;
}
a
{
    display: list-item;
    list-style: disc;
}
<div>
    <a href="#">Item #1</a>
    <a href="#">Item #2</a>
    <a href="#">Item #3</a>
    <a href="#">Item #4</a>
</div>


2
Tôi không chắc câu nói "các viên đạn nằm trong phần đệm" có chính xác không? Điều gì xảy ra nếu bạn đặt padding thành 0 nhưng lề là 20px? Tôi đang ở xa máy tính để bàn nên không thể tự kiểm tra.
EyasSH

1
Và bạn có thể chỉ ra cách bạn sẽ THÊM các viên đạn vào các phần tử khác, chỉ vì mục đích nắm bắt đầy đủ điều này không? Giống như làm cho một div của nhịp hành xử như một ul của lis.
temporary_user_name

1
Đây là một câu trả lời cực kỳ rõ ràng và xuất sắc. Tôi sẽ trao tiền thưởng này khi có thể. Nhân tiện, StackOverflow đã thêm đoạn mã vào khi nào? Đây là lần đầu tiên tôi thấy một cái.
temporary_user_name

2
list-style-type bullet không tồn tại . Bạn nên sử dụng disc. Chrome vẫn hiển thị dấu đầu dòng, nhưng Firefox thì không.
Artyom

1
@Aerovistae Đó là nội dung được tạo và giao diện mặc định là giao diện từ Hệ điều hành - Nó chỉ đơn giản là một nút. Nhưng CSS có thể được áp dụng. Trình duyệt xử lý CSS và áp dụng nó cho phần tử giao diện người dùng.
bytecode77

29

Các trình duyệt thường có "biểu định kiểu mặc định" —một tập hợp các kiểu CSS áp dụng cho các phần tử HTML cụ thể. Hãy xem các kiểu mặc định của Firefox , kiểu mặc định của Chromekiểu mặc định của IE .

Thông thường, <ul>thẻ có các kiểu CSS có thể ghi đè mặc định sau:

ul {
  display: block;
  list-style-type: disc;
  margin-before: 1em; /* equivalent to margin-top in most languages */
  margin-after: 1em;  /* equivalent to margin-bottom in most languages */
  margin-start: 0px;  /* equivalent to margin-left in LTR */
  margin-end: 0px;    /* equivalent to margin-right in LTR */
  padding-start: 40px;/* equivalent to padding-left in LTR*/
}
  • list-style-type: disc khiến biểu tượng đĩa xuất hiện bên cạnh mục.
  • list-style-positionlist-style-imagechưa được đặt. Giá trị mặc định của chúng lần lượt là outsidenone. Điều này có nghĩa là discbiểu tượng được xác định ở trên sẽ xuất hiện ở bên trái của liphần tử (trong hầu hết các ngôn ngữ) và không can thiệp vào lichính hộp hiển thị.
  • Các marginpaddingcài đặt đặt nội dung đúng cách.

Một <li>thẻ như sau:

li {
  display: list-item;
}
  • display: list-itemtương tự như display: block;và cho phép các mục danh sách riêng biệt xuất hiện trên các dòng khác nhau.


5

Dấu đầu dòng cho <li>các phần tử chỉ là mặc định của trình duyệt. Cũng giống như nó có phông chữ mặc định, kích thước phông chữ, gạch dưới cho các liên kết (màu xanh lam), v.v. Để đảm bảo bạn ghi đè mặc định của trình duyệt, hãy sử dụng một số css reset http://cssreset.com/ hoặc bootstrap css.

Phong cách cho <li>được xác định bởi <ul>hoặc bao <ol>quanh nó. ví dụ

ul.circle {list-style-type: circle;}
ul.square {list-style-type: square;}
ol.upper-roman {list-style-type: upper-roman;}
ol.lower-alpha {list-style-type: lower-alpha;} 
ul.image{ list-style-image: url("//cdn.sstatic.net/stackoverflow/img/favicon.ico?v=6cd6089ee7f6");} 
ul.singleline { display:flex; list-style:none; } // css3 only
<ul class="circle">
    <li>one</li>
    <li>two</li>
    <li>three</li>
</ul>
<ul class="square">
    <li>one</li>
    <li>two</li>
    <li>three</li>
</ul>
<ol class="upper-roman">
    <li>one</li>
    <li>two</li>
    <li>three</li>
</ol>
<ol class="lower-alpha">
    <li>one</li>
    <li>two</li>
    <li>three</li>
</ol>
<ul class="image">
    <li>one</li>
    <li>two</li>
    <li>three</li>
</ul>
<ul class="singleline">
    <li>One </li>
    <li>Two </li>
    <li>Three </li>
</ul>


3

Tôi nghĩ câu hỏi ban đầu thực sự là, "làm thế nào tôi có thể thêm dấu đầu dòng vào các phần tử KHÁC, vì CSS được cho là cho phép bạn tạo kiểu bất kỳ thứ gì (như phần tử p) để trông giống một cái gì đó khác (như LI).

Câu trả lời dường như là, LI là một trường hợp đặc biệt, AFAIK. Có thể là sai. Tôi đã thử thêm <style="display: list-item; list-style-type:disc;">vào <p>các phần tử và không nhận được dấu đầu dòng. (Chỉ được thử nghiệm với Chrome).

Bạn thực sự có thể thêm các ký tự dấu đầu dòng ( &bull;) theo cách thủ công hoặc theo chương trình vào đầu mỗi phần tử p và đặt lề và phần đệm để trông giống như một khối UL / LI, tôi đoán vậy.


1
Không quá cho rằng LI là một trường hợp đặc biệt, nhưng kiểu danh sách được xác định bởi danh sách mẹ hơn là mục danh sách. Bạn cần phải có một thuộc display: unordered-list;tính có sẵn để cha của đoạn văn lấy dấu đầu dòng (hoặc một ordered-listđể lấy tự động đánh số).
Stan Rogers

Bạn có thêm bất kỳ phần đệm nào vào các <p>phần tử không? Một câu trả lời khác đề cập rằng nếu bạn hạ đủ đệm trên <li>các phần tử, viên đạn sẽ biến mất.
Mitchell Carroll

Các mẹ của <p>yếu tố bạn thử nghiệm này trên nên đã nhận được list-style-type: disc;, không phải là <p>yếu tố chính nó. Các <p>yếu tố duy nhất sẽ nhận được: display: list-item;.
EyasSH

không nhận được đạn - các viên đạn có thể nằm ngoài phía bên trái của màn hình. Thử thêm phần đệm hoặc lề bên trái.
Salman A

2

Dấu đầu dòng trên các mục danh sách là một ví dụ về nội dung đã tạo . Ví dụ khác về nội dung được tạo ra bao gồm các con số trong danh sách đặt hàng, quầy CSS và :before:afterpseudo-yếu tố.

CSS gây ra chúng?

Đặt display: list-itemtrên một phần tử sẽ làm cho nó hiển thị dấu đầu dòng. Bạn cũng có thể thay đổi diện mạo và vị trí .

Làm thế nào bạn có thể thêm nó vào các phần tử khác?

Xem các ví dụ bên dưới:

.mylist.type1 > span {
  display: list-item;
  /* inside: the marker is placed inside the element box before its content */
  list-style-position: inside;
}
.mylist.type2 > span {
  display: list-item;
  /* outside (default): the marker is placed outside the element box towards left */
  /* by the way you are not restricted to just bullets */
  list-style-type: lower-roman;
}
.mylist.type2 {
  /* add some room on left for bullets positioned outside */
  padding-left: 2em;
}
<div class="mylist type1">
  <span>Item 1</span>
  <span>Item 2</span>
  <span>Item 3</span>
</div>
<hr>
<div class="mylist type2">
  <span>Item 1</span>
  <span>Item 2</span>
  <span>Item 3</span>
</div>

Để kiểm soát chính xác hơn, tôi khuyên bạn nên sử dụng các phần tử giả (và bộ đếm CSS nếu bạn muốn đếm).

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.