CSS Color functions
John Hendrikx
john.hendrikx at gmail.com
Tue Jan 17 11:21:24 UTC 2023
It would be nice to support something like LESS (https://lesscss.org/).
I've integrated a LESS parser in my personal project that takes .less
files and converts them to CSS before giving them to JavaFX. This
allows me to use functions like "fade" and "lighten":
-fx-background-color: fade(black, 40%);
-fx-background-color: lighten(@glass-color, 20%, relative);
It supports variables, and the & operator to repeat parent selectors,
here a bigger example:
.group-heading {
@c1: rgba(255, 255, 255, 85%);
@c2: fade(@text-accent-highlight, 70%);
&.horizontal {
-fx-background-color: linear-gradient(to right, transparent 0%,
@c2 18%, transparent 48%, transparent),
linear-gradient(to right, transparent 0%,
@c2 6%, @c2 35%, transparent 98%, transparent);
-fx-border-color: linear-gradient(to right, transparent 0%,
transparent 50%, @c1 93%, @c1 99%, transparent);
}
&.vertical {
-fx-background-color: linear-gradient(to top, transparent 0%,
@c2 18%, transparent 48%, transparent),
linear-gradient(to top, transparent 0%,
@c2 6%, @c2 35%, transparent 98%, transparent);
-fx-border-color: linear-gradient(to top, transparent 0%,
transparent 50%, @c1 93%, @c1 99%, transparent);
}
}
It integrates relatively easily. I let it statically compile the less
files and generate regular CSS file URL's:
private static final String ROOT_STYLES_URL =
LessLoader.compile(RootNodeFactory.class, "root.less");
private static final String PROGRESS_STYLES_URL =
LessLoader.compile(RootNodeFactory.class, "progress-pane.less");
private static final String CLOCK_STYLES_URL =
LessLoader.compile(RootNodeFactory.class, "clock-pane.less");
private static final String LOGO_STYLES_URL =
LessLoader.compile(RootNodeFactory.class, "logo-pane.less");
private static final String FPS_STYLES_URL =
LessLoader.compile(RootNodeFactory.class, "fps-pane.less");
Then you can use it like any other stylesheet on a component:
clockPane.getStylesheets().add(CLOCK_STYLES_URL);
--John
On 15/01/2023 01:31, Scott Palmer wrote:
> I was looking at Modena.css and came across this:
>
> /* A bright blue for the focus indicator of objects. Typically
> used as the
> * first color in -fx-background-color for the "focused"
> pseudo-class. Also
> * typically used with insets of -1.4 to provide a glowing effect.
> */
> -fx-focus-color: #039ED3;
> -fx-faint-focus-color: #039ED322;
>
> I noticed two things pertaining to -fx-faint-focus-color. Although
> I've used this form to specify colors myself, the JavaFX CSS Reference
> Guide at
> https://openjfx.io/javadoc/19/javafx.graphics/javafx/scene/doc-files/cssref.html#typecolor does
> not mention being able to use an 8-digit form of #rrggbbaa when using
> hex digits. Only the 3- and 6-digit forms of hexadecimal RGB are
> mentioned. RGB + Alpha colors are only documented in the form of
> rgba(#,#,#,#) and rgba(#%,#%,#%,#).
>
> More importantly, this is a copy of -fx-focus-color with an added
> alpha channel, but it's created by repeating the literal color value
> and appending the alpha component, rather than somehow deriving it
> from -fx-focus-color. Similar repetition is needed for the
> semi-transparent chart colors.
>
> Would it make sense to add support for something similar to derive(
> <color> , <number>% ) to specify a color based on an existing color
> with a new value for the alpha channel (or any other) value? Maybe a
> color-transform method that would do for an RGBA color vector what
> other transforms do for spatial coordinates?*
>
> Regards,
>
> Scott
>
> * Note: It seems future CSS standards are looking for ways to do
> similar things. A color-modfunction was proposed in
> https://www.w3.org/TR/2016/WD-css-color-4-20160705/#funcdef-color-mod
> but removed in the next revision
> https://www.w3.org/TR/2022/CRD-css-color-4-20221101/#changes-from-20160705.
> I'm not following CSS development closely, but some googling suggests
> the next proposal is based on a new keyword 'from' to create derived
> colors. E.g rgb(from skyblue, 255 g b) to get a color based on
> skyblue with a red component of 255. This is mentioned here
> https://github.com/w3c/csswg-drafts/issues/3187#issuecomment-499126198
> I'm skeptical that it is worth waiting for the dust to settle on the
> CSS standard, but supporting whatever they come up with is a possibility.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20230117/c35410de/attachment-0001.htm>
More information about the openjfx-dev
mailing list