2011-07-05 73 views
14

Có cách nào để xóa không gian thừa được hiển thị ở cuối thẻ Mục danh sách HTML mà không đặt chiều cao cố định trên mục danh sách không? I.e. Tôi muốn các mục danh sách để bọc vào nội dung của nó.Xóa thêm khoảng trống ở cuối danh sách HTML Mục

Mã sau đây hiển thị 3 hình ảnh trong danh sách nằm ngang nhưng chiều cao của mỗi thẻ li lớn hơn hình ảnh 4px. Tôi muốn nó quấn quanh hình ảnh, tức là có cùng chiều rộng và chiều cao. Chiều rộng hiện tại giống nhau nhưng tôi không thể có chiều cao phù hợp.

HTML:

<ul> 
    <li><img alt="img1" src="img1.jpg" /></li> 
    <li><img alt="img2" src="img2.jpg" /></li> 
    <li><img alt="img3" src="img3.jpg" /></li> 
</ul> 

CSS:

li 
{ 
    display:block; 
    float:left; 
    margin:0; 
    padding:0; 
    background-color:Yellow; 
} 

Trả lời

26

Đây là mã của bạn: http://jsfiddle.net/23LcK/

Khoảng cách là không có gì để làm với các li s. Đó là không gian dành riêng cho hậu duệ trong các chữ cái như gp (vì img s là inline yếu tố).

Bạn có thể loại bỏ nó với bất kỳ những áp dụng cho li img:

+2

Cảm ơn @thritydot, câu trả lời tuyệt vời. –

+2

Một giải pháp vững chắc! – Linkmichiel

+0

TRẢ LỜI TRẢ LỜI! cảm ơn! –

2

này nên làm điều đó cho bạn.

ul{margin-bottom:0} 
2

li được bọc trong ul, theo mặc định có một số đệm. Do đó, như @Michael đã nói, bạn phải loại bỏ phần đệm của phần tử ul.

Để tránh những sự cố này, hãy thử sử dụng reset.css.

FYI: Trình duyệt áp dụng CSS mặc định trên các trang web. Đó là lý do tại sao bạn thấy các phần tử h1 lớn khi không có CSS ​​trong trang web của bạn. Bởi vì trình duyệt có CSS ​​mặc định. Và kể từ khi trình duyệt đến từ các công ty khác nhau, họ có CSS ​​mặc định khác nhau. Ví dụ: một trình duyệt có thể sử dụng 10px lề cho các đoạn văn, trong khi một người dùng trình duyệt khác 12px. Điều này có nghĩa là bạn luôn có mâu thuẫn trong thiết kế của mình. Nhưng việc đặt lại CSS được thực hiện bằng một số quy tắc chung loại bỏ các kiểu CSS mặc định này.

+0

Đó không phải là lý do cho không gian thêm. Nhìn vào [giải pháp của tôi] (http://stackoverflow.com/questions/6584004/remove-extra-space-at-bottom-of-html-list-item/6584207#6584207) cho ** a ** câu trả lời đúng (có nhiều cách khác để làm điều này). –

+0

Cảm ơn đề xuất đặt lại.css @Seed. Sử dụng điều này đã làm giảm không gian bởi một hoặc hai điểm ảnh nhưng nó đã không hoàn toàn thoát khỏi nó. @ Ivan của câu trả lời là người duy nhất đã hoàn toàn thoát khỏi nó tất cả. –

0
li img { 
    vertical-align: bottom; 
} 
+0

Cảm ơn @Ivan, công trình này rất tuyệt. Tuy nhiên tôi đã trao @thirtydot câu trả lời được chấp nhận khi anh ấy cung cấp thêm một chút chi tiết. –

+0

boo-hoo-hoo ;-) –

0

Có thể có lề hoặc đệm mặc định trên phần tử img trong trình duyệt bạn đang sử dụng. Bạn có thể xóa nội dung này bằng cách sử dụng một cái gì đó như thế này:

li img { 
    margin: 0; 
    padding: 0; 
} 

Vì các trình duyệt web khác nhau sử dụng các kiểu mặc định khác nhau nên bạn sử dụng biểu định kiểu đặt lại. Điều này đặt toàn bộ tải nội dung vào các mặc định hợp lý để bạn có được kiểu dáng nhất quán hơn trên các trình duyệt. Vì nó đặt lại mọi thứ về mặc định hợp lý, bạn nên luôn tải biểu định kiểu đặt lại trước bất kỳ bảng định kiểu nào khác.

Như @Saeed đã đề cập có một bản định kiểu đặt lại tốt cũng như thông tin thêm về lý do bạn nên sử dụng chúng here.

9

Đặt chiều cao dòng: 0; trên LI

li { 
    line-height: 0; 
} 

Dưới đây là một jsfiddle để chứng minh rằng nó hoạt động - http://jsfiddle.net/jm9Tj/

+0

Cảm ơn @Anupam, điều này không hoạt động nhưng căn chỉnh dọc: dưới cùng; được cung cấp bởi @Ivan có vẻ mạnh mẽ hơn khi mã của tôi trở nên phức tạp hơn. –

+1

Câu trả lời đúng đúng. Đây là nguồn gốc của "không gian thêm" bí ẩn đó một khi lề và phần đệm được tính toán. – ccjuju

+1

'display: block' là giải pháp mạnh mẽ hơn ở đây. –

Các vấn đề liên quan