RFR: 8358450: Viewport characteristics media features [v16]

Andy Goryachev angorya at openjdk.org
Tue Dec 16 21:16:37 UTC 2025


On Tue, 16 Dec 2025 20:13:49 GMT, Michael Strauß <mstrauss at openjdk.org> wrote:

>> Implementation of [viewport characteristics media features](https://www.w3.org/TR/mediaqueries-5/#mf-viewport-characteristics):
>> * `width`
>> * `height`
>> * `aspect-ratio`: width / height
>> * `orientation`: `portrait`, `landscape`
>> * `display-mode`: `fullscreen`, `standalone` (note: `browser` and `minimal-ui` are not supported in JavaFX)
>> 
>> Here's a small example how the new media features can be used:
>> 
>>     @Override
>>     public void start(Stage stage) {
>>         var button = new Button("Toggle full-screen");
>>         button.setOnAction(_ -> stage.setFullScreen(!stage.isFullScreen()));
>>         var label = new Label();
>>         var root = new BorderPane(button, null, null, label, null);
>>         var scene = new Scene(root, 650, 200);
>>         BorderPane.setAlignment(label, Pos.CENTER);
>>         label.textProperty().bind(scene.widthProperty().map(v -> String.format("Width: %.2f", v.doubleValue())));
>>         scene.getStylesheets().add("data:text/css;base64," + Base64.getEncoder().encodeToString("""
>>             @media (max-width: 500) {
>>                 .button {
>>                     -fx-background-color: red;
>>                 }
>>             }
>> 
>>             @media (600 < width <= 700) {
>>                 .button {
>>                     -fx-background-color: green;
>>                 }
>>             }
>> 
>>             @media (min-width: 800) {
>>                 .button {
>>                     -fx-background-color: yellow;
>>                 }
>>             }
>> 
>>             @media (display-mode: fullscreen) {
>>                 .button {
>>                     -fx-background-color: black !important;
>>                 }
>>             }
>>             """.getBytes(StandardCharsets.UTF_8)));
>> 
>>         stage.initStyle(StageStyle.DECORATED);
>>         stage.setScene(scene);
>>         stage.show();
>>     }
>
> Michael Strauß has updated the pull request incrementally with one additional commit since the last revision:
> 
>   documentation

modules/javafx.graphics/src/main/docs/javafx/scene/doc-files/cssref.html line 971:

> 969:                 <td class="value">fullscreen | standalone</td>
> 970:                 <td>discrete</td>
> 971:                 <td><code>fullscreen</code> if <code>Stage.isFullScreen()</code>, <code>standalone</code> otherwise</code></td>

This description is perfectly clear now, thanks!

One question though: at the beginning of the chapter, you say "A media query is a method of testing certain aspects of the [Scene](https://github.com/openjdk/jfx/javafx/scene/Scene.html)" but this is not strictly true, since the Stage is also involved.

Do you think we should mention "and/or Stage" or something like that?

Moreover, what if other media queries are added that depend on some other aspects?  Maybe we should specify whose properties we are looking at in the comments, like "width" -> "Scene width" ?  What do you think?

-------------

PR Review Comment: https://git.openjdk.org/jfx/pull/1844#discussion_r2624758212


More information about the openjfx-dev mailing list