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

Reply via email to