从 7.0 版本开始,Scheduler 皮肤是通过 CSS 变量构建的,这使得自定义和样式调整变得更加简单。
Related sample: Customize and switch between themes
主要 CSS 变量:
:root {
--dhx-scheduler-font-family: Inter, Helvetica, Arial, sans-serif;
--dhx-scheduler-font-size: 14px;
--dhx-scheduler-base-colors-primary: #537CFA;
--dhx-scheduler-base-colors-warning: #FAB936;
--dhx-scheduler-base-colors-error: #E3334E;
--dhx-scheduler-base-colors-error-text: #FFFFFF;
--dhx-scheduler-base-colors-success: #1BC297;
--dhx-scheduler-base-colors-secondary: rgba(0, 0, 0, 0.04);
--dhx-scheduler-base-colors-select: #EFF3FF;
--dhx-scheduler-base-colors-border: #D0DBE3;
--dhx-scheduler-base-colors-icons: #A1A4A6;
--dhx-scheduler-base-colors-disabled: #E9E9E9;
--dhx-scheduler-base-colors-readonly: var(--dhx-scheduler-base-colors-icons);
--dhx-scheduler-base-colors-text-light: #44494E;
--dhx-scheduler-base-colors-text-base: #23272A;
--dhx-scheduler-base-colors-background: #FFFFFF;
--dhx-scheduler-container-background: var(--dhx-scheduler-base-colors-background);
--dhx-scheduler-container-color: var(--dhx-scheduler-base-colors-text-base);
--dhx-scheduler-scale-color: var(--dhx-scheduler-container-color);
--dhx-scheduler-base-padding: 4px;
--dhx-scheduler-border-radius: var(--dhx-scheduler-base-module);
--dhx-scheduler-event-colors-primary: #537CFA;
--dhx-scheduler-event-text-primary: rgba(255, 255, 255, 0.90);
--dhx-scheduler-toolbar-height: 40px;
--dhx-scheduler-header-border: var(--dhx-scheduler-default-border);
--dhx-scheduler-halfhour-border: 1px dotted var(--dhx-scheduler-base-colors-border);
/* events */
--dhx-scheduler-event-background-primary: var(--dhx-scheduler-base-colors-primary);
--dhx-scheduler-event-blue: linear-gradient(180deg, #527CFF 0%, #9751FC 100%);
--dhx-scheduler-event-green: linear-gradient(180deg, #12D979 0%, #1ECDEB 100%);
--dhx-scheduler-event-violet: linear-gradient(180deg, #D071EF 0%, #EE71D5 100%);
--dhx-scheduler-event-yellow: linear-gradient(180deg, #FFB725 0%, #FFBB25 31.25%,
#FAEA27 100%);
--dhx-scheduler-event-menu-background: var(--dhx-scheduler-popup-background);
--dhx-scheduler-event-menu-color: var(--dhx-scheduler-base-colors-primary);
--dhx-scheduler-event-background: var(--dhx-scheduler-event-blue);
--dhx-scheduler-event-border: none;
--dhx-scheduler-event-color: var(--dhx-scheduler-event-text-primary);
--dhx-scheduler-event-line-text: var(--dhx-scheduler-container-color);
--dhx-scheduler-event-marker-color: var(--dhx-scheduler-event-background);
--dhx-scheduler-popup-background: var(--dhx-scheduler-container-background);
--dhx-scheduler-popup-color: var(--dhx-scheduler-container-color);
--dhx-scheduler-popup-border: none;
--dhx-scheduler-popup-border-radius: var(--dhx-scheduler-border-radius);
}
所有这些变量都位于包内的 codebase/sources/less/src/themes/variables.less 文件中。
最简单的更改 Scheduler 外观的方法是在你自己的样式表中覆盖 CSS 变量。例如:
<style>:root {
--dhx-scheduler-base-colors-primary: #01579B;
--dhx-scheduler-event-background: #33B579;
--dhx-scheduler-event-color: #FFFFFF;
--dhx-scheduler-base-colors-border: #B0B8CD;
--dhx-scheduler-border-radius:2px;
}
</style>
Related sample: Customize and switch between themes
通过这样设置变量,你可以用自己的样式替换默认样式,这些更改会在整个 Scheduler 中生效。
为了确保整个主题变量值的继承一致性,建议在 :root 元素上定义变量。
在 :root 层级定义这些样式,可以确保它们在整个组件中被正确继承。这样,当某个变量依赖于另一个变量时,变更会正确级联。
例如,变量 --dhx-scheduler-scale-color
继承自 --dhx-scheduler-container-color
。
--dhx-scheduler-container-color
会相应地更新 --dhx-scheduler-scale-color
。<style>:root {
/* --dhx-scheduler-scale-color 以及其它
继承 `--dhx-scheduler-container-color` 的变量
都会受到影响
*/
--dhx-scheduler-container-color: #222;
}
</style>
--dhx-scheduler-container-color
,则不会影响 --dhx-scheduler-scale-color
。<style>.dhx_cal_container {
/* 只有直接
使用 --dhx-scheduler-container-color 的元素会受到影响
*/
--dhx-scheduler-container-color: #222;
}
</style>
dhtmlxScheduler 提供了以下几种样式文件格式:
如果你想深度定制现有皮肤或创建新皮肤,源 LESS 文件会非常有用。
你可以将 codebase/sources/less 作为一个 NPM 包进行设置。该源文件夹包含两类文件:
在 codebase/sources/less/ 目录下,运行:
> npm install
安装完成后,可以使用以下命令重新构建 CSS 文件:
> npm run build
或者监听更改并自动重建:
> npm run watch
这些脚本会将源文件编译为 CSS,并将输出文件放入 Scheduler 包的 codebase 文件夹,替换现有的 CSS 文件。
7.0 版本的 less 文件夹结构(未来版本可能有所调整)如下:
默认变量定义在 terrace
皮肤中,其他皮肤会覆盖这些变量并添加自己的样式。
terrace
要创建新皮肤,请从 sources/less/src/themes 中复制并重命名一个现有皮肤。操作步骤如下:
1)复制并重命名一个现有皮肤文件。例如:
-> 复制:
codebase/sources/less/src/themes/material.less
-> 重命名为:
codebase/sources/less/src/themes/custom.less
2)在 sources/less/src/themes/index.less 文件中引入你的新文件,如下所示:
@import "./custom";
然后如下定义你的自定义变量:
:root[data-scheduler-theme='custom'] {
--dhx-scheduler-theme: custom;
--dhx-scheduler-font-family: Roboto, Helvetica, Arial, sans-serif;
--dhx-scheduler-base-colors-primary: #0288D1;
}
请记得在带有 data-scheduler-theme
属性的 :root
选择器下定义皮肤变量。
每个新主题都应包含 --dhx-scheduler-theme 变量,并设置为主题名称。
3)通过运行以下命令重新构建皮肤:
npm run build
请注意,Scheduler 可能会根据所用皮肤应用一些预定义设置。当你通过复制现有皮肤创建新皮肤时,可能需要手动调整对应的 Scheduler 设置。
Scheduler 中有些样式选项并非仅通过 CSS 控制,而是通过 JavaScript 配置设置的。这些包括: