RFR: 8364149: Conditional stylesheet imports [v3]
Michael Strauß
mstrauss at openjdk.org
Thu Jan 22 16:52:10 UTC 2026
> 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 three additional commits since the last revision:
- Merge branch 'master' into feature/conditional-import
- 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/12fc8915..5ef848c6
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jfx&pr=2031&range=02
- incr: https://webrevs.openjdk.org/?repo=jfx&pr=2031&range=01-02
Stats: 506771 lines in 9034 files changed: 254882 ins; 189023 del; 62866 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
More information about the openjfx-dev
mailing list