Skip to content

案例:个人博客

内容站的结构比官网更简单:一栏文章流 + 一点关于作者的信息,剩下的交给排版。 本案例演示分类筛选的文章列表、热榜轮播、作者名片与订阅框如何拼成一个完整的博客首页。 品牌与文章均为虚构,源码就在本页,可以直接拷走改内容。

用到的组件EwNavbar · EwTabs · EwArticleCard · EwSection · EwCarousel · EwQuote · EwProfileCard · EwTimeline · EwNewsletter · EwFooter

shanyue.blog新窗口打开

写下来,才算想清楚。

关于前端、设计与慢生活的个人札记,每周更新一至两篇。

7 篇
热榜

读者转得最多的三段话

关于作者

白天写代码,晚上写札记

陈山

陈山月

独立开发者 · 前端工程

正在写一本关于组件设计的小书。相信好的工具应该安静,好的文字应该诚实。

126篇文章8个专栏1.2w订阅

最近更新

2026-08-30

《把一个官网拆成 43 个组件的取舍》发布

2026-08-12

「动效」专栏开更,第一篇讲 v-reveal

2026-07-02设计

Clean Navy 配色系统长文完稿

每周精选,直接进邮箱

搭建要点

  • 博客不需要 Hero:一句 motto + 一句更新频率,比首屏大图更符合内容站的气质。EwSectiongap="0" 让标题区与文章流贴在一起。
  • 分类筛选 = EwTabs + computed:Tab 只负责切换状态,列表交给 computed 过滤;右侧的「N 篇」计数让筛选结果可预期。
  • EwArticleCardtag="a" 让整卡可点:封面缺省时用图标占位底,不用为占位图发愁;hoverable 默认开启上浮。
  • 热榜用 EwQuote 塞进 EwCarousel:读者原话比阅读量数字更有说服力,autoplay 挂 5 秒并自动悬停暂停。
  • 关于区左右分栏EwProfileCard 讲人,EwTimeline + EwNewsletter 讲更新与订阅,一张 soft 底卡收拢。

关键代码

筛选逻辑全部在一个 computed 里,模板只负责渲染:

vue
<script setup>
import { ref, computed } from 'vue'

const categories = ['全部', '前端', '设计', '随想']
const active = ref('全部')

const filtered = computed(() =>
  active.value === '全部'
    ? posts
    : posts.filter((p) => p.category === active.value)
)
</script>

<template>
  <EwTabs v-model="active" :items="categories.map((c) => ({ label: c, value: c }))" />
  <EwArticleCard
    v-for="p in filtered"
    :key="p.title"
    tag="a"
    :title="p.title"
    :excerpt="p.excerpt"
    :date="p.date"
    :tags="p.tags"
    :icon="p.icon"
  />
</template>

热榜轮播:items 是普通数组,幻灯内容交给作用域插槽:

vue
<EwCarousel :items="hot" :autoplay="5000">
  <template #item="{ item }">
    <EwQuote :quote="item.quote" :author="item.author" :role="item.role" />
  </template>
</EwCarousel>

基于 MIT 许可证发布