Re: [CSS3] Flexible Flow Module, proposal.

Giovanni Campagna wrote:
> 2009/4/14 Andrew Fedoniouk <news@terrainformatica.com>:
>   
>> Philip TAYLOR (Ret'd) wrote:
>>     
>>> Andrew Fedoniouk wrote:
>>>
>>>       
>>>> '*' as a unit is used already in these places:
>>>>
>>>> 1) In html, so called multi-length or relative units:
>>>> http://www.w3.org/TR/html401/types.html#type-length
>>>> Used in tables[in supporting UAs] and framesets (@cols and @rows).
>>>>         
>>> Thank you, I confess I had overlooked that (in that
>>> I was unaware of multilengths per se, although I had
>>> seen the asterisk used in frameset specifications
>>> -- and completely failed to understand it).
>>>
>>>       
>>>> 2) In following CSS3 proposals:
>>>> http://www.w3.org/TR/css3-grid/
>>>> http://www.w3.org/TR/css3-layout/
>>>>         
>>> OK, but they are still /proposals/ : there is
>>> still time to get "*" replaced by something
>>> more mnemonic :-)
>>>
>>>       
>> '*' can be used alone as a short form of  '1*'. For example if you want to
>> put element in the bottom right corner of
>> its container you can write:
>>
>> #middle
>> {
>>   margin: * 0 0 *;
>> }
>>
>> Such short form will not work with mnemonics - will clash with #name
>> production in CSS grammar.
>>     
>
> If you introduce the FLEX token as {number}*, you cannot use * alone,
> you get a DELIM instead of a FLEX.
>   
Imagine it this way:

PERCENTAGE  ::=    num '%'        
FLEX        ::=    [num]'*'    ('*' alone without any number is precise 
equivalent of '1*')

And if you want to see flex units in mnemonic form (say 'flex') then you 
will need to change two things:

First, ident production:

   ident    ::=    '-'? nmstart nmchar* , but not 'flex'

And second you will need:
FLEX        ::=    [num] 'flex'

First change is not desirable for many reasons. Think why it is 
'!important' but not just 'important'.
( Actually !important token is missing in this document:  
http://www.w3.org/TR/css3-syntax )

If you will try in practice to define CSS parser you will get almost 
immediately why '*' is better for flexes.
>   
>> I mean that this:
>> #middle
>> {
>>   margin: 1flex 0 0 1flex;
>> }
>> cannot be reduced to this:
>> #middle
>> {
>>   margin: flex 0 0 flex;
>> }
>> without major changes in lex definitions.
>>     
>
> The same changes (probably even less, a keyword is easier to parse
> than a separator)
>   
I have CSS tokenizer/parser already that uses flexes as '*' and can 
claim exactly otherwise.
Flexes in '*' form create less logical conflicts, see above.

For CSS tokenizers that do not support flexes things like '1*' and  '*' 
will trigger errors
at the '*' character itself (thus on tokenizer level) so the whole 
property will be dropped reliably.
For cases when flexes will be presented as say '1flex' or just 'flex' 
error handling will be way less
predictable.
>   
>> And yes, these are proposals (above), but note - written by different
>> authors. That means this idea/notation is somehow common.
>>     
>
> Because Grid Positioning imitated HTML, Template Layout reused Grid
> Positioning and you copied both
>   
I did not get this statement, sorry.

What Grid Positioning is imitated in HTML and who copied what are not clear.
> Giovanni
>   
-- 
Andrew Fedoniouk.

http://terrainformatica.com

Received on Tuesday, 14 April 2009 20:43:21 UTC