<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ markdown - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ freeCodeCamp 是一个免费学习编程的开发者社区，涵盖 Python、HTML、CSS、React、Vue、BootStrap、JSON 教程等，还有活跃的技术论坛和丰富的社区活动，在你学习编程和找工作时为你提供建议和帮助。 ]]>
        </description>
        <link>https://www.freecodecamp.org/chinese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ markdown - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/chinese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sun, 24 May 2026 19:37:59 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/chinese/news/tag/markdown/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ 如何用 Markdown 语言写文章 ]]>
                </title>
                <description>
                    <![CDATA[ 作为一名开发者，你很可能听说过 HTML [https://baike.baidu.com/item/HTML/97049]，即超文本标记语言（HyperT ext Markup Language）。 你可能还知道 HTML 是一种用于创建网站的语言 —— 但标记是什么意思？ 标记语言 [https://techterms.com/definition/markup_language] 是使用标签来定义文本文件中不同元素的语言。大多数人都熟悉的富文本编辑器就是一种允许用户在他们的文件中添加额外的格式、图像和链接的程序。 Microsoft Word（一种富文本编辑器）的用户界面截图。标记语言使用如下格式的表情标签：  * <p> </p> 是一对段落标签。  * <b> </b> 加粗标签内的文字. 标记语言家族有许多成员，比如 XML [https://baike.baidu.com/item/%E5%8F%AF%E6%89%A9%E5%B1%95%E6%A0%87%E8%AE%B0%E8%AF%AD%E8%A8%80/2885849] 、HTML [https://bai ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/markdown-cheatsheet/</link>
                <guid isPermaLink="false">63c8c5fd42d274071ebbef20</guid>
                
                    <category>
                        <![CDATA[ markdown ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ HeZean ]]>
                </dc:creator>
                <pubDate>Thu, 19 Jan 2023 04:41:23 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2023/01/Markdown-cheatsheet.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文：</strong> <a href="https://www.freecodecamp.org/news/markdown-cheatsheet/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Markdown Cheat Sheet – How to Write Articles in Markdown Language</a>
      </p><!--kg-card-begin: markdown--><p>作为一名开发者，你很可能听说过 <a href="https://baike.baidu.com/item/HTML/97049">HTML</a>，即超文本标记语言（<strong>H</strong>yper<strong>T</strong>ext <strong>M</strong>arkup <strong>L</strong>anguage）。</p>
<p>你可能还知道 HTML 是一种用于创建网站的语言 —— 但<strong>标记</strong>是什么意思？</p>
<p><a href="https://techterms.com/definition/markup_language">标记语言</a>是使用标签来定义文本文件中不同元素的语言。大多数人都熟悉的<strong>富文本编辑器</strong>就是一种允许用户在他们的文件中添加额外的格式、图像和链接的程序。</p>
<figure class="kg-card kg-card-image kg-card-hascaption">
  <img src="https://www.freecodecamp.org/news/content/images/2022/08/image-30.png" class="kg-image" alt="Microsoft Word（一种富文本编辑器）的用户界面截图。" width="600" height="400" loading="lazy">
  <figcaption>Microsoft Word（一种富文本编辑器）的用户界面截图。</figcaption>
</figure>
<p>标记语言使用如下格式的表情标签：</p>
<ul>
<li>&lt;p&gt; &lt;/p&gt; 是一对段落标签。</li>
<li>&lt;b&gt; &lt;/b&gt; 加粗标签内的文字.</li>
</ul>
<p>标记语言家族有许多成员，比如 <a href="https://baike.baidu.com/item/%E5%8F%AF%E6%89%A9%E5%B1%95%E6%A0%87%E8%AE%B0%E8%AF%AD%E8%A8%80/2885849">XML</a>、<a href="https://baike.baidu.com/item/HTML/97049">HTML</a>，以及本文的主题：<strong>Markdown</strong>。</p>
<p>开发人员常用 Markdown 来编写文档 —— 通常在大多数仓库中都有 markdown 格式的文档。例如，这篇文章正是我在 freeCodeCamp 上使用 Markdown 编写的。</p>
<p>那么，让我们看看我们可以用 Markdown 做什么。</p>
<p><strong>免责声明：</strong> 没有一个统一的机构或规范来标准化 Markdown —— 只有一些被广泛接受的最佳实践。因此，你可能需要根据使用的 Markdown 解析器来从下面选择不同的内容。</p>
<h1 id="markdown">Markdown 速查表</h1>
<p>下面是一些最常用的在 Markdown 中操作文本的方法。</p>
<h1 id="markdown">如何在 Markdown 中创建标题</h1>
<p>Markdown 中有六种样式的标题，从 H1 到 H6。接下来，我将给你演示他们看起来分别是什么样的，以及如何用 Markdown 创建它们。</p>
<p>H1 字体最大，也被通常作为“主标题”，接下来的每个标题的字体都依次变小。</p>
<h1 id="h1tag">H1 tag</h1>
<p><code># H1 tag</code></p>
<h2 id="h2tag">H2 tag</h2>
<p><code>## H2 tag</code></p>
<h3 id="h3tag">H3 tag</h3>
<p><code>### H3 tag</code></p>
<h4 id="h4tag">H4 tag</h4>
<p><code>#### H4 tag</code></p>
<h5 id="h5tag">H5 Tag</h5>
<p><code>##### H5 tag</code></p>
<h6 id="h6tag">H6 tag</h6>
<p><code>###### H6 tag</code></p>
<h1 id="markdown">如何在 Markdown 中增加强调排版</h1>
<p>通常，你会将文字加粗、设为斜体，或者添加删除线来强调一段文字。过多的强调组合反而会使文字变得更不清晰，所以请仔细选择你想强调的每一段文字的方式。</p>
<p>Markdown 中还有下标和上标符号，例如，你可以用它们来写化合物的名称，或者是作为数学符号的一部分。</p>
<p><strong>如何把文本加粗：</strong></p>
<p>在文本周围添加两个星号，将使该文本显示为粗体。就像这样：<code>**粗体**</code>。</p>
<p><em>如何显示斜体文本：</em></p>
<p>在文本周围添加单个星号，就可以把它设置为斜体显示。像这样：<code>*斜体s*</code>。</p>
<p>如何在特定文字上添加<s>删除线</s>：</p>
<p>如果你想在文本中“划掉一些东西”，你可以用上删除线，比如：<code>~~划掉~~</code>。</p>
<h3 id="markdown">如何在 Markdown 中写下标</h3>
<p>举个例子，如果你想写水的化学符号，你可以通过输入 <code>H~2~0</code> 来将“2”显示为下标。</p>
<p>渲染后的样式是 H~2~0。</p>
<h3 id="markdown">如何在 Markdown 中写上标</h3>
<p>假设你想写一个指数或上标。你可以像这样做：<code>X^2^</code>，你将得到 X^2^。</p>
<h1 id="markdown">如何用Markdown制作列表</h1>
<p>Markdown 中有多种类型的列表，比如有序列表和无序列表。</p>
<p>有序列表通常用于你想按一定顺序进行的步骤（比如按照菜谱煮鸡，直到上菜）。但是对于那些不需要像菜谱那样有顺序的步骤的事情（例如，购物清单）来说，可以使用无序列表。</p>
<h3 id="markdown">如何在 Markdown 中制作一个无序列表</h3>
<p>这是一个无序列表的样子。</p>
<ul>
<li>辣椒油</li>
<li>米饭</li>
<li>大葱</li>
</ul>
<p>Markdown 代码中，在行首用 <code>- </code> 来创建一个无需列表。</p>
<pre><code>- 辣椒油
- 米饭
- 大葱
</code></pre>
<h3 id="markdown">如何在 Markdown 中制作一个有序列表</h3>
<p>这是一个有序列表的样子。</p>
<ol>
<li>第一项</li>
<li>第二项</li>
</ol>
<p>Markdown 代码中，在行首用 <code>1. </code> 来创建一个有需列表（译者注：数字编号可以是自己维护的，也可以始终为一个数字，比如 1）。</p>
<pre><code>1. 第一项
2. 第二项
</code></pre>
<h1 id="markdown">如何在 Markdown 中插入链接</h1>
<p>在 Markdown 文档中的两种最常见的链接是超链接和图片。这两种方式都能使你的文章更清晰、更有说服力，你应在适当的时候使用。</p>
<p>下面是文本中的超链接的样子：</p>
<p><a href="https://www.kealanparr.com">Kealan 的网站</a></p>
<p>这是创建它的 Markdown 代码：</p>
<p><code>[Kealan 的网站](https://www.kealanparr.com)</code></p>
<p>你需要把想在超链接上显示的文字放在方括号里（这里是 "Kealan 的网站"），紧接着用小括号包裹指向的 URL。</p>
<p>又比如，你想在一篇文章中加入一张图片，像这个样子：</p>
<p><img src="https://images.unsplash.com/photo-1660866838784-6c5158c0f979?ixlib=rb-1.2.1&amp;ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&amp;auto=format&amp;fit=crop&amp;w=387&amp;q=80" alt="天然岩石景观形成的山谷，绵延到蓝天下的道路交叉处。" width="600" height="400" loading="lazy"></p>
<p>用以下的记号来写就可以：</p>
<pre><code>![天然岩石景观形成的山谷，绵延到蓝天下的道路交叉处。](https://images.unsplash.com/photo-1660866838784-6c5158c0f979?ixlib=rb-1.2.1&amp;ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&amp;auto=format&amp;fit=crop&amp;w=387&amp;q=80)
</code></pre>
<p>这跟普通的超链接相似，只是在方括号前面加上感叹号。</p>
<h2 id="markdownhtml">如何在 Markdown 中使用 HTML 代码</h2>
<p>你可以直接在 Markdown 文档中使用普通的 HTML（这取决于你所使用的解释器）。</p>
<p>所以你可以随意输入你喜欢的任何有效的 HTML。</p>
<h2 id="markdown">如何在 Markdown 中添加分隔符</h2>
<p>如果你想通过一根横线来分隔文本中的章节，你可以获得这样的效果：</p>
<hr>
<p>只需要在一行中键入三个横线：</p>
<pre><code>---
</code></pre>
<h2 id="markdown">如何用 Markdown 制作表格</h2>
<p>表格在你的文章中很方便。要制作一个看起来像这样的表格：</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Age</th>
</tr>
</thead>
<tbody>
<tr>
<td>Kealan</td>
<td>25</td>
</tr>
<tr>
<td>Jake</td>
<td>28</td>
</tr>
</tbody>
</table>
<p>你需要用到这样的标记：</p>
<pre><code>| Name   | Age |
| ------ | --- |
| Kealan | 25  |
| Jake   | 28  |
</code></pre>
<p>在制作 Markdown 表格时，唯一你必须注意的问题是，你要保持管道符（|）垂直排列。那么你的表格就会像本文上面的那样。这个图片更能清晰地说明问题。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/08/image-139.png" alt="image-139" width="600" height="400" loading="lazy"></p>
<p>这显示了一个 Markdown 表格，以 Name 和 Age 为标题，包含两行数值，Kealan、Jake 和 25、28。</p>
<h2 id="markdown"><strong>如何在 Markdown 中添加代码及语法高亮</strong></h2>
<p>如果你为开发者创建文档，在你的 Markdown 中添加代码片段会有很大的帮助。</p>
<p>下面是一个非常简单的 JavaScript 例子，但 Markdown 几乎支持所有的现代编程语言（包括对齐进行语法高亮等）。</p>
<pre><code class="language-javascript">console.log('example log')
</code></pre>
<pre><code>```javascript  
console.log('example log')  
```
</code></pre>
<p>只要输入三个反引号，并加上编程语言的名字，再回车就可以开始写代码了。再用三个反引号来结束代码块。</p>
<h1 id="markdown">如何在 Markdown 中添加引用</h1>
<p>当你提及别人的作品时，你应该有礼貌地引用他们的作品。一个简单的方法是引用他们的话。</p>
<p>如果你想在 Markdown 中加入引用：</p>
<blockquote>
<p>“这是一句话，来自一个非常明智的人” —— 佚名</p>
</blockquote>
<p>在行首加上这个符号，就能将其渲染成上面的样子：</p>
<p><code>&gt; “这是一句话，来自一个非常明智的人” —— 佚名</code></p>
<h1 id="">结语</h1>
<p>我希望这篇文章对你来说是一个有用的参考，也希望你能从中学到你以前没见过的 Markdown 新特性。</p>
<p>Markdown 还有很多功能（甚至还没算上你可以创建的 HTML 变体），但本文已经涵盖了最常用的功能。</p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ markdown 编辑器实现双屏同步滚动 ]]>
                </title>
                <description>
                    <![CDATA[ 由于一直在使用 markdown 编辑器写技术文章，所以对于编写体验很敏感。我发现各大社区的 markdown 编辑器基本都有同步滚动功能。只不过有些做得好，有些做得马马虎虎。出于好奇，我就打算自己亲自实现一下这个功能。 思考了一段时间，最后想出来了三种方案：  1. 百分比滚动  2. 双屏同时渲染占用面积大的元素  3. 每一行的元素都赋上一个索引，根据索引来精确同步每一行的滚动高度 百分比滚动 假设现在正在滚动 a 屏，那 a 屏的滚动百分比计算方式为：a 屏的滚动高度 / a 屏的内容总高度，用代码表示 a.scrollTop / a.scrollHeight。当滚动 a 屏时，需要手动同步 b 屏的滚动高度，也就是根据 a 屏的滚动百分比算出 b 屏的滚动高度： a.onscroll = () => { 	b.scrollTo({ top: a.scrollTop / a.scrollHeight * b.scrollHeight }) } ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/how-to-achieve-simultaneous-scrolling-on-both-screens-in-markdown-editor-2/</link>
                <guid isPermaLink="false">633bfd4b96409407bcba358c</guid>
                
                    <category>
                        <![CDATA[ markdown ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ woai3c ]]>
                </dc:creator>
                <pubDate>Fri, 07 Oct 2022 10:11:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2022/10/artem-sapegin-DErxVSSQNdM-unsplash.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>由于一直在使用 markdown 编辑器写技术文章，所以对于编写体验很敏感。我发现各大社区的 markdown 编辑器基本都有同步滚动功能。只不过有些做得好，有些做得马马虎虎。出于好奇，我就打算自己亲自实现一下这个功能。</p><p>思考了一段时间，最后想出来了三种方案：</p><ol><li>百分比滚动</li><li>双屏同时渲染占用面积大的元素</li><li>每一行的元素都赋上一个索引，根据索引来精确同步每一行的滚动高度</li></ol><h2 id="-">百分比滚动</h2><p>假设现在正在滚动 a 屏，那 a 屏的滚动百分比计算方式为：<code>a 屏的滚动高度 / a 屏的内容总高度</code>，用代码表示 <code>a.scrollTop / a.scrollHeight</code>。当滚动 a 屏时，需要手动同步 b 屏的滚动高度，也就是根据 a 屏的滚动百分比算出 b 屏的滚动高度：</p><pre><code class="language-js">a.onscroll = () =&gt; {
	b.scrollTo({ top: a.scrollTop / a.scrollHeight * b.scrollHeight })
}
</code></pre><p>原理就是这么简单，可惜实现效果不太好。</p><figure class="kg-card kg-image-card"><img src="https://img-blog.csdnimg.cn/380f955c3248465aac09139ee52dbced.gif#pic_center" class="kg-image" alt="在这里插入图片描述" width="983" height="751" loading="lazy"></figure><p>从上面的动图可以看出，当我在第二个大标题处停留的时候，左右双屏的内容是同步的。但当我滚动到第三个大标题时，左右双屏的内容高度已经差了将近 300 像素了。所以说这个方案勉勉强强能用吧，聊胜于无。</p><h2 id="--1">双屏同时渲染占用面积大的元素</h2><p>双屏内容高度不一致，是因为 markdown 同一个元素渲染后的高度和渲染前会有差别。例如一个图片，用 markdown 写就一行代码的事，但渲染出来的图片有大有小，高度几十、几百像素的都有。如果 markdown 的图片代码双屏同时渲染，倒是能解决这个问题。</p><figure class="kg-card kg-image-card"><img src="https://img-blog.csdnimg.cn/febdc97ccf50427c89ae8abce2030b39.png" class="kg-image" alt="在这里插入图片描述" width="851" height="267" loading="lazy"></figure><p>但是除了图片仍然有不少元素渲染前后的高度是有差距的，虽然没有图片这么夸张。譬如 h1 h2 这种，当文章内容越长，这种小差异带来的问题会越来越大，导致双屏内容高度的差距也会越来越大。所以说这种方案也不是很靠谱。</p><h2 id="--2">每一行的元素都赋上一个索引，根据索引来精确精确同步每一行的滚动高度</h2><p>之前两个方案都属于勉强能用，不够好。现在这个第三方案就比前面两个强多了，几乎能做到精确同步每一行的内容。具体怎么做呢？</p><h4 id="-markdown-">第一步，监听 markdown 编辑框的内容变化，为每一个元素赋上一个索引，空行空文本除外。</h4><figure class="kg-card kg-image-card"><img src="https://img-blog.csdnimg.cn/e35b1af3d62a4e1986c2fbff1cf38a64.png" class="kg-image" alt="在这里插入图片描述" width="1240" height="364" loading="lazy"></figure><p>当把编辑框的 HTML 传给右边的框渲染时，需要把 <code>data-index</code> 赋值给渲染后的元素。这样就能通过 <code>data-index</code> 精确定位渲染前后的同一元素了。</p><figure class="kg-card kg-image-card"><img src="https://img-blog.csdnimg.cn/807f9374e8ea483a9546f9bcc6e4a928.png" class="kg-image" alt="在这里插入图片描述" width="1117" height="416" loading="lazy"></figure><h4 id="-a-b-">第二步，根据 a 屏的元素滚动高度计算 b 屏上同一索引的元素滚动高度</h4><p>在 a 屏进行滚动时，需要从上到下遍历 a 屏的所有元素，并且找到第一个在屏幕内的元素。<code>找到第一个在屏幕内的元素</code> 这句话的意思是因为在滚动过程中，有些元素会因为滚动跑到屏幕外面（原来在屏幕内，滚动到屏幕外），这些元素我们是不需要计算的。</p><p>判断一个元素是否在屏幕内：</p><pre><code class="language-js">// dom 是否在屏幕内
function isInScreen(dom) {
    const { top, bottom } = dom.getBoundingClientRect()
    return bottom &gt;= 0 &amp;&amp; top &lt; window.innerHeight
}
</code></pre><p>除了判断元素是否在屏幕内，还需要判断这个元素<strong><strong>在屏幕内的部分占整个元素高度的百分比</strong></strong>。譬如说一个图片的 markdown 字符串，由于滚动的原因，导致一半在屏幕内，一半在屏幕外。为了精确同步，那么渲染后的图片也必须有一半在屏幕内一半在屏幕外。</p><figure class="kg-card kg-image-card"><img src="https://img-blog.csdnimg.cn/fd617da2d5c3426cbcea5e38c31c8d44.gif#pic_center" class="kg-image" alt="在这里插入图片描述" width="690" height="363" loading="lazy"></figure><p><br>计算元素在屏幕内的百分比代码：</p><pre><code class="language-js">// dom 在当前屏幕展示内容的百分比
function percentOfdomInScreen(dom) {
	// 已经通过另一个函数 isInScreen() 确定了这个 dom 在屏幕内，所以只需要计算它在屏幕内的百分比，而不需要考虑它是否在屏幕外
    const { height, bottom } = dom.getBoundingClientRect()
    if (bottom &lt;= 0) return 0 // 不在屏幕内
    if (bottom &gt;= height) return 1 // 完全在屏幕内
    return bottom / height // 部分在屏幕内
}
</code></pre><p>现在我们就可以从上到下遍历 a 屏的所有元素，找到第一个在屏幕内的元素了：</p><pre><code class="language-js">// scrollContainer 即上面说的 a 屏，ShowContainer 是 b 屏
const nodes = Array.from(scrollContainer.children)
for (const node of nodes) {
    // 从上往下遍历，找到第一个在屏幕内的元素
    if (isInScreen(node) &amp;&amp; percentOfdomInScreen(node) &gt;= 0) {
        const index = node.dataset.index
        // 根据滚动元素的索引，找到它在渲染框中对应的元素
        const dom = ShowContainer.querySelector(`[data-index="${index}"]`)
		
		// 获取滚动元素在 a 屏中展示的内容百分比
		const percent = percentOfdomInScreen(node)
		// 计算这个对等元素在 b 屏中距离容器顶部的高度
        const heightToTop = getHeightToTop(dom)
        // 根据 percent 算出对等元素在 b 屏中需要隐藏的高度
        const domNeedHideHeight = dom.offsetHeight * (1 - percent)
		// scrollTo({ top: heightToTop }) 会把对等元素滚动到在 b 屏中恰好完全展示整个元素的位置
		// 然后再滚动它需要隐藏的高度 domNeedHideHeight，组合起来就是 scrollTo({ top: heightToTop + domNeedHideHeight })
        ShowContainer.scrollTo({ top: heightToTop + domNeedHideHeight })
        break
    }
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://img-blog.csdnimg.cn/42f6da16e84546baa916f487c1dc2466.gif#pic_center" class="kg-image" alt="在这里插入图片描述" width="596" height="578" loading="lazy"></figure><p>从动图来看，目前已经做到行内容的精确同步了。</p><h3 id="--3">踩坑</h3><p>有一些元素渲染后会变成嵌套元素，例如表格 table，渲染后的内容层级为：</p><pre><code class="language-html">&lt;table&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
</code></pre><p>按照目前的渲染逻辑，假如我写了个表格：</p><pre><code>|1|b|
...
</code></pre><p>那么 <code>|1|b|</code> 上的 <code>data-index</code> 会对应到 <code>table</code> 上。</p><figure class="kg-card kg-image-card"><img src="https://img-blog.csdnimg.cn/fc77b52eb8474623a5fad2fe89bc4cb3.png" class="kg-image" alt="在这里插入图片描述" width="420" height="41" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://img-blog.csdnimg.cn/540e65a70b4848ba86a0c3eab7352cb1.png" class="kg-image" alt="在这里插入图片描述" width="398" height="55" loading="lazy"></figure><p>那这就会有个 bug，当 <code>|1|b|</code> 滚动到 50% 的时候，整个 <code>table</code> 也会滚动到 50%。这个现象如下图所示：</p><figure class="kg-card kg-image-card"><img src="https://img-blog.csdnimg.cn/481b4aacede7497f99acc5ea81552846.png" class="kg-image" alt="在这里插入图片描述" width="659" height="178" loading="lazy"></figure><p>这和我们相要的效果不一样。a 屏连一行的内容都没滚完，b 屏整个内容已经滚动到一半了。</p><p>所以像这种嵌套的元素，在打 <code>data-index</code> 标记时，要把它打到真正的内容上。用表格 table 来做示例，就得把 <code>data-index</code> 的标记打在 <code>tr</code> 上。</p><figure class="kg-card kg-image-card"><img src="https://img-blog.csdnimg.cn/8f318fbdb240428391908757d5e259c5.png" class="kg-image" alt="在这里插入图片描述" width="480" height="94" loading="lazy"></figure><p>这样一来，同步滚动就正常了。同理，其他的嵌套元素也一样（譬如 ul ol）。</p><figure class="kg-card kg-image-card"><img src="https://img-blog.csdnimg.cn/b73507b417f846fe9ffb228d8ddb4e22.png" class="kg-image" alt="在这里插入图片描述" width="664" height="216" loading="lazy"></figure><h2 id="--4">总结</h2><p>完整的代码我已经放在 github 上了：</p><ul><li><a href="https://github.com/woai3c/markdown-editor-sync-scroll-demo">markdown-editor-sync-scroll-demo</a></li></ul><p>还有在线 DEMO：</p><ul><li><a href="https://jsrun.net/hwPKp">demo1</a></li><li><a href="https://jsrun.net/XwPKp">demo2</a></li><li><a href="https://jsrun.net/ywPKp">demo3</a></li><li><a href="https://jsrun.net/bwPKp">demo4</a></li><li><a href="https://jsrun.net/WwPKp">demo5</a></li><li><a href="https://jsrun.net/fwPKp">demo6</a></li></ul><p>如果在线 DEMO 比较慢，可以克隆项目后直接打开 html 文件访问。</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 如何在 Markdown 中格式化代码 ]]>
                </title>
                <description>
                    <![CDATA[ 原文：How to Format Code in Markdown [https://www.freecodecamp.org/news/how-to-format-code-in-markdown/] 在 Markdown 中，有两种格式化代码的方法。你可以使用内联代码，在一行的某些部分周围加上反斜线（`），或者你可以使用代码块，有些渲染器会对其应用语法高亮。 内联代码 你可以使用内联代码格式来强调你所写的一行中的一个小命令或一段语法。 例如，你可能希望提到 JavaScript 的 Array.protoype.map()  方法。通过使用内联代码格式化，可以清楚地看到这是一段代码。你也可以用它来说明一个终端命令，比如 yarn install。 要使用内联代码格式化，只需将你希望格式化的代码用反斜线包起来。在一个标准的 QWERTY 键盘上，可以在 “1” 的左边和 Tab 键的上面找到它。关于键盘上反引号的位置的更多信息，本文下方有介绍。 例如，在 markdown 中写 `Array.prototype.map()` 会呈现为 Array.prototype.map ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/how-to-format-code-in-markdown/</link>
                <guid isPermaLink="false">625fb00c99ec7406219e71a8</guid>
                
                    <category>
                        <![CDATA[ markdown ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Miya Liu ]]>
                </dc:creator>
                <pubDate>Wed, 20 Apr 2022 07:10:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2022/04/5f9c9d0f740569d1a4ca35a8.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>原文：<a href="https://www.freecodecamp.org/news/how-to-format-code-in-markdown/">How to Format Code in Markdown</a></p><p>在 Markdown 中，有两种格式化代码的方法。你可以使用内联代码，在一行的某些部分周围加上反斜线（`），或者你可以使用代码块，有些渲染器会对其应用语法高亮。</p><h2 id="-">内联代码</h2><p>你可以使用内联代码格式来强调你所写的一行中的一个小命令或一段语法。</p><p>例如，你可能希望提到 JavaScript 的 <code>Array.protoype.map()</code> 方法。通过使用内联代码格式化，可以清楚地看到这是一段代码。你也可以用它来说明一个终端命令，比如 <code>yarn install</code>。</p><p>要使用内联代码格式化，只需将你希望格式化的代码用反斜线包起来。在一个标准的 QWERTY 键盘上，可以在 “1” 的左边和 Tab 键的上面找到它。关于键盘上反引号的位置的更多信息，本文下方有介绍。</p><p>例如，在 markdown 中写 `Array.prototype.map()` 会呈现为 <code>Array.prototype.map()</code>。</p><h2 id="--1"><strong><strong><strong><strong>代码块</strong></strong></strong></strong></h2><p>要写更长或更详细的代码片段，通常最好把它们放在一个代码块内。代码块允许你使用多行，而 markdown 会在它的后台用代码类型的字体渲染。</p><p>为了达到这个目的，在你的代码块开始的时候，要有一行三个反引号。这向 markdown 表明你正在创建一个代码块。你将需要用另一行三个反引号来结束，比如：</p><p>```<br>var add2 = function(number) {<br> &nbsp;return number + 2;<br>}<br>```</p><p>将被 markdown 渲染为：</p><pre><code class="language-text">var add2 = function(number) {
  return number + 2;
}</code></pre><h3 id="--2"><strong><strong>语法高亮</strong></strong></h3><p>虽然 markdown 本身不支持，但许多 markdown 引擎，包括 GitHub 使用的引擎，都支持语法高亮。这意味着，只要告诉 markdown 你在代码块中使用什么语言，它就会像 IDE 那样添加颜色。</p><p>你可以把语言的名字和你开头的三个反引号放在同一行上。在上面的例子中，如果你不在第一行写 ```，而是写 ```js，那么 JavaScript 高亮就会被应用到这个代码块。</p><pre><code class="language-js">var add2 = function(number) {
	return number + 2;
}</code></pre><p>语法高亮不仅可以应用于 JavaScript。你可以使用 ```html：</p><pre><code class="language-html">&lt;div class="row"&gt;
  &lt;div class="col-md-6 col-md-offset-3"&gt;
    &lt;h1&gt;Hello World&lt;/h1&gt;
  &lt;/div&gt;
&lt;/div&gt;</code></pre><p>```ruby：</p><pre><code class="language-ruby">"Hello World".split('').each do |letter|
  puts letter
end</code></pre><p>或者 ```python：</p><pre><code class="language-python">a, b = 0, 1
while b &lt; 10:
    print(b)
    a, b = a, a + b</code></pre><p>请记住，不是所有的 markdown 引擎都会应用语法高亮。</p><h2 id="--3">国际键盘上的反引号</h2><p>在不同的键盘上，反引号的位置可能不同，如果你使用的不是 QWERTY 键盘，可能会很难找到它。这份有用的<a href="http://superuser.com/a/254077/122424">指南</a>列出了一些寻找回车键的方法，我们将其收集在下面：</p><h3 id="qwerty-and-qwertz-"><strong><strong>QWERTY and QWERTZ</strong>：</strong></h3><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/04/8f65c339ce4eefd9d79841f3dc54f4c37cab2e77.png" class="kg-image" alt="8f65c339ce4eefd9d79841f3dc54f4c37cab2e77" width="600" height="400" loading="lazy"></figure><h3 id="azerty-"><strong><strong>AZERTY</strong>：</strong></h3><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/04/de291f0895b0fed992726a62d654f4e1f0e421f3.png" class="kg-image" alt="de291f0895b0fed992726a62d654f4e1f0e421f3" width="600" height="400" loading="lazy"></figure> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
