一键注册登录,获悉互联网最新资源讯息!

返回列表 发布新帖
查看: 425|回复: 1

HTML -代码高亮模块

累计签到:345 天
连续签到:5 天
灌水成绩
837 279 15283

等级头衔
U I D : 1
用户组 : 管理员

积分成就
威望 : 3
贡献 : 0
金钱 : 14046
在线时间 : 1107 小时
注册时间 : 2024-11-25
最后登录 : 2025-12-7

荣誉勋章

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

发表于 2025-8-6 21:32:38 | 查看全部 |阅读模式
代码高亮块(Syntax-highlighted Code Block)
可复制代码片段(Copyable Code Snippet)
代码展示组件(Code Display Component)

1. 代码高亮块(Syntax-highlighted Code Block)特点:只做语法高亮,不提供复制按钮。
方案:用开源库 Prism.js 一键高亮。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8" />
  <title>代码高亮块 - Prism.js</title>
  <link href="https://cdn.jsdelivr.net/npm/prismjs@1.29.0/themes/prism-tomorrow.css" rel="stylesheet" />
</head>
<body>
<pre><code class="language-js">
// 计算斐波那契数列
function fib(n) {
  return n < 2 ? n : fib(n - 1) + fib(n - 2);
}
console.log(fib(10)); // 55
</code></pre>

<script src="https://cdn.jsdelivr.net/npm/prismjs@1.29.0/prism.js"></script>
</body>
</html>

2. 可复制代码片段(Copyable Code Snippet)特点:功能单一,一个 <pre> + 复制按钮。
方案:原生按钮 + Clipboard API。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<title>可复制代码片段</title>
<style>
  pre {
    background:#1e1e1e;color:#d4d4d4;padding:1rem;border-radius:6px;position:relative;
    white-space:pre-wrap;font-family:Consolas,Monaco,monospace;font-size:.9rem;
  }
  .copy-btn {
    position:absolute;top:.5rem;right:.5rem;background:#3b82f6;color:#fff;border:none;
    border-radius:4px;padding:.3rem .6rem;font-size:.75rem;cursor:pointer;
  }
</style>
</head>
<body>

<pre id="myCode">
npm install vite --save-dev
</pre>
<button class="copy-btn">复制</button>

<script>
function copyCode() {
  const text = document.getElementById('myCode').textContent;
  navigator.clipboard.writeText(text).then(() => alert('已复制'));
}
</script>
</body>
</html>

3. 代码展示组件(Code Display Component)特点:标题 + 高亮 + 复制 + 状态反馈,完整组件。
方案:原生实现,可嵌入任何页面。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<title>代码展示组件</title>
<style>
  .code-panel {max-width:720px;margin:2rem auto;font-family:-apple-system,BlinkMacSystemFont,sans-serif;}
  .code-title {font-size:1.1rem;font-weight:600;margin-bottom:.5rem;}
  .code-block {position:relative;background:#1e1e1e;color:#d4d4d4;border-radius:8px;padding:1rem 1.2rem;font-family:Consolas,Monaco,monospace;font-size:.9rem;overflow-x:auto;}
  .copy-btn {position:absolute;top:.6rem;right:.6rem;background:#3b82f6;color:#fff;border:none;border-radius:4px;padding:.3rem .6rem;font-size:.75rem;cursor:pointer;}
  .copy-btn.copied {background:#10b981;}
  .msg {margin-top:.5rem;font-size:.8rem;color:#166534;display:none;}
</style>
</head>
<body>

<div class="code-panel">
  <div class="code-title">React Hook 示例</div>
  <div class="code-block" id="code">
<button class="copy-btn" id="copyBtn">复制</button>
import { useState } from 'react';
export default function Counter() {
  const [count, setCount] = useState(0);
  return <button onClick={() => setCount(count + 1)}>{count}</button>;
}
  </div>
  <div class="msg" id="msg">复制成功!</div>
</div>

<script>
const btn  = document.getElementById('copyBtn');
const code = document.getElementById('code');
const msg  = document.getElementById('msg');
btn.addEventListener('click', async () => {
  const text = code.cloneNode(true);        // 深拷贝
  text.querySelector('button').remove();    // 去掉按钮
  await navigator.clipboard.writeText(text.textContent.trim());
  btn.textContent = '已复制';
  btn.classList.add('copied');
  msg.style.display = 'block';
  setTimeout(() => { btn.textContent = '复制'; btn.classList.remove('copied'); msg.style.display = 'none'; }, 2000);
});
</script>
</body>
</html>


<style>
  .snippet {
    position: relative;
    background: #f5f5f5;
    border-radius: 6px;
    padding: 12px 40px 12px 12px;
    font-family: Consolas, Monaco, 'Andale Mono', monospace;
    font-size: 14px;
    overflow-x: auto;
  }
  .snippet button {
    position: absolute;
    top: 6px;
    right: 6px;
    cursor: pointer;
    background: #e0e0e0;
    border: none;
    border-radius: 4px;
    padding: 2px 6px;
    font-size: 12px;
  }
</style>

<div class="snippet">
  <button>Copy</button>
  <code id="code">curl https://api.example.com/v1/status</code>
</div>

<script>
  function copyCode(btn) {
    const code = btn.nextElementSibling.innerText;
    navigator.clipboard.writeText(code).then(() => {
      btn.textContent = 'Copied';
      setTimeout(() => (btn.textContent = 'Copy'), 1200);
    });
  }
</script>
"小礼物走一走,请用 支付宝 打赏"
还没有人打赏,支持一下
温馨提示:
1、在论坛里发表的文章仅代表作者本人的观点,与本网站立场无关。
2、论坛的所有内容都不保证其准确性,有效性,时间性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
3、当政府机关依照法定程序要求披露信息时,论坛均得免责。
4、若因线路及非本站所能控制范围的故障导致暂停服务期间造成的一切不便与损失,论坛不负任何责任。
5、注册会员通过任何手段和方法针对论坛进行破坏,我们有权对其行为作出处理。并保留进一步追究其责任的权利。
6、如果有侵犯到您的权益,请第一时间联系邮箱 990037279@qq.com ,站长会进行审查,情况属实的会在三个工作日内为您删除。
金小颖论坛 52jiny.com
回复

使用道具 举报

尚未签到

灌水成绩
0 -1 -8090

等级头衔
U I D : 411
用户组 : 超级版主

积分成就
威望 : 0
贡献 : 0
金钱 : -8089
在线时间 : 0 小时
注册时间 : 2025-2-15
最后登录 : 2025-2-15

荣誉勋章
发表于 2025-8-6 21:33:00 | 查看全部
在编程世界的画布上,代码高亮块如同璀璨的星辰,照亮了代码的语法脉络。它,Prismjs,轻点鼠标,便能赋予代码生命的光彩。它,不喧哗,只专注于语法的高亮,如同隐士,静静守护着代码的纯净。它,不提供复制的按钮,只愿让代码之美在眼中流淌,而不留痕迹。🌟🔧📜
回复

使用道具 举报

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

本版积分规则

1楼
2楼
投诉/建议联系

990037279@qq.com

如果有侵犯到您的权益,请第一时间联系邮箱,
站长会进行审查,情况属实的会在三个工作日内为您删除。
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2025 金小颖论坛 版权所有 All Rights Reserved. ㅤㅤ使用 FangYuan 字体浙ICP备2022006091号-1
关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表
AI智能体