W3C home > Mailing lists > Public > www-style@w3.org > June 2008

Re: WebKit now supports CSS Variables

From: Francois Remy <fremycompany_pub@yahoo.fr>
Date: Tue, 24 Jun 2008 17:39:22 +0200
Message-ID: <33DB07EC94C44CF5A1BF3190D10760EE@FremyCompany1>
To: "Pascal Germroth" <pascal@germroth.name>
Cc: "CSS 3 W3C Group" <www-style@w3.org>

> But the problem of your spec is, that it only allows the @variables-block 
> to appear before any @imports, so an imported corporateVars.css would 
> always override any "locally" defined variables, this might be 
> undesireable. So I suggest that @variables and @imports should be allowed 
> to appear in any order, so that a stylesheet could override some imported 
> variables locally.
>
> Also, what happens when A imports B and C, and C uses a variable thats 
> defined in B?
>

Good point.

The normal way it should be, if we reuse known CSS Priority types :
    Each variable is globally defined and the last variable defined in the 
normal order is used accross all stylesheets.

[Exception] :
    But if a variable is defined localy with the same name, this variable 
overrides the other for the stylesheet and all imports in it.

_________________________

So, let's go for a sample :

    main.css
    <<
        @variables { a: none; c: none; }
        @imports url('sub1.css');
        @imports url('sub2.css');
        s1 { display: var(a); }
        s2 { display: var(b); }
    >>

    sub1.css
    <<
        @variables { a: block; b: block; }
        s3 { display: var(a); }
        s4 { display: var(b); }
    >>

    sub2.css
    <<
        @variables { b: none; }
        s5 { display: var(a); }
        s6 { display: var(c); }
    >>

_________________________

    s1 :
        "a" defined in main.css
            ==> {a:none} is used
    s2 :
        "b" is not defined in main.css
        the stylesheet that come at last in source order is sub2.css
            "b" is defined in sub2.css
            ==> {b:none} is used
    s3 :
        "a" is defined in "sub1.css"
        ==> {a:block} is used
    s4 :
        "b" is defined in "sub1.css"
        ==> {b:block} is used
    s5 :
        "a" is not defined in sub2.css
        this stylesheet that come at last in source order is sub2.css
            "a" is not defined in sub2.css
            sub1.css is the stylesheet before sub2.css in source order
                "a" is defined in sub1.css
                ==> {a:block} is used
    s6 :
        "c" is not defined in sub2.css
        this stylesheet that come at last in source order is sub2.css
            "c" is not defined in sub2.css
            sub1.css is the stylesheet before sub2.css in source order
                "c" is not defined in sub1.css
                main.css is the stylesheet before sub1.css in source order
                    "c" is defined in main.css
                    ==> {c:none} is used

___________________________

The same situation should be if we got :

    <link href="main.css" rel="stylesheet" />
    <link href="sub1.css" rel="stylesheet" />
    <link href="sub2.css" rel="stylesheet" />

___________________________

Note that developers should use strong name for the variables so conflict 
between sheets are not possible.

Fremy 
Received on Tuesday, 24 June 2008 15:40:04 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 27 April 2009 13:55:07 GMT