How to distribute floated elements evenly with a dynamic column and row count in CSS?

后端 未结 4 660
礼貌的吻别
礼貌的吻别 2020-12-05 11:26

I have multiple divs with a fixed width and height (think about some sort of catalog view with article pictures). Now I want to show them similar to the behavior of float:le

4条回答
  •  孤街浪徒
    2020-12-05 11:49

    So my question is: can I realize something like this without JavaScript?

    I went through the same exercise recently and finally gave up and used JavaScript. Even abandoning IE 7 and 8 (which isn't practical) I couldn't find a pure CSS solution. I guess you could hack together a long list of media queries to accomplish this in a limited fashion.

    I ended up writing a little (about 1K minified) library which handles width, height, proportionate scaling, max widths, scrolling, consistent margins and padding, etc.

    Here is a rough example using my own code: http://jsfiddle.net/CmZju/2/. I've placed a couple hundred elements in the example.

    I would prefer a CSS-only solution, because I will have possibly up to hundreds of divs on one page.

    The layout engine of the browser will have to perform the same (or similar) calculations that you do. Granted, it is highly optimized but I would test your JS solution on a few old PCs and a few mobile devices before discounting it as too slow.

    It looks like you are using absolute positioning. My informal tests show absolute layout to be significantly faster than float calculation. This makes sense if you think about the work that the browser must do to calculate a relatively sized and floated item, versus just drawing an element at a specific place with specific dimensions.

    If you wanted to really look at optimizing performance, you could only manipulate the content that was visible. This would be much more difficult than just resizing everything and would probably only be relevant if you had thousands of items on a page.

    If you end up going the script route, you might want to take a look at jQuery Masonry for additional ideas. I have heard good things about it and it gave me some good ideas for my own library.

提交回复
热议问题