You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在首页以三栏布局展示三个不同的文章循环

简洁稳定的首页多类别文章展示方案

嘿,我刚好做过类似的需求,给你一套完全贴合要求的简洁稳定实现方案——核心思路是用原生技术实现tab切换,让两组文章共享main区域,同时第三组独立展示,全程无第三方依赖,维护起来超省心。

核心需求拆解

先明确咱们要落地的关键点:

  • 三组不同类别的最新文章,每组展示数量不同
  • 其中两组共享main内容区(通过tab切换实现,切换时仅显示当前组)
  • 方案要简洁、稳定,避免复杂逻辑和冗余代码

1. 数据层准备(后端/模拟数据)

首先需要三个类别的文章数据源,实际项目里可以从后端接口获取,这里先模拟一组示例数据:

// 模拟三个类别的最新文章数据,实际替换为接口请求(比如fetch/axios)
const articleData = {
  // 技术文章:展示5篇最新
  tech: [
    { title: "2024前端性能优化新技巧", excerpt: "聊聊今年大火的性能优化方案...", date: "2024-05-20" },
    { title: "Node.js异步编程进阶", excerpt: "从Promise到Async/Await的深度解析...", date: "2024-05-18" },
    // 剩余3篇省略...
  ],
  // 生活随笔:展示3篇最新
  life: [
    { title: "周末露营的小确幸", excerpt: "分享一次难忘的户外露营经历...", date: "2024-05-19" },
    // 剩余2篇省略...
  ],
  // 技术教程:展示4篇最新(独立展示)
  tutorial: [
    { title: "React Hooks快速上手", excerpt: "从零开始学习React核心Hooks...", date: "2024-05-17" },
    // 剩余3篇省略...
  ]
};

2. 视图层结构(HTML)

布局采用网格拆分,main区放可切换的两组文章,侧边放第三组,结构清晰一目了然:

<div class="home-page">
  <!-- Main内容区:两组可切换的文章 -->
  <div class="main-content">
    <!-- Tab切换导航 -->
    <div class="tab-nav">
      <button class="tab-btn active" data-tab="tech">技术文章</button>
      <button class="tab-btn" data-tab="life">生活随笔</button>
    </div>
    <!-- Tab内容容器 -->
    <div class="tab-content">
      <div id="tech" class="tab-pane active">
        <!-- 技术文章列表:动态渲染 -->
      </div>
      <div id="life" class="tab-pane">
        <!-- 生活随笔列表:动态渲染 -->
      </div>
    </div>
  </div>

  <!-- 第三组独立展示的文章 -->
  <div class="sidebar-content">
    <h3>最新教程</h3>
    <div id="tutorial" class="article-list">
      <!-- 教程文章列表:动态渲染 -->
    </div>
  </div>
</div>

3. 样式层(CSS)

用基础CSS实现布局和交互样式,保证跨浏览器兼容性:

/* 页面整体布局 */
.home-page {
  max-width: 1200px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: 2fr 1fr;
  gap: 2rem;
  padding: 1.5rem;
}

/* Tab导航样式 */
.tab-nav {
  display: flex;
  gap: 1rem;
  margin-bottom: 1.5rem;
}
.tab-btn {
  padding: 0.6rem 1.2rem;
  border: none;
  background-color: #f5f5f5;
  border-radius: 4px;
  cursor: pointer;
  font-size: 1rem;
  transition: background-color 0.2s;
}
.tab-btn:hover {
  background-color: #e0e0e0;
}
.tab-btn.active {
  background-color: #2d3748;
  color: white;
}

/* Tab内容切换样式 */
.tab-pane {
  display: none;
}
.tab-pane.active {
  display: block;
}

/* 文章列表通用样式 */
.article-list {
  display: flex;
  flex-direction: column;
  gap: 1.2rem;
}
.article-item {
  padding: 1.2rem;
  border: 1px solid #e2e8f0;
  border-radius: 6px;
  transition: box-shadow 0.2s;
}
.article-item:hover {
  box-shadow: 0 2px 8px rgba(0,0,0,0.08);
}
.article-item h4 {
  margin: 0 0 0.5rem 0;
  color: #2d3748;
}
.article-item p {
  margin: 0 0 0.5rem 0;
  color: #4a5568;
  font-size: 0.9rem;
}
.article-item .date {
  color: #718096;
  font-size: 0.8rem;
}

4. 交互逻辑(原生JS)

用原生JS实现渲染和tab切换,没有任何依赖,稳定可靠:

// 通用渲染文章列表函数
function renderArticles(containerId, articles) {
  const container = document.getElementById(containerId);
  if (!container) return;

  container.innerHTML = articles.map(article => `
    <div class="article-item">
      <h4>${article.title}</h4>
      <p>${article.excerpt}</p>
      <span class="date">${article.date}</span>
    </div>
  `).join('');
}

// 初始化渲染所有文章
renderArticles('tech', articleData.tech);
renderArticles('life', articleData.life);
renderArticles('tutorial', articleData.tutorial);

// Tab切换逻辑
const tabBtns = document.querySelectorAll('.tab-btn');
tabBtns.forEach(btn => {
  btn.addEventListener('click', () => {
    // 移除所有元素的active类
    tabBtns.forEach(b => b.classList.remove('active'));
    document.querySelectorAll('.tab-pane').forEach(pane => pane.classList.remove('active'));
    
    // 给当前按钮和对应内容添加active类
    btn.classList.add('active');
    const targetTab = document.getElementById(btn.dataset.tab);
    if (targetTab) targetTab.classList.add('active');
  });
});

方案优势

  • 无依赖:全程用原生技术实现,避免第三方库的版本兼容问题,加载更快
  • 简洁易维护:代码拆分清晰,数据、视图、逻辑分离,后续修改类别或数量超简单
  • 稳定可靠:没有复杂的状态管理,tab切换逻辑简单直接,几乎不会出bug
  • 可扩展:如果后续要增加更多类别,只需要添加tab按钮、对应的数据和渲染逻辑即可

内容的提问来源于stack exchange,提问作者JLW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:34:25