Maven JavaFX利用SCSS样式表

打印 上一主题 下一主题

主题 928|帖子 928|积分 2784

关于SCSS

详见此处
原理

JavaFX本身的CSS解析器不支持SCSS,因此我们需要在编译阶段将SCSS文件编译为CSS文件,然后在JavaFX中引入CSS文件。
本文利用的编译插件是sass-cli-maven-plugin
利用

POM文件设置

代码如下:
  1. <build>
  2.     <plugins>
  3.         <plugin>
  4.             <groupId>us.hebi.sass</groupId>
  5.             <artifactId>sass-cli-maven-plugin</artifactId>
  6.             <version>1.0.3</version>
  7.             <configuration>
  8.                 <sassVersion>1.62.0</sassVersion>
  9.                 <args>
  10.                     <arg>${project.basedir}/src/scss/input.scss:${project.basedir}/target/classes/css/output.css</arg>
  11.                     <arg>--no-source-map</arg>
  12.                     
  13.                     <arg>--no-charset</arg>
  14.                 </args>
  15.             </configuration>
  16.             <executions>
  17.                 <execution>
  18.                     <id>sass-exec</id>
  19.                     <phase>generate-resources</phase>
  20.                     <goals>
  21.                         <goal>run</goal>
  22.                     </goals>
  23.                 </execution>
  24.             </executions>
  25.         </plugin>
  26.     </plugins>
  27. </build>
复制代码
代码中只需要关注一个地方:
${project.basedir}/src/scss/input.scss{project.basedir}/target/classes/css/output.css
它的基本格式是:
项目SCSS文件路径:编译后CSS文件路径
路径写好以后即可编译查看是否有用。
引入CSS文件

编译完成后,我们只需要在项目中引入CSS文件即可,以/target/classes/css/output.css地址为例:
  1. public class MainApplication extends Application {
  2.     @Override
  3.     public void start(Stage stage) throws IOException {
  4.         FXMLLoader fxmlLoader = new FXMLLoader(MainApplication.class.getResource("/fxml/main-application.fxml"));
  5.         Parent root = fxmlLoader.load();
  6.         // 嵌入全局css表
  7.         root.getStylesheets().add(Objects.requireNonNull(MainApplication.class.getResource("/css/output.css"))
  8.                 .toExternalForm());
  9.         Scene scene = new Scene(root);
  10.         stage.setScene(scene);
  11.         stage.show();
  12.     }
  13.     public static void main(String[] args) {
  14.         launch();
  15.     }
  16. }
复制代码
另外,程序开发阶段运行时可能不会触发该插件的编译,如果SCSS文件更新,可能需要先手动编译一次再运行。
如果是IDEA中也可以如下设置:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦见你的名字

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表