- From: Håkon Wium Lie <howcome@opera.com>
- Date: Thu, 29 Dec 2011 10:12:44 +0100
- To: "Tab Atkins Jr." <jackalmage@gmail.com>
- Cc: www-style@w3.org
Tab wrote: > > - the layout is fixed; there is no way to add more columns if more > > content is poured into the flow, and the size and aspect ratio of > > the image is fixed > > Sure, because in that code I was doing a direct adaptation of the > existing code. That is not, in general, a failing of Grid. Imagine > other uses for Grid that might benefit from region-based styling. Ok, so the canonical regions example isn't suitable for grids. Fair enough. But which use case are? Could you give an example of a suitable use case, with code to illustrate? Code that doesn't have the problems discussed in this thread? > > Here's how it can be done using multicol: > > > > .article { columns: 3 } > > .article img { column-span: 2 } > > .article .lead { column-span: 2 } > > > > The above example doesn't create regions, though -- the "lead" > > element is structural. To use regions, the code is slightly longer: > > > > .article { columns: 3 } /* or better: a width in ems */ > > img { column-span: 2; width: 100% } > > article::region(1) { /* selects column 1 */ > > column-span: 2; > > float: top; > > visibility: collapse; /* so that column 2 moves in */ > > height: 3em; /* or something */ > > } > > > > But still only seven lines compared to the 20 or so lines in the > > grid-based syntax (not counting markup). As for readability, others > > should judge, but personally I find the compact code easier to read. > > I'm glad you find that readable, but it's completely opaque to me. Let's go through it, line by line: .article { columns: 3 } /* sets the number of columns to 3 */ .article img { column-span: 2 } /* image spans across two columns, starting from the natural column */ .article .lead { column-span: 2 } /* lead paragraph spans across two columns, starting from the natural column */ Quite readable, I believe. Opera has implemented something that is close, here's a screenshot and test document: http://people.opera.com/howcome/2011/tests/canonical-1.png http://people.opera.com/howcome/2011/tests/canonical-1.html The next chunk is a little harder, but not much: .article { columns: 3 } /* sets the number of columns to 3 */ img { column-span: 2; /* image spans across two columns, starting from the natural column */ width: 100%; /* makes the image fill two columns + gap between */ float: top; /* floats image to the top of the article; this is simlar to how CSS currently float images to the left and right. */ article::region(1) { /* selects region/column 1 */ column-span: 2; /* makes that region/column span two normal-sized columns float: top; /* floats the region to the top, i.e. just under the image */ visibility: collapse; /* flags that the next column (i.e., column 2) should move into where column 1 once was */ height: 3em; /* the width of the region/column is set with column-span, but the height must also be set in order to replicate the intended design */ } The basic idea is that columns can be moved/resized/positioned, while keeping their place in the flow of content. > Almost every line in there invokes combinations of behavior that I'd > have to look up and think about to understand, and there are a few > bits (like the "visibility:collapse") that I'm *completely* in the > dark over. It's borrowed from CSS 2.1: http://www.w3.org/TR/CSS2/visufx.html#propdef-visibility It's used here to indicate that when column 1 is moved, the next column should take its place in the layout. This should probably be the default behavior, so we may not even need the switch. > My own experiences as a web designer, and what I've heard > and seen from other webdevs, is that float-based layout was a terrible > hack that happened to accomplish really useful things at the time, > like table-based layouts further in the past. I would not inflict > such things on the future, especially not in the more complicated form > you're demonstrating here. If you hate floats, Plan B will be challenging. Personally, I think floating elements to the left, right, top and bottom makes sense -- I see it in publications every day. For example, here: http://pdfreebooks.org/files/alice-in-wonderland-book.pdf How would you code this without floats? -h&kon Håkon Wium Lie CTO °þe®ª howcome@opera.com http://people.opera.com/howcome
Received on Thursday, 29 December 2011 09:13:30 UTC