Быстрый и простой ответ - комментарий Слава (который вообще не может использовать CSS наследование):
.base_arc, .child_arc { /* common styles */ }
.child_arc { /* specific styles */ }
Более длинный ответ, обсуждающий CSS наследование и его связь с объектно-ориентированным наследованием ниже.
Фон CSS наследования против объектно-ориентированного наследования
CSS наследование не похоже на объект ориентированное наследование , которое имеет Java.
Вместо этого наследование CSS основано на положении узла в графе сцены . Дочерние узлы могут наследовать свойства CSS от своих родителей (если свойство CSS наследуемо). Наследование основано на положении в графе сцены, а не на иерархии типов классов Java. Это описано в JavaFX CSS документации по наследованию .
Применение CSS наследования к вашему примеру
Create CSS правила для родительского узла
Допустим, у вас есть Pane
, в котором вы рисуете свои дуги, и вы устанавливаете стиль drawing-pane
на нем. Если у вас есть следующее правило css:
.drawing-pane Arc {
-fx-stroke: black;
}
, тогда все дуги, нарисованные на панели, будут черными. Я не проверял это, но я понимаю, как это работает.
Правило Arc
- это селектор типа CSS , поэтому .drawing-pane Arc
выберет любые дуги которые были нарисованы на панели рисования.
Создание CSS правил для определенных c типов дочерних узлов
Теперь, чтобы различать разные дуги, чтобы они имели разные стилей, вам нужно иметь дополнительное, более конкретное c, CSS правило, которое применяет указанный c стиль.
Итак, если вы создаете следующее правило:
.drawing-pane .child-arc {
-fx-stroke-line-cap: BUTT;
}
, то все дуги, добавленные в область рисования, которым также назначен класс стилей child-arc
, получат приклад. У них также будет черный штрих, поскольку к ним все еще применяется предыдущее правило drawing-pane Arc
(через CSS наследование).
Свяжите ваши узлы с соответствующими CSS правилами
Существуют различные способы связать класс child-arc
с ar c, например, с методом фабрики:
Arc createChildArc() {
Arc arc = new Arc();
arc.getStyleCass().add("child-arc");
}
Или с помощью наследования, установив стиль в конструкторе:
public class ChildArc extends Arc {
public ChildArc() {
getStyleClass().add("child-arc");
}
}
Использование селекторов типа CSS вместо селекторов классов
Примечание: можно использовать селектор типа (без префикса .
и относится к простой, не пакетный префикс Java имя класса), а не css селектор класса (использует префикс .
), так что вы можете сделать:
public class ChildArc extends Arc {}
и иметь CSS как :
.drawing-pane ChildArc {
-fx-stroke-line-cap: BUTT;
}
Но, как правило, классы стиля css, вероятно, немного более гибки и также более распространены, чем селекторы типов, так что я бы, вероятно, просто придерживался селекторов классов.
Я не совсем уверен, если это ответ Вы действительно хотели, но это мое понимание одного из способов решения проблемы, которая у вас есть.
Я думаю, что вы действительно ищете информацию о SASS, изложенную ниже, хотя, как правило, проблема не в том, как решить проблему при использовании прямого CSS без дополнительных инструментов.
Использование SASS для добавления объектно-ориентированного наследования к CSS
Если вы используете препроцессор, такой как SASS в таблицах стилей css, Вы можете добавить намного больше функций (из SASS) в свои таблицы стилей. Функции, которые поддерживает SASS, включают в себя дополнения и расширения для стилей CSS. Таким образом, SASS делает CSS более объектно-ориентированным в том, как он определяет свои правила стиля, позволяя объектно-ориентированному стилю наследовать информацию о стиле.
Хотите ли вы потратить время и взять на себя сложность в изучении SASS и внедрении его в цепочку сборки, решать только вам. Лично для себя я бы не использовал SASS, если бы не писал очень много CSS, чего я просто не делаю.
Стандартное значение по умолчанию css для JavaFX (модена. css), он большой, сложный и многофункциональный, и в его реализации не используются функции стиля SASS. Изучение модены. css - лучший способ изучить JavaFX CSS, лучшие практики и принципы использования. Если SASS не требуется для чего-то такого сложного, как modena. css, то вряд ли это будет действительно необходимо для таблиц стилей CSS, которые вы создаете для своего приложения.