On Thu, 26 Feb 2026 00:49:18 GMT, Michael Strauß <[email protected]> wrote:
>> 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 incrementally with two additional > commits since the last revision: > > - specify capacity of MediaQueryList > - javadoc change For this stylesheet, I don't see the styles changing _at all_. Should `and not` logic be supported? @import url("Css_Conditional_8364149_Narrow.css") (height < 200) and not (width <= 200); modules/javafx.graphics/src/main/java/com/sun/javafx/css/media/MediaQueryList.java line 46: > 44: * and returns {@link TriState#TRUE} if it is known to always match, > {@link TriState#FALSE} if it > 45: * is known to never match, or {@link TriState#UNKNOWN} if the result > depends on the query context > 46: * or cannot be determined. so my problem is that it's unclear what the exact logic is exactly - is it AND or OR?. For example, if we have TRUE + FALSE, will it return TRUE or FALSE? Maybe say it returns TRUE if any query is TRUE, otherwise either FALSE or UNKNOWN, with UNKNOWN only when any query is UNKNOWN. ------------- PR Review: https://git.openjdk.org/jfx/pull/2031#pullrequestreview-3861762851 PR Review Comment: https://git.openjdk.org/jfx/pull/2031#discussion_r2859738559
