> The [`@import`](https://www.w3.org/TR/css-cascade-5/#at-import) rule is > extended to support conditional stylesheet imports: > > > @import [ <url> | <string> ] <media-query-list>? ; > > > Conceptually, a conditional import takes all rules of the referenced > stylesheet, literally includes them at the location of the `@import` rule, > and surrounds them with a `@media` rule with the specified > `<media-query-list>`. > > The implementation of this feature extends media queries with a context-free > evaluation function: > > interface MediaQuery { > TriState evaluate(); // returns TRUE / FALSE / UNKNOWN > } > > > This mode of evaluation uses Kleene's strong trivalent logic to determine > whether the media query will always match (it's a tautology), will never > match (it's a contradiction), or whether it depends on the context or we > simply don't know. > > Using this mechanism, a conditional stylesheet import that can never match > will be skipped at runtime. Similarly, a conditional stylesheet import that > will always match doesn't need the `<media-query-list>` at all; its rules > will be pasted verbatim into the main stylesheet. > > Note that this mechanism is _not_ meant to be a full-blown theorem solver. It > won't detect that, for example, the following import conditions will always > match: > > @import url("stylesheet.css") (width > 1000) or (width <= 1000); > > > Its purpose is an optimization for "obvious" cases. For example, at the > moment the built-in themes use hard-coded conditions to include user-agent > stylesheets at runtime: > > // in PlatformImpl.java: > if (isSupported(ConditionalFeature.INPUT_TOUCH)) { > > uaStylesheets.add("com/sun/javafx/scene/control/skin/modena/touch.css"); > } > > In the future, we might have a way to test for `ConditionalFeature` flags > that achieves the same thing, but with a public API available to all theme > authors: > > @import url("com/sun/javafx/scene/control/skin/modena/touch.css") > (-fx-supports-conditional-feature: input-touch);
Michael Strauß has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains two additional commits since the last revision: - Merge branch 'master' into feature/conditional-import - Conditional stylesheet imports ------------- Changes: - all: https://git.openjdk.org/jfx/pull/2031/files - new: https://git.openjdk.org/jfx/pull/2031/files/3aaab577..12fc8915 Webrevs: - full: https://webrevs.openjdk.org/?repo=jfx&pr=2031&range=01 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=2031&range=00-01 Stats: 1420 lines in 23 files changed: 918 ins; 193 del; 309 mod Patch: https://git.openjdk.org/jfx/pull/2031.diff Fetch: git fetch https://git.openjdk.org/jfx.git pull/2031/head:pull/2031 PR: https://git.openjdk.org/jfx/pull/2031
