Trên http://pinterest.com/ có 'ghim' tức là <div> s có chiều cao thay đổi nhưng tất cả dường như hiển thị rất tốt mà không có khoảng trống '' hoặc ngắt dòng để làm gián đoạn luồng. Có một lời giải thích tốt/đơn giản về cách họ nhận được CSS để cư xử và thực hiện điều đó (tôi hy vọng sẽ tìm hiểu và hiểu hơn là chỉ vận chuyển hàng hóa-cult tập tin CSS của họ!). Cảm ơn trướcCó ai biết cách bố cục của Pinterest.com hoạt động không?
Trả lời
Kiểm tra JQuery Masonry, đó sẽ là cách đơn giản nhất để đạt được bố cục bạn muốn. http://masonry.desandro.com/
Tôi đã đọc một số javascript của Pinterest cách đây vài tháng để tìm ra điều này. Tóm lại, họ không làm điều đó với CSS cả. Chúng định vị tất cả các ô/ghim của chúng một cách động bằng cách lặp qua tất cả chúng, tính chiều cao và thả nó ở cuối cột nào có chiều cao ngắn nhất tại thời điểm này (thêm chiều cao của ô vào đó). Về cơ bản, không có lừa cho nó, nó chỉ là Javascript.
cảm ơn nguồn lực của bạn :) – nXqd
** + 1 ** Tôi cung cấp liên kết đến câu trả lời này cho câu hỏi SO/Câu trả lời khác nhau [* * ĐÂY **] (http://stackoverflow.com/a/11253923/1195891). – arttronics
Tôi đang chảy nước mắt kinh hoàng tại Masonry. Cảm ơn vì tiền boa. –
Css không thể thực hiện điều đó theo cách bạn muốn đến. Javascript, like this example, có thể.
Do các hàng có nội dung nổi hoặc nội tuyến bị chặn hoạt động, css không phù hợp với công việc. Bạn sẽ phải tự động tạo các cột dọc của nội dung và đặt chúng cạnh nhau, nghĩa là bạn phải chiến đấu để có được nội dung hiện tại ở trên cùng. Nó thực sự là một nỗi đau. Bạn cũng sẽ mất độ nhạy với chiều rộng cửa sổ.
Cảm ơn bạn đã chọn con trỏ đến Xây dựng! Tôi đã không nghe nói về điều đó trước đây, sẽ điều tra – bachposer
nó có thể làm điều đó thông qua css3 bây giờ .. –
Bạn có thể đọc phản ứng đồng sáng lập của Pinterest để một câu hỏi trước đó về vấn đề này: how to replicate pinterest.com's absolute div stacking layout
Bạn bây giờ có thể thực sự làm điều đó với css3
.three-col {
-moz-column-count: 3;
-moz-column-gap: 20px;
-webkit-column-count: 3;
-webkit-column-gap: 20px;
}
dẫn Hoàn tại địa chỉ: http://kmsm.ca/2010/an-almost-complete-guide-to-css3-multi-column-layouts/
vấn đề với điều này là trang sẽ không đọc từ trái sang phải, vì vậy không phải ba mục mới nhất sẽ nằm ở đầu trang. – esp
@esp: CHÍNH XÁC! +1. Cột có nghĩa là cho nội dung ngắn theo chiều dọc để làm cho nó dễ đọc hơn bằng cách thu hẹp độ dài dòng văn bản. Nếu chúng ta có nội dung cuộn theo chiều dọc và thứ tự của các phần tử riêng lẻ (như trong thẻ Pinterest) là quan trọng giả, thì bố cục cột không phải là một giải pháp. –
Sau khi nhìn ở tất cả các tùy chọn, tôi đã kết thúc triển khai bố cục tương tự như Pinterest theo cách này:
Tất cả các DIV là:
div.tile {
display: inline-block;
vertical-align: top;
}
Điều này làm cho chúng có vị trí tốt hơn khi được thả nổi.
Sau đó, khi trang được tải, tôi lặp lại tất cả các DIV trong JavaScript để loại bỏ các khoảng trống giữa chúng. Nó hoạt động tốt khi được chấp nhận khi:
- DIV không khác biệt về chiều cao.
- Bạn không ngại một số vi phạm nhỏ về đặt hàng (một số yếu tố bên dưới có thể được kéo lên trên).
- Bạn không nhớ dòng dưới cùng có chiều cao khác nhau.
Lợi ích của cách tiếp cận này - HTML của bạn có ý nghĩa đối với công cụ tìm kiếm, có thể hoạt động với Javascript bị chặn/chặn bởi tường lửa, chuỗi phần tử trong HTML khớp với chuỗi logic (các mục mới hơn trước cũ). Bạn có thể thấy nó đang hoạt động tại http://SheepOrPig.com/news
Cách đơn giản nhất và đơn giản nhất mà tôi đã thực hiện, có vẻ như là phần ứng. Nhưng tôi đã nghĩ đến việc chia sẻ .....
Đây là bố cục ba cột ...
First 3 container sẽ không thêm chiều cao cho nó .. chứa 4 sẽ lấy chiều cao và vị trí hàng đầu của container 1 (có nghĩa là prev().prev().prev()
)
counter = counter+1;
if(counter > 3){
var getTop = $(this).prev().prev().prev().offset();
var getLeft = $(this).prev().prev().prev().offset();
var getHeight = $(this).prev().prev().prev().height();
var countTPH = getTop.top + getHeight - 20;
$(this).css({"position":"absolute","top":countTPH+"px","left":getLeft.left+"px"});
}
Tôi đã đưa prev()
chỉ để làm cho người đọc hiểu mã đơn giản 1
Cách thức hoạt động đơn giản: Ở đây, tôi đã viết bài viết của riêng mình chỉ trong vài phút. http://jsfiddle.net/92gxyugb/1/
coffescript
tiles = $('.tiles .t')
container = $('.tiles').width()
width = $('.tiles .t:first').width()
columns_height = {}
columns = Math.floor container/width
space = container % width
space = space/(columns-1)
for tile,i in tiles
column_index = i % columns
columns_height[column_index] ?= 0
sp = switch column_index
when 0 then 0
when columns then 0
else
space * column_index
$(tile).css
top: columns_height[column_index]
left: (column_index * width)+sp
columns_height[column_index] += $(tile).height()+space
max_height = 0
for k,v of columns_height
if v > max_height
max_height = v
$('.tiles').height max_height-space
html
<div class='tiles'>
<div class='t t1'></div>
<div class='t t2'></div>
<div class='t t3'></div>
<div class='t t4'></div>
<div class='t t5'></div>
<div class='t t6'></div>
<div class='t t7'></div>
<div class='t t8'></div>
<div class='t t9'></div>
<div class='t t10'></div>
<div class='t t11'></div>
<div class='t t12'></div>
<div class='t t13'></div>
<div class='t t14'></div>
<div class='t t15'></div>
<div class='t t16'></div>
</div>
css
.tiles {position: relative; width: 500px; background: rgb(140,250,250); }
.t { position: absolute; width: 87px; background: rgb(100,100,100); }
.t1 { height: 100px; }
.t2 { height: 140px; }
.t3 { height: 200px; }
.t4 { height: 180px; }
.t5 { height: 120px; }
.t6 { height: 150px; }
.t7 { height: 180px; }
.t8 { height: 200px; }
.t9 { height: 120px; }
.t10 { height: 160px; }
.t11 { height: 210px; }
.t12 { height: 160px; }
.t13 { height: 150px; }
.t14 { height: 150px; }
.t15 { height: 130px; }
.t16 { height: 170px; }
Andrews Câu trả lời là tuyệt vời! Tôi đã tìm kiếm một giải pháp và cuối cùng đã nhận nó ... Như Andrew đã viết bởi vị trí .. Ở đây đoạn JS của tôi. Không hoàn hảo, nhưng đúng hướng. Cảm ơn Andrew!
var tilename = 6;
for (var i = 0; i < document.querySelectorAll('#tiles .t').length; i++) {
document.getElementsByClassName("t"+tilename)[0].style.top = document.getElementsByClassName("t"+(tilename-5))[0].offsetHeight + 10;
tilename += 1;
}
- 1. Phải mọi hoạt động đều có bố cục?
- 2. Tại sao `bố cục nil` không hoạt động?
- 3. Injectview (Roboguice) không hoạt động với nhiều bố cục
- 4. OnTouchListener không hoạt động với bố cục tương đối
- 5. Tự động thêm phân đoạn có bố cục xml vào GridLayout không hoạt động
- 6. Có ai biết B-Tree có tên của nó không?
- 7. Bố cục động với bố cục đường ray
- 8. Hoạt động trên Android với Bố cục trong suốt
- 9. Chiều cao động của UIWebView với bố cục tự động
- 10. Có ai có trình biên dịch B hoạt động không?
- 11. Có ai đó biết cách sử dụng PagerTitleStrip trong Android
- 12. Làm cách nào để biết OpenMP có hoạt động không?
- 13. Có ai biết thực hiện thuật toán của yarowsky không?
- 14. Có ai biết trạng thái hiện tại của Graphics32 không?
- 15. Cách đặt Id của bố cục được tạo động?
- 16. Chuyển giữa 2 bố cục trong hoạt động android
- 17. Bố cục hoạt ảnh Android [Facebook]
- 18. Bố cục tự động UILabels
- 19. Yêu cầuLayout() của Android có dành cho hoạt ảnh bố cục không?
- 20. Bố cục mở rộng hoạt ảnh
- 21. Có ai từng sử dụng bảng cho bố cục lỏng không?
- 22. Có cách nào để Hoạt động biết phân đoạn nào vừa được tạo ra không?
- 23. Bố cục 3 Cột - Không có Cột
- 24. Cách mở rộng chiều cao bố cục bằng hoạt ảnh?
- 25. UICollectionView: bố cục tùy chỉnh hoạt ảnh
- 26. bố cục hoặc hoạt động của phân đoạn thay đổi (?) Bằng ngăn điều hướng
- 27. Có cách nào để tạo hoạt ảnh cho bố cục không? [Android]?
- 28. Bố cục không thể?
- 29. Hoạt ảnh khi thay đổi bố cục
- 30. Bố cục hoạt động: Phân đoạn hoạt động: vs android: tên thuộc tính
Điều gì khiến bạn nghĩ CSS đang làm điều đó? Đó là JavaScript. – thirtydot