← 全部文档

导入样式

用您网站已有的 CSS 类填充编辑器的样式菜单。设置 importStyles: true 后,编辑器会读取页面的样式表,找到 p.lede 或 img.rounded 之类的类选择器,并把每个类添加到段落、内联、图片或链接样式菜单中,这样作者选择的就是您设计系统中的类,而不是占位用的类。

打开了段落样式菜单的编辑器,列出 Lede、Pull Quote、Highlight、Note 和 Section Title
根据网站自己的样式表生成的段落样式菜单(importStylesReplace: true)。

启用

该功能由 importstyles.js 插件提供(也包含在 plugins/all_plugins.js 中)。在您设置 importStyles: true 之前,它是关闭的。它没有自己的按钮;它填充的是 paragraphstyle 和 inlinestyle(主工具栏)、imagestyle(图片工具栏)以及 linkstyle(链接工具栏)背后的菜单。

本例中的样式表:

p.lede { font-size: 1.25em; color: #334155; }
blockquote.pull-quote { border-left: 4px solid #2563eb; padding-left: 12px; font-style: italic; }
span.badge { background: #fde68a; padding: 0 4px; border-radius: 4px; }
.highlight { background: #dcfce7; }
img.rounded { border-radius: 12px; }
a.cta { background: #2563eb; color: #fff; padding: 4px 10px; border-radius: 6px; }
article .card p.note:hover { color: #0f766e; }
p.lede.wide { max-width: none; }
.js-toggle { display: none; }
@media (min-width: 600px) { h2.section-title { letter-spacing: .02em; } }
<link rel="stylesheet" href="site.css">
<script src="/richtexteditor/rte.js"></script>
<script src="/richtexteditor/plugins/all_plugins.js"></script>
<div id="editor"><p>Intro paragraph that should become a lede.</p></div>
<script>
var editor = new RichTextEditor("#editor", {
  toolbar: "full",
  contentCssUrl: "site.css",   // so the classes also look right inside the editor
  importStyles: true
});
</script>

这个样式表生成了以下菜单(editor.getImportedStyles() 报告 applied: { imageStyles: 1, linkStyles: 1, inlineStyles: 2, paragraphStyles: 5 }):

菜单导入的条目
段落样式Lede、Pull Quote、Highlight、Note、Section Title
内联样式Badge、Highlight
图片样式Rounded
链接样式Cta

对第一个段落选择 Lede 后,保存的结果为 <p class="lede">Intro paragraph that should become a lede.</p>。

类如何归类

  • 只有选择器的最后一部分起作用:article .card p.note:hover 为段落提供 note。伪类和属性筛选会被忽略。
  • 类前面的元素决定它进入哪个菜单:img、figure、picture 进入图片样式;a 进入链接样式;span、strong、b、em、i、code、mark、small、sub、sup、abbr、q、cite 进入内联样式;p、div、标题、blockquote、列表、pre、section 和表格单元格进入段落样式。没有元素的类(.highlight)同时进入内联样式和段落样式。其他元素会被跳过。
  • 一个元素上有两个类的选择器(p.lede.wide)会被跳过,因为没有任何单个类能匹配它。
  • @media 和 @supports 中的类也能被找到。
  • 标签由类名生成:pull-quote 变成 "Pull Quote"。开头的 my-cls-、u- 或 c- 会被去掉。
  • 编辑器自己的样式表永远不会被读取(来自 /richtexteditor/ 文件夹的任何内容,以及编辑器注入的样式)。

选项

选项默认值作用
importStylesfalse开启导入。
importStylesSheetsnull(所有可读取的样式表)要读取哪些样式表:与样式表 URL 匹配的字符串("site.css")、RegExp(/theme/),或者一个接收 CSSStyleSheet 并返回 true 或 false 的函数。
importStylesExclude/^(rte[-_]|ck[-_]|cke[-_]|mce[-_]|tox[-_]|js[-_]|is[-_]|has[-_])/i永远不会导入的类名。可以是 RegExp、以类名为参数的函数,或者一个字符串前缀。默认值跳过了上面的 .js-toggle。
importStylesFilternullfunction (className, selectorText, menu)。返回 false 跳过某个类,或者返回一个字符串作为它的标签。menu 为 "paragraphStyles"、"inlineStyles"、"imageStyles" 或 "linkStyles"。
importStylesReplacefalsefalse 把导入的类添加到已配置的类之后;true 则替换它们。
importStylesLimit100每个菜单最多的条目数。多出的类会被丢弃,并在控制台中给出警告。0 表示不限制。

例如,隐藏一个类并重命名另一个类:

importStylesFilter: function (cls, selector, menu) {
  if (cls === "highlight") return false;
  if (cls === "lede") return "Lead paragraph";
}

API

  • editor.getImportedStyles() 返回上一次导入的结果:{ applied, truncated, droppedCount, unreadableSheets, documentsScanned, replaced }。
  • editor.scanStylesheetClasses(options) 以 { classes: [{ cls, tag, selector }], unreadableSheets, documents } 的形式列出将会导入的内容,而不改变菜单。在 importStyles 关闭时也能使用。
  • editor.importStyles(options) 再次运行导入,例如在加载了另一个样式表之后。选项使用简短的名称:{ sheets, exclude, filter, replace, limit }。

注意事项

  • 无法读取来自其他源的样式表。浏览器会阻止读取它们的规则;它们会被计入 unreadableSheets 并被跳过,扫描的其余部分照常进行。在上面的测试中,从第二个源加载的同一样式表的副本被报告为 unreadableSheets: 1。请从您自己的域名提供您需要其类的样式表。
  • 两个文档都会被读取:页面本身,以及编辑器的编辑区域(contentCssUrl 在那里加载)。导入在编辑器启动时运行,并在编辑器就绪后再运行一次。
  • 页面上有多个编辑器时,请传入您自己的列表。在 2.6.12 中,当 importStylesReplace: false 时,导入的类会被添加到共享的默认列表中(RTE_DefaultConfig.paragraphStyles 及其他列表),因此之后在同一页面上创建的第二个编辑器即使关闭了 importStyles,也会显示这些类。在每个编辑器的配置中分别设置 paragraphStyles、inlineStyles、imageStyles 和 linkStyles,或者设置 importStylesReplace: true,即可把它们分开。
  • 保存的 HTML 只携带类名(class="lede")。显示内容的页面需要同一个样式表,并且 HTML 净化程序必须允许 class。
  • 在使用工具类 CSS 的页面上(有数百个单一用途的类),请用 importStylesSheets 或 importStylesFilter 缩小导入范围,而不是提高上限。

相关内容:段落和内联样式演示、配置参考。