gpt4 book ai didi

css - 从 JavaFX 中删除所有焦点边框

转载 作者:行者123 更新时间:2023-11-28 09:17:03 37 4
gpt4 key购买 nike

在使用 JavaFX 时,我发现焦点边框阻碍了某些视觉节点,例如按钮和某些 Pane 。关于这个主题的其他问题经常建议将以下 css(覆盖 Modena.css 的默认值,JavaFX 8 的默认样式表)添加到您的样式文件中:

-fx-focus-color: transparent;
-fx-faint-focus-color: transparent;

乍一看,这移除了焦点边框,但经过一些使用后,我发现一些 UI 元素丢失的不仅仅是蓝色发光。在经历了 modena 之后,我发现这是因为很多节点的绘制方式:它们中的许多节点都有一个背景颜色,由多个盒子堆叠在一起,具有不同的 insets 和半径,导致边框 -喜欢看。

我还发现这种背景颜色源自前面提到的用于绘制边框的属性。因此,将颜色设置为透明会产​​生意想不到的效果,即某些节点(如 Pane 、组合框等)在未聚焦时显示边框,但在聚焦时不再显示边框,这是由于 :focused 的背景颜色派生方式伪类。

是否可以移除焦点边框(和微弱的焦点边框),以便它们在实际聚焦时保留未聚焦元素的外观?

最佳答案

我已经编译了一个解决方案,通过组合我在 SO 上发现的内容,通过覆盖 modena 的更多部分来删除焦点边界:我选择覆盖“:focused”伪类的属性类似按钮和类似 Pane 的东西的非焦点默认值(如摩德纳本身所述)。结果是:

.button:focused,
.toggle-button:focused,
.radio-button:focused > .radio,
.check-box:focused > .box,
.menu-button:focused,
.choice-box:focused,
.color-picker.split-button:focused > .color-picker-label,
.combo-box-base:focused,
.slider:focused .thumb {
-fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, -fx-body-color;
-fx-background-insets: 0 0 -1 0, 0, 1, 2;
-fx-background-radius: 3px, 3px, 2px, 1px;
}

.scroll-pane:focused,
.split-pane:focused,
.list-view:focused,
.tree-view:focused,
.table-view:focused,
.tree-table-view:focused,
.html-editor:focused {
-fx-background-color: -fx-box-border, -fx-control-inner-background;
-fx-background-insets: 0, 1;
-fx-padding: 1;
}

.radio-button > .radio, .radio-button:focused > .radio {
-fx-background-radius: 1.0em; /* large value to make sure this remains circular */
-fx-padding: 0.333333em; /* 4 -- padding from outside edge to the inner black dot */
}
.split-menu-button:focused {
-fx-background-color: -fx-shadow-highlight-color, -fx-outer-border;
-fx-background-insets: 0 0 -1 0, 0;
-fx-background-radius: 3, 3;
}
.split-menu-button:focused > .label {
-fx-text-fill: -fx-text-base-color;
-fx-background-color: -fx-inner-border, -fx-body-color;
-fx-background-insets: 1 0 1 1, 2 1 2 2;
-fx-background-radius: 2 0 0 2, 1 0 0 1;
-fx-padding: 0.333333em 0.667em 0.333333em 0.667em; /* 4 8 4 8 */
}
.split-menu-button:focused > .arrow-button {
-fx-background-color: -fx-inner-border, -fx-body-color;
-fx-background-insets: 1, 2;
-fx-background-radius: 0 2 2 0, 0 1 1 0;
-fx-padding: 0.5em 0.667em 0.5em 0.667em; /* 6 8 6 8 */
}

.scroll-bar:focused {
-fx-background-color: derive(-fx-box-border,30%), linear-gradient(to bottom, derive(-fx-base,-3%), derive(-fx-base,5%) 50%, derive(-fx-base,-3%));
-fx-background-insets: 0, 1 0 1 0;
}
.scroll-bar:vertical:focused {
-fx-background-color: derive(-fx-box-border,30%), linear-gradient(to right, derive(-fx-base,-3%), derive(-fx-base,5%) 50%, derive(-fx-base,-3%));
-fx-background-insets: 0, 0 1 0 1;
}

.text-input:focused {
-fx-highlight-fill: -fx-accent;
-fx-highlight-text-fill: white;
-fx-background-color: linear-gradient(to bottom, derive(-fx-text-box-border, -10%), -fx-text-box-border),
linear-gradient(from 0px 0px to 0px 5px, derive(-fx-control-inner-background, -9%), -fx-control-inner-background);
-fx-background-insets: 0, 1;
-fx-background-radius: 3, 2;
-fx-prompt-text-fill: transparent;
}

.text-area:focused .content {
-fx-background-color:
linear-gradient(from 0px 0px to 0px 4px, derive(-fx-control-inner-background, -8%), -fx-control-inner-background);
-fx-background-radius: 2;
}

.titled-pane:focused > .title > .arrow-button > .arrow {
-fx-background-color: -fx-mark-highlight-color, -fx-mark-color;
-fx-background-insets: 1 0 -1 0, 0;
}

.color-picker.split-button:focused > .arrow-button {
-fx-background-color: -fx-outer-border, -fx-inner-border, -fx-body-color;
-fx-background-insets: 1 1 1 0, 1, 2;
-fx-background-radius: 0 3 3 0, 0 2 2 0, 0 1 1 0;
}

基本上,无论 UI 节点是否具有焦点,它都会更改背景颜色的渲染以绘制相同的外观和感觉。

关于css - 从 JavaFX 中删除所有焦点边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37524467/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com