Làm cách nào để đặt khoảng trống dọc giữa các mục danh sách?


115

Trong một <ul>phần tử, có thể định dạng rõ ràng khoảng cách dọc giữa các dòng bằng thuộc tính line-height.

Câu hỏi của tôi là, trong một <ul>phần tử, làm cách nào để đặt khoảng cách dọc giữa các mục danh sách?


1
ul li { margin: ???; padding: ???; line-height: ???; }tất cả hoặc một số thuộc tính CSS đó.
Brad Christie

Câu trả lời:


112

Bạn có thể sử dụng ký quỹ. Xem ví dụ:

http://jsfiddle.net/LthgY/

li{
  margin: 10px 0;
}

đặc biệt, sử dụng lề trên các liphần tử không phải ulphần tử.
duanev

41

HTML

<ul>
   <li>A</li>
   <li>B</li>
   <li>C</li>
   <li>D</li>
   <li>E</li>
</ul>

CSS

li:not(:last-child) {
    margin-bottom: 5px;
}

CHỈNH SỬA: Nếu bạn không sử dụng trường hợp đặc biệt cho phần tử li cuối cùng, danh sách của bạn sẽ có một khoảng cách nhỏ sau đó mà bạn có thể xem tại đây: http://jsfiddle.net/wQYw7/

Bây giờ so sánh điều đó với giải pháp của tôi: http://jsfiddle.net/wQYw7/1/

Chắc chắn điều này không hoạt động trong các trình duyệt cũ hơn nhưng bạn có thể dễ dàng sử dụng các tiện ích mở rộng js sẽ kích hoạt điều này cho các trình duyệt cũ hơn.


1
@Layne một phần công việc của chúng tôi với tư cách là nhà phát triển / lập trình web là cung cấp các giải pháp hoạt động trong nhiều môi trường nhất có thể. Câu trả lời của bạn thực sự quá mức cần thiết cho câu hỏi được đặt ra.
khử trùng cho

1
Tôi không nghĩ vậy. Bạn chỉ cung cấp giải pháp cho môi trường bạn muốn nhắm mục tiêu, mọi thứ khác sẽ quá mức cần thiết trừ khi bạn có kế hoạch mở rộng. Thêm vào đó, tất cả các câu trả lời đều có nhược điểm là thêm khoảng trắng trước và / hoặc sau phần tử danh sách đầu tiên / cuối cùng. Đó không phải là câu hỏi, anh ấy muốn chỉ có một khoảng cách GIỮA các phần tử danh sách (ít nhất anh ấy đã viết nó). Phần tử cuối cùng trong các câu trả lời khác sẽ có khoảng cách sau đó mặc dù không có phần tử li nào theo sau.

Môi trường anh ấy làm việc là các trình duyệt web. Đó không phải là quá mức cần thiết để đề xuất một giải pháp hoạt động ở mọi nơi. Thêm vào đó, nếu bạn thực sự lo lắng về lợi nhuận của mục cuối cùng, bạn sẽ không đề xuất một giải pháp cần js để khắc phục. Bạn có thể sử dụng :first-childvà nó sẽ làm việc trong tất cả mọi thứ IE7 +
disinfor

4
@disinfor Tôi không đồng ý về việc nhắm mục tiêu mọi thứ. Một phần của áp lực phát triển web đến từ việc hỗ trợ các trình duyệt không hỗ trợ chúng tôi. Safari là một trong số đó. Chúng tôi cần chống lại các trình duyệt kìm hãm Internet, medium.com/@richtr/… . Các trang web của chúng tôi phải trả lại thông báo "Chúng tôi không hỗ trợ trình duyệt của bạn" để làm cho nó hoạt động ở mọi nơi. Và chúng tôi cũng cần thông báo và bảo vệ khách hàng. Hoặc chúng ta không thể làm gì và là những tấm thảm trải sàn tuyệt vời.
1,21 gigawatts,

@ 1.21gigawatts "Các trang web của chúng tôi sẽ trả về trạng thái" Chúng tôi không hỗ trợ trình duyệt của bạn "" mhm, không. Điều đó được gọi là phá hoại cạnh tranh và là bất hợp pháp ở nhiều quốc gia. Microsoft đã làm điều đó với Skype for Web. Skype for Web vẫn hoạt động hoàn hảo trên các trình duyệt khác. Google đã khiến Youtube gặp trục trặc trong Safari hơn một năm. Google chặn người dùng Tor sử dụng các dịch vụ nhất định. Không phải quan điểm của "nền tảng web" là làm cho các ứng dụng và dịch vụ độc lập với nền tảng, cũng như không chặn các nền tảng cụ thể? Nếu bạn muốn làm điều đó, tại sao không tạo các chương trình bản địa thay thế? Cuối cùng, chúng mạnh hơn.
Andreas

35

Tôi sẽ nghiêng về điều này mà có được sự hỗ trợ của IE8.

li{
    margin-top: 10px;
    border:1px solid grey;
}

li:first-child {
    margin-top:0;
}

JSFiddle


27

Thêm một marginvào lithẻ của bạn . Điều đó sẽ tạo ra khoảng cách giữa livà bạn có thể sử dụng line-heightđể đặt khoảng cách cho văn bản trong các lithẻ.


3

Nhiều khi khi tạo ra các email HTML, bạn không thể sử dụng các biểu định kiểu hoặc các khối kiểu / kiểu. Tất cả CSS cần phải được nội tuyến. Trong trường hợp bạn muốn điều chỉnh khoảng cách giữa các dấu đầu dòng, tôi sử dụng li style = "margin-bottom: 8px;" trong mỗi mục đầu dòng. Tùy chỉnh giá trị pixel theo ý thích của bạn.


Ngoài ra, các thẻ kiểu / kiểu kiểu không được dùng nữa
Ben Slade

2

Để áp dụng cho toàn bộ danh sách, hãy sử dụng

ul.space_list li { margin-bottom: 1em; }

Sau đó, trong html:

<ul class=space_list>
<li>A</li>
<li>B</li>
</ul>

0

đặt padding-bottom cho mỗi danh sách bằng cách sử dụng lớp giả là một phương pháp khả thi. Ngoài ra chiều cao dòng có thể được sử dụng. Hãy nhớ rằng các thuộc tính phông chữ như font-family, Font-weight, v.v. có vai trò đối với độ cao không đồng đều.


2
Bạn có thể cung cấp một ví dụ về giải pháp của bạn?
Muldec

-9

<br>giữa <li></li>các mục nhập dòng dường như hoạt động hoàn toàn tốt trong tất cả các trình duyệt web mà tôi đã thử, nhưng nó không vượt qua được trình kiểm tra W3C CSS3 trực tuyến. Nó cho tôi biết chính xác khoảng cách dòng mà tôi đang theo đuổi. Theo như tôi lo ngại, vì nó chắc chắn hoạt động, tôi đang kiên trì sử dụng nó, bất cứ điều gì W3C nói, cho đến khi ai đó có thể đưa ra một giải pháp thay thế hợp pháp tốt.


Đề xuất của bạn hoạt động tốt nếu bạn hài lòng với chiều cao dòng hiện tại nhưng tôi nghĩ anh ấy muốn chỉ định lượng không gian của riêng mình. Sử dụng ngắt dòng chỉ cần tạo các dòng mới bằng cách sử dụng chiều cao dòng hiện tại.
1,21 gigawatts

Nếu bạn lặp lại trên một danh sách có nhiều mục, thêm br là một việc làm tồi tệ. Đánh dấu là cách an toàn nhất và tốt nhất để thêm không gian như các câu trả lời ở trên đã gợi ý.
SeaWarrior404,
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.