deepseek v3-0324 Markdown 编辑器 HTML

Markdown 编辑器 HTML

以下是一个美观的 Markdown 编辑器 HTML 页面,支持多种主题切换和实时预览功能:
在这里插入图片描述

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>多功能 Markdown 编辑器</title><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/styles/github.min.css"><script src="https://cdnjs.cloudflare.com/ajax/libs/marked/4.2.12/marked.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/highlight.min.js"></script><style>:root {--primary-color: #3498db;--secondary-color: #2980b9;--background-color: #f9f9f9;--text-color: #333;--sidebar-color: #2c3e50;--sidebar-text: #ecf0f1;--editor-bg: #fff;--preview-bg: #fff;--border-color: #ddd;}* {margin: 0;padding: 0;box-sizing: border-box;}body {font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;line-height: 1.6;color: var(--text-color);background-color: var(--background-color);transition: all 0.3s ease;}.container {display: flex;min-height: 100vh;}.sidebar {width: 250px;background-color: var(--sidebar-color);color: var(--sidebar-text);padding: 20px;transition: all 0.3s ease;}.sidebar-header {display: flex;justify-content: space-between;align-items: center;margin-bottom: 30px;}.sidebar-title {font-size: 1.5rem;font-weight: bold;}.theme-selector {margin-bottom: 30px;}.theme-selector h3 {margin-bottom: 15px;font-size: 1.1rem;}.theme-options {display: grid;grid-template-columns: repeat(3, 1fr);gap: 10px;}.theme-option {width: 100%;height: 30px;border-radius: 4px;cursor: pointer;border: 2px solid transparent;}.theme-option:hover {opacity: 0.9;}.theme-option.active {border-color: var(--sidebar-text);}.default-theme { background: linear-gradient(135deg, #3498db 50%, #2980b9 50%); }.dark-theme { background: linear-gradient(135deg, #34495e 50%, #2c3e50 50%); }.solarized-theme { background: linear-gradient(135deg, #268bd2 50%, #073642 50%); }.monokai-theme { background: linear-gradient(135deg, #a6e22e 50%, #272822 50%); }.dracula-theme { background: linear-gradient(135deg, #bd93f9 50%, #282a36 50%); }.github-theme { background: linear-gradient(135deg, #24292e 50%, #f6f8fa 50%); }.main-content {flex: 1;display: flex;flex-direction: column;}.toolbar {background-color: var(--primary-color);color: white;padding: 10px 20px;display: flex;justify-content: space-between;align-items: center;}.toolbar-title {font-size: 1.2rem;font-weight: bold;}.toolbar-actions button {background-color: var(--secondary-color);color: white;border: none;padding: 8px 15px;border-radius: 4px;cursor: pointer;margin-left: 10px;transition: background-color 0.2s;}.toolbar-actions button:hover {background-color: #1a6ea0;}.editor-container {display: flex;flex: 1;overflow: hidden;}.editor-section, .preview-section {flex: 1;padding: 20px;overflow-y: auto;position: relative;}.editor-section {background-color: var(--editor-bg);border-right: 1px solid var(--border-color);}.preview-section {background-color: var(--preview-bg);}.section-title {font-size: 1rem;margin-bottom: 15px;color: var(--primary-color);display: flex;align-items: center;}.section-title i {margin-right: 8px;}#markdown-editor {width: 100%;height: calc(100% - 30px);border: 1px solid var(--border-color);border-radius: 4px;padding: 15px;font-family: 'Consolas', 'Monaco', monospace;font-size: 14px;line-height: 1.5;resize: none;background-color: var(--editor-bg);color: var(--text-color);}#markdown-preview {height: calc(100% - 30px);overflow-y: auto;padding: 15px;border: 1px solid var(--border-color);border-radius: 4px;background-color: var(--preview-bg);}#markdown-preview pre {background-color: #f5f5f5;padding: 10px;border-radius: 4px;overflow-x: auto;}#markdown-preview code {font-family: 'Consolas', 'Monaco', monospace;}#markdown-preview blockquote {border-left: 4px solid var(--primary-color);padding-left: 15px;color: #666;margin: 15px 0;}#markdown-preview table {border-collapse: collapse;width: 100%;margin: 15px 0;}#markdown-preview table, #markdown-preview th, #markdown-preview td {border: 1px solid var(--border-color);}#markdown-preview th, #markdown-preview td {padding: 8px 12px;}#markdown-preview img {max-width: 100%;height: auto;}.status-bar {background-color: var(--primary-color);color: white;padding: 8px 20px;font-size: 0.8rem;display: flex;justify-content: space-between;}@media (max-width: 768px) {.container {flex-direction: column;}.sidebar {width: 100%;padding: 15px;}.editor-container {flex-direction: column;}.editor-section, .preview-section {flex: none;height: 50vh;}.editor-section {border-right: none;border-bottom: 1px solid var(--border-color);}}</style>
</head>
<body><div class="container"><div class="sidebar"><div class="sidebar-header"><div class="sidebar-title">MD Editor</div><i class="fas fa-cog"></i></div><div class="theme-selector"><h3>选择主题</h3><div class="theme-options"><div class="theme-option default-theme active" data-theme="default"></div><div class="theme-option dark-theme" data-theme="dark"></div><div class="theme-option solarized-theme" data-theme="solarized"></div><div class="theme-option monokai-theme" data-theme="monokai"></div><div class="theme-option dracula-theme" data-theme="dracula"></div><div class="theme-option github-theme" data-theme="github"></div></div></div><div class="shortcuts"><h3>Markdown 快捷参考</h3><ul style="margin-top: 10px; padding-left: 20px;"><li><code># 标题</code></li><li><code>**粗体**</code></li><li><code>*斜体*</code></li><li><code>`代码`</code></li><li><code>- 列表项</code></li><li><code>[链接](URL)</code></li><li><code>![图片](URL)</code></li></ul></div></div><div class="main-content"><div class="toolbar"><div class="toolbar-title"><i class="fas fa-file-alt"></i> 未命名文档.md</div><div class="toolbar-actions"><button id="export-html"><i class="fas fa-file-export"></i> 导出HTML</button><button id="download-md"><i class="fas fa-download"></i> 下载MD</button></div></div><div class="editor-container"><div class="editor-section"><div class="section-title"><i class="fas fa-edit"></i> 编辑</div><textarea id="markdown-editor" placeholder="在此输入Markdown文本..."># Markdown 编辑器这是一个**多功能**的Markdown编辑器,支持*实时预览*和多种主题。## 功能特性- 实时预览
- 多种主题选择
- 代码高亮
- 响应式设计
- 导出功能### 代码示例```javascript
function helloWorld() {console.log("Hello, Markdown Editor!");
}

表格示例

功能支持
标题
列表
代码块
表格

提示:左侧边栏可以切换主题

            <div class="preview-section"><div class="section-title"><i class="fas fa-eye"></i> 预览</div><div id="markdown-preview"></div></div></div><div class="status-bar"><div class="status-info">行: 1, 列: 1</div><div class="status-mode">Markdown</div></div></div>
</div><script>// 初始化 marked 和 highlight.jsmarked.setOptions({breaks: true,highlight: function(code, lang) {if (hljs.getLanguage(lang)) {return hljs.highlight(lang, code).value;}return hljs.highlightAuto(code).value;}});// 获取DOM元素const editor = document.getElementById('markdown-editor');const preview = document.getElementById('markdown-preview');const themeOptions = document.querySelectorAll('.theme-option');const exportHtmlBtn = document.getElementById('export-html');const downloadMdBtn = document.getElementById('download-md');// 初始渲染function updatePreview() {preview.innerHTML = marked.parse(editor.value);}// 实时更新预览editor.addEventListener('input', updatePreview);// 初始化预览updatePreview();// 主题切换themeOptions.forEach(option => {option.addEventListener('click', function() {// 移除所有active类themeOptions.forEach(opt => opt.classList.remove('active'));// 添加active类到当前选项this.classList.add('active');// 根据选择的主题更新CSS变量const theme = this.dataset.theme;changeTheme(theme);});});// 主题配置function changeTheme(theme) {const root = document.documentElement;switch(theme) {case 'dark':root.style.setProperty('--primary-color', '#34495e');root.style.setProperty('--secondary-color', '#2c3e50');root.style.setProperty('--background-color', '#1a1a1a');root.style.setProperty('--text-color', '#ecf0f1');root.style.setProperty('--sidebar-color', '#2c3e50');root.style.setProperty('--sidebar-text', '#ecf0f1');root.style.setProperty('--editor-bg', '#2c3e50');root.style.setProperty('--preview-bg', '#34495e');root.style.setProperty('--border-color', '#444');break;case 'solarized':root.style.setProperty('--primary-color', '#268bd2');root.style.setProperty('--secondary-color', '#073642');root.style.setProperty('--background-color', '#fdf6e3');root.style.setProperty('--text-color', '#586e75');root.style.setProperty('--sidebar-color', '#073642');root.style.setProperty('--sidebar-text', '#93a1a1');root.style.setProperty('--editor-bg', '#eee8d5');root.style.setProperty('--preview-bg', '#fdf6e3');root.style.setProperty('--border-color', '#93a1a1');break;case 'monokai':root.style.setProperty('--primary-color', '#a6e22e');root.style.setProperty('--secondary-color', '#272822');root.style.setProperty('--background-color', '#272822');root.style.setProperty('--text-color', '#f8f8f2');root.style.setProperty('--sidebar-color', '#272822');root.style.setProperty('--sidebar-text', '#f8f8f2');root.style.setProperty('--editor-bg', '#272822');root.style.setProperty('--preview-bg', '#272822');root.style.setProperty('--border-color', '#49483e');break;case 'dracula':root.style.setProperty('--primary-color', '#bd93f9');root.style.setProperty('--secondary-color', '#282a36');root.style.setProperty('--background-color', '#282a36');root.style.setProperty('--text-color', '#f8f8f2');root.style.setProperty('--sidebar-color', '#44475a');root.style.setProperty('--sidebar-text', '#f8f8f2');root.style.setProperty('--editor-bg', '#282a36');root.style.setProperty('--preview-bg', '#282a36');root.style.setProperty('--border-color', '#6272a4');break;case 'github':root.style.setProperty('--primary-color', '#24292e');root.style.setProperty('--secondary-color', '#f6f8fa');root.style.setProperty('--background-color', '#ffffff');root.style.setProperty('--text-color', '#24292e');root.style.setProperty('--sidebar-color', '#24292e');root.style.setProperty('--sidebar-text', '#f6f8fa');root.style.setProperty('--editor-bg', '#ffffff');root.style.setProperty('--preview-bg', '#f6f8fa');root.style.setProperty('--border-color', '#e1e4e8');break;default: // default themeroot.style.setProperty('--primary-color', '#3498db');root.style.setProperty('--secondary-color', '#2980b9');root.style.setProperty('--background-color', '#f9f9f9');root.style.setProperty('--text-color', '#333');root.style.setProperty('--sidebar-color', '#2c3e50');root.style.setProperty('--sidebar-text', '#ecf0f1');root.style.setProperty('--editor-bg', '#ffffff');root.style.setProperty('--preview-bg', '#ffffff');root.style.setProperty('--border-color', '#ddd');}}// 导出HTMLexportHtmlBtn.addEventListener('click', function() {const htmlContent = `
Markdown导出 ${marked.parse(editor.value)} `;
        const blob = new Blob([htmlContent], { type: 'text/html' });const url = URL.createObjectURL(blob);const a = document.createElement('a');a.href = url;a.download = 'markdown-export.html';document.body.appendChild(a);a.click();document.body.removeChild(a);URL.revokeObjectURL(url);});// 下载MarkdowndownloadMdBtn.addEventListener('click', function() {const blob = new Blob([editor.value], { type: 'text/markdown' });const url = URL.createObjectURL(blob);const a = document.createElement('a');a.href = url;a.download = 'markdown-document.md';document.body.appendChild(a);a.click();document.body.removeChild(a);URL.revokeObjectURL(url);});// 更新光标位置editor.addEventListener('keyup', updateCursorPosition);editor.addEventListener('click', updateCursorPosition);function updateCursorPosition() {const cursorPos = editor.selectionStart;const text = editor.value.substr(0, cursorPos);const lines = text.split('\n');const line = lines.length;const column = lines[lines.length - 1].length + 1;document.querySelector('.status-info').textContent = `行: ${line}, 列: ${column}`;}// 初始化光标位置updateCursorPosition();
</script>
```

功能特点

  1. 实时预览:左侧编辑,右侧实时显示渲染结果
  2. 多种主题:提供6种美观主题可供选择
  3. 代码高亮:使用highlight.js实现代码语法高亮
  4. 导出功能
    • 导出为HTML文件(包含完整样式)
    • 下载原始Markdown文件
  5. 响应式设计:适配不同屏幕尺寸
  6. 用户友好
    • 光标位置显示
    • Markdown快捷参考
    • 美观的UI设计

使用方法

  1. 将上述代码保存为HTML文件
  2. 在浏览器中打开该文件
  3. 在左侧编辑区输入Markdown文本
  4. 右侧会自动显示渲染结果
  5. 通过左侧边栏切换不同主题
  6. 使用顶部工具栏按钮导出或下载内容

这个编辑器完全基于前端技术实现,无需服务器支持,可以直接在本地使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/74606.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux make 检查依赖文件更新的原理

1. 文件的时间戳 make 主要依靠文件的时间戳来判断依赖文件是否有更新。每个文件在文件系统中都有一个时间戳&#xff0c;记录了文件的三种重要时间&#xff1a; ​​访问时间&#xff08;Accesstime&#xff09;​​&#xff1a;文件最后一次被访问的时间。​​修改时间&…

HDEBits中组合逻辑类的部分题目练习

文章目录 1. More logic gates2. Truth tables3. 256-to-1 4-bit multiplexer4. 3-bit binary adder5. Signed addition overflow6. 4-digit BCD adder7. Minimum SOP and POS8. Karnaugh map9. K-map implemented with a multiplexer总结 1. More logic gates 题目&#xff1…

Apache httpclient okhttp(2)

学习链接 Apache httpclient & okhttp&#xff08;1&#xff09; Apache httpclient & okhttp&#xff08;2&#xff09; okhttp github okhttp官方使用文档 okhttp官方示例代码 OkHttp使用介绍 OkHttp使用进阶 译自OkHttp Github官方教程 SpringBoot 整合okHttp…

【git项目管理】长话短说

目录 主要分为三种使用情况 安装git后第一次使用创建新仓库并管理克隆仓库并管理 初次使用git 首先确定电脑的用户名是纯英文&#xff0c;没有中文和奇怪的符号&#xff0c;如果不满足这个条件&#xff0c;参考这个 链接 修改用户名 git config --global user.name "…

算法刷题记录——LeetCode篇(3.2) [第211~212题](持续更新)

更新时间&#xff1a;2025-04-04 算法题解目录汇总&#xff1a;算法刷题记录——题解目录汇总技术博客总目录&#xff1a;计算机技术系列博客——目录页 优先整理热门100及面试150&#xff0c;不定期持续更新&#xff0c;欢迎关注&#xff01; 215. 数组中的第K个最大元素 给…

【linux学习】linux系统调用编程

目录 一、任务、进程和线程 1.1任务 1.2进程 1.3线程 1.4线程和进程的关系 1.5 在linux系统下进程操作 二、Linux虚拟内存管理与stm32的真实物理内存区别 2.1 Linux虚拟内存管理 2.2 STM32的真实物理内存映射 2.3区别 三、 Linux系统调用函数 fork()、wait()、exec(…

react redux的学习,多个reducer

redux系列文章目录 第一章 简单学习redux,单个reducer 前言 前面我们学习到的是单reducer的使用&#xff1b;要知道redux是个很强大的状态存储库&#xff0c;可以支持多个reducer的使用。 combineReducers ‌combineReducers‌是Redux中的一个辅助函数&#xff0c;主要用于…

Oracle数据库数据编程SQL<3.5 PL/SQL 存储过程(Procedure)>

存储过程(Stored Procedure)是 Oracle 数据库中一组预编译的 PL/SQL 语句集合,存储在数据库中并可通过名称调用执行。它们是企业级数据库应用开发的核心组件。 目录 一、存储过程基础 1. 存储过程特点 2. 创建基本语法 3. 存储过程优点 4. 简单示例 二、没有参数的存储…

手撕AVL树

引入&#xff1a;为何要有AVL树&#xff0c;二次搜索树有什么不足&#xff1f; 二叉搜索树有其自身的缺陷&#xff0c;假如往树中插入的元素有序或者接近有序&#xff0c;二叉搜索树就会退化成单支树&#xff0c;时间复杂度会退化成O(N)&#xff0c;因此产生了AVL树&#xff0c…

《 C语言中的变长数组:灵活而强大的特性》

&#x1f680;个人主页&#xff1a;BabyZZの秘密日记 &#x1f4d6;收入专栏&#xff1a;C语言 &#x1f30d;文章目入 一、变长数组的定义二、变长数组的优势三、变长数组的使用示例示例1&#xff1a;动态输入数组大小示例2&#xff1a;变长数组在函数中的应用 四、变长数组的…

【微服务】基础概念

1.什么是微服务 微服务其实就是一种架构风格&#xff0c;他提倡我们在开发的时候&#xff0c;一个应用应该是一组小型服务而组成的&#xff0c;每一个服务都运行在自己的进程中&#xff0c;每一个小服务都通过HTTP的方式进行互通。他更加强调服务的彻底拆分。他并不是仅局限于…

Linux make与makefile 项目自动化构建工具

本文章将对make与makefile进行一些基础的讲解。 假设我们要建造一座房子&#xff0c;建造过程涉及很多步骤&#xff0c;比如打地基、砌墙、安装门窗、粉刷墙壁等。每个步骤都有先后顺序&#xff0c;并且有些步骤可能依赖于其他步骤的完成。比如&#xff0c;你必须先打好地基才…

如何判断多个点组成的3维面不是平的,如果不是平的,如何拆分成多个平面

判断和拆分三维非平面为多个平面 要判断多个三维点组成的面是否为平面&#xff0c;以及如何将非平面拆分为多个平面&#xff0c;可以按照以下步骤进行&#xff1a; 判断是否为平面 平面方程法&#xff1a; 选择三个不共线的点计算平面方程&#xff1a;Ax By Cz D 0检查其…

多layout 布局适配

安卓多布局文件适配方案操作流程 以下为通过多套布局文件适配不同屏幕尺寸/密度的详细步骤&#xff0c;结合主流适配策略及最佳实践总结&#xff1a; 一、‌创建多套布局资源目录‌ ‌按屏幕尺寸划分‌ 在 res 目录下创建以下文件夹&#xff08;根据设备特性自动匹配&#xff…

Java 大视界 -- Java 大数据在智能农业无人机植保作业路径规划与药效评估中的应用(165)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

美关税加征下,Odoo免费开源ERP如何助企业破局?

近期&#xff0c;美国特朗普政府推行的关税政策对全球供应链和进出口企业造成巨大冲击&#xff0c;尤其是依赖中美贸易的企业面临成本激增、利润压缩和合规风险。在此背景下&#xff0c;如何通过数字化转型优化管理效率、降低运营成本成为企业生存的关键。本文以免费开源ERP系统…

go游戏后端开发25:红中麻将规则介绍

一、游戏基础规则介绍 在开发红中麻将游戏之前&#xff0c;我们需要先了解其基础规则。红中麻将的牌面由 a、b、c、d 四种花色组成&#xff0c;其中 a、b、c 分别代表万、条、筒&#xff0c;每种花色都有 1 - 9 的九种牌&#xff0c;每种牌各有四张&#xff0c;总计 36 张 4 …

Unity:平滑输入(Input.GetAxis)

目录 1.为什么需要Input.GetAxis&#xff1f; 2. Input.GetAxis的基本功能 3. Input.GetAxis的工作原理 4. 常用参数和设置 5. 代码示例&#xff1a;用GetAxis控制角色移动 6. 与Input.GetAxisRaw的区别 7.如何优化GetAxis&#xff1f; 1.为什么需要Input.GetAxis&…

OpenCV:计算机视觉的强大开源库

文章目录 引言一、什么是OpenCV&#xff1f;1.OpenCV的核心特点 二、OpenCV的主要功能模块1. 核心功能&#xff08;Core Functionality&#xff09;2. 图像处理&#xff08;Image Processing&#xff09;3. 特征检测与描述&#xff08;Features2D&#xff09;4. 目标检测&#…

AI浪潮下的IT职业转型:医药流通行业传统IT顾问的深度思考

AI浪潮下的IT职业转型&#xff1a;医药流通行业传统IT顾问的深度思考 一、AI重构IT行业的技术逻辑与实践路径 1.1 医药流通领域的智能办公革命 在医药批发企业的日常运营中&#xff0c;传统IT工具正经历颠覆性变革。以订单处理系统为例&#xff0c;某医药集团引入AI智能客服…