- From: David Hyatt <hyatt@apple.com>
- Date: Sun, 12 Apr 2009 19:10:54 -0500
- To: Andrew Fedoniouk <news@terrainformatica.com>
- Cc: Giovanni Campagna <scampa.giovanni@gmail.com>, www-style <www-style@w3.org>
On Apr 12, 2009, at 7:04 PM, Andrew Fedoniouk wrote:
>>>
>>>
>> One of the things that makes flex units attractive is that they
>> would cut down on the number of additional properties. For example
>> box-align could be done with flexing margins (although it would be
>> somewhat inconvenient, since the former is a property applied to
>> the parent and the latter would have to be applied individually to
>> all children). box-pack is simple to model using flexible units on
>> padding. box-align:justify can also be modeled using flex units on
>> margins (again, having to apply to each child).
>> One concern I have with flex units (which I mentioned years ago the
>> last time this topic came up) is that you lose the ability to lay
>> an object out at "width" and only flex into the remaining space.
>> That may not be a deal-breaker though. I definitely think it's
>> worth considering whether a new flex unit type could get the
>> results we want.
>
> David, could you elaborate more on the problem? Seems like I did not
> get it. Is it that "#A and #B" case?
>
Yes, it's that case.
>> XUL boxes have a couple of other features, including the ability to
>> re-order content (probably not critical to the draft, and should
>> arguably apply everywhere and not just to flexible boxes), and flex
>> groups. Flex groups allow you to give priority to a cluster of
>> flexes, making sure that earlier groups get to flex to their
>> maximum (or minimum dimensions) first before the next group starts
>> to flex. This feature is pretty critical to achieving certain
>> layouts, and it's not clear to me how flex units would model it.
>> (One example of where flex groups are relevant is with the Windows
>> Vista scrollbar. The scrollbar track is flexible, but once it can
>> no longer flex at very small sizes, the scrollbar buttons begin to
>> flex to smaller sizes). Safari RSS also makes use of flex groups
>> in its layout of RSS feeds, so in order to transition the flexible
>> boxes used in Safari RSS to a new system, we would need this
>> feature still.
>
> Consider that vertical scrollbar consists from 5 parts (buttons for
> brevity):
>
> button.prev - button with "up" arrow.
> button.next - button with "down" arrow.
> button.slider - a.k.a. scrollbar thumbnail.
> button.prev-page - space between button.prev and button.slider.
> button.next-page - space between button.slider and button.next.
>
> Then if scroll bar value is at 25% and view-size/doc-size is 10% you
> will have this:
>
> @set v-scrollbar
> {
> .prev,.next
> {
> height:10000*; /* some big enough value */
> max-height:12px; /* we use special 'system-scrollbar-height'
> value that comes from system settings */
> }
> .prev-page
> {
> height: 0.25* /* 25% */
> }
> .slider
> {
> height: 0.10* /* 10% - view-size/doc-size */
> min-height:12px; /* we use special 'system-scrollbar-height'
> value that comes from system settings */
> }
> .next-page
> {
> height: 0.65* /* 100% - 25% - 10%*/
> }
> }
>
> The key point here is that "some big enough value" in .prev/.next.
> As it is big enough then it will be in effect only when
> other components of the scrollbar will hit their minimum values.
>
> Someone may think that this is a hack of course but it works. :)
>
> (That "big enough value" just needs to be larger than pixel value of
> scrollbar height if someone would want to go such deep in the math )
>
Yeah, XUL boxes in Gecko do not implement flex groups, and this is the
exact hack that authors used in the situations where flex groups would
be needed. I think this hack gets pretty gross though once you hit
the need for three flex groups. However I admit that we've never hit
a use case in Gecko or WebKit where we needed more than two groups.
>
>> Flex groups could probably be modeled by adding on to the number of
>> *, e.g., 1* could put something in flex group 1 and 1** could put
>> something in flex group 2. In my practical experience I've never
>> needed more than 2 flex groups, so maybe that's as far as we need
>> to go with the feature.
>
> So far I did not see the need for groups. They probably are needed
> in some peculiar cases but for that cases designers will rather put
> additional container rather than trying to imagine how these groups
> would work. Adding DOM elements is not perfect of course but will make
> job done. In any case nothing stops to add groups later if people
> will ask for them.
>
Yeah, I think I'm fine with leaving groups out for now.
dave
(hyatt@apple.com)
Received on Monday, 13 April 2009 00:11:36 UTC