- From: Andrea Rendine <master.skywalker.88@gmail.com>
- Date: Wed, 8 Apr 2015 13:42:54 +0200
- To: Glen Huang <curvedmark@gmail.com>
- Cc: "Tab Atkins Jr." <jackalmage@gmail.com>, www-style list <www-style@w3.org>
- Message-ID: <CAGxST9nQQ6qWKAt0q0YmJ=maKm9rT9SFpiCfyrVv5o-G5=Xuyg@mail.gmail.com>
Glen, in your first message I didn't understand what would happen when @initial were not used, if existing. That is, if @initial were implemented, then variables shouldn't be specified in :root but in @initial, should they? My idea is to propose something like a CSS scope (in the sense of Javascript scope, of course) so that variable values (both var() and, e.g., @viewport) cannot escape their @media reference block and therefore do not participate in condition definition for their scope itself (I also sent a proposal in that sense). I hope someone solves this, because I guess there's another proposal _en route_ about variables and "classes" which would probably benefit from a stricter definition of separate "instruction blocks". Andrea 2015-04-08 12:30 GMT+02:00 Glen Huang <curvedmark@gmail.com>: > @custom-media mitigates the duplication issue, but still not perfect in > case like this: > > :root { > --horizontal-nav-width: 600px; > } > > @custom-media --horizontal-nav-fits (width >= var(--horizontal-nav-width)) > @media (--horizontal-nav-fits) { > .nav { > width: var(--horizontal-nav-width); > margin: 0 auto; > } > } > > In this case, I design the media query specifically for the navigation. So > it would be great if I can reuse the dimension in media query. Otherwise I > have at least two places to edit when, for example, the number of > navigation links change, and the allowed width is changed. > > The recursion problem can be solved either as mentioned by Andrea > (variables used in media query aren't live, they only resolve to the custom > properties of the top level :root rule), or as mentioned by me (variables > used in media query resolve to the custom properties of an at-rule that > can’t be specified in a media at-rule). > > Not sure if these two approaches are feasible. > > > On Apr 8, 2015, at 8:30 AM, Tab Atkins Jr. <jackalmage@gmail.com> wrote: > > > > On Sat, Apr 4, 2015 at 12:59 AM, Glen Huang <curvedmark@gmail.com> > wrote: > >> Does this do what I think it does? > >> > >> ```css > >> :root { > >> --page-width: 768px; > >> } > >> @media (min-width: var(--page-width)) {} > >> ``` > >> > >> If not, is it because media queries don’t inherit properties from the > :root element? If that’s the case, can we add a selector to select a > special element that the :root element and media queries will all inherit > from? > >> > >> When you design the media query break points according to certain > element dimensions, being able to use variables in media queries can be > very helpful. > > > > The var() function, when used on an element, just replaces itself with > > the value of the given custom property on the same element. @media > > rules aren't referring to any element, so they don't have any > > properties at all, let alone custom properties. > > > > You could let it refer to the value of the custom properties on the > > root, as you suggest, but as Cameron says, it makes it way too easy to > > get into bad loop situations. > > > > What you want are just Custom Media Queries > > <http://dev.w3.org/csswg/mediaqueries/#custom-mq>. That way you could > > define something like: > > > > @custom-media --large-page (width >= 768px); > > @custom-media --small-page (width < 768px); > > @media (--large-page) { ... } > > > > ~TJ > > >
Received on Wednesday, 8 April 2015 11:43:23 UTC