富文本编辑器是一种允许用户在网页上编辑和格式化文本的工具,支持加粗、斜体、插入图片等功能。本文详细介绍了富文本编辑器的特点、应用场景、安装配置方法以及基本操作,如插入链接和图片等。此外,还探讨了高级功能和常见问题的解决方法,帮助读者全面了解富文本编辑器教程。
富文本编辑器简介什么是富文本编辑器
富文本编辑器是一种允许用户在网页上编辑和格式化文本的工具。这些编辑器能够支持更复杂的文本格式,如加粗、斜体、列表、链接、插入图片等。它们通常提供一个直观的用户界面,使得非技术背景的用户也能轻松地对文本进行格式化操作。富文本编辑器广泛应用于博客、论坛、内容管理系统(CMS)、电子书编辑器等场景中。
富文本编辑器的特点和优势
- 友好的用户界面:富文本编辑器通常提供所见即所得(WYSIWYG)的界面,用户可以直接在编辑器中看到编辑效果,而无需掌握复杂的HTML或Markdown语法。
- 强大的格式化功能:可以轻松地对文本进行加粗、斜体、下划线等操作,并支持插入链接、图片、表格等。
- 易用性:即便是非技术用户,也能通过简单的点击操作来完成文本的格式化和编辑。
- 跨平台兼容性:通常兼容多种浏览器和操作系统,可以满足不同用户的需求。
- 扩展性和插件支持:许多富文本编辑器提供了丰富的插件和扩展,可以进一步增强其功能,例如插入视频、代码高亮等。
富文本编辑器的应用场景
- 内容管理系统(CMS):例如WordPress、Drupal等,提供给网站管理员和内容创作者一个方便的编辑界面。
- 在线文档编辑器:如Google Docs、Microsoft Word在线版,用户可以实时协作编辑文档。
- 社区论坛和博客平台:如Discourse、Medium等,用户可以直接在平台上编辑发布内容。
- 电子邮件客户端:支持用户在发送邮件时插入图片、链接等富文本内容。
- 桌面应用程序:如Microsoft Word、LibreOffice等,提供了强大的富文本编辑功能。
富文本编辑器的应用非常广泛,可以满足各种不同场景下的文本编辑需求。其易用性和强大的功能使其成为许多在线应用和桌面软件的重要组成部分。
富文本编辑器的基本操作选择合适的富文本编辑器
选择合适的富文本编辑器应根据具体需求和应用场景来决定。例如,如果你需要一个跨平台的编辑器,可以考虑使用TinyMCE或CKEditor;如果你需要一个支持实时协作的编辑器,可以选择Quill;如果你需要一个适合移动端的编辑器,则可以考虑使用Summernote。针对不同的需求,这些编辑器提供了不同的特性和功能,选择时应考虑以下因素:
- 功能需求:例如是否需要支持插入图片、视频、表格等功能,是否需要支持实时协作等。
- 兼容性:确保所选编辑器兼容你使用的浏览器和操作系统。
- 易用性:对于非技术用户,选择一个界面友好、操作简便的编辑器更为重要。
- 社区支持和文档:有些编辑器拥有活跃的社区和详尽的文档,这将有助于你在使用过程中遇到问题时能够快速解决。
以下是一些具体示例:
使用TinyMCE编辑器
<!DOCTYPE html>
<html>
<head>
<title>TinyMCE 示例</title>
<script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="path/to/tinymce.min.js"></script>
<script>
tinymce.init({
selector: '#my-editor',
plugins: 'link image code table',
toolbar: 'bold italic underline | link image | alignleft aligncenter alignright | table',
height: 500,
menubar: false
});
</script>
</head>
<body>
<textarea id="my-editor" name="content">
请输入内容...
</textarea>
</body>
</html>
使用CKEditor编辑器
<!DOCTYPE html>
<html>
<head>
<title>CKEditor 示例</title>
<script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="https://cdn.ckeditor.com/4.14.0/standard/ckeditor.js"></script>
</head>
<body>
<textarea id="editor"></textarea>
<script>
CKEDITOR.replace('editor');
</script>
</body>
</html>
使用Quill编辑器
<!DOCTYPE html>
<html>
<head>
<title>Quill 示例</title>
<script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="https://cdn.quilljs.com/1.3.6/quill.js"></script>
<link href="https://cdn.quilljs.com/1.3.6/quill.snow.css" rel="stylesheet">
<script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="https://cdn.quilljs.com/1.3.6/quill.bubble.js"></script>
</head>
<body>
<div id="editor-container">
<div id="editor"></div>
</div>
<script>
var quill = new Quill('#editor', {
modules: {
toolbar: [
['bold', 'italic', 'underline'],
[{ 'list': 'ordered' }, { 'list': 'bullet' }],
['link', 'image'],
['clean']
]
},
theme: 'bubble'
});
</script>
</body>
</html>
富文本编辑器的安装与配置
在安装富文本编辑器之前,需要确保你的开发环境已经设置好,并且有权限进行文件操作。以下是一个使用TinyMCE编辑器的基本安装和配置步骤:
-
安装TinyMCE:首先需要下载TinyMCE的压缩包,并将其解压到你的项目文件夹中。或者,你可以通过NPM(Node Package Manager)来安装TinyMCE,以方便进行版本管理和依赖管理。例如,使用NPM安装TinyMCE:
npm install tinymce
-
引入TinyMCE库:在HTML文件中引入TinyMCE的脚本文件。通常,TinyMCE会提供一个
tinymce.min.js
文件,你需要将其引入到你的HTML文件中。<script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="path/to/tinymce.min.js"></script>
-
配置TinyMCE:接下来,你需要调用TinyMCE的初始化函数,并传入相应的配置参数。例如,以下代码将创建一个基本的TinyMCE编辑器:
<textarea id="my-editor"></textarea> <script> tinymce.init({ selector: '#my-editor', plugins: 'link image code table', toolbar: 'bold italic underline | link image | alignleft aligncenter alignright | table', height: 500, menubar: false }); </script>
在上述配置中,
selector
参数指定了选择器,用于选择需要被转换为编辑器的元素。plugins
参数指定了需要启用的插件,如link
(插入链接)、image
(插入图片)等。而toolbar
参数定义了工具栏上的按钮,包括文字格式化按钮、对齐按钮等。
基本的编辑功能介绍
富文本编辑器的基本编辑功能包括文字格式化、插入链接和图片等。以下是一些基本的编辑操作示例:
-
文字格式化:
- 加粗:选择需要加粗的文字,然后点击工具栏中的“B”按钮或者使用快捷键
Ctrl + B
。 - 斜体:选择需要斜体的文字,然后点击工具栏中的“I”按钮,或者使用快捷键
Ctrl + I
。 - 下划线:选择需要下划线的文字,然后点击工具栏中的“U”按钮,或者使用快捷键
Ctrl + U
。
- 加粗:选择需要加粗的文字,然后点击工具栏中的“B”按钮或者使用快捷键
-
插入链接:
- 选择需要插入链接的文字,然后点击工具栏中的“链接”按钮,会在弹出的对话框中输入链接地址和文本“标题”,完成插入。
-
插入图片:
- 点击工具栏中的“插入图片”按钮,然后在弹出的对话框中选择图片文件路径,或者直接粘贴图片的URL,插入图片到编辑器中。
-
创建列表:
- 使用快捷键
Ctrl + Shift + L
创建无序列表,或者使用快捷键Ctrl + Shift + U
创建有序列表。 - 点击工具栏中相应的列表按钮,也可以手动选择需要创建列表的文字,然后点击相应的按钮进行创建。
- 使用快捷键
-
区块引用:
- 选择需要创建区块引用的文字,然后点击工具栏中的“区块引用”按钮,完成创建区块引用。
-
使用表格:
- 点击工具栏中的“表格”按钮,选择表格的行数和列数,创建一个新的表格。
- 在表格中添加或删除行和列,或者修改单元格中的内容。
实践示例
以下是一个使用TinyMCE编辑器的基本页面示例,它展示了如何插入链接和图片等基本功能:
<!DOCTYPE html>
<html>
<head>
<title>TinyMCE 富文本编辑器示例</title>
<script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="path/to/tinymce.min.js"></script>
<script>
tinymce.init({
selector: '#my-editor',
plugins: 'link image code table',
toolbar: 'bold italic underline | link image | alignleft aligncenter alignright | table',
height: 500,
menubar: false
});
</script>
</head>
<body>
<textarea id="my-editor" name="content">
请输入内容...
</textarea>
</body>
</html>
通过上述代码,你可以在网页中集成一个基本的TinyMCE富文本编辑器,并能够进行一些基本的格式化操作。这个示例展示了如何设置编辑器的插件、工具栏等配置,以及如何将编辑器绑定到指定的textarea元素上。
富文本编辑器的常用功能格式化文本
富文本编辑器允许用户轻松地对文本进行格式化操作,包括加粗、斜体、下划线等。以下是一个使用TinyMCE编辑器进行文字格式化的示例:
<!DOCTYPE html>
<html>
<head>
<title>TinyMCE 富文本编辑器示例</title>
<script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="path/to/tinymce.min.js"></script>
<script>
tinymce.init({
selector: '#my-editor',
plugins: 'link image code table',
toolbar: 'bold italic underline | link image | alignleft aligncenter alignright | table',
height: 500,
menubar: false
});
</script>
</head>
<body>
<textarea id="my-editor" name="content">
请输入内容...
</textarea>
</body>
</html>
在上述代码中,通过配置TinyMCE的toolbar
参数,可以定义工具栏上的按钮,如“bold”(加粗)、“italic”(斜体)和“underline”(下划线)按钮。用户可以通过点击这些按钮或使用快捷键(如Ctrl + B
加粗、Ctrl + I
斜体、Ctrl + U
下划线)来执行相应的格式化操作。
插入链接和图片
富文本编辑器允许用户在文本中插入链接和图片。以下是如何使用TinyMCE编辑器插入链接和图片的示例:
<!DOCTYPE html>
<html>
<head>
<title>TinyMCE 富文本编辑器示例</title>
<script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="path/to/tinymce.min.js"></script>
<script>
tinymce.init({
selector: '#my-editor',
plugins: 'link image code table',
toolbar: 'bold italic underline | link image | alignleft aligncenter alignright | table',
height: 500,
menubar: false
});
</script>
</head>
<body>
<textarea id="my-editor" name="content">
请输入内容...
</textarea>
</body>
</html>
在上述代码中,通过配置TinyMCE的toolbar
参数,可以定义工具栏上的按钮,如“link”(插入链接)和“image”(插入图片)按钮。用户可以在编辑器中选中文本或插入位置,然后点击相应的按钮,按照弹出的对话框提示,输入链接地址或图片路径来完成插入操作。
创建列表和区块引用
富文本编辑器允许用户创建有序列表和无序列表,并支持插入区块引用。以下是如何使用TinyMCE编辑器创建列表和区块引用的示例:
<!DOCTYPE html>
<html>
<head>
<title>TinyMCE 富文本编辑器示例</title>
<script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="path/to/tinymce.min.js"></script>
<script>
tinymce.init({
selector: '#my-editor',
plugins: 'link image code table',
toolbar: 'bold italic underline | link image | alignleft aligncenter alignright | table',
height: 500,
menubar: false
});
</script>
</head>
<body>
<textarea id="my-editor" name="content">
请输入内容...
</textarea>
</body>
</html>
在上述代码中,通过配置TinyMCE的toolbar
参数,可以定义工具栏上的按钮,如“list”(创建列表)和“blockquote”(区块引用)按钮。用户可以在编辑器中选中文本或插入位置,然后点击相应的按钮来创建列表或区块引用。
使用表格
富文本编辑器允许用户插入表格,并进行编辑。以下是如何使用TinyMCE编辑器插入表格的示例:
<!DOCTYPE html>
<html>
<head>
<title>TinyMCE 富文本编辑器示例</title>
<script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="path/to/tinymce.min.js"></script>
<script>
tinymce.init({
selector: '#my-editor',
plugins: 'link image code table',
toolbar: 'bold italic underline | link image | alignleft aligncenter alignright | table',
height: 500,
menubar: false
});
</script>
</head>
<body>
<textarea id="my-editor" name="content">
请输入内容...
</textarea>
</body>
</html>
在上述代码中,通过配置TinyMCE的toolbar
参数,可以定义工具栏上的“table”按钮。用户可以在编辑器中点击该按钮,选择表格的行数和列数,创建一个新的表格。在表格中,用户可以添加或删除行和列,或者修改单元格中的内容。
自定义样式和模板
富文本编辑器允许用户自定义样式和模板,以满足特定的设计需求。以下是如何使用TinyMCE编辑器自定义样式和模板的示例:
自定义样式
<!DOCTYPE html>
<html>
<head>
<title>TinyMCE 富文本编辑器示例</title>
<script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="path/to/tinymce.min.js"></script>
<script>
tinymce.init({
selector: '#my-editor',
plugins: 'link image code table',
toolbar: 'bold italic underline | link image | alignleft aligncenter alignright | table',
height: 500,
menubar: false,
content_css: 'path/to/custom.css'
});
</script>
</head>
<body>
<textarea id="my-editor" name="content">
请输入内容...
</textarea>
</body>
</html>
在上述代码中,通过配置content_css
参数,可以指定一个自定义的CSS文件路径,该文件定义了编辑器内的样式。例如,你可以创建一个custom.css
文件,并在其中定义字体、颜色、边距等样式规则,以满足特定的设计需求。
自定义模板
<!DOCTYPE html>
<html>
<head>
<title>TinyMCE 富文本编辑器示例</title>
<script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="path/to/tinymce.min.js"></script>
<script>
tinymce.init({
selector: '#my-editor',
plugins: 'link image code table',
toolbar: 'bold italic underline | link image | alignleft aligncenter alignright | table',
height: 500,
menubar: false,
template_templates: [
{ title: '默认模板', description: '默认模板', content: '<p>这是默认模板</p>' }
]
});
</script>
</head>
<body>
<textarea id="my-editor" name="content">
请输入内容...
</textarea>
</body>
</html>
在上述代码中,通过配置template_templates
参数,可以定义一个或多个模板,每个模板包含一个标题、描述和内容。用户在编辑器中创建新内容时,可以使用这些模板作为起点,以加快编辑过程。
插入数学公式和特殊符号
富文本编辑器通常能够支持插入数学公式和特殊符号,以下是如何使用TinyMCE编辑器插入数学公式和特殊符号的示例:
插入数学公式
<!DOCTYPE html>
<html>
<head>
<title>TinyMCE 富文本编辑器示例</title>
<script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="path/to/tinymce.min.js"></script>
<script>
tinymce.init({
selector: '#my-editor',
plugins: 'link image code table mathjax',
toolbar: 'bold italic underline | link image | alignleft aligncenter alignright | table',
height: 500,
menubar: false,
mathjax: 'path/to/mathjax.js'
});
</script>
</head>
<body>
<textarea id="my-editor" name="content">
请输入内容...
</textarea>
</body>
</html>
在上述代码中,通过配置plugins
参数,可以启用mathjax
插件,以支持插入数学公式。用户可以在编辑器中插入数学公式,例如使用$$
符号包裹TeX语法的公式,如$$x = \frac{-b \pm \sqrt{b^2-4ac}}{2a}$$
。
插入特殊符号
<!DOCTYPE html>
<html>
<head>
<title>TinyMCE 富文本编辑器示例</title>
<script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="path/to/tinymce.min.js"></script>
<script>
tinymce.init({
selector: '#my-editor',
plugins: 'link image code table',
toolbar: 'bold italic underline | link image | alignleft aligncenter alignright | table',
height: 500,
menubar: false,
content_css: 'path/to/special-characters.css'
});
</script>
</head>
<body>
<textarea id="my-editor" name="content">
请输入内容...
</textarea>
</body>
</html>
在上述代码中,通过配置content_css
参数,可以指定一个自定义的CSS文件路径,该文件定义了特殊符号的样式。此外,编辑器通常提供了一个内置的特殊符号菜单,用户可以在工具栏中点击相应的按钮,选择需要插入的特殊符号。
富文本编辑器的响应式设计
富文本编辑器通常支持响应式设计,以确保在不同设备和屏幕尺寸上的良好显示效果。以下是如何使用TinyMCE编辑器实现响应式设计的示例:
<!DOCTYPE html>
<html>
<head>
<title>TinyMCE 富文本编辑器示例</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="path/to/tinymce.min.js"></script>
<script>
tinymce.init({
selector: '#my-editor',
plugins: 'link image code table',
toolbar: 'bold italic underline | link image | alignleft aligncenter alignright | table',
height: 500,
menubar: false,
content_css: 'path/to/responsive.css'
});
</script>
</head>
<body>
<textarea id="my-editor" name="content">
请输入内容...
</textarea>
</body>
</html>
在上述代码中,通过配置content_css
参数,可以指定一个自定义的CSS文件路径,该文件定义了响应式样式。例如,你可以创建一个responsive.css
文件,并在其中定义媒体查询,以根据不同的屏幕尺寸调整编辑器的样式,如宽度、字体大小等。这样,编辑器在不同设备上的显示效果将更加一致和美观。
常见错误及解决办法
- “编辑器无法加载”:检查是否正确引入了富文本编辑器的脚本文件,并确保路径正确。确认没有网络问题或脚本文件不存在的问题。
- “编辑器加载后无法编辑”:确认是否正确配置了编辑器的选择器和其他参数。检查是否有JavaScript或CSS的冲突问题。
- “编辑器显示不正常”:检查是否正确引入了编辑器的样式文件,并确保没有CSS样式冲突。此外,确认编辑器的配置参数是否正确。
性能优化技巧
- 减少插件使用:只启用必要的插件,避免加载不必要的插件,可以提升编辑器的加载速度。
- 优化配置:简化编辑器的配置,例如减少工具栏按钮的数量,可以提高编辑器的响应速度。
- 使用CDN:考虑使用CDN(内容分发网络)来加载编辑器的脚本文件,以提高加载速度。
- 异步加载:使用异步加载方式来加载编辑器的脚本,以避免阻塞其他资源的加载。
兼容性问题及解决方案
- 跨浏览器兼容性:测试不同浏览器上的编辑器表现,确保没有兼容性问题。如果存在兼容性问题,可以使用polyfill库来解决特定浏览器的问题。
- 跨平台兼容性:确保编辑器在不同操作系统上的表现一致。如果存在问题,可以通过调整配置参数或引入特定的CSS样式来解决。
- 兼容性测试:进行兼容性测试,确保编辑器在不同设备和浏览器上的表现一致。可以使用浏览器兼容性测试工具来进行测试。
通过以上方法,可以解决富文本编辑器在使用过程中的常见问题,提高编辑器的性能和兼容性。
共同学习,写下你的评论
评论加载中...
作者其他优质文章