49 comments

  • achairapart 10 days ago
    So, the background story is that CSSWG DevRels from browser vendors are debating how to formally include the Masonry layout into CSS, at least since 2020, when Firefox first proposed it.

    The news here is that people at WebKit decided to push the debate to the public, inviting designers and developers to take some action (“post to social media, write blog posts”), in order to get past this.

    While it may look just like a formality, I think this will make an important precedent. The real underling debate here is either to treat every layout option as a part of the CSS Grid, or keeping adding new CSS Display proprieties as necessary.

    The first option will make even more complex the (already convulsed, IMHO) CSS Grid specs, the latter will bloat the CSS specs with a load of new proprieties (and related sub-proprieties).

    Either way, it's not as easy as it looks.

    • bfgeek 10 days ago
      Part of the tension with building masonry on top of grid is that they work in fundamentally different ways.

      Grid you place everything in the grid first (e.g. an item goes in col:2,row:3), then size the grid. Masonry ideally you want to size the tracks first, then place items in those tracks.

      The first Firefox implementation (and the spec at that stage) basically said you don't consider any masonry items for sizing tracks (except for the first row, and some other rules - its complex). This meant that it is trivial to create items that overflow their tracks.

      The specification at the moment asks to place every item in every possible track. This has quadratic performance O(N_tracks * N_items) in the worst (and somewhat common case). Quadratic performance is bad[1] and we don't really have this in other layout algorithms.

      With nesting introduced the performance goes (sub-)exponential, which is really poor, even if you have a fast CPU.

      One may argue that these cases aren't common, but folks always test the boundaries with layout modes in CSS - so things need to be fast by default.

      Note: In grid items size themselves differently depending on what tracks you place them in, which is why you need to place in every possible position.

      Masonry potentially needs a different algorithm for sizing tracks to mitigate these problems, (the blog post doesn't go into these issues in sufficient detail). There may have been a version of grid sizing which didn't have item positional dependence but that ship has sailed.

      [1] https://randomascii.wordpress.com/2019/12/08/on2-again-now-i...

      • fantasai 10 days ago
        Quadratic performance is a bit of an exaggeration. It's not O(N_items^2). It's N_tracks x N_items, and basically nobody has N_tracks ≈ N_items. Practically speaking, the upper limit is closer to (N_items^1.5) because N_tracks is unlikely to go over sqrt(N_items) in cases where N is large. And almost all of those layouts will have repetitive track sizing patterns, so they can be optimized to a much smaller N_tracks that approaches O(N_items).
      • JoshTriplett 9 days ago
        Why does this require checking every item in every column? It looks like the layout algorithm greedily picks the column with the least total height so far, every time it adds an item.
        • bfgeek 9 days ago
          The requires it for sizing the columns (the step before placing the items into the columns).
          • JoshTriplett 9 days ago
            The examples in the article seem to have CSS that directly sizes the columns, albeit with some flexibility such as being able to change the number of columns to better fit the width. It seems like the item widths depend on the column widths, rather than the other way around (which seems like it'd be circular). What's an example where the column widths depend on the items?
            • bfgeek 9 days ago
              If you have something like:

                columns: 1fr auto max-content
              
                <!-- items -->
                <div>1</div>
                <div>somethingsuperlong</div>
                <div style="span: 2;">something else</div>
              
              You first need to decide how big each of the three columns are going to be, then you want to place the items in each of the columns.

              Depending on the non-fixed column type (there are different rules for each type) you want to ensure their constraints are satified (typeically they are big enough to encompass the items).

              • JoshTriplett 9 days ago
                Thanks, that helps; I'd thought about variable numbers of columns based on the width of what they're contained in, but hadn't thought about the possibility of wanting to choose the number of columns to fit their content better. Mostly because I was imagining content like images that can be scaled or text that can be wrapped, rather than fixed-size content or content with a minimum necessary size.
      • afiori 9 days ago
        Grid has a rich functionality for autoplacement of items and one of the arguments for masonry being part of grid is that you can easily mix the two positioning approaches

        https://webkit.org/wp-content/uploads/video3-museum-dark.m4v

    • mvonballmo 10 days ago
      A "row-less" grid fits very well in the current CSS Grid specification, in that it can reuse the very powerful column-definition property as well as sub-grids. Their examples very convincingly show how orthogonal these features are.

      Mostly, you just write grid-row-template: masonry and everything else just works with it. This is nice. It doesn't become harder to use the grid layout than it already is IMHO.

      The drawback is mostly for browser-engine authors, for whom the bar for "fully supports CSS Grid" will be set even higher. They also mention that it might avoid "performance traps" where an implementation that needs to support all features of grid might be slower at some parts of grid layout than it would be if the specification were simpler.

      If there were a separate display mode, then you'd have to repeat the grid-column specification for the masonry layout, which seems a shame.

      • nightpool 10 days ago
        > If there were a separate display mode, then you'd have to repeat the grid-column specification for the masonry layout, which seems a shame.

        Why? What's the downside to reusing grid-column-template or whatever for the CSS Masonry spec?

        • krsdcbl 10 days ago
          my thoughts exactly - i think this points to a possible naming issue, since "masonry" is a relatively vague alias that does not really describe the underlying layouting logic, it just became ubiquitous enough for people building webstuff to understand because of that one jQuery plugin back in the days.

          A better approach might be to lean on the "grid" naming, but still silo it off via an own display directive (a bit like "block" and "inline-block" have shared properties, but also mutually exclusive behaviours)

          So maybe an own `display: flex-grid;` could be an interesting solution?

          This separate layout mode would avoid "result-specific" nomenclature like "masonry", and could lean on both flexbox & grid to achieve that look: - using `grid-auto-flow` to set a "masonry axis" & distribution logic - using _either_ `grid-template-columns` or `grid-template-rows` to specify the "lanes" - and to make my frankensteinian display-mashup even worse (or genius! for you to decide), the grid items could in turn abuse `flex-grow, flex-shrink, flex-basis` to control their height/width within the main "masonry" axis

          • beardedetim 9 days ago
            I really like this concept of `flex-grid` because that's exactly what this display would be.
            • datavirtue 9 days ago
              That would be too simple and clean.
        • afiori 9 days ago
          > And yes, while making CSS Grid more complex will make it harder to extend in the future, we believe there’s an advantage to having these two types of grid layouts intertwined. This way the CSS Working Group will always define all new additions for both modular and columnar grids. There won’t be something added to display: grid that will be left out of display: masonry, or vice versa. For example, many developers want CSS Grid Level 4 to provide a mechanism for styling grid areas and grid lines — perhaps a way to add a background color to a track, or create a rule line in a gap. It’d be great to ensure that will work for both modular and columnar grids from Day 1.

          > By using subgrid, we can put the year and catalog number on the right of each card — and line up this data for one painting with the same data for the other paintings.

          The downside is that all the parts of grid that might be useful in masonry would have to be duplicated in slightly different ways.

          This together with the fact the the only two current implementations use display: grid

          If it is possible to make them perfectly compatible then the main negative side

    • jjcm 10 days ago
      > I think this will make an important precedent

      It's worth noting this is not the first time things like this have gone to the community for feedback. They did the same for nested CSS selectors, which ended up working quite well feedback-wise: https://webkit.org/blog/13607/help-choose-from-options-for-c...

    • eyelidlessness 10 days ago
      > Either way, it's not as easy as it looks.

      And exploring the tradeoffs might lead those exploring to reconsider their preferences going in.

      Not directly related to the topic, but I recently did some prototyping on a second iteration of an interface with a similar tension—proliferation of similar but distinct types in a data model, or expanding the set of nuances within each existing type to support refinement within it. Going into that prototyping session, I had a very strong bias in favor of the latter. But after exploring the options, I found it vastly simpler to consume the “bloated” interface, and to reason about the resulting application code consuming it.

      I don’t have strong feelings on the topic as it applies to CSS masonry, but I suspect there could be similar surprises in how people think about this tension intuitively versus in practice.

      And while I think CSS in particular will have a hard time justifying “bloat” (proliferation of use case specific semantics), I think it’s possible that users do tend to find more difficulty using CSS’s denser APIs (like grid).

    • qingcharles 10 days ago
      It's great they're doing this. I've been nudging everyone involved with this since last year. The Chrome guys are the furthest behind (no support). FF has flag support.

      I've been testing it since last year on FF and Safari and have no complaints about their implementations. I know some people are sniffling about the placement and naming of the properties. You have to be pragmatic about it, though, and realize there probably isn't a perfect solution and just implement it.

      I refuse to use JavaScript for the fallback, so the fallback is a lot of ugly CSS that doesn't order things in the right way, but it doesn't make a big deal of trouble for the project I'm working on. Most people will fallback to JavaScript right now, though, and when JavaScript is your solution to layout then you're already on a loser.

    • aidog 10 days ago
      look at the examples they made why it should be in CSS grid. I totally agree it should be in that. It's a form of grid. It should be part of CSS grid.

      This is one of the layouts that were just impossible in CSS and we really need it soon. I also needed the feature they talk about with the background colors for css grid tracks in 2012. I solved that with DIVs, but it was hard to make it responsive.

    • matsemann 10 days ago
      I think one additional point to consider when adding it as a new display mode vs re-using grid, is that currently these demo's fallback quite nicely now when it's re-using grid. Instead of showing it as masonry (since my browser doesn't support it), it at least behaves as a grid. If it's a new display: X property, it will fallback to div behavior with the content all over the place in unsupported browsers.
      • laszlokorte 10 days ago
        you could simply do: "display: grid; display: masonry;" and all not-supporting browsers would skip the second declaration.
        • yurishimo 9 days ago
          This is assuming there isn’t any cross pollution of shared properties either.
          • danielheath 9 days ago
            `@supports masonry { shared-property: 1; }`
    • madeofpalk 9 days ago
      It seems like the precursor to this was the whole "Help choose the syntax for CSS Nesting" thing that happened a while back. Browser vendors couldn't figure out the syntax, so they asked the 'wider public' which they preferred https://webkit.org/blog/13607/help-choose-from-options-for-c...
    • Izkata 10 days ago
      > new proprieties

      I'm guessing this was going to be "properties"? It kinda looks like "proprietary" instead, so let's double down on that - I propose "display: tetris;"

      • falcor84 9 days ago
        I would suggest that `display: tetris;` is implemented such that each row SHOULD have whitespace, and if at any point a row becomes fully occupied, a conforming rendering agent MUST remove the entire row.
    • doctorpangloss 10 days ago
      Is there a JavaScript polyfill today that can read the CSS properties in any of the proposed / implemented specifications that Just Works in Chrome?
    • eternityforest 9 days ago
      I've yet to ever find a use case for grid.... I'd prefer this be a flex box feature so I can continue ignoring grid. But it seems like they have good reasons for including it, so I suppose I'll have to actually practice with grid more!
    • niutech 8 days ago
      Masonry is easy and has already been solved using CSS Multiple Columns:

          .masonry {
            column-count: 6;
            column-gap: 10px;
          }
    • pier25 9 days ago
      I don't know about the implementation but it makes zero sense that masonry should be part of grid. It's not a grid!
    • flakiness 9 days ago
      If there is a debate, who is pushing back? Or is it more about details while every vendor is supportive at high-level?
    • reactordev 10 days ago
      CSS Grid is a mistake. Baking in a design philosophy when we had really creative pages without it.

      I like grids for pages with content and documentation and such. I don’t like grids for pages of media or other creative content. Cards, flex box, grids, these are all design framework choices and shouldn’t be in CSS spec. We were totally fine with position relative and media-query centric widths and heights. I get that it’s easier to standardize if grids are part of the standard but I miss the days of pages having some creativity in their design. Every site looks the same nowadays.

      And before I get downvoted. I have a degree in graphic design. I love CSS and I love the web. Bring back the fun.

      • fatbuoy1 10 days ago
        Sure what was wrong with table layouts and spacer gifs anyway amirite?

        I’m a designer who codes, and CSS Grid has completely transformed (and simplified) my approach to responsive web design, and enabled much more complex layouts as a result. Just because a layout was possible before doesn’t mean it was easy.

        By all means do things the old way if you want, but to suggest that it would be better if it didn’t exist is insane.

        • reactordev 9 days ago
          Not that it wouldn’t exist. It just wouldn’t be part of the spec. You are free to declare your own grid.

          I’m also not advocating to bring back tables and invisible spacer gifs. We have margins and padding for that. Even borders…

      • rhdunn 10 days ago
        CSS grid makes it possible to implement wrapped content that is uniformally aligned with the last row keeping the same number of columns as the others, and have that scale correctly to different page widths. This is useful in things like book layouts. You can get close with flex, but the last row doesn't fully work.
        • reactordev 9 days ago
          Does it require a ::last-child hack to get working? I’m a fan of grids when it comes to heavy writing content like I mentioned but I still don’t think it should all be packed in the spec.
          • rhdunn 9 days ago
            No, just:

                main.books {
                    display: grid;
                    grid-template-columns: repeat(auto-fill, 180px);
                    grid-gap: 1rem;
                    justify-content: space-between;
                }
            
            That will make the child items 180px wide, repeat as many children in a row as needed to fill the width with a gap of atleast 1rem extended so that the items are justified to the left and right and are spread evenly. The last row has however many children are left with those children positioned to match the rows above.

            See https://stackoverflow.com/a/46099319.

            • reactordev 9 days ago
              I meant without CSS Grid.
              • rhdunn 9 days ago
                Ah, ok. I wasn't able to get the last row working right with flex, but didn't experiment too much as the CSS grid approach worked. You could look through the other answers in that StackOverflow question.
                • reactordev 9 days ago
                  I have. It’s a mix of people saying it’s can only be done with CSS grid semantics and then a few who prove them wrong with flex box. Reinforcing my above question about “why not :after? :last-child? And flex it into shape?”

                  But I get it. Grids are easy to grok and grid.css is for the birds. Bake it in. Bloat the spec. And allow pixel perfect precision with one (or two) less div.

      • krsdcbl 10 days ago
        It was "fun" when tinkering with some really creative special concern, it was an insufferable pain when your job was finding ways to layout all the "fun" designers envisioned who weren't highly familiar with CSS.

        Before position and float madness and all, we used to abuse tables -- because layouts for complex information do work best in grid systems. Now CSS finally has a module that serves this purpose, and brings a huge amount of flexibility to make formerly painful stuff easy.

        I'm not even talking about "page layouts" as a whole, just simple particle patterns like "a big icon with a title + description to it's right" is so so much cleaner and easier to do in markup AND css with grid.

        Embrace the tools, and if you dislike them - you may as well just not use them. But thinks like grid make simple, stupid, deadlined webdesign _work_ so so much less of a grind.

        (speaking as a General Graphic Designer who's also been deep, deep in CSS since before 2.1)

  • chrismorgan 10 days ago
    I strongly dislike the megamenu demo <https://webkit.org/demos/grid3/megamenu/>, and feel masonry is completely inappropriate there. It makes a complete mess of flow direction, badly breaking expectations.

    The reading order you’d expect: https://temp.chrismorgan.info/2024-04-23-masonry-megamenu-2.....

    What the demo actually gives you: https://temp.chrismorgan.info/2024-04-23-masonry-megamenu-1..... This affects correct reading order and tab indexes. Basically, sighted users will always read things in the “wrong” order. This just drives home that there is no structure, it’s just an unstructured bag of links. Except… actually if you go through them in numbered order, it looks like there was some fairly logical ordering. It’s just been utterly demolished by inappropriate masonisation.

    (I’ve turned on “number items” in those screenshots. Normally, it’d look more like normal columns with no backgrounds.)

    The way it should be implemented is with columns, but adding `break-inside: avoid` on each section, which their demo has missed.

    The newspaper demo is also a little dubious for similar reasons, but it’s a much smaller deal.

    Now images and such media which are in more independent blocks and where reading order isn’t such an ingrained thing, masonry layout does work better there. There are still patches where things can be a bit iffy, mostly around tab indexing, but it’s not obviously wrong any more.

    • rezonant 10 days ago
      So you're saying the a11y tree and tab ordering is bypassing the actual ordering of content and instead traversing the columns one by one? I'd call that a bug. In a masonry layout the expectation of a sighted user is that there is no continuity from column to column, but instead through the visual line. And the "unexpected" (disagree) ordering you show does that. I think the issue would be that tab ordering is ignoring the raw ordering of the content and instead trying to emulate something visual, almost certainly some kind of hold over of the implementation as it currently exists.
      • ptx 10 days ago
        Maybe it's just me, but as a sighted user I have no idea how to read this kind of layout. My expectation would be that any sane designer wouldn't use this kind of layout in the first place.

        What's the "visual line" in the first example? It goes 1, 2, 3, 4; then down to 5; then a sudden break in the line as it jumps over 3 to the left to reach 6?

        Are we supposed to mentally sort the boxes by the top edge coordinates before reading? That would almost make sense of the second example, except that it doesn't explain why 9 comes before 10. Maybe sort by the coordinates of the bottom edge instead? But then 5 should be first. How do I read this thing?

        Edit: Actually box 9 seems to start 1 pixel above box 10, so sorting by top edge does work! So a sighted reader simply has to zoom in to the pixel level and carefully measure the coordinates of all the boxes to find the reading order.

        • amenhotep 10 days ago
          My experience with it has mostly been on Flickr, and I hated it for this exact reason, even though that was mostly pictures not text. Sure, it's very pretty if you just want to look at the site and not engage with it in any detailed way, like professional designers seem to intend for us, but I always wanted to look at a page of pictures and scan my attention over them systemically, finding those that interested me, being distracted by them briefly, then returning to the scan and knowing where I'd left off.

          Trying to do this with the "masonry" was horrible. What direction do you go in? Horizontally? Then how do you track which elements belong in which row, where you've already been? They're all interleaved. Vertically? Have fun scrolling down and down and down forever as the page loads more and more content dynamically. No, neither of those is how you're meant to engage, you're supposed to simply sit quietly and look at the big wall of pretty pictures.

          Giving designers a non-javascripty way to do it is nice, I guess, but I really hope the effect is that the bad layouts we already have are at least better executed technologically, rather than that the better technology encourages designers to use bad layouts more often.

        • rezonant 10 days ago
          Well no, the idea is that these are not related pieces of content. It's less of a newspaper article and more about independent items that are placed across the page. You don't have to follow the flow exactly as a user, but following the visual line is "more correct" than following through all of column A, then column B, etc.
        • madeofpalk 9 days ago
          Well, the idea with this layout is that there isn't really an inherit order to the children. You would use it where it doesn't matter which order you 'read' the items.

          If the order was important, you would use a 1D or 2D layout.

      • chrismorgan 10 days ago
        The problem here is that users will look at the end result and see a series of columns, but that the use of masonry makes it not that at all.

        I’m saying that masonry is risky if you’re using it purely visually, specifically because it’s purely visual. It’s the same deal with the CSS `order` property: it can be useful, but you have to be careful not to break expectations.

        CSS is almost purely visual. There are a few cases where it influences the accessibility tree (e.g. `display: none`, `speak-as`, `appearance` in some user agents), but never in anything like order.

        • vidarh 8 days ago
          If you make it look like columns instead of make it look like a wall of independent blocks, then yes.
    • KTibow 9 days ago
      Focusing solely on sighted users, I think the current ordering makes sense. What you propose would require often scrolling up and down to view the items in order, and would have large layout shifts if more items are added.
    • niutech 8 days ago
      Why not just use widely supported CSS Multi-Column Layout for masonry effect?
    • sebstefan 10 days ago
      That's just a random demo. It's not particularly relevant for the concept they're trying to gather feedback on
      • chrismorgan 10 days ago
        The demos should be motivating the feature. A bad demo is destructive to that effort. This is a very bad demo.
        • hombre_fatal 10 days ago
          If you open the demos in a browser like Safari that doesn't support the feature, the demos remain as normal grid-aligned cells.

          There I realize that masonry mainly works when your cells have such different heights that to grid-align them creates a lot of vertical dead space. Images and news blocks with images make sense for masonry for this reason and it feels good.

          But text-only cells where the cell heights don't differ much, they seem better without masonry. The megamenu demo also works much better as a normal grid because they start with a header so grid alignment lets you scan the headers left to right easily.

          A text-only newspaper could make sense with masonry because you aren't trying to navigate relationships between the items, and presumably the content can vary the cell height a lot.

        • sebstefan 9 days ago
          People who have nothing to say on the shed talk about the color
  • pimterry 10 days ago
    A really nice feature here is that if you view the demos in a browser that doesn't support this (i.e. all current stable browser releases without special flags enabled) because they're building directly on grid layouts, they still appear in a pretty reasonable fixed-row format: https://webkit.org/demos/grid3/.

    In each case it'd look much nicer with a proper masonry layout but it's still very usable otherwise (and of course you could feature detect to provide a better fallback if you're not happy with that anyway).

  • t_mann 10 days ago
    I really like the general look and feel of masonry/waterfall layout, maybe it's because I grew up reading physical newspapers (and still do), but to me a columnar layout is just an intuitive way to divide up a page.

    I just wish there was an alternative to the default masonry ordering, which afaik is a simple rule that goes sth like 'place the next item in whichever column it can go up highest'. This means that the left-to-right order is really juggled from the second row onwards. What I imagine would be really nice is if there was a layout that preserves more of the left-to-right (or right-to-left, if that's your preferred direction) reading flow. Something like 'put the next item one column to the right of the previous item (or in the leftmost, if you were at the rightmost), unless you can put a second item in the same column without the new bottom going too far below the bottom border of the column to its left'. This would be more flexible than strictly going left-to-right (which would also mess up alignment) and would reatin some meaning of the left-to-right reading direction.

    I know it won't be possible to accommodate every possible formula one could prefer for masonry, but if you have content where the ordering matters at least a bit (maybe not for Pinterest, but for a journal eg it would), then I really think sth like this would be a more sensible default than the classic masonry rule.

    • amadeuspagel 10 days ago
      I'd only use a masonry layout for something where there's no "clear" order anyway. I wouldn't use it for chronologically sorted images.
    • iainmerrick 9 days ago
      It's the left-to-right ordering that's the problem. I'm fairly sure there's no way to order things left-to-right in this layout without inevitably having to skip around haphazardly.

      In a magazine-style layout, wouldn't you read the columns top-to-bottom first, then left-to-right? You can accomplish that already in CSS with either 'columns' or vertical flexbox.

      Another issue with this 'masonry' layout is the ragged edge at the bottom. In a magazine that would presumably be justified -- again something you can do with columns or flex.

      On the web, I guess there's a hidden assumption that you'll have endless scrolling content, so it doesn't matter what the bottom of the page looks like? If so, that's not necessarily something that should be encouraged.

      • vidarh 8 days ago
        The main use for this will presumably be infinite scroll where columns doesn't work because it'd break all expectations when scrolling.
    • tetris11 10 days ago
      something like:

          {
             /* Move element a maximum of 2 columns left or right on update */
             grid-template-max-horizontal-shift: 2 col;
          }
      • mvkel 10 days ago
        You could run into issues where you don't have enough content to plug the holes this way though, right?

        For example if there's a gap that needs filling that Is 3 spaces away

  • turboat 10 days ago
    Suppose we could create a backwards-incompatible system to replace CSS. How would we do it?

    Are there any books or papers on how to create a coherent layout system?

    What about alternatives like Qt, Tk, SwiftUI, etc.? I've never used anything besides CSS. Are any of the actually-implemented systems in the wild better? If so, what makes them better?

    I want a system that provides a better interface for developers, but how? If we could start over, what are the design principles?

    • wruza 9 days ago
      Not particularly anti-css, but you may be interested in concepts like size groups, properly predictable size-request-allocate cycle, width-for-height, constraint- and align-based layouts and in generally cleaning up the mess of non-orthogonally connected ideas in css. More explicitness and separation for properties. Remove bs like negative margins, make all distances multi-level, e.g. padding = max(el.paddings[]). Make bounding boxes explicit, make borders proper elements, etc. Boxing isn’t a bad model, CSS is just an awful implementation of it. Absolutely ridden with fragile incantations and absurd limitations which bring more issues and “solutions” that will break 99% of the times you touch it.
    • mch82 10 days ago
      Constraint-based layout using the Cassowary algorithm seemed like a popular alternative for a while (see https://github.com/slightlyoff/cassowary.js/?tab=readme-ov-f...). It’s designed to solve for variance in screen size and shape. Apple switched to Swift UI and may have moved on from this approach.
    • cdrini 10 days ago
      This would be such an interesting write up comparing many styling/layout systems! Unfortunately I reckon not many people have experience with multiple styling languages, so not many people can create such a write-up.

      I think flutter and XAML might be other interesting ones to look at

      • madeofpalk 9 days ago
        XAML poorly reimplements half of CSS layout, and then gives up and tells you to write your own manually positioned layout with terrible performance.

        Things which are 3 lines in CSS are hundreds of lines of a combination XAML/.NET only to get janky window resizing behaviour.

    • eyelidlessness 10 days ago
      One thing to be cautious about when selecting prior art for reference is that CSS sets a high bar for declarative control. I can’t speak to any you mention in detail, but my sense is that more comparable prior art would likely be found in print use cases.
    • legulere 10 days ago
      I think one classic book about it is "Rastersysteme für die visuelle Gestaltung - Grid systems in Graphic Design". Never read it though.
      • cdrini 10 days ago
        Ah available for borrow at Internet Archive: https://openlibrary.org/works/OL3106695W/Grid_systems_in_gra...
      • turboat 10 days ago
        Thanks for the reference.

        As I've been thinking about this, I do wonder if starting with grids as the foundation would have been a better approach. As I understand it, early CSS focused on stuff like color and font style, with primitive layout tools. Over time better tools have been bolted on, but it's messy.

        Say we merged flexbox and grid into a unified system, and threw away the other layout algorithms. At the same time, made some tweaks to clarify margin, border, padding, and overflow. Maybe that's a good foundation.

    • pphysch 10 days ago
      CSS is overall pretty great and I've seen at least a couple non-web GUIs rip out their bespoke GUI systems and replace them with CSS or something very much like it.

      I think the big change will be better support for hierarchical definitions, including but not limited to nesting. TFA discussion would be pretty moot if there were namespaced properties that could somehow fit under display: masonry; rather than polluting the global namespace.

      • turboat 10 days ago
        I have to assume that's partly because of the availability of implementations, tooling, and developer familiarity. Many platforms will let you toss in a web view, and if you want to set up e.g. a configuration screen with text and toggles, HTML/CSS will get the job done, more easily than maintaining a custom system that's peripheral to the core purpose of your app.

        I don't want to be overly negative, but I just can't view CSS as "pretty great."

        I appreciate the inherent difficulty of using 1-dimensional static text to specify a 2-dimensional dynamic layout. Still, basically every programming problem involves defining abstractions over some domain concept and expressing that in the syntax of your programming language. Somehow that's harder in CSS than any other language I've used.

        Within web dev I find both HTML and JS much easier to work with, despite their imperfections.

  • SassyBird 10 days ago
    Reposting as a top comment for more visibility:

    I have a website with my photos, which doesn’t use any JS for layout. When I was making it, I considered using JS masonry libraries, but I wasn’t satisfied with the results. Proper masonry layouts which fill all available space in practice actually crop some images. Leaving space around photos is required when you don’t want cropping and want to preserve aspect ratio. The only way not to do that is to have infinite scroll, which I guess is what corporate addiction machines want, but that’s not what I want on my own website. Here is what I did:

    https://yakubin.com/photography/albumless/

    https://yakubin.com/photography/album/kenya-2023/

    I used display:inline-block to achieve this result, effectively treating photos as text that needs to reflow into new lines. I’m very satisfied with the result and prefer it over what the masonry libraries do.

    • FireInsight 10 days ago
      You could probably have done this layout in a couple lines of CSS with a row-oriented flexbox that wraps and is center-aligned. That would be the more standard way to do it too.
    • qingcharles 10 days ago
      I don't use JS for masonry layout. I have a fallback from the current masonry CSS solution to a supported CSS solution.

      The problem is ordering. The current CSS-only solutions work fine as long as the order is not important. (though you will still end up with weirdness at the bottoms of the columns IIRC)

    • datagram 10 days ago
      Flexbox was designed for these kinds of layouts, so that would also be an option here.
  • emadda 10 days ago
    Related: I created an interactive demo of grid principles here:

    https://cssprinciples.com/3/grid/

    • victor106 10 days ago
      this is very educational and useful
      • emadda 10 days ago
        Thanks Victor, it means a lot :)
  • m3h 10 days ago
    I am wondering whether it makes sense to keep adding more "layout" options to CSS, given that we have the legacy floats and then the modern flexbox and grid layout. If there are still cases that are not covered, perhaps a better solution to to have one final constraints-based system that covers all layout cases, even if it comes at the cost of complexity. The CSS frameworks and utility libraries will then be built on top of it to provide the next generation of "masonry" grid, etc.
    • meandmycode 10 days ago
      I'm dubious that a constraints system would ever be considered, CSS has so far had some strong goals around it's predictably on layout cost.. that said, Houdini layout proposal is the closest to your comment, offloading layout to an isolated js context https://github.com/w3c/css-houdini-drafts/blob/main/css-layo... .. but honestly flex and grid, plus other things like containment have solved so many things for folks now that there's just far less demand for improvement than the days before flex
      • madeofpalk 9 days ago
        Oh man - I remember attending a CSS meetup in like 2014 at the Google offices in Sydney where someone from the CSS WG presented Houdini Layout. I would be surprised if that ever ships.
    • seumars 10 days ago
      The whole point of this initiative is to stop using out of date float-hacks, or soon-to-be out of date hacks to CSS grid or flexbox. Firefox's masonry layout is in fact implemented in such a way that basically covers all layout cases by simply adding a new attribute that collapses grid rows.
      • Terretta 10 days ago
        > Firefox masonry... by simply adding a new attribute that collapses grid rows

        Not just Firefox, the proposal here is

            grid-template-rows: off;
      • m3h 10 days ago
        >Firefox's masonry layout is in fact implemented in such a way that basically covers all layout cases

        That's good to know.

    • cnotv 10 days ago
      It IS grid, lvl 3. You can achieve it with:

        display: grid;
      
        grid-template-rows: masonry;
      
      
      This is however limited to webkit. I implemented it and ditched in October 2023 already for my private news feed in gallery mode.
      • qingcharles 10 days ago
        What do you use instead?

        I have it behind a CSS test for the existence of the CSS property so it is only enabled if the browser supports it.

    • zarzavat 10 days ago
      JavaScript is the final layout system. No declarative language can ever handle every use case. Fortunately I rarely need to resort to JS since grid came out.

      I’m not sure a constraint based system would do much good as it would sit awkwardly in the middle of grid and JS.

      • PhilipRoman 10 days ago
        With great power comes poor performance. I can immediately tell when a page uses JS for layouting (or replacing other browser functions like scrolling) as there is a noticable latency increase and the page lags about 200-300 ms behind when resizing the window.
      • baryphonic 10 days ago
        > No declarative language can ever handle every use case.

        Prolog would beg to differ.

        • jampekka 10 days ago
          • baryphonic 10 days ago
            This research is cool, but I always feel it needs an asterisk. Requiring a click or event or some external clock feels like a cop out. I've seen a similar thing with PowerPoint.

            It would be a bit like saying a language with iterations but neither first-class functions nor recursion is Turing complete as long as an external stack is provided. Or maybe it allows a stack (or recursion) but requires external intervention for function application.

            Cool hacking nevertheless.

        • wizzwizz4 10 days ago
          Prolog has well-defined execution order with side-effects. It's an imperative language masquerading as a declarative one.
        • seanclayton 10 days ago
          So would LISP, Haskell, and Erlang.
          • zarzavat 9 days ago
            Declarative in this context means no recursion or infinite loops. So none of these are declarative.
    • bazoom42 10 days ago
      You can always generate the layout in javascript if you have some requirements which aren’t directly supported by CSS layout.
  • ThatMedicIsASpy 10 days ago
    I already use this. On Firefox I just enable it in the options and make use of it for my bookmarks. On Mobile this isn't an issue since it's just stacked on top of each other (no about:config on mobile).

    The last image has it turned off.

    https://imgur.com/a/o7OyZEW

    • jamincan 10 days ago
      From what I can tell, the rules of masonry layout result in irregular sorting since, from what I can understand, it fills by row the highest available slot first, but the result visually appears as though it's sorted in columns. So if you resize your window, the order of your bookmarks would change.
    • somishere 9 days ago
      Try Firefox beta on mobile :)
  • pimterry 10 days ago
    For more background, and some detailed discussion of the opposite argument ("display: masonry" over "display:grid"+"grid-template-rows: masonry") see https://github.com/w3c/csswg-drafts/issues/9041
  • iteratethis 9 days ago
    I think it's really weird that this is considered. Masonry is a very specific layout implementation whilst the typical CSS layout feature is more foundational.

    Also, I think the need for masonry is vastly overestimated or perhaps not fully researched. It is presented/implied to be a common need but it isn't. Check the top 100 websites, check your personal top 20 websites, how many use masonry? I bet not that many, it's niche use case which also has plenty of usable alternatives. It also never even shows up in any developer surveys.

    Anyway, if we're into the game of building very specific layout solutions into CSS itself now, I'd argue the layout as seen on Google Image search is the far more useful one. It is somewhat of a horizontal masonry, but not really. Each image must keep its original aspect ratio (no cropping) whilst all images on the same row have the same height, thus filling the vertical space of the row fully. At the same time, rows must be roughly of the same height. There can be no gaps at the end of a row nor at the last row.

    Quite hard to implement, although there's articles describing how.

  • paradox460 10 days ago
    It feels good to see the webkit team actually doing good, publicly visible work again

    When I was cutting my teeth in web design, the early webkit blog and safari releases were always inspirational. The rate at which they pushed out new features in the mid 00s was astonishing

    • qingcharles 10 days ago
      They've definitely brought in some new people. AFAICT the reason Safari even has Masonry support is because they brought in the (very talented) guy that wrote the CSS spec for it.
  • account42 10 days ago
    I absolutely hate this kind of layout, especially when combined with infinite scrolling. Makes it impossible to systematically go over all items.
    • amadeuspagel 10 days ago
      It's not meant for things that you want to systematically go over, it's meant for things that you want to explore.
      • layer8 10 days ago
        Some people want to go systematically over the items when exploring. I certainly tend to operate that way, and it’s infuriating when the UI is making it difficult for no good reason.
        • yau8edq12i 10 days ago
          I guess in that case you can just browse other websites. No website can pander to everyone.
          • yashap 9 days ago
            Not sure why you’re being downvoted, it’s true. If you want to display items (normally images) with different dimensions, while respecting their natural height/width ratios, you really have 2 options:

            1) Fixed height rows: lower information density (excess white space around some of the items), but easier to scan systematically

            2) Masonry layout: higher information density (no excess white space around items), but harder to scan systematically

            Nobody is “right” here, it’s simply user-by-user preferences about what you prefer.

            • account42 9 days ago
              It doesn't even make efficient use of space because the size of items depends on their aspect ratio. Fixed size cells is a much more sensible approach.
  • lovegrenoble 10 days ago
    I always preferred to use Flexbox on almost everything; it's suitable for most situations. Also, for anyone struggling

    with flexbox - I use this tool to streamline the process: https://flexboxcss.com

  • branmcconnell 10 days ago
    I’ll admit that I was skeptical at first about including masonry in the CSS Grid spec.

    After reading through the article, I’m convinced it is the right path forward, allowing masonry layouts to utilize the same APIs and properties (columns/rows, gap, etc.) as CSS Grid.

    This would lower the bar of entry by using familiar APIs and allow simpler switching between masonry and other column/row setups responsively.

    ```css .example { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); grid-template-rows: auto; @media (width > 500px) { grid-template-rows: masonry; } } ```

  • pquki4 10 days ago
    I thought this kind of waterfall layout was cool and trendy a few years ago, but these days very few websites are doing it?
    • rezonant 10 days ago
      A big reason is because it's not possible on the web, and it's worth noting that the kind of visual you see in masonry demos is the most extreme example of what you could do with it. Most of the time it's: I want to fill a page with modules of differing heights where positionality is based on importance not coordinate, without weird gaps where items fall into the same row and constrain each other.
    • nkozyra 10 days ago
      For awhile it was just described as "Pinterest style."

      It has some use cases but for the most part it's literally a wall of unstructed information. Difficult to parse and build any mental hierarchy.

      It's also ... incredibly easy to do with existing css.

      • thousand_nights 10 days ago
        > incredibly easy to do with existing css

        care to demonstrate? given a dynamic collection of images where you don't know the aspect ratios beforehand

        • nkozyra 10 days ago
          All of the images have only a constraint on the width, the aspect ratio is irrelevant. You can still do it with a grid, you just let the browser render the images within as it would normally.

          Where it gets more complicated is getting them all to align horizontally at the bottom, which even this proposal doesn't do. Pinterest, of course, solved this by not having a "bottom."

        • crote 10 days ago
          Does it actually solve that problem, though?

          In the photo demo all content is either 1-column or 2-column wide - and that already results in some very noticeable gaps. I don't get the impression that it can properly handle arbitrary aspect ratios. You're pretty much forced to stick to a single column width and fit all images to match, so not exactly an improvement over what we already have right now.

          • echoangle 10 days ago
            It does handle arbitrary aspect ratios by scaling the image to fit the width of the column. What else should it do? It also allows you to define different widths for each column. Isn’t that exactly what you want for a masonry layout?
            • nkozyra 10 days ago
              If, for example, it rendered the child elements such that they automatically gained/lost overflow in relation to other columns, it might have some practical application that straight CSS cannot do. This would allow children to be sized vertically (effectively cropped) to produce an even square.
        • SassyBird 10 days ago
          Not the GP, but here is my website with photos with different aspect ratios. I used display:inline-block to achieve this result, effectively treating photos as text that needs to reflow.

          https://yakubin.com/photography/albumless/

          https://yakubin.com/photography/album/kenya-2023/

          Proper masonry layouts which fill all available space in practice actually crop some images. Leaving space around photos is required when you don’t want cropping and want to preserve aspect ratio. That’s why I prefer my solution over what JS libraries for masonry layouts do.

        • niutech 8 days ago
      • iainmerrick 9 days ago
        I would hope we're getting over trying to make other websites look and behave more like Pinterest. Pinterest exemplifies the worst of the web in several ways.
      • crote 10 days ago
        Yeah, it's quite weird to see such an obscure feature being proposed as a CSS standard. The demos just aren't convincing? Sure, I get the Pinterest application, but the other ones seem like a solution in search of a problem.

        In the megamenu demo the multicolumn layout is pretty much indistinguishable from masonry. The only thing wrong with it is that it allows column breaks in the middle of content. That doesn't need masonry to fix it.

        In the newspaper demo the multicolumn layout is actually better, because that's how newspapers work. The masonry demo becomes an unreadable mess.

        The museum demo almost feels intentionally mis-designed. The CSS Grid 1 layout obviously has issues, but it could've easily been solved by pulling the nav bar out of the gallery, and using a multicolumn layout for the gallery instead.

        So that leaves the Pinterest-style photo gallery. Sure, it's objectively better if you want to achieve this kind of style, but it's an outdated design with horrible UX. Why is it special enough that we need explicit support for it in the standard?

      • whywhywhywhy 10 days ago
        It's been called masonry before Pintrest was even founded.
        • nkozyra 10 days ago
          I don't doubt it, but it certainly wasn't common web design terminology. Waterfall was one I encountered frequently.
  • specialist 10 days ago
    Neat. I like it.

    Out of curiousity, why don't browsers have pluggable layout managers? Like Java's AWT/Swing LayoutManager. [1]

    Fussing with CSS and Java's stock layout managers (gridbag, table) always fills me with frustration and anxiety. In my experience, for the fussy work, it's easier to explicitly code what I want.

    Ages ago, inspired by Designing Visual Interfaces [2], I made a layout manager [3] for canonical design grids [4].

    It was pretty neat. Fluent API. Always visually correct. All the baselines aligned just so. Predictable results. Perfect for banging out CRUD forms. [5]

    1/ https://docs.oracle.com/en/java/javase/21/docs/api/java.desk...

    2/ https://www.amazon.com/Designing-Visual-Interfaces-Communica...

    3/ https://web.archive.org/web/20110302212909/http://java.net/p...

    4/ https://web.archive.org/web/20110308034949/http://designgrid...

    5/ https://web.archive.org/web/20110515182322/http://wiki.java....

  • roblh 10 days ago
    I found a really cool way to do this with svelte and css grid a few months ago, based on a blog post I can't seem to find now. A full masonry layout too, not just columns, but each element can have dynamic height and width. The thing that made it click for me was that you don't have to make the grid rows and grid columns 1:1 with the full width/height of each element. Making 10px or 20px rows and columns and then using a svelte component for each image that chose a number of columns and rows based on the image aspect ratio. I'll see if I can make the repo public today.

    Edit: reading further, I think my approach was basically the same as theirs near the end of the post!

    • qingcharles 8 days ago
      You can make something very close, but you can't order the items the same as you can with the new property (so if the order is important this might be a dealbreaker), and IIRC you end up with less attractive, more-jaggy bottoms to the columns.
  • codingclaws 10 days ago
    I built a masonry layout with only CSS and HTML 10 years ago. The site is actually still live. A scripting language is used to generate the HTML and CSS based on the dimensions of the images. But the masonry runs left to right not top to bottom.
    • thejohnconway 10 days ago
      How does that differ from just setting the images to be inline-blocks? Was it justified?
      • codingclaws 10 days ago
        It's centered basically. All rows span the same width, but the heights of the rows can differ.
    • The_Colonel 10 days ago
      That's not going to be responsive which is today a must have.
      • codingclaws 10 days ago
        It is actually responsive, I think because I used percentages in the CSS.
        • The_Colonel 10 days ago
          So it makes pictures larger / smaller based on the screen width?

          Usually what is expected is that with narrower screen, you get fewer columns, pictures are still same-ish size. You also need to keep the order of the items (e.g. on a wider screen 1, 2, 3, 4 are all on one row, with a smaller screen 1 and 2 are on a row, then 3 and 4 on another row).

          • CodeWriter23 10 days ago
            So no different than current design paradigms (which I loathe btw) which give you the exact same content regardless of viewport size.
            • The_Colonel 10 days ago
              Sure, but different from what the masonry design is meant to facilitate (check the linked demos). It's very useful esp. for a photo gallery kind of sites.
  • slimebot80 10 days ago
    Is there any examples of server-side rendering that pre-determines a masonary layout for the content?

    Like: Given these images, and this window size, here's a calculated layout to make them all look nice...

    I figure this would be more performant than any type of JS polyfill

    • echoangle 10 days ago
      How would this work when loading the page the first time? Would you check the window size and reload once just to get the first layout? And would you reload the page every time the window is resized?
  • jmull 10 days ago
    Feels like a special-purpose layout that more properly belongs in a framework than CSS.
  • hgyjnbdet 9 days ago
    Caveat: I know nothing about this, but have some experience with grid and flexbox.

    To my mind flexbox could be a basis for masonry way better than grid with less overhead.

    I also think mosaic would be a better name.

  • paulhilbert 10 days ago
    "Others are questioning whether or not this kind of layout is needed on the web at all — they aren’t sure that well-known websites will use it."

    Would it instead be possible to exclude anyone with that attitude from a discussion about an open standard? I know this sounds toxic, but I would argue that approaching public design this way is ultimately more toxic wrt the outcome and those affected by it.

    Or maybe I misunderstood that part since everyone seems to not be bothered by it at all here...

    • gwbas1c 10 days ago
      > Would it instead be possible to exclude anyone with that attitude from a discussion about an open standard?

      That attitude is rather critical and important to the discussion.

      I don't think it's the browser, or the standards bodies, responsibility to have built-in support for every possible feature we can imagine. Instead, the standards need to be simple and extensible so that that libraries (Javascript or WASM) can do creative layouts. (IE, instead of waiting for Masonry layout in CSS, you should be able to grab a Masonry layout library and include it with your web site.)

      Otherwise, we're building a system where the standards (CSS in this case) are so complicated that it's getting harder and harder to implement the standards; and are too inflexible to support what tomorrows' developers can imagine.

    • peebeebee 10 days ago
      Why? When developing standards it's very good to have good gatekeepers. Not everything should be built inside the browser if you can achieve the same with existing technologies like JS.

      Otherwise your browser(standards) might become too complex.

      • paulhilbert 10 days ago
        That is an orthogonal discussion.

        I need masonry layouts a lot and tend to be on the "we don't need another display class" side in this debate. But that's unrelated to my "rant".

        • layer8 10 days ago
          For what it’s worth, I found masonry layout always detrimental to my use of a site. I would prefer CSS not to encourage it by providing built-in support.
    • PurpleRamen 10 days ago
      Why? Any feature is a liability, so it's good to question whether a feature has to be implemented, and whether it should be in this way and position, or maybe somewhere else.
      • paulhilbert 10 days ago
        Where is the connection to "well-known websites"?
        • PurpleRamen 10 days ago
          I assume, with "well-known", they mean popular. Which means they (also) measure the worth of this feature by the number of users which might benefit from it. This is a very legit metric for this kind of situation.
    • paulddraper 10 days ago
      Surely questioning the real world usefulness is not "toxic"?

      CSS is already very complicated. Adding more options needs proportionally strong justification.

      • Turing_Machine 10 days ago
        No, but basing capabilities solely on what they imagine "well-known websites" might want is.
        • paulddraper 10 days ago
          And how would you do it sans imagination?
          • Turing_Machine 8 days ago
            You misunderstand. I don't think that using "well-known websites" is a good metric in the first place.

            That's a recipe for stagnation.

          • paulhilbert 10 days ago
            I mean the actual point of the article is to ask everyone, not just "well-known" examples.

            So it seems there were some reasonably forces in the discussion that align with my stance without the unnecessarily antagonistic (and rhetoric) primer I should've probably left out.

            Seems like a good approach to widen the discussion and improve the design.

    • bezbac 10 days ago
      I can totally understand the quoted comment. I mean, we are talking about CSS as a language here. Anything that is formalized is expected to be implemented and supported by browser engines and vendors. Browser engines are already extremely complex, so it's fair to think closely about formalizing new things when it's not apparent that there is a big enough need.

      I'm not claiming this is the case with the Mansory layout; I just understand that adding unnecessary complexity for a small target user base is a valid concern.

      • paulhilbert 10 days ago
        I totally get that. But for me there is a fundamental difference between "big enough need" and "well known websites need this".

        How are potentially thousands of niche websites less of an argument than "instagram and co don't need it"?

        • The_Colonel 10 days ago
          Well-known == highly visited == native implementation will have large accumulated impact on end users (their performance, energy consumption, improved usability ...).
    • krsdcbl 10 days ago
      I heavily agree!

      This take is imho dangerously conflates personal taste and motivation with "should a heavily generalized and clearly purposed layout system be complicated with some magic keyuword options to serve your specific intents?", and misappropriates the assumption that people like and use this form layout as a reason to approve the latter.

    • cornstalks 10 days ago
      Questioning whether something new is actually needed is absolutely worth doing, so long as it’s done respectfully.

      This is a standard that affects billions of people and many implementations. It’s great to ask if something is really needed or if it’s just adding bloat.

      We shouldn’t just grow the standard without first asking if the growth and added complexity carry their own weight. If someone proposing something can show that, then wonderful.

      But yeah, just straight up trying to block these people from being able to ask these questions totally is toxic. As long as they’re asking and participating respectfully there’s no need to be a jerk toward them.

      • paulhilbert 10 days ago
        Again: when did "well-known websites use this" become the motivating factor behind standard design?

        The blink tag was used by well-known website and it's universally recognized as a bad decision.

        • cornstalks 10 days ago
          It’s fine if you disagree with the premise of the question. But it’s also fine to ask the question, since presumably the asker wants to know the feature would get enough usage to justify its addition to the specification, and an easy way to show it gets usage is by showing some well-known sites would use it.

          But what is not fine is trying to exclude people from the conversation and silence them just because you have a disagreement.

    • rolha-capoeira 10 days ago
      And honestly, that's a ridiculous claim. Two very popular websites I can think of right away are Pinterest and VSCO. (Perhaps VSCO on the web isn't as popular as the mobile app, but the company continues to use masonry as the design evolves.)
      • grub5000 10 days ago
        Lots of sites that return a ton of images, like an of the image search sites (Google, Bing, DuckDuckGO, loads of porn sites etc.)
  • bschmidt1 10 days ago
    I do it on my portfolio site (https://www.bennyschmidt.com) in JavaScript by maintaining a `colCount` with each column just being `flex-direction: column`.

    But after seeing this I should switch to using CSS. Didn't put too much thought into it, but when I realized it wasn't immediately simple in CSS grid just did it in JS.

    • pricecomstock 10 days ago
      I have it on my website (https://packagepicker.co) in only CSS by using `flex-direction: column` and setting a best-guess max height with several breakpoints. Unfortunately it does break down in some situations because some pages have many fewer selections.

      My order doesn't super matter but I do like to maintain it. I tried for a long time using CSS columns but I didn't have good luck with that either, though I can't remember exactly why

  • fzeindl 10 days ago
    I never understood why CSS would not just adopt Apple's Autolayout and be done with it: I want to specify that this space should be equal to that space, these borders to grow, and those borders to shrink and this point always aligned to that point.

    It is simple, intuitive, it works for all cases. Instead we are inventing, what, the fifth generation of CSS-layouting now? Does nobody think this is odd?

    • pornel 9 days ago
      > it works for all cases

      It's only a fixed 2d arrangement. It isn't any more expressive than the CSS table layout or position absolute+relative combos. It has no ability to react to size constraints in any other way than naive stretching and hitting min-width hard. It can't do anything "responsive" like wrapping items to the next line, or switching a grid from 1x6 to 2x3.

      You can't make masonry in autolayout constraints, other than precomputing specific constraints for every item, which won't automatically reflow the items to a new container width.

    • layer8 10 days ago
      It’s difficult to unambiguously and usefully specify what should happen when not all constraint can be fulfilled. And you can likely also DOS browsers by exponentially exploding constraint calculations. CSS is bad as a layout system, but I also don’t like constrained-based layout systems unless they enforce that the constraints can always be fulfilled and be calculated in reasonable time. Which implies that you wouldn’t be able to change the layout willy-nilly client-side with JavaScript.
      • fzeindl 10 days ago
        Checking that the layout isn‘t exponentially complex and DOSing the browser could be a simple task for the web developer. If you want your website to perform bad you can always find a way.
        • layer8 9 days ago
          The concern is about adversarial content.
  • KwanEsq 10 days ago
    Nice to see this getting some push and attention. I still remember seeing Mats Palmgren (seemingly?) single-handedly proposing/speccing and implementing this in Firefox a few years ago. Glad it hasn't just died because it was a Mozilla proposal/experiment (with proper experimental stage), instead of something Google just dumps on the web fait accompli.
  • thebeardisred 10 days ago
    If this leads to more "forever" scrolling pages where I can never get to the footer I'll lose my goddamn mind.
  • ivanjermakov 8 days ago
    def. grid: a network of lines that cross each other to form a series of squares or rectangles.

    Masonry layout doesn't form a grid, but multiple columns with a variable item height.

    I feel like this should not be a part of CSS spec, and absolutely not a part of CSS Grid.

  • mg 10 days ago
    If one wants to do a "Masonry" layout, what's wrong with calculating it via JavaScript?
    • nolok 10 days ago
      You're asking "why render it correctly when we can render it wrong and then fix it afterwards".
      • datascienced 10 days ago
        An argument I would take more seriously if infinite scrolling was not a requirement too.
    • jampekka 10 days ago
      It'll probably end up slow and buggy. And likely explode when used with other layouting mechanisms. And it won't benefit from the quite awesome CSS debugging tools we have nowadays.

      But yes, more powerful "client side" layouting functionality would be very welcome so we wouldn't have to wait the commitees for a decade to center an element etc. And there is the "Houndini" project to get this going, but the browser support is still extremely poor: https://houdini.glitch.me/

    • isodev 10 days ago
      Because why introduce a custom abstraction to implement something with an imperative scripting language when you can achieve the same result with a declarative language built specifically to address this use case?

      You'd rather maintain all the maths and JS dependencies for this than have browsers just render what you want?

      • crote 10 days ago
        The question is, where do you draw the line?

        It's obviously not viable to implement literally every single design imaginable straight in CSS. If I want to do something silly like placing my content on the faces of a hypercube it wouldn't be realistic for me to expect that to be part of CSS. Having me write some JS is completely acceptable - that's what it is for, after all!

        It's not a matter of "would this be better in CSS", the answer to that is painfully obvious. The relevant question here becomes "is this common enough that it warrants a CSS implementation". And honestly? In the case of Masonry I am not convinced it is.

        • mvonballmo 10 days ago
          As they explain in the article, a row-less layout with columns is quite common in the non-web world. They acknowledge that some people are arguing that it's not needed because nobody's using it (on the web). Nobody's using it (on the web) because it's not possible in CSS.

          The argument is that the popularity of the layout in contexts where it's possible is a strong argument for enabling it on the web as well. This is not a layout that they just thought of and are trying to invent.

          • crote 10 days ago
            I'm not seeing any evidence for that, though.

            Row-less layouts with columns are indeed quite common in the non-web world - see for example newspapers or other dense text. But that can already be done with current CSS features, and the row-first placement makes this proposal completely unsuitable for that. Masonry actively makes that worse, because it screws with the regular reading order.

            They argue that nobody is doing it because it can't be done in CSS. I would argue that nobody is doing it because it's a bad idea. We've seen people work around it not being in CSS by using Javascript to make galleries for years now, if there were other use cases they'd surely have done the same?

            With the exception of Pinterest-style galleries (and lets be honest, that's not exactly the pinnacle of UX either) I really don't see a widespread use for this feature. Their three other demos sure aren't convincing me.

        • isodev 10 days ago
          I totally agree, and it does make sense to make adjustments that would make layouts more accessible. Mansonry-like layouts are common ("make it look like Pinterest") and so why not facilitate this entire class of use cases? The alternative is for everyone to either look for libraries or hax-together something that looks like Masonry but don't look too close and don't resize the view port too much.

          Honestly, I'd say kudos to the WebKit folks for opening the discussion and being transparent about the process and the tradeoffs. It can certainly help refine (or inspire) future proposals.

      • pavlov 10 days ago
        It’s been nearly 30 years now that we’ve heard this refrain about CSS. Somehow the dream of “just tell the browser to render what I want” still remains elusive.

        But maybe it’s just a few dozen more properties and mini-DSLs away this time! Pay no attention to those sirens and false prophets who still believe in anti-CSS “tell the computer how to do exactly what you want” programming…

        • blowski 10 days ago
          Is it easier to build a layout with CSS compared to 20 years ago? Yes. Can we further improve CSS? Yes.
        • isodev 10 days ago
          I'm no prophet and CSS, just like any other language has its quirks. And yeah, generally it is my job to try and tell computers what to do so I like powerful tools that let me do what i want :)
          • pavlov 10 days ago
            You’re missing the irony in the second paragraph. CSS proponents are ideologically opposed to simply telling the computer how to do what you want.
            • jampekka 10 days ago
              I agree that there should be an "escape hatch" to implement stuff that evaded the great wisdom of the commitees. The Houdini project may become such: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Houdini

              But I do also see the benefit of a declarative system for most cases. Adaptive layouts are hard to do with imperative code, and very easily lead to e.g. infinite loops, so it's nice to work with a declarative system that guarantees a stable layout. That said, CSS is far from an ideal such system with so much ad-hoc and legacy baggage.

            • sham1 10 days ago
              Well, as far as I at least understand it, the argument is that by using JS for this, you are indeed telling the computer what you want, you're just doing it by telling the computer it by telling it exactly how to do it. In contrast, in CSS, you're telling the computer what you want by… telling it what you want, and letting the browser engine worry about the how.

              CSS isn't perfect, but it certainly works nicely for declaring layouts most of the time. It's of course alsp easy to get wrong, but doing all of the layout logic manually doesn't seem like a proper solution.

    • rezonant 10 days ago
      There is no reasonable fallback when JS is not present or hasn't yet executed, and that's not acceptable.

      I can't stress enough how important this is for content experiences. Your content must display reasonably before all bells and whistles load, and when the bells and whistles load, your content had better not shift dramatically (ideally not at all).

      • sebzim4500 10 days ago
        I would expect most browsers that aren't running JS do not properly handle state of the art CSS extensions.
        • rezonant 10 days ago
          Such browsers can also get by based on the semantic ordering of content within the document, which will more closely match the visual reality when a masonry type layout is used. The alternative of defining several columns leads to at least one column being shoved all the way at the end of the document after the previous column, whereas in a masonry layout that wouldn't be the case.

          This is where a proper solution to this problem shines: After all, when you are on mobile (at least 60% of your users), they will get a single column anyway. Any solution that doesn't solve for them is a nonstarter.

          That being said, it is the slow loading of JS and the folks using truly modern browsers with JS turned off that are more common, and for those people this isn't a problem.

          • jampekka 10 days ago
            JS masonry libraries, e.g. masonry.js, can and typically do use the HTML for the content and just lay it out similarly to what CSS does.
            • rezonant 10 days ago
              But the screen size is an important part of how the library will lay out the bricks, and that isn't known until JS runs (this can kind of be done with client hints, but not on initial page load)
              • jampekka 10 days ago
                I was referring to the document still having the semantic structure. E.g. masonry.js also supports relative sizing, so it doesn't need to know the screen size beforehand.
        • kevincox 10 days ago
          Or is your average email client? Many of these support modern HTML with scripting and remote content disabled.
    • xrisk 10 days ago
      I’d rather have browser vendors responsible for a correct implementation. This seems like a rather nuanced feature.
      • jampekka 10 days ago
        With browser vendors you have to get them to do the same implementation. With JS/WASM it'll work across browsers given the more fundamental APIs work the same.
    • iainmerrick 10 days ago
      The main problem is that JS runs in a single thread and blocks the browser. Browsers jump through a ton of hoops to do scrolling and rendering on background threads while still allowing JS hooks and callbacks as required by web standards.

      But, I think it's really the ONLY problem, and if you solve that problem, doing this stuff in JS would be the right answer. You'd be much more likely to get consistent behavior everywhere, without browser-specific quirks.

      And part of the solution exists already! JS doesn't have to block the main thread any more, because you have things like Web Workers and WebAssembly.

      Rather than adding another specific layout type, we should add a general-purpose way of hooking into the layout engine from a background task.

      Update to add: just saw from another comment in this thread that there's already an effort underway to do this, called Houdini: https://news.ycombinator.com/item?id=40130487 Cool!

      • mmis1000 10 days ago
        You can actually make a working masonry layout with css alone(even make it work with browser resize), if you do know the aspect ratio of each item. The hard part is handling the column count change and item prepend/insert because that would always require js to do.(since tha would change the position and column of every item)

        There is no logic of js required to do handle whatever screen resize.

        https://codepen.io/mmis1000/pen/gOyZJqE

    • tambourine_man 10 days ago
      It’s less smooth, uses more power, requires more bandwidth, etc.
    • greasyphalanges 10 days ago
      By doing it in CSS you eliminate the need to re-render your DOM and make your JavaScript do more useful tasks, and make your website more resilient to scripts crashing, freezing, or being disabled by the user. Also, one would think that a pipeline of JavaScript + rendering engine falls short to a more direct solution, as browsers cheat by not using JavaScript ;)
  • thih9 9 days ago
    How can there be an “inventing masonry” section without a reference to the masonry js library[1] - I suppose this is where the name comes from?

    [1]: https://masonry.desandro.com/

  • danjl 10 days ago
    The vertical layout is simple to implement. Horizontal is much harder, and more useful for media like images and videos, see Flickr. None need CSS. And, if you are going to do it in CSS, you better handle both, not just the easy less useful variant.
  • nsonha 9 days ago
    CSS is such a failure. Grid is the 3rd or 4th iteration of layout methods and still you need to think this much about how to code a layout? This is the most basic thing in UI and we've been doing it for 3 decades.
  • Onavo 10 days ago
    Can you add drag and drop to this? Currently you need libraries like https://gridstackjs.com/, especially for nested cases.
  • tomp 10 days ago
    This is readily achievable today with `columns`: https://primozic.org/aesthetics-art
    • sn0wleppard 10 days ago
      That example doesn't achieve the second objective of the proposal, "It distributes content across the page (instead of flowing down each column, one by one)."
  • Unai 10 days ago
    I really don't like how disingenuous, propagandistic and patronising Simmons is being in this article. Ending each section saying "all this will be impossible if not done the way I like", which is absolutely not true. There's not one reason why anything that can be done in "display: grid" couldn't be done with "display: masonry".

    But I think, and I hope, that people aren't the fools she's taking us for, and can see how absurd her proposition is.

    You could basically clone the grid specification, if you want all those features, and that way both can be developed with what works for each. She says doing that means new grid features might take more time to come to masonry. Really? More time than having to deal with new grid features that won't work at all with your version of masonry integrated in grid? You're still having to deal with two layout systems, even if you want to disguise one of them. Except doing it your way you can't select which system gets the features that work with it.

    At the end, instead of two layout systems with two complete sets of features, we'll have one single layout system with a bunch of features that sometimes work and sometimes doesn't, depending on a particular value of a particular declaration that you'll have to know about. And that's why people hate CSS.

    Seems lazy and an absolute mess to maintain. And it doesn't make sense at an intuitive level, since masonry works similarly to flexbox, not grid; and it doesn't make sense at a logical level either, since a masonry layout is not a grid.

    But I guess this is what we'll end up getting, since apparently anything Jen says goes. Like the ridiculous idea of doing "CSS4", which means nothing, does nothing and is nothing, but we're going with it for some reason anyway.

    • troupo 10 days ago
      > I really don't like how disingenuous, propagandistic and patronising Simmons is being in this article. Ending each section saying "all this will be impossible if not done the way I like"

      This is a very uncharitable way of reading this, and that's a polite way of describing this view.

      She shows what is possible, and how existing grid mechanisms can be leveraged for masonry layout. It's implicit that coming up with a proposal outside the grid would need to accommodate the same capabilities somehow.

      How is it patronising or disingenuous? They (and Firefox) literally implemented this and are showing what is possible. And are asking you for input. If you think you're incorrect, you can join and show them the error of their ways:

      --- start quote ---

      Our hope is that web designers and developers chime in (post to social media, write blog posts) with your thoughts about which direction CSS should take.

      Some people, including those of us at Apple, like having “Masonry” be part of CSS Grid. We believe this functionality is a mechanism to expand CSS Grid — allowing it to finally create columnar grids as well as modular grids. And we want this functionality to be mixed with all the other features of Grid, including the powerful options for defining a columns, track spanning, explicit placement, and subgrid.

      Other people instead believe Masonry should be its own separate display type. At first glance, defining Masonry with a new display type might make a lot of sense. You do get a tidy separation between layout types.

      --- end quote ---

    • SigmundurM 10 days ago
      I wonder, what theoretical features could we have for a modular grid that'd be fundamentally incompatible with a columnar grid, and vice versa?

      If adding columnar grids to CSS Grids doesn't make any features impossible, then I don't see why we shouldn't just have one CSS Grid standard, and thus always ensure feature parity between modular and columnar grids.

      The argument being portrayed by Simmons, as I understand it, is that every feature that currently works for CSS Grid's modular grids, would also work for a columnar grid.

  • cnotv 10 days ago
    I evaluate the CSS updates based on the gap in masonry layout achievement. It's one of the most important layouts that have existed for more than a decade and should have been the only achievement after flexbox and grid. If you have a bunch of media, unless you have a narrow container like FB/IG, that's the only way to go. The alternative is fixed ratios. Anyone who has been working in FE knows it.
  • egypturnash 10 days ago
    I feel like I spent this whole proposal waiting for "grid-template-columns:masonry" to be discussed.
  • 6510 10 days ago
    My proposal would be to put the image dimensions in the name of the image file. example-400x200.jpg

    Without that I cant think of an "easy" to implement formula to keep each column the same length.

    If given a group of numbers, how would one divide them into 8 groups the same size?

    Extra fun: You may increase each number by n in order to make each group exactly the same size. n must be as small as possible.

  • luc_ 10 days ago
    Looks convenient, but another step towards a monoculture internet. :(
  • nofunsir 10 days ago
    No thank you. I just want all the whitespace to take a hike. I certainly don't need this layout if webdevs are just going to put all the content on the center 1/3 to 1/4 of my screen.
  • rezonant 10 days ago
    Oh yes please. Masonry is definitely the missing piece right now. And I run into cases where designers give it to me pretty regularly-- I don't want to crush their dreams but without a JS-free masonry solution, the dreams are getting crushed.

    OK, having read a lot more, here's my thoughts.

    I love the possibilities that can be raised here when masonry is built into grid, but you can target specific rows and columns for specific elements in grid. This is a useful thing for some layouts, but when the rows are truly non-existent (unlike the related auto fill/fit stuff we've had until this point) I feel like the abstraction begins breaking down. As much as I love that we have Apple pushing to get this done, I do think it is probably better to go with a net new masonry display type :-/

    • mickael-kerjean 10 days ago
      100% for masonry as well, couldn't care less about the approach as long as the selected one doesn't see the same fate as websql and it becomes a viable solution in a reasonable amount of time.
      • rezonant 10 days ago
        Yes that's where I'm torn. I love seeing vendor interest either way.

        But grid is already extremely complicated, and so easy to get wrong it's a meme at this point. Creating even more confusion about how it's fundamentals work feels like the wrong path :-/

  • phkahler 10 days ago
    Umm. Can't you just make each column a subgrid within a larger grid that has one row?

    It seems like either these constructs are poorly designed, or people don't see how to use them to get what they want.

    • PullJosh 10 days ago
      As I understand it, the hard part of a masonry layout is ensuring that items are laid out with the first items near the top of the screen and the last items near the bottom of the screen.

      If you just plop your items into columns, the first items will all appear in the first column and the last items will all appear in the last column (left to right), which is not the behavior you want.

      To my knowledge, the correct behavior cannot currently be created in CSS alone. (Or if it can, it must be a wild hack.)

      • phkahler 10 days ago
        If people want to choose where things land they can do that. Therefore I assume we're talking about a scenario where the items are not known in advance - i.e. they come from a database query or similar. Is there no way to SELECT every Nth item when doing a query? Return a count and select where count MOD N = k? Dump those in a column.

        This feels like "I want my layout algorithm to be part of the standard." and if you don't think so, see the part where they also want the equivalent of "colspan = 2" for some itmes - possibly with another pattern to define which ones.

        • threeseed 9 days ago
          But what if you resize the browser or turn the screen on your iPad.

          Would you really want that to trigger an entirely new set of SQL statements ?

        • micromacrofoot 10 days ago
          > "I want my layout algorithm to be part of the standard."

          I mean, yes... it's a very common layout algorithm so it gets standardized

  • mattbessey 10 days ago
    > This layout creates uniformly-sized columns, without any rows

    I find it amusing that they've decided to refer to this as masonry layout. If you actually built a wall like this (as opposed to uniformly-sized rows, without any columns) it would be a structural engineering disaster.

    • cfj 10 days ago
      Probably influenced by the most popular JavaScript library for achieving this type of layout, Masonry[0]. The author notes at the end of the article:

      > But do expect the name of this value to change in the future. And perhaps prepare for a future where we call this “columnar grid” or “Grid Level 3” instead of “Masonry”.

      [0] https://masonry.desandro.com/

      • joenot443 10 days ago
        I expect this is the case, if I had to describe that layout in iOS-land I'd also call it "masonry".

        It's a pretty common descriptor in the Wordpress world - grids/scrapbooks will often have masonry as one of their layout styles. Maybe 100 years from now when people are browsing in their neurodisplay they'll be able to think "masonry" and have their photos tile the way they like, never having heard of Javascript or CSS in their lives. Language is neat like that.

    • wildpeaks 10 days ago
      It makes sense they'd pick this name, it refers to the jQuery plugin that was popular for doing this kind of layout back in the 2010s, so it's a convenient shorthand.
      • lloydatkinson 10 days ago
        [flagged]
        • robertlagrant 10 days ago
          It wasn't accidentally popular. It was just very good.
        • sausajez 10 days ago
          Accidentally? How can something be intentionally/ unintentionally popular?
          • PurpleRamen 10 days ago
            Marketing makes something intentionally popular.

            Accidentally, seems harder. It kinda smells for people to intentionally make it not popular by actively working against fame, or something like that..

            • robertlagrant 10 days ago
              > Accidentally, seems harder. It kinda smells for people to intentionally make it not popular by actively working against fame, or something like that..

              It's not harder; it's the only thing that works for tools. Tools cannot be good for long because of marketing. Marketing is the thin layer of paint over the Ferrari. Very nice paint, but if the car doesn't work or go very fast very quickly then that's that.

        • throwup238 10 days ago
          That ship sailed with JAVAscript in 1995.
        • kreetx 10 days ago
          It's often referred to as the masonry layout, so why not?
          • chickenchase-r 10 days ago
            because every new construction requires a solid cornerstone? every archway a keystone? dont forget to put your boots in the trunk and your trunk in the boot. Nucular aluminum? I dunno
        • lloydatkinson 10 days ago
          [flagged]
          • The_Colonel 10 days ago
            JS DOM API is still abysmal and jQuery API is still great. No worshipping needed.
            • recursive 10 days ago
              Really? Genuine question, which part? If there are too many to name, how about just one? It seems pretty good to me.
              • The_Colonel 10 days ago
                My favorite is this comparison for checking whether an element is hidden:

                    $(el).is(':hidden')
                
                vs.

                    !(el.offsetWidth || el.offsetHeight || el.getClientRects().length)
                
                DOM API has other problems like lack of chaining which forces you into a very imperative style of programming, e.g.:

                    $(".alert").hide();
                
                vs.

                    for (const el of document.querySelectorAll(".alert")) {
                         el.style.display = 'none';
                    }
                • recursive 10 days ago
                  I've never had a case where I didn't know the reason or mechanism by which an element would be hidden. In my code, I use the `hidden` property. In that case it simplifies from

                      $(el).is(':hidden')
                  
                  to

                      el.hidden
                  
                  It's not quite as succint as your jquery, but you also could have written this.

                      document.querySelectorAll(".alert").forEach(el => el.hidden = false);
                  
                  Is it less imperative? I mean I guess it doesn't have an explicit loop, but I don't really see why that's good or bad.
                  • The_Colonel 10 days ago
                    > I've never had a case where I didn't know the reason or mechanism by which an element would be hidden.

                    Unfortunately, I usually don't keep the whole codebase in my head (including libraries), so I often don't know the reason.

                    The more general point is that I don't want to have to know, because the mechanism of how it is hidden is not what I care about.

                    > It's not quite as succint as your jquery, but you also could have written this.

                    Yes, it's more than three times as long as the jQuery variant.

                    • recursive 10 days ago
                      Ok, I get it. Fair points. I'm not a jquery hater. In a lot of cases, I'd rather write jquery than react for instance.
              • troupo 9 days ago
                jQuery has a fluent interface and often shorter/smaller/more convenient APIs on top of that.

                DOM APIs are quite literally 90s era Java-style APIs.

                While DOM APIs have pulled in a few niceties over the years, some of them are really anemic (e.g. querySelectorAll does not return a proper Array-like object). Worse is combining them. Almost every API is a single-shot tedious step-by-step chore.

    • londons_explore 10 days ago
      From a structural engineering point of view, this is because of the extra 1G of force keeping the rows together, but nothing keeps the columns together.

      Since bricks have some tensile strength, but mortar (the 'glue' between rows and columns) has ~none, that means that, if you must have lines of weakness, you would prefer they be horizontal than vertical.

    • 627467 10 days ago
      "masonry layout" is a term used for at least a decade[0] Pinterest is probably the most famous implementer of this layout

      [0] https://www.sitepoint.com/understanding-masonry-layout/

    • wongarsu 10 days ago
      Maybe there should be a grid-template-masonry-direction? Just quickly surveying a couple of sites, "masonry" and "horizontal masonry" seem to be about equally common.

      On the other hand horizontal masonry is constructed very differently: Flickr fits thumbnails into a row until it reaches some predefined total length, then scales everything down slightly so the total row width matches exactly (resulting in rows of different height). Deviantart does something similar, but shuffles the images for better fit so that the different row heights are barely perceptible.

      • chuckadams 10 days ago
        Filling rows without any defined columns is more or less what flexbox already does.
    • rezonant 10 days ago
      But masons build floors like this all the time, and it is not an engineering disaster. That's the metaphor.

      The reason you think it would be a disaster is the load of gravity against it, a concept they have not yet introduced into CSS, thankfully.

    • mrighele 10 days ago
      Nothing that a transform(90deg) cannot solve :-).

      More seriously, what you describe is quite doable with flexbox (flex-direction: row, flex-wrap: wrap and flex-grow: 1).

      Interestingly, even the Masonry layout was already doable using a simple multi-column layout, the "only" issue is that instead of having the items left-to-right, top-to-bottom (ordered by row) you have them top-to-bottom, left-to-right (ordered by column) which is not what you want most of the times

      • hennell 10 days ago
        There's a CMS I use that has a photo search option. It loads in images in a column ordered masonry layout, which when you scroll down adds new images to the columns, so all the pictures move about and you've no idea where you are.

        It's infuriating.

    • Terretta 10 days ago
      > amusing that they've decided to refer to this as masonry layout

      They haven't decided this. Keep reading!

      TL;DR:

      Perhaps the best syntax could be grid-template-rows: none; to convey “please do not give me any rows”. Sadly, it’s too late to use this name, because none is the default value for grid-template-* and means “please give me only implicit rows, no explicit ones”.

      Instead we could use the name off to convey “please turn off the grid in the row direction, and give me only columns”.

          grid-template-rows: off;
      
      But do expect the name of this value to change in the future. And perhaps prepare for a future where we call this “columnar grid” or “Grid Level 3” instead of “Masonry”.
      • rezonant 10 days ago
        This is creating a mode of grid where we say "it's not actually a grid" and is my biggest problem with this philosophically. It makes more sense to treat it as it's own display type, where the row/column targeting don't exist. It's not just that row targeting doesn't exist, it also makes no sense to target columns.
    • georgesimon 10 days ago
      I think, in structural engineering terms, it refers to old natural stone wall [0] construction methods. Some bridges around me are made like this, and they're over a thousand years old.

      But I agree that it's not a good adjective because I had the exact same first thought. Both "natural" and "stonewall" would be better, and they're not great names either.

      [0]https://duckduckgo.com/?q=natural%20stone%20walls&ko=-1&iax=...

      • treflop 10 days ago
        Masonry just refers to working with bricks. It's old as time but we still make stuff out of bricks and you can still be a mason today.

        https://en.wikipedia.org/wiki/Masonry

        • georgesimon 10 days ago
          It seems your are saying it is only relates to bricks? But it's not, it's any stone, cut or formed.
      • mewpmewp2 10 days ago
        I associate masonry with the old ages, since this is one of the technologies you research in Civ games and back then I think people did have stones in non-standardized shapes and were just trying to fit things together. I'm not native English speaker, so I first heard this term from the games.
        • georgesimon 10 days ago
          Yes, it has that association in English.
      • rezonant 10 days ago
        There's no gravity here, so the comparison makes no sense. In walls masonry construction produces sheer lines horizontally, an axis gravity is not bearing upon. This feels like taking the metaphor just a tad too literally.
        • georgesimon 10 days ago
          I didn't think so, of you look at old stone walls, there's an absence of continuous horizontal or vertical patterns. (However the discussion was a fork, about wall building, so it was quite literal)
      • HPsquared 10 days ago
        Surely they would not build like this. You want to avoid vertical shear planes.
      • ryanblakeley 10 days ago
        "Dry stack" is another term for that, a stone wall without mortar.

        In my opinion, thinking of this as a grid is misguided. It's barely different than flex columns. I would want to be able to have some objects take up more width than one column, or not have clean columns at all. Like "space filling" and "mosaic".

        • georgesimon 9 days ago
          I don't think of dry stone walls as masonry myself. I actually think that's the distinction between masonry and not-masonry!

          But anyway, I think the second last section on the link, the part that addresses the wrongness of the name, would align with your opinion.

    • exyi 10 days ago
      I think this is just transposed masonry, the wall looks ok if gravity is on the left. "Transposed" is redundant though, since I assume it will work in both grid-template-columns and grid-template-rows
    • datascienced 10 days ago
      Might be ok for a footpath?
      • FalconSensei 10 days ago
        Masonry layout is pretty common for streets, sidewalks, driveways, etc, at least in Brazil
    • Menu_Overview 9 days ago
      If you read it to the end, you'll see their note on the name. That is also something they want up for debate.
    • dkdbejwi383 10 days ago
      Wonder if they'll add support for `masonry-arrangement: flemish-bond;`?
    • paulddraper 10 days ago
      Thank you. I was confused as well.

      A name for the inverse I suppose

  • pavlov 10 days ago
    If the designers of Unix had seen the light of CSS, they wouldn’t have bothered with shells and file descriptors and C and Awk and all that composable flotsam.

    They’d just created a single program, call it the “Central Software System”, and defined thousands of properties that let you control its state machine to produce the output you need.

    Presto! The perfect computer. If for some reason someone needs a new kind of output, it can be added to the Central Software System via a friendly decade-long committee process.

    And if the properties happen to conflict in how they define some output, well, the one company in the world who has actually implemented all of this “open standard” can decide what happens in that case.

    • afavour 10 days ago
      It’s almost - almost! - as if the designers of Unix and of CSS work in completely different scenarios and with completely different constraints! Almost!
      • pavlov 10 days ago
        And with this convenient domain excuse, CSS has managed to become a system that’s not a fit for any domain.

        It’s incomprehensible to visual designers, incomprehensible to programmers, and incomprehensible to document authors.

        On the upside, it provides a massive moat of sunk cost and implicit implementation dependency around Chromium, so at least there’s that.

        • dada78641 10 days ago
          While I agree that CSS is sometimes difficult and obtuse, and getting things working in it is more of an art than a science, it's actually shockingly easy to get basic layouts working in it these days even as a total beginner. CSS is very powerful and you can learn the basics very quickly.

          It's also worth keeping in mind that CSS is sometimes more complicated than it seems like it should be due to accessibility concerns and flexibility. That's why you can take some HTML produced by some part of your system and use it in completely different contexts with totally different designs, entirely as is, just by adding a few different rules.

          I've been doing HTML dev since the late 90s and things were infinitely more difficult back in the old days. CSS might have been simpler, but doing complex things required tons of bizarre hacks that also made your design more frail and less accessible. These days CSS has improved to the point where you can do just about anything, and even very complicated effects can fairly easily be deconstructed just by looking at the devtools and poking around until you get it.

          CSS isn't perfect, but all things considered I'm not complaining.

        • miunau 10 days ago
          Maybe you need better glasses. This proposal is coming from the Webkit team, ie. Apple. CSS is plenty comprehensible and using it gets better with every browser release as they are focused around yearly interoperability efforts.
          • jampekka 10 days ago
            I happen to quite like CSS (in comparison to any other layouting system out there), but I really wouldn't characterize it plenty comprehensible.

            I'm quite certain there's no human on earth that could reliably predict the outcome of most non-trivial real-life CSS layouts given just the code. And even though the situation has improved a lot, it's still common to have to use clearfixque hacks that definitely weren't envisioned by the commitees.

            • echoangle 10 days ago
              Isn’t that true for most software? Do you think you can simulate the outcome of a semi complicated Python Codebase just by looking at it? That’s just an intrinsic property of the problem you’re dealing with, adaptive page layout will always be complicated and not easily understandable just by looking at code.
              • jampekka 10 days ago
                I think I'd have a lot better shot with a semi-complicated Python codebase to be correct. Even with GUI stuff if using something like e.g. Qt box layouts.

                Yes, CSS is a lot more powerful than those kinds of systems. Perhaps comparable to constraint satisfaction layouts that tend to be quite surprising.

                But even so, there are so many settings and their combined behavior in CSS that it's, for me at least, totally infeasible to try to code much CSS "up-front" without constantly checking the result of the changes. And I don't mind it that much, but I'm quite certain that a more "predictable" equally powerful layouting system is entirely possible.

                It could be an interesting challenge to show people some layouts and ask them to produce them using CSS without being able to iterate the results.

          • pavlov 10 days ago
            AFAICT, practically nobody picks WebKit over Blink/Chromium for new projects.

            The reasons why Apple still maintains their own browser engine have to do with corporate prestige and expensive insurance policy. They can afford it because Apple is literally the world’s richest corporation.

            Nobody else does anymore. Even Microsoft gave up on their own browser engine despite having 97% market share two decades ago. And Mozilla is bankrolled by Google as their own kind of insurance policy.

            • miunau 10 days ago
              Safari has 24% of the browser market.
              • pavlov 10 days ago
                Not on merit but simply by being the only allowed option on iOS. Nobody chooses Safari because it runs WebKit instead of Blink.
        • camillomiller 10 days ago
          It’s always funny to read people that just never understood CSS trying to convince everyone that CSS is impossible to understand!
          • bryanrasmussen 10 days ago
            it's better on HN because you can get it combined with snide insinuations that they could have created a better layout system that would do all the things that CSS does, but also fix the various problems that CSS has.

            However the glory days are evidently behind us, because these insinuations never end with "in a weekend" anymore.

          • jampekka 10 days ago
            I'd be surprised to hear anybody with intimate knowledge of CSS claiming to understand CSS.
          • crispyambulance 10 days ago
            Yes, that's fair.

            Sure, today we have grid and vanilla CSS is sane and useable by anyone who takes the time to learn the modern way of doing things.

            But let's not forget what a long and tortured road CSS has taken to become what it is today. CSS was a total dumpster fire up until around when flexbox came out. It was SO HARD to make it do what you want for SO LONG.

            The MOST BASIC NOTION of layout, putting things in a freaking grid, was missing from CSS for almost two decades. Yet, the grid concept has been around in application layout since the 1980's. I can't explain why it took CSS such a long time, and the explanations I've heard don't seem plausible to me.

            It's understandable that folks who were around in the bad days of CSS are still kind of bitter. I was, and if I didn't take the time to see the new ways of using it, I would still be incredulous about CSS.

            • afavour 10 days ago
              > I can't explain why it took CSS such a long time

              It is weird to look back on but the web platform essentially went through a dark ages for a while. You could say the same about why it took us so long to get to ES6 JS, too. The standards bodies were frozen in ice (and I don’t quite know why either), everyone was debating HTML5 vs XHTML and somehow the rest of the platform floundered for years.

              • marksbrown 10 days ago
                Microsoft failed to capture the internet. IE6 can still cause sane minds to crack.
            • bazoom42 10 days ago
              > The MOST BASIC NOTION of layout, putting things in a freaking grid, was missing from CSS for almost two decades

              This is not true. CSS have had ‘display:table’ for 25 years, which is a simple grid layout model equivalent to html tables. Content can be aligned in rows and columns.

              ‘Display:grid’ is much more powerful of course.

              • crispyambulance 10 days ago
                Yeah, I remember those. It was intended as a way to make "tables" using divs.

                That way, we could pretend to do page layout with CSS, while still feeling shitty about repurposing something meant for tables.

                There's just no justifiable reason for putting whole-page lay-out on the back-burner for so long. So many other far less important things came out before grid, it feels almost like it was deliberately spiteful to delay it so long.

                • bazoom42 10 days ago
                  Why would you feel shitty about using ‘display:table’?

                  It puts things into a freaking grid as you asked for.

                  • crispyambulance 10 days ago
                    For a long time, css was a huge step backwards from what we were accustomed to with desktop application layout mechanisms.

                    Web-apps were "a thing" starting in the very early naughts, yet just getting stuff to stick where you wanted it on web page required a bunch of stupid hacks and accommodations. Of course people resorted to using tables for page layout. The display:table thing was just a continuation of that.

                    Whole-page layout should have been an absolute top priority for the folks that controlled css, yet it seems they just didn't care until grid finally came out in 2017-ish? I just don't understand why that is.

                    • bazoom42 9 days ago
                      It is still not clear to me why you discount display:table as a valid and useful tool for placing content in a grid.

                      Sure, it is not as sophisticated as Display:grid eg it doesn’t support changing the number of columns depending on the viewport width and it doesnt support elements overlapping multiple grid cells. But many common “full-page” layouts, like header, sidebar, footer can be expressed using “display:table”.

                      • crispyambulance 9 days ago
                        My memory is a bit foggy, but I recall there was an issue with older browsers back in those days not supporting display:table.

                        So if you wanted to "do right" you could not because IE6 was still "a thing" and did not support display:table. You were forced to use actual tables for layout or do endless tedious workarounds to make things work.

                        Who to blame? The W3C? Microsoft? I don't know but I glad those kinds of problems are mostly over.

                        • bazoom42 9 days ago
                          Oh yeah, IE 6 did not support display:table. This was the age of hacks. Microsoft basically managed to block any progress on web standards for half a decade.

                          I’m not sure why you’d blame this on W3C though. IE stasis froze any standard including ECMAScript. It was Microsofts attempt to halt the progress of the web because they considered it a threat to their desktop dominance. Luckily it didn’t work.

                  • jampekka 10 days ago
                    There was a huge cargo cult adamantly against using tables back in the day, even though the "true way" of hacking divs with float and clearfixes and invisible images was totally broken. Somehow having bunch of wrapper and empty divs was "more semantic" or something.

                    I was in the cult. It was totally inane, but seems to carry some effects to this day.

                    • bazoom42 9 days ago
                      The movement was against using html table markup (<table>, <tr> etc.) for layout because of the accessibility issues. It was not against the CSS display:table since that does not affect accessibility.
                      • jampekka 9 days ago
                        IE didn't support display:table until version 8.
        • snapcaster 10 days ago
          Not fit for any domain? It's one of the most widely used "programming languages" in the world. It's clearly fit for many domains I don't know why people have to be so dramatic with their tech opinions
          • bodantogat 10 days ago
            I don't get the drama either. The issue I have with CSS is less about the spec itself, and more about browser compatibility. I'd be dead with caniuse.com and MDN. Having said that, when I build a new page, I rarely need to spend more time laying out the html & css than it takes to type it out and test. Creating cross platform, responsive web pages is a solved problem now.
        • greasyphalanges 10 days ago
          I will concede to an argument that CSS exemplifies "design by committee" pejorative and is blighted by backward compatibility woes, but rest assured, it does its job as best as it can. Web development has patchworked its way out of most problems it has created, making it somewhat burdensome to learn. I'd say that is its Achilles's heel.
        • afavour 10 days ago
          I’m a web programmer and I find it comprehensible. Sure there are times I need to go to the docs but vast majority of the time I can work with it just fine. I’d agree that it probably is incomprehensible to many visual designers but unfortunately so is code in general. CSS is complex, especially these days, but I feel like those who don’t work with the web every day simply don’t get to experience it often enough to know that it does make sense within its domain.

          But sure, if you want, CSS is a conspiracy theory to ensure the dominance of Google.

          • Joker_vD 10 days ago
            Of course it is, there is even the word "masonry" in TFA's name!
          • pavlov 10 days ago
            It’s not a conspiracy. It’s a well-intentioned but poorly thought-out design for basic 1990s word processing layouts that accidentally blew up to describe entire application GUIs, and now it’s not in the interest of the stakeholders to try to do anything about it.

            It’s the same kind of growth pattern as government bureaucracies. Those are largely not conspiracies either, despite the occasional optics.

            • afavour 10 days ago
              What you’re describing is the organic growth of a platform. The web is undeniably more complex than it was twenty years ago but needs are more complex too. Yes, the complexity does benefit major players but that isn’t the reason the complexity exists.

              It’s ironic you’re saying that CSS is some form of vendor lock in. I have to imagine that if Google proposed a new layout engine for the web tomorrow they’d be roasted to kingdom come for their attempt at taking over the web.

        • JamesSwift 9 days ago
          HTML and CSS were created in a time where the entire point was to provide marked-up documents to be read. Now the browser is mainly a generic application runtime.

          Its like if the terminal was actually now mostly a video player and people complaining about how awk and sed are tough to use against video frames.

        • yau8edq12i 10 days ago
          And yet, somehow, I browse websites using CSS successfully every day. Reality disagrees with your narrative, which is nothing more than a pandering "CSS bad" with little substance. "Not fit for any domain", "incomprehensible", these insults are based on what, exactly?
        • bmacho 10 days ago
          But your favorite 20% of CSS (just like in the old days + some of the new features) fits nicely for web design.
        • FartinMowler 10 days ago
          What would you propose instead that is comprehensible to visual designers, programmers, and document authors?
          • cqqxo4zV46cp 10 days ago
            The inane and utterly incomprehensible toolset that they happen to be more familiar with, obviously. Some people take their ball and go home after they can’t work out how to centre a div, after decades of having “HTML and CSS are for the ‘stupid’ developers” drilled into them, and thinking that they can intuit it.
        • gherkinnn 10 days ago
          Nonsense. CSS works. It has its quirks, but what doesn't?

          What I do see here, is one of many cases of "I don't understand it therefore it is dumb because it can't be my fault".

        • whywhywhywhy 10 days ago
          It's honestly not that difficult at all, saying that as a designer.
    • klabb3 10 days ago
      CSS may be complex, but you get a huge bang for the buck in terms of UX, rendering performance, flexibility, accessibility, compared to most drawing and layout systems. You could argue against border-radius and flex as well, but Im glad we’re past clearfix and gifs for corners. Does masonry layout qualify for becoming standard? I don’t know.
      • blackbear_ 10 days ago
        > compared to most drawing and layout systems

        This is just an accident of history and not because CSS has anything that makes it intrinsically better than the alternatives.

        • klabb3 10 days ago
          Accumulated garbage for backwards compatibility? Let him who is without sin cast the first stone.

          I’m not saying css is intrinsically better (what does intrinsic even mean in this case?). It’s pragmatically better than anything else I’ve seen. It’s dead simple to learn and use, and (almost) fully declarative, and degrades gracefully. Just show me a better alternative and I’ll change my mind.

        • jampekka 10 days ago
          Anything other than existing.

          CSS is quite a mess, and I would welcome a backwards-incompatible new layouting system, but all the alternatives out there are a lot worse.

    • smokel 10 days ago
      They would probably also use regular expressions and incomprehensible $ and \ escape codes to retain some of the fun.
    • alpaca128 10 days ago
      Did the designers of Unix also have to ensure compatibility with billions of devices connected worldwide running different software stacks?

      Also as mentioned in the linked article the masonry layout is already possible with JS, no decades-long committee process needed. It's just about standardizing something frequently used.

      • btbuildem 10 days ago
        The point GP is making is that they didn't have to, because the architecture made it infinitely configurable while remaining coherent.

        Billions of connected devices worldwide do indeed run on *nix with a mad variety stacked on top.

      • kevincox 10 days ago
        It's fine, just run ./configure before compiling.
    • mejutoco 10 days ago
      What is the composable unix approach for layout/graphical interfaces?
    • lumb63 10 days ago
      I didn’t realize this was satire until the second paragraph. Well done.

      As a firmware engineer who is trying to build a website in his spare time, I find CSS absurd. I’ve found SCSS and Sass make it much more bearable. The ability to represent a hierarchy concisely is awesome.

    • doctor_eval 10 days ago
      I want to say something about monolithic kernels but I’m too scared.
    • jojobas 10 days ago
      Was rather hard to tell if you're joking or not, seeing how every trivial program today wants to have Electron with it.
    • datascienced 10 days ago
      Is this a sysvinit vs systemd rant?
      • HeckFeck 10 days ago

           $ /etc/init.d/initwar start
           Starting initwar (via systemd)
        
        Sad sysadmin noises
    • micromacrofoot 10 days ago
      the committee process is probably down to about 5ish years now? I feel like people who complain about this weren't around when the process was "20 years from now when we can drop IE support" — velocity has improved significantly
    • jampekka 10 days ago
      Trusting us plebs with universal turing machines is unacceptable. There's a config/app/saas/appliance for everything you need to need.
    • wodenokoto 10 days ago
      What dynamic layout system is it that ships in posix again?
    • sebstefan 10 days ago
      You can say that about almost any abstraction layer
      • gwervc 10 days ago
        The WPF has easy to use grids and layouts, a sane default styling yet is very to completely overhaul. CSS is a failure by design.
        • sebstefan 10 days ago
          Yes, but that's a completely different point
    • dartos 10 days ago
      Nixos?
    • cjk2 10 days ago
      Um, err, POSIX.
  • fmy105 10 days ago
    [flagged]
    • presentation 10 days ago
      Why would breakpoints be an issue? They’d just work the same as any other CSS feature wrapped in a media query.
  • sieabahlpark 9 days ago
    [dead]
  • aidog 10 days ago
    I absolutely want this. I have wanted this for years. This is a form of grid so it should be in CSS grid. Especially since it has tracks. Browser makers, please just ship this.
  • hwbunny 10 days ago
    Webkit team snorting cocaine?

    look at this, how intuitive, how readable:

    grid-template-columns: 14ch repeat(auto-fill, minmax(28ch, 1fr)) 14ch;

    just throw the whole grid thing out of the window and get on board someone who can create syntax that wouldn't send you to jump off a cliff and feels like it was made by a fellow human being, not an AI controlled robot.

    • hombre_fatal 10 days ago
      Well, at least show us your ideal replacement for that logic that's more intuitive.

      Until then, these complaints usually cash out into unfamiliarity + assuming it's very hard to understand if you were you trying to understand it.

      Declarative UI is a very hard problem, so it's not always going to be `text-decoration: underline`.

      • risenshinetech 10 days ago
        Many things are hard problems, but you don't need to be an expert to recognize an obviously bad solution.

        If you had showed someone the first bicycle, and it came with 3 differently sized wheels and a spike for a seat, you wouldn't have to provide an "ideal replacement" to know that it was a bad design.

        • JamesSwift 9 days ago
          Which part of this is the spike for a seat?

          > grid-template-columns: 14ch repeat(auto-fill, minmax(28ch, 1fr)) 14ch;

      • hwbunny 10 days ago
        [flagged]
  • spintin 10 days ago
    You can very simply do this with javascript.

    Browser developers are now reaching for straws to remain employable.

    That said the biggest tasks remains:

    - Go back to HTTP/1.1 with "One time password" auth.: https://datatracker.ietf.org/doc/html/rfc2289

    - Simplify the browser so that it can be compiled in less than many hours on the latest CPU.

    - Completely remove the tie-ins to any commercial/governmental entities.

    Basically go back to Netscape with some improvements to javascript performance and hardware accelerated rendering of HTML.

    Everything else invented in the last 20 years is meaningless. This is valid in most domains: Raspberry Pi is the only real exception.