2012-05-12 27 views
31

Tôi đang gặp khó khăn trong việc tìm kiếm thông tin cụ thể cho trường hợp của mình. Tôi muốn phân phối 3 hình thu nhỏ hình ảnh trên một div 940px để xếp hàng với phần còn lại của nội dung của tôi. Cho đến nay, tôi đã nhận được những hình ảnh để xếp hàng theo chiều ngang, nhưng khoảng cách là tắt & mọi thứ được dịch chuyển sang trái.Phân phối ảnh đồng đều và ngang trong Div qua CSS

Đây là CSS của tôi:

#thumbs { 
    width: 940px; 
    margin-top:90px; 
    margin-left: auto; 
    margin-right: auto; 
} 

HTML của tôi:

<div id="thumbs"> 
    <a id="single_image" href="/dev/images/1.png"> 
    <img src="/dev/images/thumb1.png" alt=""/> 
    </a> 
    <a id="single_image" href="/dev/images/2.png"> 
    <img src="/dev/images/thumb2.png" alt=""/> 
    </a> 
    <a id="single_image" href="/dev/images/3.png"> 
    <img src="/dev/images/thumb3.png" alt=""/> 
    </a> 
</div> 

Ví dụ hình ảnh

Những gì tôi hiện có:

enter image description here

Những gì tôi đang cố gắng để đạt được:

enter image description here

sự giúp đỡ của bạn được nhiều đánh giá cao.

+3

Mỗi phần tử 'a' của bạn đều có cùng một ID. ID phải là duy nhất. – thirtydot

Trả lời

41

Sử dụng kỹ thuật này thể hiện trong câu trả lời của tôi ở đây: Fluid width with equally spaced DIVs

Dưới đây là với mã của bạn: http://jsfiddle.net/thirtydot/JTcGZ/

CSS:

#thumbs { 
    width: 540px; 
    margin-top:90px; 
    margin-left: auto; 
    margin-right: auto; 

    text-align: justify; 
    -ms-text-justify: distribute-all-lines; 
    text-justify: distribute-all-lines; 
} 
#thumbs a { 
    vertical-align: top; 
    display: inline-block; 
    *display: inline; 
    zoom: 1; 
} 
.stretch { 
    width: 100%; 
    display: inline-block; 
    font-size: 0; 
    line-height: 0 
} 

HTML:

<div id="thumbs"> 
    <a id="single_image1" href="#"><img src="http://dummyimage.com/150x150/444/fff" alt=""/></a> 
    <a id="single_image2" href="#"><img src="http://dummyimage.com/150x150/444/fff" alt=""/></a> 
    <a id="single_image3" href="#"><img src="http://dummyimage.com/150x150/444/fff" alt=""/></a> 
    <span class="stretch"></span> 
</div>​ 
+0

Với một chút may đo, mã của bạn hoạt động! Chiều rộng #thumb: được một chút đi, tôi đã thay đổi nó để 940px, Ngoài ra, trên #thumbs một, dòng "* hiển thị" cần phải được sửa chữa để "trưng bày" (Chỉ cần cho độc giả trong tương lai) Cảm ơn rất nhiều! – Willard

+0

Tôi rất vui vì nó đã làm việc cho bạn. Tôi đã thay đổi '940px' thành' 540px' đơn giản để làm cho nó vừa vặn dễ dàng hơn trong cửa sổ jsFiddle. '* display' là một phần của một hack để làm cho' display: inline-block' [làm việc trong IE7] (http://stackoverflow.com/questions/5838454/inline-block-doesnt-work-in-internet-explorer- 7-6/5838575 # 5838575). Nếu bạn không cần hỗ trợ IE7, bạn có thể xóa '* display: inline một cách an toàn; zoom: 1; '. Cuối cùng, nếu câu trả lời của tôi là những gì bạn muốn, bạn có thể [chấp nhận nó] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235) không? – thirtydot

+0

Trên thực tế, vì 'a' là một phần tử nội tuyến, bạn có thể loại bỏ toàn bộ quy tắc' #thumbs a {..} '. – thirtydot

3

Thử thêm

vị trí: tương đối; text-align: center;

trong #thumbs và đặt chiều rộng và lề cho (hoặc img) trong #thumbs.

Something như thế này, thử nghiệm các giá trị khác nhau:

#thumbs a { 
    width: 25%; 
    margin: 0 4%; 
    text-align:center; 
} 
+0

Một người già nhưng là một người tốt. – RobW

1

tại sao không phải là div ngón tay cái gói id được sử dụng như một container với một đệm đầu 90px, và các yếu tố nội bộ khác sử dụng một lớp đơn giản (không phải là một id để nó có thể được tái sử dụng), mà tất cả các phao còn lại. theo cách đó, chúng được sắp xếp theo chiều ngang một cách hoàn hảo, và thùng chứa bao bì cũng cung cấp phần lề mà bạn đang tìm kiếm. bạn cũng sẽ sử dụng mã ít hơn đáng kể để hoàn thành những gì bạn muốn.

28

Có một giải pháp làm sạch:

http://radiatingstar.com/distribute-divs-images-equaly-line

#container { 
    text-align: justify; 
} 
#container > div { 
    width: 100px; /* Declare your value. Can be in relative units. */ 
    display: inline-block; 
    vertical-align: top; 
} 
#container:after { 
    content: ""; 
    width: 100%; 
    display: inline-block; 
} 
+1

Câu trả lời không được giải thích theo ý kiến ​​của tôi. Tôi đã thử tất cả và cái này rất sạch sẽ và rất hiệu quả. Vấn đề duy nhất là: nếu tôi có, hai hàng và 7 hình thu nhỏ, hàng đầu tiên sẽ hiển thị 5 hình thu nhỏ và hàng thứ hai sẽ hiển thị hai hình thu nhỏ được gửi đi ở các vị trí cực đoan, để lại giữa hàng đó hoàn toàn trống nó một chút. Nó sẽ là hoàn hảo nếu hai hình thu nhỏ cuối cùng trong hàng thứ hai được căn chỉnh sang trái (hoặc phải).Giải pháp của bạn là quá thậm chí đối với một thư viện cổ điển… – Baylock

+0

Baylock, xin vui lòng, tạo ra một fiddle trên http://jsfiddle.net, có lẽ tôi có thể giúp bạn. –

+1

Rất sạch sẽ và hoạt động đẹp mắt trên các trình duyệt. Cảm ơn! –

2

Nhược điểm của text-align: justify; là này mà bạn phải có khoảng trống giữa mỗi hai yếu tố inline-block, nếu không những hai yếu tố sẽ gắn bó với nhau khác.

bạn có thể kiểm tra hành vi này ở đây: http://jsfiddle.net/JTcGZ/1552/

Cách mới hiện đại để đạt được điều này là sử dụng flex.

#thumbs { 
    display: flex; 
    justify-content: space-between // flex-start | flex-end | center | space-around; 
    align-items: stretch // flex-start | flex-end | center | baseline; 
} 
#thumbs a { 
    display: inline-block; 
} 

Ngoài ra bạn có thể xác định chiều rộng tỷ lệ phần trăm trong các trình duyệt hiện đại:

#thumbs a { 
    width: calc((100%/3) - 10px); 
} 

vui lòng truy cập trang này để xem chi tiết thêm về cách bố trí flex:

https://css-tricks.com/snippets/css/a-guide-to-flexbox/

+0

Vì một số lý do, phương pháp hàng đầu kéo dài chiều cao dọc của hình ảnh của tôi? –

+0

@GeorgeEdwards Trên thực tế, nó là một tính năng tuyệt vời của bố trí flex có thể kéo dài tất cả các mặt hàng có cùng chiều cao, nhưng bạn có thể điều khiển nó bằng cách sử dụng các mặt hàng theo phong cách của container flex, chỉ cần đặt nó thành flex-start! Tôi đã cập nhật câu trả lời. – Ali

17

Câu trả lời rất đơn giản , chỉ cần sử dụng:

.container { 
    display: flex; 
    justify-content:space-between; 
} 

Đó là tất cả!

+0

Giải pháp tuyệt vời. Hoạt động khi bạn muốn có hình ảnh phản hồi. –

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