登录
首页 >  文章 >  前端

HTML发布文章流程:表单提交与数据库存储详解

时间:2025-12-10 13:36:36 357浏览 收藏

推广推荐
免费电影APP ➜
支持 PC / 移动端,安全直达

小伙伴们有没有觉得学习文章很有意思?有意思就对了!今天就给大家带来《HTML如何发布文章_表单提交与数据库存储流程》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

答案:文章发布需前端表单收集数据,后端处理并存储至数据库,通过安全验证、富文本处理、图片上传及SEO优化实现完整流程。

html 如何发布文章_HTML文章发布(表单提交/数据库存储)流程方法

发布HTML文章,从前端的表单提交到后端的数据存储,本质上是一个客户端-服务器交互并持久化数据的过程。它通常涉及一个用户友好的输入界面(HTML表单),一个服务器端程序来处理这些输入,以及一个数据库来存储最终的文章内容。这个流程确保了内容可以被创建、保存,并最终动态地展示给读者。

解决方案

要实现HTML文章的发布,你需要构建一个前端表单来收集文章数据,并编写一个后端服务来接收、验证、处理这些数据,最终将其存储到数据库中。当用户访问网站时,后端再从数据库中读取数据并动态生成HTML页面展示文章。

前端(HTML表单)

首先,你需要一个HTML页面,其中包含一个表单,允许用户输入文章的标题、作者和内容。

<form action="/publish-article" method="post">
    <label for="articleTitle">文章标题:</label>
    &lt;input type=&quot;text&quot; id=&quot;articleTitle&quot; name=&quot;title&quot; required&gt;<br><br>

    <label for="articleAuthor">作者:</label>
    &lt;input type=&quot;text&quot; id=&quot;articleAuthor&quot; name=&quot;author&quot; required&gt;<br><br>

    <label for="articleContent">文章内容:</label>
    &lt;textarea id=&quot;articleContent&quot; name=&quot;content&quot; rows=&quot;15&quot; cols=&quot;80&quot;&gt;&lt;/textarea&gt;<br><br>

    <button type="submit">发布文章</button>
</form>

这里,action="/publish-article" 指定了表单数据将被发送到的服务器端URL,method="post" 表示数据将以POST请求发送。textarea 元素是用来输入文章主体内容的关键。

后端(服务器端处理与数据库交互)

服务器端脚本(例如,使用Node.js的Express、PHP、Python的Flask/Django等)负责接收这个POST请求,提取表单数据,进行必要的验证和清理,然后将数据插入到数据库。

以Node.js Express为例:

// 假设你已经设置了Express应用和数据库连接
const express = require('express');
const bodyParser = require('body-parser');
const mysql = require('mysql'); // 或者PostgreSQL, MongoDB等

const app = express();
app.use(bodyParser.urlencoded({ extended: true })); // 解析表单数据

// 数据库连接配置 (请替换为你的实际配置)
const db = mysql.createConnection({
    host: 'localhost',
    user: 'your_user',
    password: 'your_password',
    database: 'your_database'
});

db.connect((err) => {
    if (err) {
        console.error('数据库连接失败:', err);
        return;
    }
    console.log('数据库连接成功!');
});

// 处理文章发布请求
app.post('/publish-article', (req, res) => {
    const { title, author, content } = req.body;

    // 简单的数据验证
    if (!title || !author || !content) {
        return res.status(400).send('标题、作者和内容都不能为空。');
    }

    // 插入数据到数据库
    const sql = 'INSERT INTO articles (title, author, content, publish_date) VALUES (?, ?, ?, NOW())';
    db.query(sql, [title, author, content], (err, result) => {
        if (err) {
            console.error('文章插入失败:', err);
            return res.status(500).send('文章发布失败,请稍后再试。');
        }
        console.log('文章发布成功,ID:', result.insertId);
        res.status(200).send('文章发布成功!');
        // 实际应用中,这里通常会重定向到文章详情页或列表页
        // res.redirect('/articles/' + result.insertId);
    });
});

// 启动服务器
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log(`服务器运行在 http://localhost:${PORT}`);
});

这个后端代码接收表单数据,并使用SQL的INSERT语句将其存入名为articles的数据库表。?是占位符,用于防止SQL注入攻击,这比直接拼接字符串安全得多。NOW()函数(MySQL)用于自动记录发布时间。

数据库结构

你需要一个数据库表来存储文章信息。以MySQL为例:

CREATE TABLE articles (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    author VARCHAR(100) NOT NULL,
    content TEXT NOT NULL,
    publish_date DATETIME DEFAULT CURRENT_TIMESTAMP
);

content字段通常使用TEXT类型,因为它能存储较长的字符串,适合文章内容。

发布HTML文章时,如何确保数据安全和防止恶意注入?

数据安全在任何用户输入场景中都是重中之重,尤其是涉及到文章内容这种可能包含各种标签和脚本的数据。我的经验是,永远不要相信用户输入,必须在服务器端进行严格的验证、清理和转义。

首先,SQL注入是最大的威胁之一。如果直接将用户输入拼接到SQL查询字符串中,攻击者可以构造恶意输入来修改、删除甚至窃取你的数据库数据。避免这种风险的黄金法则就是使用预处理语句(Prepared Statements)参数化查询。在上面的Node.js示例中,db.query(sql, [title, author, content], ...)就是这种机制的体现。数据库驱动会负责正确地转义特殊字符,确保用户输入只被当作数据,而不是SQL代码。

其次,跨站脚本攻击(XSS)是另一个常见且危险的问题。如果用户在文章内容中插入 这样的代码,并且你直接将其展示在其他用户的浏览器上,那么这些脚本就会在其他用户的浏览器中执行,可能导致会话劫持、数据窃取等问题。为了防止XSS:

  1. HTML实体转义: 在将用户输入的HTML内容输出到浏览器之前,将所有可能被解释为HTML标签的字符(如<>&"')转换为对应的HTML实体(如<>)。这样浏览器就不会将其作为可执行的HTML代码来解析。
  2. 内容白名单过滤: 对于富文本编辑器生成的内容,你可能希望允许一部分HTML标签(如),但必须严格限制。这时,你需要使用一个强大的HTML净化库(如Node.js的DOMPurify,PHP的HTML Purifier)来过滤掉所有不安全或不允许的标签和属性。这比黑名单机制更安全,因为黑名单容易遗漏。

最后,输入验证是基础防线。在服务器端,你至少要检查:

如何处理HTML文章中的富文本编辑和图片上传?

单纯的<textarea>对于编写复杂格式的文章来说体验很差。真实世界的文章发布系统几乎都会集成富文本编辑器(Rich Text Editor, RTE)和图片上传功能。

富文本编辑器(RTE)

RTE,如TinyMCE、CKEditor、Quill.js等,能将普通的<textarea>转换成一个功能丰富的所见即所得(WYSIWYG)编辑界面。它们允许用户通过工具栏按钮轻松地添加粗体、斜体、链接、列表、图片等格式。

当用户使用RTE编辑完内容并提交时,RTE通常会将内容输出为一段HTML字符串。这段HTML字符串就是你需要存储到数据库content字段中的数据。

处理RTE输出的HTML时,XSS防护尤其重要。RTE虽然提供了方便的编辑功能,但也可能成为XSS的入口。例如,用户可以通过RTE的“插入HTML”功能,或者直接粘贴恶意HTML代码。因此,即便内容来自RTE,在存储到数据库之前和显示到页面之前,仍然需要进行严格的HTML净化。使用DOMPurify这类库来过滤掉所有不安全的标签和属性,只保留你允许的格式,是必不可少的步骤。

图片上传

图片上传通常是一个独立于文本内容的处理流程。

  1. 前端界面: 在RTE中通常会有一个图片上传按钮,或者表单中有一个独立的<input type="file" name="articleImage">
  2. 客户端预处理: JavaScript可以用于在图片上传前进行预览、压缩或裁剪。
  3. 服务器端接收: 当用户提交表单或通过AJAX上传图片时,服务器端脚本会接收到文件数据。
    • 文件验证: 检查文件类型(MIME Type,而不是仅仅文件名后缀),确保是图片(如image/jpeg, image/png),而不是可执行文件。
    • 文件大小: 限制文件大小,防止恶意攻击或服务器存储压力过大。
    • 重命名: 为上传的图片生成一个唯一的文件名(例如,使用UUID或时间戳),避免文件名冲突和路径遍历攻击。
    • 存储: 将图片保存到服务器上的一个指定目录(例如/uploads/images/)。永远不要将用户上传的文件直接存储在Web服务器的根目录下或可执行脚本的目录中。
    • 记录路径: 将图片的存储路径(URL)保存到数据库中。如果图片是文章内容的一部分,RTE会将其作为标签的src属性插入到文章HTML中。
  4. CDN集成: 对于大型应用,通常会将图片上传到对象存储服务(如AWS S3、阿里云OSS)或CDN,以提高访问速度和扩展性。

例如,一个图片上传的后端逻辑片段(Node.js Express with multer):

const multer = require('multer');
const path = require('path');

// 配置multer存储
const storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, 'uploads/images/'); // 图片存储目录
    },
    filename: function (req, file, cb) {
        // 生成唯一文件名,例如:image-1678888888888.png
        cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname));
    }
});

const upload = multer({
    storage: storage,
    limits: { fileSize: 5 * 1024 * 1024 }, // 限制文件大小5MB
    fileFilter: function (req, file, cb) {
        // 验证文件类型
        const filetypes = /jpeg|jpg|png|gif/;
        const mimetype = filetypes.test(file.mimetype);
        const extname = filetypes.test(path.extname(file.originalname).toLowerCase());

        if (mimetype && extname) {
            return cb(null, true);
        }
        cb('错误:只允许上传图片文件!');
    }
}).single('articleImage'); // 'articleImage' 是前端 input type="file" 的 name 属性

app.post('/upload-image', (req, res) => {
    upload(req, res, (err) => {
        if (err) {
            return res.status(400).send(err);
        }
        if (!req.file) {
            return res.status(400).send('没有选择文件。');
        }
        // 图片上传成功,返回图片URL
        const imageUrl = `/uploads/images/${req.file.filename}`;
        res.status(200).json({ url: imageUrl });
    });
});

前端RTE在用户上传图片成功后,会接收到这个imageUrl并将其插入到文章内容中。

文章发布后,如何实现内容的动态展示和搜索引擎优化(SEO)?

文章发布后,其价值在于被读者发现和阅读。这就涉及到内容的动态展示和如何让搜索引擎更好地理解和收录你的文章。

内容的动态展示

动态展示意味着文章不是预先写死的HTML文件,而是根据请求从数据库中读取并实时生成的。

  1. 路由配置: 你需要为文章详情页配置一个动态路由,例如 /articles/:id/articles/:slug:id代表文章ID,:slug代表一个人类可读的短链接(通常是文章标题的拼音或英文简化)。
  2. 数据库查询: 当用户访问 /articles/123 时,服务器端会根据URL中的ID(123)去数据库中查询对应的文章数据。
    // Node.js Express 示例
    app.get('/articles/:id', (req, res) => {
        const articleId = req.params.id;
        const sql = 'SELECT * FROM articles WHERE id = ?';
        db.query(sql, [articleId], (err, results) => {
            if (err || results.length === 0) {
                return res.status(404).send('文章未找到。');
            }
            const article = results[0];
            // 使用模板引擎渲染页面
            res.render('article_detail', { article: article });
            // 或者直接发送HTML
            // res.send(`<h1>${article.title}</h1><p>作者: ${article.author}</p><div>${article.content}</div>`);
        });
    });
  3. 模板渲染: 查询到数据后,通常会使用服务器端模板引擎(如EJS、Pug、Handlebars for Node.js;Jinja2 for Python;Twig for PHP)将文章数据填充到一个HTML模板中,生成完整的HTML页面,然后发送给客户端浏览器。这使得页面内容可以根据数据库中的数据灵活变化。

搜索引擎优化(SEO)

为了让你的文章更容易被搜索引擎(如Google、百度)发现和排名靠前,SEO是不可或缺的。

  1. 友好的URL结构: 使用包含关键词的、可读性强的URL,而不是像 view.php?id=123 这样的参数型URL。例如,example.com/articles/html-article-publishing-guide 远比 example.com/article.php?id=5 更利于SEO。这通常通过服务器端的URL重写(URL Rewriting)或路由配置实现。
  2. Meta标签优化:
    • </code>标签:</strong> 确保每个文章页面都有一个独特且描述性的<code><title></code>标签,包含文章的核心关键词。这是搜索引擎排名最重要的因素之一。</li><li><strong><code><meta name="description" content="..."></code>:</strong> 提供一个简洁、吸引人的页面描述,通常在搜索结果中显示。这应该动态地从文章摘要或前几段内容生成。</li><li><strong>Open Graph (OG) 标签和 Twitter Cards:</strong> 这些标签对于社交媒体分享至关重要,能控制文章在Facebook、Twitter等平台上的展示方式(标题、图片、描述)。</li></ul></li><li><strong>语义化HTML结构:</strong> 使用HTML5的语义化标签,如<code><article></code>、<code><section></code>、<code><header></code>、<code><footer></code>、<code><nav></code>、<code><aside></code>等。文章标题使用<code><h1></code>,子标题使用<code><h2></code>、<code><h3></code>等。图片务必添加<code>alt</code>属性,描述图片内容。这些都有助于搜索引擎理解页面结构和内容。</li><li><strong>内容质量和关键词:</strong> 撰写高质量、原创、有深度的内容,自然地融入相关的关键词。避免关键词堆砌。</li><li><strong>站点地图(Sitemap.xml):</strong> 生成并提交一个<code>sitemap.xml</code>文件给搜索引擎,列出你网站上所有可供抓取的URL。对于动态生成的文章,你需要一个机制来自动更新这个sitemap。</li><li><strong>结构化数据(Schema Markup):</strong> 使用JSON-LD或Microdata等格式,为文章添加结构化数据(例如<code>Article</code> Schema)。这可以帮助搜索引擎更好地理解文章的类型、作者、发布日期等信息,有时还能在搜索结果中显示富摘要(Rich Snippets)。<pre><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Article", "headline": "HTML文章发布流程详解", "image": [ "https://example.com/images/article-banner.jpg" ], "datePublished": "2023-10-27T08:00:00+08:00", "author": { "@type": "Person", "name": "你的名字" }, "publisher": { "@type": "Organization", "name": "你的网站名称", "logo": { "@type": "ImageObject", "url": "https://example.com/logo.png" } }, "description": "本文详细介绍了HTML文章从表单提交到数据库存储的整个发布流程,并探讨了数据安全与SEO策略。" } </script></pre></li><li><strong>移动友好性:</strong> 确保你的网站在各种设备(手机、平板)上都能良好显示,响应式设计是标配。Google等搜索引擎会将移动友好性作为排名因素。</li><li><strong>网站性能:</strong> 页面加载速度是SEO的重要因素。优化图片、使用缓存、减少HTTP请求、压缩代码等都能提升网站性能。</li></ol><p>通过综合运用这些技术和策略,你的HTML文章发布系统不仅能高效地管理内容,还能确保这些内容在互联网上获得更好的曝光和排名。</p><p>今天关于《HTML发布文章流程:表单提交与数据库存储详解》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!</p> </div> <div class="labsList"> </div> </div> <!-- 最新阅读 --> <div class="contBoxNor"> <div class="contTit"> <div class="tit">相关阅读</div> <a href="/articlelist.html" class="more">更多></a> </div> <ul class="latestReadList"> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  7个月前  |   <a href="javascript:;" class="aLightGray" title="提升">提升</a> <a href="javascript:;" class="aLightGray" title="箭头函数">箭头函数</a> <a href="javascript:;" class="aLightGray" title="函数表达式">函数表达式</a> <a href="javascript:;" class="aLightGray" title="函数声明">函数声明</a> <a href="javascript:;" class="aLightGray" title="Function构造函数">Function构造函数</a> </div> <div class="tit lineOverflow"><a href="/article/207000.html" title="JavaScript函数定义及示例详解" class="aBlack">JavaScript函数定义及示例详解</a></div> <div class="opt"> <span><i class="view"></i>502</span> <span class="collectBtn user_collection" data-id="207000" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  2年前  |   <a href="javascript:;" class="aLightGray" title="CSS">CSS</a> <a href="javascript:;" class="aLightGray" title="优化">优化</a> <a href="javascript:;" class="aLightGray" title="体验">体验</a> </div> <div class="tit lineOverflow"><a href="/article/72840.html" title="优化用户界面体验的秘密武器:CSS开发项目经验大揭秘" class="aBlack">优化用户界面体验的秘密武器:CSS开发项目经验大揭秘</a></div> <div class="opt"> <span><i class="view"></i>501</span> <span class="collectBtn user_collection" data-id="72840" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  2年前  |   <a href="javascript:;" class="aLightGray" title="图片轮播">图片轮播</a> <a href="javascript:;" class="aLightGray" title="微信小程序">微信小程序</a> <a href="javascript:;" class="aLightGray" title="特效">特效</a> </div> <div class="tit lineOverflow"><a href="/article/76259.html" title="使用微信小程序实现图片轮播特效" class="aBlack">使用微信小程序实现图片轮播特效</a></div> <div class="opt"> <span><i class="view"></i>501</span> <span class="collectBtn user_collection" data-id="76259" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  1年前  |   <a href="javascript:;" class="aLightGray" title="sessionStorage">sessionStorage</a> <a href="javascript:;" class="aLightGray" title="存储能力">存储能力</a> <a href="javascript:;" class="aLightGray" title="限制解析">限制解析</a> </div> <div class="tit lineOverflow"><a href="/article/83771.html" title="解析sessionStorage的存储能力与限制" class="aBlack">解析sessionStorage的存储能力与限制</a></div> <div class="opt"> <span><i class="view"></i>501</span> <span class="collectBtn user_collection" data-id="83771" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  1年前  |   <a href="javascript:;" class="aLightGray" title="团队合作">团队合作</a> <a href="javascript:;" class="aLightGray" title="冒泡事件">冒泡事件</a> <a href="javascript:;" class="aLightGray" title="促进作用">促进作用</a> </div> <div class="tit lineOverflow"><a href="/article/85057.html" title="探索冒泡活动对于团队合作的推动力" class="aBlack">探索冒泡活动对于团队合作的推动力</a></div> <div class="opt"> <span><i class="view"></i>501</span> <span class="collectBtn user_collection" data-id="85057" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> </ul> </div> <!-- 最新阅读 --> <div class="contBoxNor"> <div class="contTit"> <div class="tit">最新阅读</div> <a href="/articlelist.html" class="more">更多></a> </div> <ul class="latestReadList"> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  5分钟前  |   <a href="javascript:;" class="aLightGray" title="html">html</a> </div> <div class="tit lineOverflow"><a href="/article/415340.html" title="平板运行HTML的优化技巧" class="aBlack">平板运行HTML的优化技巧</a></div> <div class="opt"> <span><i class="view"></i>420</span> <span class="collectBtn user_collection" data-id="415340" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  6分钟前  |   <a href="javascript:;" class="aLightGray" title="html">html</a> </div> <div class="tit lineOverflow"><a href="/article/415338.html" title="HTML链接怎么添加?简单教程分享" class="aBlack">HTML链接怎么添加?简单教程分享</a></div> <div class="opt"> <span><i class="view"></i>359</span> <span class="collectBtn user_collection" data-id="415338" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  8分钟前  |   </div> <div class="tit lineOverflow"><a href="/article/415335.html" title="JS如何判断数据类型?typeof局限性详解" class="aBlack">JS如何判断数据类型?typeof局限性详解</a></div> <div class="opt"> <span><i class="view"></i>272</span> <span class="collectBtn user_collection" data-id="415335" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  10分钟前  |   </div> <div class="tit lineOverflow"><a href="/article/415333.html" title="TensorFlow.js机器学习实战教程" class="aBlack">TensorFlow.js机器学习实战教程</a></div> <div class="opt"> <span><i class="view"></i>257</span> <span class="collectBtn user_collection" data-id="415333" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  12分钟前  |   <a href="javascript:;" class="aLightGray" title="如何编辑网页html">如何编辑网页html</a> </div> <div class="tit lineOverflow"><a href="/article/415329.html" title="HTML模态框实现方法详解" class="aBlack">HTML模态框实现方法详解</a></div> <div class="opt"> <span><i class="view"></i>275</span> <span class="collectBtn user_collection" data-id="415329" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  17分钟前  |   <a href="javascript:;" class="aLightGray" title="html">html</a> </div> <div class="tit lineOverflow"><a href="/article/415323.html" title="HTML加载CSS样式全解析" class="aBlack">HTML加载CSS样式全解析</a></div> <div class="opt"> <span><i class="view"></i>112</span> <span class="collectBtn user_collection" data-id="415323" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  20分钟前  |   </div> <div class="tit lineOverflow"><a href="/article/415318.html" title="CSSpadding优化图标文字间距技巧" class="aBlack">CSSpadding优化图标文字间距技巧</a></div> <div class="opt"> <span><i class="view"></i>181</span> <span class="collectBtn user_collection" data-id="415318" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  21分钟前  |   </div> <div class="tit lineOverflow"><a href="/article/415316.html" title="标签模板字符串怎么用?详解JS语法" class="aBlack">标签模板字符串怎么用?详解JS语法</a></div> <div class="opt"> <span><i class="view"></i>170</span> <span class="collectBtn user_collection" data-id="415316" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  29分钟前  |   </div> <div class="tit lineOverflow"><a href="/article/415304.html" title="CSSflex主轴对齐设置方法" class="aBlack">CSSflex主轴对齐设置方法</a></div> <div class="opt"> <span><i class="view"></i>367</span> <span class="collectBtn user_collection" data-id="415304" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  34分钟前  |   <a href="javascript:;" class="aLightGray" title="对象合并">对象合并</a> </div> <div class="tit lineOverflow"><a href="/article/415297.html" title="JavaScript对象合并技巧:Object.assign使用方法" class="aBlack">JavaScript对象合并技巧:Object.assign使用方法</a></div> <div class="opt"> <span><i class="view"></i>328</span> <span class="collectBtn user_collection" data-id="415297" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  40分钟前  |   </div> <div class="tit lineOverflow"><a href="/article/415289.html" title="CSS多主题切换优化技巧详解" class="aBlack">CSS多主题切换优化技巧详解</a></div> <div class="opt"> <span><i class="view"></i>300</span> <span class="collectBtn user_collection" data-id="415289" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> <li> <div class="info"> <a href="/articlelist/19_new_0_1.html" class="aLightGray" title="文章">文章</a> · <a href="/articlelist/88_new_0_1.html" class="aLightGray" title="前端">前端</a>   |  58分钟前  |   </div> <div class="tit lineOverflow"><a href="/article/415264.html" title="CSS实现选中对勾效果教程" class="aBlack">CSS实现选中对勾效果教程</a></div> <div class="opt"> <span><i class="view"></i>354</span> <span class="collectBtn user_collection" data-id="415264" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </div> </li> </ul> </div> <!-- 课程推荐 --> <div class="contBoxNor"> <div class="contTit"> <div class="tit">课程推荐</div> <a href="/courselist.html" class="more">更多></a> </div> <ul class="classRecomList"> <li> <a href="/course/9.html" title="前端进阶之JavaScript设计模式" class="img_box"> <img src="/uploads/20221222/52fd0f23a454c71029c2c72d206ed815.jpg" onerror="this.onerror='';this.src='/assets/images/moren/morentu.png'" alt="前端进阶之JavaScript设计模式"> </a> <dl> <dt class="lineOverflow"> 前端进阶之JavaScript设计模式 </dt> <dd class="cont1 lineOverflow">设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。</dd> <dd class="cont2"> <a href="/course/9.html" title="前端进阶之JavaScript设计模式" class="toStudy">立即学习</a> <span>543次学习</span> </dd> </dl> </li> <li> <a href="/course/2.html" title="GO语言核心编程课程" class="img_box"> <img src="/uploads/20221221/634ad7404159bfefc6a54a564d437b5f.png" onerror="this.onerror='';this.src='/assets/images/moren/morentu.png'" alt="GO语言核心编程课程"> </a> <dl> <dt class="lineOverflow"> GO语言核心编程课程 </dt> <dd class="cont1 lineOverflow">本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。</dd> <dd class="cont2"> <a href="/course/2.html" title="GO语言核心编程课程" class="toStudy">立即学习</a> <span>516次学习</span> </dd> </dl> </li> <li> <a href="/course/74.html" title="简单聊聊mysql8与网络通信" class="img_box"> <img src="/uploads/20240103/bad35fe14edbd214bee16f88343ac57c.png" onerror="this.onerror='';this.src='/assets/images/moren/morentu.png'" alt="简单聊聊mysql8与网络通信"> </a> <dl> <dt class="lineOverflow"> 简单聊聊mysql8与网络通信 </dt> <dd class="cont1 lineOverflow">如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让</dd> <dd class="cont2"> <a href="/course/74.html" title="简单聊聊mysql8与网络通信" class="toStudy">立即学习</a> <span>500次学习</span> </dd> </dl> </li> <li> <a href="/course/57.html" title="JavaScript正则表达式基础与实战" class="img_box"> <img src="/uploads/20221226/bbe4083bb3cb0dd135fb02c31c3785fb.jpg" onerror="this.onerror='';this.src='/assets/images/moren/morentu.png'" alt="JavaScript正则表达式基础与实战"> </a> <dl> <dt class="lineOverflow"> JavaScript正则表达式基础与实战 </dt> <dd class="cont1 lineOverflow">在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。</dd> <dd class="cont2"> <a href="/course/57.html" title="JavaScript正则表达式基础与实战" class="toStudy">立即学习</a> <span>487次学习</span> </dd> </dl> </li> <li> <a href="/course/28.html" title="从零制作响应式网站—Grid布局" class="img_box"> <img src="/uploads/20221223/ac110f88206daeab6c0cf38ebf5fe9ed.jpg" onerror="this.onerror='';this.src='/assets/images/moren/morentu.png'" alt="从零制作响应式网站—Grid布局"> </a> <dl> <dt class="lineOverflow"> 从零制作响应式网站—Grid布局 </dt> <dd class="cont1 lineOverflow">本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。</dd> <dd class="cont2"> <a href="/course/28.html" title="从零制作响应式网站—Grid布局" class="toStudy">立即学习</a> <span>485次学习</span> </dd> </dl> </li> </ul> </div> </div> <!-- footer --> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <div class="footer"> <ul> <li ><a href="/" class="aLightGray"><em class="material-icons">home</em><span>首页</span></a></li> <li class="curr"><a href="/articlelist.html" class="aLightGray"><em class="material-icons">menu_book</em><span>阅读</span></a></li> <li ><a href="/courselist.html" class="aLightGray"><em class="material-icons">school</em><span>课程</span></a></li> <li ><a href="/ai.html" class="aLightGray"><em class="material-icons">smart_toy</em><span>AI助手</span></a></li> <li ><a href="/user.html" class="aLightGray"><em class="material-icons">person</em><span>我的</span></a></li> </ul> </div> <script src="/assets/js/require.js" data-main="/assets/js/require-frontend.js?v=1671101972"></script> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?3dc5666f6478c7bf39cd5c91e597423d"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>